При работе в связке 1С:Бухгалтерия 3.0 и системы электронного документооборота Диадок часто проводится массовая рассылка документов по ЭДО и возникает необходимость программно получить данные о текущем статусе документа: подписан ли он контрагентом, когда был отправлен и какой идентификатор ему присвоен. Однако многие разработчики сталкиваются с тем, что привычные регистры 1С оказываются пустыми, когда выполнена загрузка УПД в бухгалтерию из Диадок. Разберем детально, как устроено хранение этих данных и какими способами их можно извлечь.
Первое, что нам необходимо понять: как именно внешняя обработка Диадок взаимодействует с информационной базой 1С и как реализована выгрузка счета-фактуры в XML для Diadoc. Проанализируем ситуацию: если вы используете стандартную внешнюю обработку от Контура или выполняется выгрузка ЭД УПД в XML, то большинство данных о статусах документов не записывается в базу 1С на постоянной основе. Это сделано разработчиками для того, чтобы информация всегда была актуальной, так как статусы в ЭДО могут меняться каждую минуту.
Когда вы открываете форму модуля Диадок, система в режиме «онлайн» отправляет запрос на сервер через API, получает текущее состояние пакетов и отображает их в списке. В самой конфигурации 1С по умолчанию фиксируется только необходимый минимум для связки объектов. Рассмотрим подробнее, где именно в базе можно найти хоть какие-то следы.
Единственная информация, которая гарантированно сохраняется в 1С при отправке или получении документа через Диадок — это его уникальный идентификатор. Рассмотрим, где он находится:
РеализацияТоваровУслуг).ДиадокИдентификаторЭДО.С технической точки зрения эти данные хранятся в РегистреСведений.ДополнительныеСведения. Это позволяет связать объект 1С с конкретным письмом в облаке Диадока. Однако, как справедливо замечено в обсуждении, даты подписания и текстового статуса (например, «Подписан контрагентом») в этих сведениях нет.
Если ваша задача — видеть статусы документов непосредственно в списках 1С (например, в журнале продаж), проанализируем профессиональное решение от разработчиков Контура. Существует специальный плагин для загрузки статусов документов.
Рассмотрим принцип его работы:
РегистрСведений.СостоянияОригиналовПервичныхДокументов.Это очень удобное решение, так как оно использует штатный механизм 1С «Состояния оригиналов». После настройки этого плагина в колонке «Состояние оригинала» ваших реализаций будут автоматически появляться статусы из Диадока, такие как «Подписан» или «Отклонен».
Если использование плагина невозможно или требуется специфическая логика (например, обновление данных контрагентов), мы можем пойти путем доработки кода. Рассмотрим пример, в котором программно обновляется свойство идентификатора участника ЭДО для контрагентов. Это полезно, когда нужно синхронизировать базу и понимать, кто из клиентов уже подключен к системе.
Проанализируем фрагмент кода, который можно внедрить в форму списка контрагентов для автоматизации процесса:
Свойство_ДиадокИдентификаторЭДО = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДиадокИдентификаторЭДО");
Если Свойство_ДиадокИдентификаторЭДО <> Неопределено Тогда
НайденнаяСтрока = СправочникСписок.Найти(ID, "ID");
Если НайденнаяСтрока <> Неопределено И НЕ ПустаяСтрока(СтрокаКонтрагента.Ссылка) Тогда
НовыйID = СокрЛП(НайденнаяСтрока.ИдентификаторУчастникаЭДО);
ТекID = ПолучитьЗначениеСвойства(СтрокаКонтрагента.Ссылка, "ДиадокИдентификаторЭДО");
Если НовыйID <> "" И ТекID <> НовыйID Тогда
Сообщить("Обновляется свойство ДиадокИдентификаторЭДО для: " + СтрокаКонтрагента.Ссылка);
МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = СтрокаКонтрагента.Ссылка;
МенеджерЗаписи.Свойство = Свойство_ДиадокИдентификаторЭДО;
МенеджерЗаписи.Значение = НовыйID;
МенеджерЗаписи.Записать();
КонецЕсли;
КонецЕсли;
КонецЕсли;
В данном примере мы используем объект МенеджерЗаписи для работы с регистром сведений. Выясним причину использования именно этого метода: он позволяет быстро перезаписать конкретное значение, не считывая весь набор записей по объекту, что критично для производительности списков.
Если вам нужно извлечь именно даты подписания, которых нет в доп. сведениях, придется использовать COM-соединение или HTTP-запросы к API Диадока. Разберем шаги, которые для этого потребуются:
ДиадокИдентификаторЭДО из дополнительных сведений документа.Прокси или напрямую через API), вызвать функцию GetDocument.Timestamps (метки времени), где будет содержаться дата доставки и дата подписания.РегистрСведений, чтобы не загромождать типовые объекты и иметь возможность строить отчеты.Таким образом, мы выяснили, что «из коробки» 1С:Бухгалтерия 3.0 хранит только ссылку на документ Диадок. Для полноценного анализа состояний и дат необходимо либо активировать платный плагин загрузки статусов, либо реализовать собственный механизм синхронизации, используя API Диадока и идентификаторы из дополнительных сведений.