static public fmCSAImportResult ImportProcess(IObjectSpace os, fmCSATaskImporter taskImporter) { // Стадия 1. Загрузка выписок и документов выписок. // Возможные варианты исхода: // 0. Признака, что результаты импорта были зачищены. Все документы и выписки удалены. Возможен перезапуск загрузки из просмотра ImportResult. // 1. Ошибок нет. Тогда переход на Стадию 2. // -1. Ошибка загрузки секции счетов. Некоторые счета не найдены в системе. // -2. Признака, что не все документы выписки загрузились. Документы должны быть удалены. // 2. Ошибка загрузки секции выписок. Тогда переход на показ ImportResult, минуя все остальные стадии. // 3. Ошибка: не найден хотя бы один счёт в системе. Тогда переход на показ ImportResult, минуя все остальные стадии. // В ImportResult процедура может быть продолжена (например, пользователь ввёл недостающие счета). // 4. Неожиданная ошибка обработки документов выписок (сбой в памяти и т.п.). Тогда переход на показ ImportResult, минуя все остальные стадии. // 5. Распознаваемая ошибка обработки документов выписок (не пройдена проверка формата, синтаксиса и т.п.). Тогда переход на показ ImportResult, минуя все остальные стадии. // Короче, при любом исходе всегда переход на результат импорта. //fmCSATaskImporter taskImporter = View.CurrentObject as fmCSATaskImporter; // Выполнение Стадии 1. fmCSAImportResult importResult = taskImporter.ExecuteTask() as fmCSAImportResult; if (importResult == null) { throw new Exception("ImportResult object was not created."); } os.CommitChanges(); ImportProcessDop(os, importResult); return(importResult); }
static public void ImportProcessDop(IObjectSpace os, fmCSAImportResult importResult) { fmCSATaskImporter taskImporter = importResult.TaskImporter; // Чистка (Документы выписок, возможно сами выписки). if (importResult.ResultCode == -2) { fmCSAStatementAccountImportLogic.ClearImportResult(importResult); os.CommitChanges(); // После этого importResult.ResultCode == 0 } // Выполнение Стадии 2. if (importResult.ResultCode == 1) { // Постобработка: Добавление контрагентов, банков, счетов. // Обработка выписки fmCSAStatementAccountImportLogic.PostProcess(os, taskImporter, importResult); os.CommitChanges(); } // Выполнение стадии 3. if (importResult.ResultCode == 2) { // Создание Платёжных документов для всех непривязавшихся документов выписок, запись в регистр и т.п. В разбивку по типам. fmCSAMapDocs <fmCDocRCB> mpCreateDocs = os.CreateObject <fmCSAMapDocs <fmCDocRCB> >(); mpCreateDocs.CreateAllPaymentDocuments(os, importResult); os.CommitChanges(); mpCreateDocs.UpdateAllRegister(os, importResult); os.CommitChanges(); } // Выполнение автопривязки if (importResult.ResultCode == 3) { importResult.AutoBinding(null); os.CommitChanges(); } }
static public void PostProcess(IObjectSpace os, fmCSATaskImporter taskImporter, fmCSAImportResult importResult) { // Постобработка: Добавление банков, контрагентов, счетов if (importResult == null) { return; } using (IObjectSpace nos = os.CreateNestedObjectSpace()) { fmCSATaskImporter task = nos.GetObject <fmCSATaskImporter>(taskImporter); fmCSAImportResult result = nos.GetObject <fmCSAImportResult>(importResult); // Определение и добавление банков foreach (fmCSAStatementAccount sa in result.StatementOfAccounts) { foreach (fmCDocRCBRequisites requisites in sa.DocRCBRequisites) { fmCSAStatementAccountDoc sad = requisites.StatementOfAccountDoc; task.Importer.RequisitesBankProccess(sad.PaymentPayerRequisites); task.Importer.RequisitesBankProccess(sad.PaymentReceiverRequisites); nos.CommitChanges(); } } // Определение стороны по банку, счёту и значению свойства предпочтительная сторона объекта BankAccount //task.Importer.PartyProccessByAccount(result); //nos.CommitChanges(); foreach (fmCSAStatementAccount sa in result.StatementOfAccounts) { foreach (fmCDocRCBRequisites requisites in sa.DocRCBRequisites) { fmCSAStatementAccountDoc sad = requisites.StatementOfAccountDoc; task.Importer.PartyProccessByAccountRequisite(sad.PaymentPayerRequisites); task.Importer.PartyProccessByAccountRequisite(sad.PaymentReceiverRequisites); nos.CommitChanges(); } } // Определение стороны по ИНН и КПП (если не определилась на предыдущем шаге как предпочтительная сторона в счёте) foreach (fmCSAStatementAccount sa in result.StatementOfAccounts) { foreach (fmCDocRCBRequisites requisites in sa.DocRCBRequisites) { fmCSAStatementAccountDoc sad = requisites.StatementOfAccountDoc; task.Importer.RequisitesPartyProccessByINNandKPP(sad.PaymentPayerRequisites); task.Importer.RequisitesPartyProccessByINNandKPP(sad.PaymentReceiverRequisites); nos.CommitChanges(); } } // Создание счетов foreach (fmCSAStatementAccount sa in result.StatementOfAccounts) { foreach (fmCDocRCBRequisites requisites in sa.DocRCBRequisites) { fmCSAStatementAccountDoc sad = requisites.StatementOfAccountDoc; task.Importer.RequisitesStatementAccountProccess(sad.PaymentPayerRequisites); task.Importer.RequisitesStatementAccountProccess(sad.PaymentReceiverRequisites); nos.CommitChanges(); } } } importResult.ResultCode = 2; }