Как правильно передавать произвольные параметры между объектами и правилами в 1С Конвертации Данных 2.1?

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

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

Мы проанализируем различные способы передачи параметров, выясним, какие объекты и методы нам в этом помогут, и рассмотрим подробные примеры использования.

Основные механизмы передачи параметров в КД 2.1

Прежде чем перейти к конкретным решениям, давайте познакомимся с ключевыми переменными и структурами, которые используются для передачи параметров в КД 2.1:

  1. Параметры: Это глобальная структура, доступная во всех обработчиках как при выгрузке, так и при загрузке данных. Она предназначена для передачи параметров, которые должны быть доступны на протяжении всего обмена.
  2. ИсходящиеДанные: Эта структура используется при выгрузке данных. Значения, определенные как ИсходящиеДанные в ПКС, становятся ВходящимиДанными в соответствующем ПКО или ПКС на стороне приемника.
  3. ВходящиеДанные: Используется как при выгрузке и загрузке. На стороне выгрузки мы можем использовать ее для временного хранения данных, которые затем будут переданы в другие обработчики или ПКС. На стороне загрузки она принимает значения из ИсходящихДанных.
  4. ПараметрыОбъекта: Эта структура предназначена для передачи параметров, специфичных для конкретного конвертируемого объекта, из источника в приемник. Она особенно полезна, когда нужно передать дополнительную информацию, связанную именно с обрабатываемым объектом.

Также нам пригодятся специальные флаги в Правилах Конвертации Свойств (ПКС) и обработчики событий:

Решение 1: Передача глобальных параметров для всего обмена

Если нам необходимо передать параметр, который будет доступен во всех обработчиках и для всех объектов в течение всего процесса обмена, мы используем структуру Параметры.

Шаг 1: Определение параметра.

Мы начнем с определения параметра в самой конвертации. Откройте файл конвертации в КД 2.1. Перейдите на вкладку "Параметры". Здесь мы можем добавить новый параметр, указав его имя и тип. Для удобной работы с деревом настроек и отборами на этом этапе часто используется дополненная обработка универсального обмена данными XML — для этой задачи есть дополненная обработка универсального обмена данными XML. Если параметр должен быть передан из базы-источника в базу-приемник, установите флаг "Передавать параметр при выгрузке".

Шаг 2: Установка значения параметра (при необходимости).

Если параметр не является фиксированным значением, а должен быть вычислен в процессе выгрузки, мы можем установить его значение в любом обработчике, например, в обработчике "Перед выгрузкой" ПВД или ПКО:


Параметры.Вставить("МойГлобальныйПараметр", "ЗначениеПараметра");
// Или
Параметры["МойГлобальныйПараметр"] = "ЗначениеПараметра";

Шаг 3: Получение значения параметра.

Доступ к глобальным параметрам возможен из любого обработчика (ПВД, ПКО, ПКС) как на стороне выгрузки, так и на стороне загрузки. Мы можем получить его значение по имени, как элемент структуры:


Сообщить(Параметры["СчетДТ2501"]); // Пример из форума
// Или
Переменная = Параметры["МойГлобальныйПараметр"];

Таким образом, мы видим, что структура Параметры очень удобна для передачи общесистемных настроек или значений, которые не привязаны к конкретному объекту конвертации.

Решение 2: Передача параметров для конкретного объекта с использованием ВходящиеДанные и ПараметрыОбъекта

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

Шаг 1: Подготовка ПКС в Правиле Конвертации Объекта (ПКО) источника.

В ПКО, которое выгружает нужный нам объект, создадим новое Правило Конвертации Свойств (ПКС). Чтобы быстро ориентироваться в структуре правил при настройке, разработчики часто используют портативный обозреватель правил конвертации свойств. Это ПКС будет служить "каналом" для передачи нашего параметра.

  1. Установим пустой источник для этого ПКС. То есть, не выбираем конкретный реквизит объекта-источника.
  2. Установим флаг "Передавать данные в параметр". Это гарантирует, что значение, которое мы определим для этого ПКС, будет передано в структуру ПараметрыОбъекта на стороне приемника.
  3. Установим флаг "Получить значение из входящих данных". Этот флаг указывает, что значение для данного ПКС будет взято из структуры ВходящиеДанные.

После этих действий у нашего ПКС будут установлены оба флага, и оно будет ожидать значение из ВходящиеДанные.

Шаг 2: Заполнение ВходящиеДанные в обработчике "Перед выгрузкой" ПКО источника.

Теперь нам нужно поместить нужное значение в структуру ВходящиеДанные в обработчике "Перед выгрузкой" того же ПКО. Подобная логика часто применяется в масштабных проектах, таких как правила обмена между Комплексной автоматизацией 2.5 и WMS 5. Здесь мы можем вычислить любое значение и вставить его в ВходящиеДанные:


// Пример: Допустим, нам нужно передать значение какого-то дополнительного реквизита.
ВходящиеДанные.Вставить("ИмяПараметраДляОбъекта", "ЗначениеДополнительногоПараметра");

// Или значение реквизита источника, не являющегося прямым реквизитом для конвертации:
ВходящиеДанные.Вставить("ЗначениеРеквизита1", Источник.Реквизит1);

Важно: имя параметра в ВходящиеДанные.Вставить() должно совпадать с именем свойства в ПКС.

Шаг 3: Получение значения параметра в обработчике "После загрузки" ПКО приемника.

На стороне приемника в обработчике "После загрузки" ПКО мы можем получить переданное значение из ПараметрыОбъекта.


// Получаем переданное значение по имени
Если ПараметрыОбъекта.Свойство("ИмяПараметраДляОбъекта") Тогда
    ЗначениеПараметра = ПараметрыОбъекта["ИмяПараметраДляОбъекта"];
    Сообщить("Получено значение параметра: " + ЗначениеПараметра);
    // Используем значение для заполнения реквизита объекта-приемника
    ОбъектПриемник.НовыйРеквизит = ЗначениеПараметра;
КонецЕсли;

Именно здесь мы имеем доступ к ПараметрыОбъекта и можем выполнить донастройку объекта перед его записью в базу.

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

Дополнительные рекомендации и полезные моменты

Мы рассмотрели основные способы передачи параметров в 1С Конвертации Данных 2.1. Используя глобальные Параметры для общесистемных значений и комбинацию ВходящиеДанные, флагов ПКС и ПараметрыОбъекта для объектно-специфической информации, мы получаем мощный инструментарий для создания гибких и надежных обменов данными.

← На главную