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.
|
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.