Как реализовать аналог обработчика После загрузки в Конвертации данных 3.0

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

Переход с «Конвертации данных 2.1» на версию 3.0 часто вызывает вопросы у разработчиков, так как архитектура этих инструментов принципиально различается. В КД 2 мы привыкли к линейному процессу выгрузки и загрузки, где обработчик ПослеЗагрузки позволял напрямую манипулировать объектом ЭтотОбъект. В КД 3, работающей на базе формата EnterpriseData (XDTO), логика разделена на два независимых контура: подготовка данных в источнике и интерпретация данных в приемнике. Рассмотрим подробно, как найти нужный обработчик и правильно его использовать.

Разбираемся в архитектуре ПКО в Конвертации данных 3.0

Для начала проанализируем, почему при создании Правила конвертации объектов (ПКО) вы можете видеть только обработчик При отправке. В КД 3 каждое правило имеет настройку Область применения. Если вы создаете правила для базы-источника (например, для УТ 11, которая отправляет данные), система по умолчанию предлагает только события, связанные с формированием XDTO-пакета. Чтобы реализовать логику, аналогичную «После загрузки», нам нужно работать с правилами в контексте базы-приемника.

Выясним, как заставить интерфейс КД 3 показать нужные нам события:

  1. Откроем ПКО для нужного объекта (в нашем примере это переход из ПередачаТоваровМеждуОрганизациями в РеализацияТоваровУслуг).
  2. Найдем поле Область применения.
  3. Установим значение Для получения или Для отправки и получения.

Как только вы измените область применения на «получение», в списке обработчиков появится событие После загрузки. Важно понимать: этот обработчик будет выполняться на стороне базы-приемника (БП 3.0), когда данные из формата XDTO уже считаны и преобразованы в объект информационной базы (документ-объект), но еще не записаны в базу данных.

Реализация логики в обработчике ПКО После загрузки

В КД 2 мы работали с переменной Объект. В КД 3 в обработчике «После загрузки» основным параметром является ДанныеИБ. Именно в этой переменной содержится сконвертированный документ, реквизиты которого нам нужно дозаполнить.

Разберем пример кода для установки признака СуммаВключаетНДС. Если этого реквизита нет в универсальном формате или вы хотите принудительно устанавливать его в Истина при загрузке в Бухгалтерию, пропишем следующий код:


// Обработчик "После загрузки" в ПКО
// Параметр ДанныеИБ - это созданный или найденный ДокументОбъект
ДанныеИБ.СуммаВключаетНДС = Истина;

Этот простой шаг заменяет привычную манипуляцию из КД 2. Однако помните, что изменения в ПКО потребуют обновления правил в самой базе-приемнике. Обычно это делается через загрузку модифицированного XML-файла правил в макет ПравилаРегистрацииОбъектов или через расширение.

Альтернативный и более современный способ: Модуль менеджера обмена

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

Проанализируем ситуацию: если мы хотим изменить поведение загрузки документа РеализацияТоваровУслуг, нам следует использовать процедуру ПриКонвертацииДанныхXDTOВПрикладнойОбъект. Рассмотрим по шагам, как это сделать:

  1. Найдем в базе-приемнике (БП 3.0) общий модуль МенеджерОбменаЧерезУниверсальныйФормат.
  2. Найдем (или переопределим в расширении) процедуру ПриКонвертацииДанныхXDTOВПрикладнойОбъект.
  3. Добавим условие по типу загружаемого объекта.

Пример кода в модуле менеджера обмена:


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

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

Преимущество этого метода: вам не нужно использовать тяжеловесную конфигурацию «Конвертация данных 3» для внесения правок. Вся логика видна в коде, ее легче отлаживать и сопровождать через механизм расширений.

Специфика работы с документами передачи между организациями

При обмене между УТ 11.5 и БП 3.0 часто возникает ситуация, когда один документ в источнике порождает другой тип документа в приемнике. В нашем случае ПередачаТоваровМеждуОрганизациями в УТ трансформируется в РеализацияТоваровУслуг в БП.

Если реквизит СуммаВключаетНДС в источнике (УТ) имеет значение Ложь, а в БП бизнес-логика требует Истина, использование обработчика «После загрузки» — это единственный верный способ. Это связано с тем, что стандартные сопоставления (ПКС) просто перенесут значение «как есть», а нам требуется трансформация логики под стандарты бухгалтерского учета.

Важные рекомендации по отладке

Чтобы убедиться, что ваш обработчик сработал корректно, рекомендуем использовать следующие приемы:

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

← На главную