Как кастомизировать новый Универсальный модуль Диадок в 1С и перейти со старых подключаемых модулей

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

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

Анализ архитектурных изменений: от старой функции к новой

Проанализируем ключевое отличие. В старых версиях модуля Диадок (Стандарт 5.XX) основной точкой входа для кастомизации была экспортная функция ОбработкаСобытияПодключаемогоМодуля. В новом Универсальном модуле концепция изменилась в сторону унификации. Теперь используется единая функция-диспетчер: ОбработатьСобытие(ИмяСобытия, Параметры).

Рассмотрим, как выглядела сигнатура функции в старом ПМ:


Функция ОбработкаСобытияПодключаемогоМодуля(ИмяСобытия, Параметр1 = Неопределено, Параметр2 = Неопределено, Параметр3 = Неопределено) Экспорт
    // Логика обработки
КонецФункции

В новом Универсальном модуле мы переходим к следующему виду:


Функция ОбработатьСобытие(ИмяСобытия, Параметры) Экспорт
    // Логика обработки
КонецФункции

Выясним причину такого изменения. Использование структуры Параметры вместо набора аргументов позволяет разработчикам СКБ Контур добавлять новые данные в события, не изменяя описание функции в ваших подключаемых модулях. Это значительно повышает стабильность системы при обновлениях основного модуля Диадок.

Режим обратной совместимости: почему старый код "еще работает"

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

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

Пошаговое создание нового подключаемого модуля через конструктор

Рассмотрим, как правильно создать шаблон ПМ в новом Универсальном модуле, чтобы не пропустить важные настройки. Разберем по шагам:

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

Реализация логики в функции ОбработатьСобытие

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


Функция ОбработатьСобытие(ИмяСобытия, Параметры) Экспорт
    
    Если ИмяСобытия = "ПередОтправкой" Тогда
        
        // В структуре Параметры обычно передаются ДанныеДокумента и Источник
        ДокументОбъект = Параметры.Источник;
        
        // Пример добавления своего значения
        Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда
            Параметры.ДополнительныеДанные.Вставить("КомментарийМенеджера", "Срочно!");
        КонецЕсли;
        
    КонецЕсли;

КонецФункции

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

Добавление метаданных модуля: функция ПолучитьИнформациюОМодуле

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


Функция ПолучитьИнформациюОМодуле() Экспорт
    Результат = Новый Структура;
    Результат.Вставить("Идентификатор", "МояКастомизация_001");
    Результат.Вставить("Версия", "1.0");
    Результат.Вставить("ВерсияAPI", "1.1"); // Актуальная версия API для УМ
    Возврат Результат;
КонецФункции

Наличие этой функции позволяет ядру Диадок понимать, под какую версию API написан ваш код, и правильно выстраивать цепочку вызовов.

Новые возможности кастомизации и отладка

Выясним, какие инструменты появились в Универсальном модуле для облегчения жизни разработчика:

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

← На главную