Как отправить документ через Диадок в 1С без открытия общей формы модуля?

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

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

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

Метод 1: Использование скрытых процедур типового модуля Диадока

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

Основной модуль Диадока спрятан достаточно глубоко. В контексте объекта он инициализируется через специальную переменную, имя которой зависит от вашей конфигурации. Например, для 1С:Управление торговлей 11 это переменная ПМ_УТ_11. Непосредственно вызовы процедур маршрутизируются через объект ВызовыПМ.

Для фоновой подготовки и отправки пакета документов используются следующие функции (примерный вызов):


ОсновнойМодуль.ЭДО_ПодготовитьИОтправитьПакетыВФоне(ОсновнойМодуль.СписокДокументов); 
ПодготовитьИДобавитьДокументВПакет_УПДДОП(Пакет, Документ1С);

Вызвав данные процедуры из своей внешней печатной формы или кнопки "Отправить", вы инициируете процесс подготовки и отправки документа в фоне. Важно: для использования этого метода может потребоваться инструмент отладки и распаковки вложенных модулей обработки Диадока, чтобы точно определить входные параметры для вашей конкретной версии конфигурации.

Метод 2: Модификация формы авторизации для запуска из ВПФ

Если нет желания глубоко разбираться в архитектуре ВызовыПМ, рассмотрим обходной путь через внешние печатные формы (ВПФ) и небольшую доработку самого модуля Диадока (для ленивых).

Суть метода заключается в автоматизации открытия модуля. Для этого выполним следующие шаги:

  1. Откроем модуль Диадок в Конфигураторе и найдем форму авторизации.
  2. В процедуре ОперацииЗапускаМодуля добавим установку переменной АвтоАвторизация = Истина.
  3. В конец процедуры добавляем перебор списка документов.
  4. Сверяем документ с глобальной переменной глДокументНаОтправкуДиадок.
  5. Если переменная не равна Неопределено, программно нажимаем кнопку отправки.

Далее вы просто создаете внешнюю печатную форму (например, для документа "Счет-фактура выданный"). При нажатии на кнопку "Печать -> Отправить в Диадок" ВПФ передает ссылку в глДокументНаОтправкуДиадок и в фоне открывает обработку. Авторизация и отправка проходят автоматически. Это занимает некоторое время, но пользователь не взаимодействует с кучей окон и кнопок.

Метод 3: Использование программного интерфейса ExtAPI Диадока

Разберем более правильный и официальный метод. В современных версиях Универсального модуля Диадока для 1С встроен специальный программный интерфейс для разработчиков — ExtAPI.

Этот интерфейс специально спроектирован для того, чтобы обращаться к функциям Диадока из сторонних обработок или расширений. Через ExtAPI можно:

Использование ExtAPI избавляет от необходимости писать "костыли" с вызовом скрытых переменных вроде ПМ_УТ_11 и защищает ваш код от поломок при обновлениях модуля Диадока.

Метод 4: Прямая работа через Diadoc API (COM-объект)

Если ваша цель — максимальная скорость работы (секунды вместо минут ожидания), проанализируем использование Diadoc SDK. В этом случае мы вообще отказываемся от запуска тяжелой обработки Контура.

Вы можете написать собственный код с использованием COM-объекта (например, Diadoc.Api) или внешней компоненты AddIn.DiadocTo1C. Логика работы вашей кнопки будет следующей:

  1. Создание COM-объекта API Диадока.
  2. Авторизация на сервере по сертификату организации.
  3. Формирование XML-файла УПД по формату ФНС средствами 1С.
  4. Подписание файла установленным криптопровайдером (например, КриптоПро).
  5. Прямая отправка HTTP/COM запросом на сервер Диадока.

Такой подход не тянет за собой списки контрагентов, сопоставления номенклатуры и журналы документов, поэтому работает мгновенно.

Метод 5: Фоновая отправка через "Диадок.Коннектор" или Регламентные задания

Чтобы вообще исключить ожидание при проведении документа, посмотрим на архитектурные решения автоматической отправки.

Вариант А: Регламентные задания в 1С. В типовом модуле Диадока можно настроить фоновую отправку. Вы добавляете в документ 1С дополнительный реквизит (статус "К отправке в ЭДО"). Настроенное регламентное задание на сервере 1С (например, раз в 5 минут) само инициирует сеанс, собирает все готовые документы, подписывает их серверной подписью и отправляет. Пользователю ничего ждать не нужно.

Вариант Б: Диадок.Коннектор. Это отдельная служба (приложение), устанавливаемая на сервер. Вы дорабатываете 1С так, чтобы при проведении документа генерировался XML файл и сохранялся в определенную сетевую папку. Коннектор постоянно мониторит эту папку, забирает файлы, автоматически подписывает их сертификатом и отправляет контрагентам. 1С в этом случае занимается только формированием XML.

Важный нюанс: Машиночитаемые доверенности (МЧД)

При реализации любых программных способов отправки (особенно если вы пишете прямые запросы через Diadoc API или используете старые методы для УТ 10.3), выясним важнейшую законодательную деталь.

С 2024 года, если документы подписывает не руководитель компании, а сотрудник (физическое лицо), к пакету электронных документов необходимо программно прикреплять идентификатор МЧД (машиночитаемой доверенности). Если вы забудете добавить передачу метаданных МЧД в свой скрипт фоновой отправки, сервер Диадока отклонит документ на этапе подписания с ошибкой полномочий.

Выбор конкретного метода зависит от вашей квалификации, версии платформы 1С и готовности поддерживать нестандартный код. Для быстрого старта рекомендуется изучить документацию по ExtAPI Универсального модуля, так как это гарантирует стабильность при будущих обновлениях.

← На главную