Где в 1С:Бухгалтерии 3.0 найти сведения о состоянии и датах документов из Диадока?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При работе в связке 1С:Бухгалтерия 3.0 и системы электронного документооборота Диадок часто проводится массовая рассылка документов по ЭДО и возникает необходимость программно получить данные о текущем статусе документа: подписан ли он контрагентом, когда был отправлен и какой идентификатор ему присвоен. Однако многие разработчики сталкиваются с тем, что привычные регистры 1С оказываются пустыми, когда выполнена загрузка УПД в бухгалтерию из Диадок. Разберем детально, как устроено хранение этих данных и какими способами их можно извлечь.

Анализируем архитектуру хранения данных Диадок

Первое, что нам необходимо понять: как именно внешняя обработка Диадок взаимодействует с информационной базой 1С и как реализована выгрузка счета-фактуры в XML для Diadoc. Проанализируем ситуацию: если вы используете стандартную внешнюю обработку от Контура или выполняется выгрузка ЭД УПД в XML, то большинство данных о статусах документов не записывается в базу 1С на постоянной основе. Это сделано разработчиками для того, чтобы информация всегда была актуальной, так как статусы в ЭДО могут меняться каждую минуту.

Когда вы открываете форму модуля Диадок, система в режиме «онлайн» отправляет запрос на сервер через API, получает текущее состояние пакетов и отображает их в списке. В самой конфигурации 1С по умолчанию фиксируется только необходимый минимум для связки объектов. Рассмотрим подробнее, где именно в базе можно найти хоть какие-то следы.

Поиск идентификатора документа (ID пакета)

Единственная информация, которая гарантированно сохраняется в 1С при отправке или получении документа через Диадок — это его уникальный идентификатор. Рассмотрим, где он находится:

  1. Перейдем в документ (например, РеализацияТоваровУслуг).
  2. Нажмем на кнопку «Дополнительные сведения» (в интерфейсе часто обозначается иконкой в виде синей буквы «i» или «бочки»).
  3. Здесь мы увидим свойство ДиадокИдентификаторЭДО.

С технической точки зрения эти данные хранятся в РегистреСведений.ДополнительныеСведения. Это позволяет связать объект 1С с конкретным письмом в облаке Диадока. Однако, как справедливо замечено в обсуждении, даты подписания и текстового статуса (например, «Подписан контрагентом») в этих сведениях нет.

Использование плагина для загрузки статусов

Если ваша задача — видеть статусы документов непосредственно в списках 1С (например, в журнале продаж), проанализируем профессиональное решение от разработчиков Контура. Существует специальный плагин для загрузки статусов документов.

Рассмотрим принцип его работы:

  1. Плагин встраивается в модуль Диадок и работает как регламентное задание.
  2. Он периодически опрашивает сервер и загружает изменения состояний.
  3. Где хранятся данные: Плагин записывает информацию в типовой регистр 1С РегистрСведений.СостоянияОригиналовПервичныхДокументов.

Это очень удобное решение, так как оно использует штатный механизм 1С «Состояния оригиналов». После настройки этого плагина в колонке «Состояние оригинала» ваших реализаций будут автоматически появляться статусы из Диадока, такие как «Подписан» или «Отклонен».

Программный способ получения данных: пример реализации

Если использование плагина невозможно или требуется специфическая логика (например, обновление данных контрагентов), мы можем пойти путем доработки кода. Рассмотрим пример, в котором программно обновляется свойство идентификатора участника ЭДО для контрагентов. Это полезно, когда нужно синхронизировать базу и понимать, кто из клиентов уже подключен к системе.

Проанализируем фрагмент кода, который можно внедрить в форму списка контрагентов для автоматизации процесса:


Свойство_ДиадокИдентификаторЭДО = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ДиадокИдентификаторЭДО");

Если Свойство_ДиадокИдентификаторЭДО <> Неопределено Тогда
    НайденнаяСтрока = СправочникСписок.Найти(ID, "ID");
    
    Если НайденнаяСтрока <> Неопределено И НЕ ПустаяСтрока(СтрокаКонтрагента.Ссылка) Тогда
        НовыйID = СокрЛП(НайденнаяСтрока.ИдентификаторУчастникаЭДО);
        ТекID = ПолучитьЗначениеСвойства(СтрокаКонтрагента.Ссылка, "ДиадокИдентификаторЭДО");
        
        Если НовыйID <> "" И ТекID <> НовыйID Тогда
            Сообщить("Обновляется свойство ДиадокИдентификаторЭДО для: " + СтрокаКонтрагента.Ссылка);
            
            МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
            МенеджерЗаписи.Объект = СтрокаКонтрагента.Ссылка;
            МенеджерЗаписи.Свойство = Свойство_ДиадокИдентификаторЭДО;
            МенеджерЗаписи.Значение = НовыйID;
            МенеджерЗаписи.Записать();
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

В данном примере мы используем объект МенеджерЗаписи для работы с регистром сведений. Выясним причину использования именно этого метода: он позволяет быстро перезаписать конкретное значение, не считывая весь набор записей по объекту, что критично для производительности списков.

Как вытащить даты и статусы без плагина?

Если вам нужно извлечь именно даты подписания, которых нет в доп. сведениях, придется использовать COM-соединение или HTTP-запросы к API Диадока. Разберем шаги, которые для этого потребуются:

  1. Получить ДиадокИдентификаторЭДО из дополнительных сведений документа.
  2. Используя методы внешней обработки (например, через объект Прокси или напрямую через API), вызвать функцию GetDocument.
  3. В полученном объекте документа найти структуру Timestamps (метки времени), где будет содержаться дата доставки и дата подписания.
  4. Для записи этих данных обратно в 1С рекомендуется создать свой собственный РегистрСведений, чтобы не загромождать типовые объекты и иметь возможность строить отчеты.

Таким образом, мы выяснили, что «из коробки» 1С:Бухгалтерия 3.0 хранит только ссылку на документ Диадок. Для полноценного анализа состояний и дат необходимо либо активировать платный плагин загрузки статусов, либо реализовать собственный механизм синхронизации, используя API Диадока и идентификаторы из дополнительных сведений.

← На главную