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

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

С переходом на новые версии модуля Диадок (так называемый «Универсальный модуль», версии 4.x и выше), многие разработчики столкнулись с проблемой: код формирования документов перестал быть доступен «в лоб». Если раньше вся логика находилась в одной обработке, то теперь она скрыта в сложной архитектуре макетов и подключаемых модулей. Разберемся, как устроена эта система, где искать функции заполнения полей и как корректно вносить изменения, не ломая основное «Ядро».

Архитектура «Ядро» и «Подключаемый модуль»

Для начала проанализируем, почему старые методы поиска текста через «Ctrl + F» в основной обработке больше не работают. Разработчики Диадока перешли на модульную систему. Основная обработка (ее называют «Ядро») отвечает только за общие механизмы: авторизацию, работу с API, очередь отправки и интерфейс. Вся конфигурационная логика (например, как заполнить ТОРГ-12 для УТ 11 или Акт для БП 3.0) вынесена в Подключаемые модули (ПМ).

Эти ПМ хранятся внутри основной обработки в виде макетов с двоичными данными. Когда вы запускаете модуль, он определяет вашу конфигурацию и динамически загружает нужный макет во временное хранилище как внешнюю обработку. Переменная ОсновнойМодуль, которую можно встретить в коде макетов, — это как раз ссылка на такой динамически загруженный объект менеджера.

Где найти исходный код и функции

Если вам нужно найти конкретную функцию, например ЭДО_Служебные_ДобавитьСтрокуВТаблицуЗначений или ЭДО_ДокументМенеджер_ПодготовитьИДобавитьДокументВПакет, следуйте этому алгоритму:

  1. Рассмотрим макеты основной обработки. Большинство служебных функций для связи Ядра и ПМ находятся в макете с названием ВызовыПМ_epf.
  2. Если же вам нужно изменить логику заполнения полей в XML (например, номера ГТД или дополнительные сведения), вам понадобится код конкретного ПМ под вашу конфигурацию (например, ПМ_УТ11 или ПМ_БП30).

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

Как включить режим отладки и выгрузить модули

Для полноценной работы с кодом нам нужно «вытащить» его из бинарных макетов на диск. Разберем, как это сделать:

  1. Откройте настройки модуля Диадок в интерфейсе 1С.
  2. Найдите раздел настроек разработчика (часто это скрыто под «шестеренкой» или в расширенных настройках).
  3. Установите флаг «Режим отладки».
  4. Укажите каталог на диске, куда будут выгружаться временные файлы.

После этого при выполнении любой операции модуль распакует содержимое своих макетов в указанную папку. Там вы увидите структуру каталогов, включая include и libs. В этих текстовых файлах и находятся те самые «потерянные» функции. Теперь вы можете использовать глобальный поиск по файлам в любой среде разработки или в самой 1С через «Файл — Открыть».

Использование Подключаемого Модуля (ПМ) для своих правок

Крайне не рекомендуется править код «Ядра» или извлекать макеты, менять их и заталкивать обратно. При следующем обновлении модуля все ваши правки затрутся. Правильный путь — использование Внешнего подключаемого модуля.

Посмотрим, как настроить свой ПМ по шагам:

  1. Найдите в основной обработке макет, соответствующий вашей конфигурации (например, ПМ_УТ11). Сохраните его на диск как файл .epf.
  2. Зарегистрируйте этот файл в 1С как внешнюю обработку (через справочник «Дополнительные отчеты и обработки») или просто оставьте как файл на диске.
  3. В настройках Диадока, в разделе «Подключаемый модуль», выберите «Использовать внешний файл» или «Использовать обработку из базы» и укажите ваш сохраненный файл.
  4. Теперь Диадок будет брать логику формирования документов не из своего внутреннего макета, а из вашего внешнего файла.

Пример добавления дополнительного реквизита в УПД

Предположим, нам нужно передать в электронном документе номер заказа, который хранится в дополнительном реквизите 1С. Рассмотрим, как это реализовать в функции ПодготовитьЭлектронныйДокумент внутри вашего Подключаемого Модуля.

Проанализируем пример кода:


// Внутри подключаемого модуля ищем функцию формирования контента
Процедура ПодготовитьЭлектронныйДокумент(Параметры) Экспорт
    
    Документ1С = Параметры.Документ1С;
    СтруктураКонтента = Параметры.СтруктураКонтента; // Это объект будущего XML
    
    // Получаем значение нашего реквизита
    НомерЗаказаЗначение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ1С, "эя_НомерЗаказа");
    
    // Добавляем данные в структуру дополнительных сведений УПД
    Если ЗначениеЗаполнено(НомерЗаказаЗначение) Тогда
        НоваяСтрокаИнфо = Новый Структура("Key, Value", "НомерЗаказа", Строка(НомерЗаказаЗначение));
        
        // В новых модулях структура AdditionalInfoId содержит коллекцию StructedAdditionalInfos
        СтруктураКонтента.AdditionalInfoId.StructedAdditionalInfos.Добавить(НоваяСтрокаИнфо);
    КонецЕсли;

КонецПроцедуры

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

Решение распространенных ошибок

При попытке подключить свой ПМ часто возникает ошибка: «Выбранный файл не является подключаемым модулем для модуля Универсальный». Выясним причину этой проблемы. Модуль Ядра проверяет совместимость ПМ по нескольким признакам:

Проблема производительности (зависания)

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

  1. Проверить наличие обновлений самого модуля на серверах Диадока.
  2. Синхронизировать статусы документов по всем организациям в базе.
  3. Загрузить метрики использования.

Чтобы ускорить работу, рекомендуем зайти в настройки и ограничить период отображения документов по умолчанию (например, только за последние 3 дня). Также в файлах ПМ (если вы их выгрузили) можно найти запросы к списку КОтправке и оптимизировать их, добавив индексы к часто используемым полям в вашей базе 1С.

Таким образом, хотя новая структура модуля Диадок кажется сложной из-за многоуровневой вложенности, она дает большую гибкость. Используя механизм Подключаемых модулей и Режим отладки, вы сможете внедрить любую логику формирования документов, сохранив при этом возможность обновлять основное Ядро системы без потери своих доработок.

← На главную