При работе с типовым модулем интеграции Диадок в 1С пользователи часто сталкиваются с проблемой долгого ожидания. Обработка Диадока открывается с авторизацией и загрузкой тяжелого журнала документов, что может занимать от нескольких секунд до пары минут. Если задача состоит лишь в том, чтобы отправить один сформированный УПД или счет-фактуру по нажатию кнопки, такое ожидание критически снижает продуктивность.
Рассмотрим подробно, как можно программно отправить документ через Диадок из 1С, минуя визуальный интерфейс общего модуля. Проанализируем несколько рабочих подходов: от использования внутренних процедур самой обработки до применения специализированного API Контура.
Типовой модуль Диадока имеет большой объем кода (десятки тысяч строк), и просто перенести его в свою обработку не получится. Однако мы можем обратиться к его функциям напрямую из нашего кода. Разберем по шагам, как это реализовано внутри компоненты.
Основной модуль Диадока спрятан достаточно глубоко. В контексте объекта он инициализируется через специальную переменную, имя которой зависит от вашей конфигурации. Например, для 1С:Управление торговлей 11 это переменная ПМ_УТ_11. Непосредственно вызовы процедур маршрутизируются через объект ВызовыПМ.
Для фоновой подготовки и отправки пакета документов используются следующие функции (примерный вызов):
ОсновнойМодуль.ЭДО_ПодготовитьИОтправитьПакетыВФоне(ОсновнойМодуль.СписокДокументов);
ПодготовитьИДобавитьДокументВПакет_УПДДОП(Пакет, Документ1С);
Вызвав данные процедуры из своей внешней печатной формы или кнопки "Отправить", вы инициируете процесс подготовки и отправки документа в фоне. Важно: для использования этого метода может потребоваться инструмент отладки и распаковки вложенных модулей обработки Диадока, чтобы точно определить входные параметры для вашей конкретной версии конфигурации.
Если нет желания глубоко разбираться в архитектуре ВызовыПМ, рассмотрим обходной путь через внешние печатные формы (ВПФ) и небольшую доработку самого модуля Диадока (для ленивых).
Суть метода заключается в автоматизации открытия модуля. Для этого выполним следующие шаги:
ОперацииЗапускаМодуля добавим установку переменной АвтоАвторизация = Истина.глДокументНаОтправкуДиадок.Неопределено, программно нажимаем кнопку отправки.Далее вы просто создаете внешнюю печатную форму (например, для документа "Счет-фактура выданный"). При нажатии на кнопку "Печать -> Отправить в Диадок" ВПФ передает ссылку в глДокументНаОтправкуДиадок и в фоне открывает обработку. Авторизация и отправка проходят автоматически. Это занимает некоторое время, но пользователь не взаимодействует с кучей окон и кнопок.
Разберем более правильный и официальный метод. В современных версиях Универсального модуля Диадока для 1С встроен специальный программный интерфейс для разработчиков — ExtAPI.
Этот интерфейс специально спроектирован для того, чтобы обращаться к функциям Диадока из сторонних обработок или расширений. Через ExtAPI можно:
Использование ExtAPI избавляет от необходимости писать "костыли" с вызовом скрытых переменных вроде ПМ_УТ_11 и защищает ваш код от поломок при обновлениях модуля Диадока.
Если ваша цель — максимальная скорость работы (секунды вместо минут ожидания), проанализируем использование Diadoc SDK. В этом случае мы вообще отказываемся от запуска тяжелой обработки Контура.
Вы можете написать собственный код с использованием COM-объекта (например, Diadoc.Api) или внешней компоненты AddIn.DiadocTo1C. Логика работы вашей кнопки будет следующей:
Такой подход не тянет за собой списки контрагентов, сопоставления номенклатуры и журналы документов, поэтому работает мгновенно.
Чтобы вообще исключить ожидание при проведении документа, посмотрим на архитектурные решения автоматической отправки.
Вариант А: Регламентные задания в 1С. В типовом модуле Диадока можно настроить фоновую отправку. Вы добавляете в документ 1С дополнительный реквизит (статус "К отправке в ЭДО"). Настроенное регламентное задание на сервере 1С (например, раз в 5 минут) само инициирует сеанс, собирает все готовые документы, подписывает их серверной подписью и отправляет. Пользователю ничего ждать не нужно.
Вариант Б: Диадок.Коннектор. Это отдельная служба (приложение), устанавливаемая на сервер. Вы дорабатываете 1С так, чтобы при проведении документа генерировался XML файл и сохранялся в определенную сетевую папку. Коннектор постоянно мониторит эту папку, забирает файлы, автоматически подписывает их сертификатом и отправляет контрагентам. 1С в этом случае занимается только формированием XML.
При реализации любых программных способов отправки (особенно если вы пишете прямые запросы через Diadoc API или используете старые методы для УТ 10.3), выясним важнейшую законодательную деталь.
С 2024 года, если документы подписывает не руководитель компании, а сотрудник (физическое лицо), к пакету электронных документов необходимо программно прикреплять идентификатор МЧД (машиночитаемой доверенности). Если вы забудете добавить передачу метаданных МЧД в свой скрипт фоновой отправки, сервер Диадока отклонит документ на этапе подписания с ошибкой полномочий.
Выбор конкретного метода зависит от вашей квалификации, версии платформы 1С и готовности поддерживать нестандартный код. Для быстрого старта рекомендуется изучить документацию по ExtAPI Универсального модуля, так как это гарантирует стабильность при будущих обновлениях.