Переход с привычного модуля Диадок версии 5.хх на новый Универсальный модуль (УМ) версии 4.20 и выше часто вызывает вопросы у разработчиков 1С. Основная сложность заключается в изменении архитектуры кастомизации: привычные функции в подключаемых модулях (ПМ) изменили свои названия и структуру. В этой статье мы подробно разберем, как адаптировать свои доработки под новый формат, выясним, почему старые модули продолжают работать (но со сбоями), и научимся использовать новые инструменты отладки.
Проанализируем ключевое отличие. В старых версиях модуля Диадок (Стандарт 5.XX) основной точкой входа для кастомизации была экспортная функция ОбработкаСобытияПодключаемогоМодуля. В новом Универсальном модуле концепция изменилась в сторону унификации. Теперь используется единая функция-диспетчер: ОбработатьСобытие(ИмяСобытия, Параметры).
Рассмотрим, как выглядела сигнатура функции в старом ПМ:
Функция ОбработкаСобытияПодключаемогоМодуля(ИмяСобытия, Параметр1 = Неопределено, Параметр2 = Неопределено, Параметр3 = Неопределено) Экспорт
// Логика обработки
КонецФункции
В новом Универсальном модуле мы переходим к следующему виду:
Функция ОбработатьСобытие(ИмяСобытия, Параметры) Экспорт
// Логика обработки
КонецФункции
Выясним причину такого изменения. Использование структуры Параметры вместо набора аргументов позволяет разработчикам СКБ Контур добавлять новые данные в события, не изменяя описание функции в ваших подключаемых модулях. Это значительно повышает стабильность системы при обновлениях основного модуля Диадок.
Многие пользователи замечают, что при подключении старого ПМ к новому модулю, изменения продолжают применяться. Проанализируем ситуацию: это происходит благодаря встроенному механизму обратной совместимости. Универсальный модуль при возникновении события сначала ищет новую функцию ОбработатьСобытие, и если она не объявлена, делает попытку вызвать старую ОбработкаСобытияПодключаемогоМодуля.
Однако полагаться на этот механизм в долгосрочной перспективе не стоит. Во-первых, система может выдавать предупреждения об "отсутствии описания модуля". Во-вторых, новые события (например, связанные с маркировкой "Честный знак" или сложными маршрутами согласования) просто не будут передаваться в старую функцию. Рекомендуется выполнить миграцию кода на новый стандарт.
Рассмотрим, как правильно создать шаблон ПМ в новом Универсальном модуле, чтобы не пропустить важные настройки. Разберем по шагам:
ПередОтправкой или ПриПечати).ОбработатьСобытие и всеми необходимыми вспомогательными функциями.Теперь разберем, как наполнить созданный шаблон кодом. Предположим, нам нужно изменить алгоритм заполнения дополнительных полей документа перед отправкой. Посмотрим на пример реализации:
Функция ОбработатьСобытие(ИмяСобытия, Параметры) Экспорт
Если ИмяСобытия = "ПередОтправкой" Тогда
// В структуре Параметры обычно передаются ДанныеДокумента и Источник
ДокументОбъект = Параметры.Источник;
// Пример добавления своего значения
Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда
Параметры.ДополнительныеДанные.Вставить("КомментарийМенеджера", "Срочно!");
КонецЕсли;
КонецЕсли;
КонецФункции
Обратите внимание, что состав структуры Параметры зависит от конкретного ИмяСобытия. Для получения точного описания полей параметров рекомендуется обращаться к официальной технической документации разработчика.
Чтобы основной модуль Диадок корректно идентифицировал ваш ПМ и не выдавал предупреждений, необходимо добавить в начало модуля специальную функцию описания. Проанализируем пример:
Функция ПолучитьИнформациюОМодуле() Экспорт
Результат = Новый Структура;
Результат.Вставить("Идентификатор", "МояКастомизация_001");
Результат.Вставить("Версия", "1.0");
Результат.Вставить("ВерсияAPI", "1.1"); // Актуальная версия API для УМ
Возврат Результат;
КонецФункции
Наличие этой функции позволяет ядру Диадок понимать, под какую версию API написан ваш код, и правильно выстраивать цепочку вызовов.
Выясним, какие инструменты появились в Универсальном модуле для облегчения жизни разработчика:
Подводя итог, можно сказать, что переход на Универсальный модуль требует рефакторинга существующих наработок. Однако новая событийная модель и улучшенные средства отладки делают процесс кастомизации более прозрачным и надежным. Мы рекомендуем не ограничиваться использованием старых модулей в режиме совместимости, а постепенно переносить логику в функцию ОбработатьСобытие для обеспечения стабильной работы ЭДО в будущем.