/// <summary> /// Запросить TZ в Equation /// </summary> /// <param name="account">Счет, для которого получаем выписку</param> /// <param name="alfamos">сессия, которая будет закрыта</param> /// <returns></returns> public List <Operation> GetOperations(Account account, Process alfamos, Unit unit) { List <Operation> exportedOperations = new List <Operation>(); #region направляем в EQ запрос на создание выписки DateTime queryDateTime = DateTime.Now; EUCL.ClearScreen(); send("TZ", 21, 17); enter(); send(account.Number, 3, 29); enter(); EUCL.SendStr("@4"); //F4 EUCL.Wait(); enter(); #endregion #region ждем готового файла if (!Directory.Exists(_fileExportPath)) { throw new Exception($@"У пользователя отсутствует директория экспорта на {_fileExportPath}"); } for (int i = 0; i < WAIT_TIME; i++) { bool done = false; foreach (string fileName in Directory.GetFiles(_fileExportPath, "*.DBF")) { FileInfo file = new FileInfo(fileName); if (file.CreationTime > queryDateTime) { ExcelWorker excel = new ExcelWorker(file); exportedOperations.AddRange(excel.ReadForOperations()); done = true; break; } } if (done) { break; } Thread.Sleep(5000); } #endregion #region Поиск недостающих операций for (int i = 0; i < exportedOperations.Count; i++) { if (string.IsNullOrWhiteSpace(exportedOperations[i].Number) || exportedOperations[i].OperationDate.Year < 1950) { DateTime LastFullDate; // дата последней операции полными данными if (i != 0) { LastFullDate = exportedOperations[i - 1].OperationDate; } else { LastFullDate = account.OpenedDate < unit.DateStart ? unit.DateStart : account.OpenedDate; } DateTime NextFullDate = unit.DateEnd; // дата следующей заполненной опреации for (int j = i; j < exportedOperations.Count; j++) { if (!string.IsNullOrEmpty(exportedOperations[j].Number)) { NextFullDate = exportedOperations[j].OperationDate > unit.DateEnd ? unit.DateEnd : exportedOperations[j].OperationDate; break; } if (j == exportedOperations.Count - 1) { if (account.ClosedDate < unit.DateEnd && account.ClosedDate > unit.DateStart) { NextFullDate = account.ClosedDate; } else { NextFullDate = unit.DateEnd; } } } EUCL.ClearScreen(); send("TT", 21, 17); enter(); send(account.Number, 3, 29); send(LastFullDate.ToString("ddMMyy"), 14, 29); send(NextFullDate.ToString("ddMMyy"), 16, 29); enter(); enter(); #region поиск операций do { EUCL.SendStr("1111111111"); EUCL.SendStr("@v"); EUCL.Wait(); EUCL.SendStr("1111111111"); } while (EUCL.ReadScreen(21, 79, 1).Equals("+")); enter(); while (EUCL.ReadScreen(1, 32, 17).Equals("Просмотр проводки")) { string currentOperationNumber = EUCL.ReadScreen(8, 29, 45).Replace(" ", string.Empty); if (string.IsNullOrWhiteSpace(currentOperationNumber) || !exportedOperations.Any(operation => operation.Number.Equals(currentOperationNumber)) && !exportedOperations[i].IsEdited) { Operation newOperation = new Operation { Number = currentOperationNumber, OperationDate = DateTime.Parse(EUCL.ReadScreen(3, 40, 11)), PayerAccountNumber = EUCL.ReadScreen(9, 15, 24).Replace(".", string.Empty), RecieverAccount = EUCL.ReadScreen(12, 15, 24).Replace(".", string.Empty), PayerName = $"{EUCL.ReadScreen(9, 44, 35).Replace(" ", string.Empty)}{EUCL.ReadScreen(10, 44, 35).Replace(" ", string.Empty)}{EUCL.ReadScreen(11, 44, 35).Replace(" ", string.Empty)}", RecieverName = $"{EUCL.ReadScreen(12, 44, 35).Replace(" ", string.Empty)}{EUCL.ReadScreen(13, 44, 35).Replace(" ", string.Empty)}{EUCL.ReadScreen(14, 44, 35).Replace(" ", string.Empty)}", Comment = $"{EUCL.ReadScreen(18, 10, 70).Replace(" ", string.Empty)}{EUCL.ReadScreen(19, 10, 70).Replace(" ", string.Empty)}", DebetSum = EUCL.ReadScreen(15, 15, 20).Replace(" ", string.Empty), IsEdited = true }; if (newOperation.RecieverAccount.Equals("40911810904000000138") || newOperation.Comment.IndexOf("перевод между счетами") > -1) { newOperation.RecieverBankBIK = newOperation.PayerBankBIK = "044525593"; newOperation.RecieverBankName = newOperation.PayerBankName = "АО \"Альфа-Банк\""; } exportedOperations[i] = newOperation; break; } enter(); enter(); } #endregion } } #endregion alfamos.CloseMainWindow(); alfamos.WaitForExit(10000); return(exportedOperations); }