3.3.4. Модуль обработки документов
 
Этот модуль обрабатывает входящие и исходящие электронные документы различных типов. Реализация этого модуля должна включать в себя выполнение с помощью Такском-Доклайнз .NET SDK следующих операций:
  •  Подготовка к отправке исходящих электронных документов, при необходимости (если в транспортном контейнере нет информации МЧД и подписант не является первым лицом организации или  ИП) - добавление МЧД с признаком использования по умолчанию  в контейнер документа.
  •  Подготовка к отправке и отправка исходящих электронных документов.
  •  Выполнение транзакций, предусмотренных Регламентами ЭДО.
  •  Проверка статусов входящих и исходящих электронных документов для обеспечения успешного завершения всех необходимых транзакций.
Для выполнения Регламентов ЭДО для всех входящих и исходящих документов метод AutoSendReceive экземпляра класса TaxcomApi вызывается каждую минуту.
Другой цикл, с задержкой 2-4 минуты, должен быть выполнен для того, чтобы отправить электронные документы, проверить их статусы, а также получить входящие электронные документы.
Если получателя электронного документа нет в списке "Мои контрагенты", то необходимо использовать модуль работы с приглашениями для отправки приглашения этому контрагенту (см. п. 3.3.3.1. Метод SendContacts, 3.3.3. Модуль работы с приглашениями).
Циклический вызов метода AutoSendReceive имеет важное значение для работоспособности методов, используемых в рамках второго цикла (Send, GetDocflowsList и другие).
 
 
Примечание: api1 - пример имени экземпляра класса TaxcomApi.
 
Сценарий отправки исходящего электронного документа
При каждой отправке электронного документа должны быть выполнены следующие операции:
1.
Создание электронного документа:
a.
InvoiceDocument:  счёт-фактура.
b.
CorrectiveInvoiceDocument:  корректировочный счёт-фактура.
c.
FormalizedConsigmentDocument: ТОРГ-12 .
d.
FormalizedStatementDocument: акт о выполнении работ (оказании услуг).
e.
NonformalizedDocument: неформализованные документы.
2.
Формирование электронного документа или его импорт (см. п. 2.1.1.1. XML файлы электронных документов). Импортируемый документ может быть сформирован, например в ERP системе.
3.
Проверка соответствия электронного документа формальным требованиям. Для формализованных документов рекомендуем использовать метод Validate.
4.
Упаковка документа в контейнер Такском.
Для добавления информации о доверенности можно использовать метод SetWarrantParameters.
5.
Отправка контейнера с документом при помощи вызова метода Send экземпляра класса TaxcomApi на стороне отправителя документа.
6.
Запуск методов AutoSendReceive и GetDocflowsList для выполнения Регламента ЭДО и периодической проверки статуса ЭДО.
7.
Проверка статуса электронного документа по его ID с помощью метода GetDocflowsList. Если значение статуса не совпадает с Succeed, - переход к шагу 6 данного алгоритма.
8.
Если значение статуса - Succeed, - получение с помощью метода GetDocflowRawData полного комплекта сообщений ЭДО этого документа и архивирование.
 
Примечание: api1 - пример имени экземпляра класса TaxcomApi.
 
Сценарий получения входящего электронного документа
Если в результате вызова метода GetDocflowsList обнаружен новый входящий документ (входящие документы могут быть получены при вызове метода с параметром DocFlowDirection.Ingoing), следует выполнить следующее:
1.
Скопировать docflowID входящего электронного документа из XML результата вызова метода GetDocflowsList.
2.
Получить контейнер Такском с электронным документом с помощью метода GetMainDocumentContainerFromDocflow.
3.
Извлечь электронный документ из контейнера Такском и определить его тип. Сам электронный документ является первым элементом в этом массиве данных (IDocument document = container.Documents[0];).
4.
Создать объект "электронный документ" с учётом параметра Type:
a.
DocumentType.Invoice: InvoiceDocument docInvoice = (document as InvoiceDocument);
b.
c.
NonformalizedDocument docOther = (document as NonformalizedDocument).
5.
Заархивировать контейнер Такском с электронным документом и всеми служебными сообщениями, связанными с выполнением регламента его доставки, полученный с помощью метода GetDocflowRawData.
На этой схеме api1 - пример имени экземпляра класса TaxcomApi.