С переходом на новые версии модуля Диадок (так называемый «Универсальный модуль», версии 4.x и выше), многие разработчики столкнулись с проблемой: код формирования документов перестал быть доступен «в лоб». Если раньше вся логика находилась в одной обработке, то теперь она скрыта в сложной архитектуре макетов и подключаемых модулей. Разберемся, как устроена эта система, где искать функции заполнения полей и как корректно вносить изменения, не ломая основное «Ядро».
Для начала проанализируем, почему старые методы поиска текста через «Ctrl + F» в основной обработке больше не работают. Разработчики Диадока перешли на модульную систему. Основная обработка (ее называют «Ядро») отвечает только за общие механизмы: авторизацию, работу с API, очередь отправки и интерфейс. Вся конфигурационная логика (например, как заполнить ТОРГ-12 для УТ 11 или Акт для БП 3.0) вынесена в Подключаемые модули (ПМ).
Эти ПМ хранятся внутри основной обработки в виде макетов с двоичными данными. Когда вы запускаете модуль, он определяет вашу конфигурацию и динамически загружает нужный макет во временное хранилище как внешнюю обработку. Переменная ОсновнойМодуль, которую можно встретить в коде макетов, — это как раз ссылка на такой динамически загруженный объект менеджера.
Если вам нужно найти конкретную функцию, например ЭДО_Служебные_ДобавитьСтрокуВТаблицуЗначений или ЭДО_ДокументМенеджер_ПодготовитьИДобавитьДокументВПакет, следуйте этому алгоритму:
ВызовыПМ_epf.ПМ_УТ11 или ПМ_БП30).Чтобы не гадать, где находится код, воспользуемся штатным механизмом отладки, который предусмотрели разработчики Диадока.
Для полноценной работы с кодом нам нужно «вытащить» его из бинарных макетов на диск. Разберем, как это сделать:
После этого при выполнении любой операции модуль распакует содержимое своих макетов в указанную папку. Там вы увидите структуру каталогов, включая include и libs. В этих текстовых файлах и находятся те самые «потерянные» функции. Теперь вы можете использовать глобальный поиск по файлам в любой среде разработки или в самой 1С через «Файл — Открыть».
Крайне не рекомендуется править код «Ядра» или извлекать макеты, менять их и заталкивать обратно. При следующем обновлении модуля все ваши правки затрутся. Правильный путь — использование Внешнего подключаемого модуля.
Посмотрим, как настроить свой ПМ по шагам:
ПМ_УТ11). Сохраните его на диск как файл .epf.Предположим, нам нужно передать в электронном документе номер заказа, который хранится в дополнительном реквизите 1С. Рассмотрим, как это реализовать в функции ПодготовитьЭлектронныйДокумент внутри вашего Подключаемого Модуля.
Проанализируем пример кода:
// Внутри подключаемого модуля ищем функцию формирования контента
Процедура ПодготовитьЭлектронныйДокумент(Параметры) Экспорт
Документ1С = Параметры.Документ1С;
СтруктураКонтента = Параметры.СтруктураКонтента; // Это объект будущего XML
// Получаем значение нашего реквизита
НомерЗаказаЗначение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ1С, "эя_НомерЗаказа");
// Добавляем данные в структуру дополнительных сведений УПД
Если ЗначениеЗаполнено(НомерЗаказаЗначение) Тогда
НоваяСтрокаИнфо = Новый Структура("Key, Value", "НомерЗаказа", Строка(НомерЗаказаЗначение));
// В новых модулях структура AdditionalInfoId содержит коллекцию StructedAdditionalInfos
СтруктураКонтента.AdditionalInfoId.StructedAdditionalInfos.Добавить(НоваяСтрокаИнфо);
КонецЕсли;
КонецПроцедуры
Важно помнить, что в Универсальном модуле работа идет со структурами данных, которые потом автоматически конвертируются в формат XML Диадока (протобуф). Поэтому мы не правим текст XML напрямую, а наполняем дерево объектов. Для прямой генерации и выгрузки файлов вне модуля оператора можно использовать обработку для выгрузки документов 1С в XML для ЭДО по форматам ФНС.
При попытке подключить свой ПМ часто возникает ошибка: «Выбранный файл не является подключаемым модулем для модуля Универсальный». Выясним причину этой проблемы. Модуль Ядра проверяет совместимость ПМ по нескольким признакам:
ВерсияИнтерфейса. Если ее нет или она устарела, Ядро его не примет.ПМ_УТ11 в МояДоработкаДиадок, Ядро может выдать ошибку. Старайтесь сохранять оригинальные имена объектов внутри метаданных.СведенияОВнешнейОбработке), помечены ключевым словом Экспорт.Многие пользователи замечают, что новый интерфейс открывается очень долго (иногда до нескольких минут). Выясним, почему это происходит. При открытии модуль пытается одновременно выполнить несколько тяжелых операций:
Чтобы ускорить работу, рекомендуем зайти в настройки и ограничить период отображения документов по умолчанию (например, только за последние 3 дня). Также в файлах ПМ (если вы их выгрузили) можно найти запросы к списку КОтправке и оптимизировать их, добавив индексы к часто используемым полям в вашей базе 1С.
Таким образом, хотя новая структура модуля Диадок кажется сложной из-за многоуровневой вложенности, она дает большую гибкость. Используя механизм Подключаемых модулей и Режим отладки, вы сможете внедрить любую логику формирования документов, сохранив при этом возможность обновлять основное Ядро системы без потери своих доработок.