При работе с 1С Конвертацией Данных 2.1 (КД 2.1) мы часто сталкиваемся с необходимостью передавать вспомогательные данные или произвольные параметры между различными правилами конвертации. Будь то Правила Выгрузки Данных (ПВД), Правила Конвертации Объектов (ПКО) или Правила Конвертации Свойств (ПКС), эффективная передача информации является ключом к гибким и мощным обменам. Давайте вместе разберем, как это можно реализовать, используя доступные механизмы КД 2.1.
Мы проанализируем различные способы передачи параметров, выясним, какие объекты и методы нам в этом помогут, и рассмотрим подробные примеры использования.
Прежде чем перейти к конкретным решениям, давайте познакомимся с ключевыми переменными и структурами, которые используются для передачи параметров в КД 2.1:
Параметры: Это глобальная структура, доступная во всех обработчиках как при выгрузке, так и при загрузке данных. Она предназначена для передачи параметров, которые должны быть доступны на протяжении всего обмена.ИсходящиеДанные: Эта структура используется при выгрузке данных. Значения, определенные как ИсходящиеДанные в ПКС, становятся ВходящимиДанными в соответствующем ПКО или ПКС на стороне приемника.ВходящиеДанные: Используется как при выгрузке, так и при загрузке. На стороне выгрузки мы можем использовать ее для временного хранения данных, которые затем будут переданы в другие обработчики или ПКС. На стороне загрузки она принимает значения из ИсходящихДанных.ПараметрыОбъекта: Эта структура предназначена для передачи параметров, специфичных для конкретного конвертируемого объекта, из источника в приемник. Она особенно полезна, когда нужно передать дополнительную информацию, связанную именно с обрабатываемым объектом.Также нам пригодятся специальные флаги в Правилах Конвертации Свойств (ПКС) и обработчики событий:
ПараметрыОбъекта в обработчике "После загрузки" на стороне приемника.ВходящиеДанные.ПараметрыОбъекта) и выполнить дополнительные действия после загрузки объекта, но до его записи.Если нам необходимо передать параметр, который будет доступен во всех обработчиках и для всех объектов в течение всего процесса обмена, мы используем структуру Параметры.
Шаг 1: Определение параметра.
Мы начнем с определения параметра в самой конвертации. Откройте файл конвертации в КД 2.1. Перейдите на вкладку "Параметры". Здесь мы можем добавить новый параметр, указав его имя и тип. Если этот параметр должен быть передан из базы-источника в базу-приемник, установите флаг "Передавать параметр при выгрузке".
Шаг 2: Установка значения параметра (при необходимости).
Если параметр не является фиксированным значением, а должен быть вычислен в процессе выгрузки, мы можем установить его значение в любом обработчике, например, в обработчике "Перед выгрузкой" Правила Выгрузки Данных (ПВД) или Правила Конвертации Объектов (ПКО):
Параметры.Вставить("МойГлобальныйПараметр", "ЗначениеПараметра");
// Или
Параметры["МойГлобальныйПараметр"] = "ЗначениеПараметра";
Шаг 3: Получение значения параметра.
Доступ к глобальным параметрам возможен из любого обработчика (ПВД, ПКО, ПКС) как на стороне выгрузки, так и на стороне загрузки. Мы можем получить его значение по имени, как элемент структуры:
Сообщить(Параметры["СчетДТ2501"]); // Пример из форума
// Или
Переменная = Параметры["МойГлобальныйПараметр"];
Таким образом, мы видим, что структура Параметры очень удобна для передачи общесистемных настроек или значений, которые не привязаны к конкретному объекту конвертации.
ВходящиеДанные и ПараметрыОбъектаКогда нам нужно передать дополнительную информацию, связанную с конкретным конвертируемым объектом, из источника в приемник, мы используем более сложный, но гибкий механизм с применением ВходящиеДанные, специальных флагов в ПКС и структуры ПараметрыОбъекта. Давайте разберем этот процесс по шагам.
Шаг 1: Подготовка ПКС в Правиле Конвертации Объекта (ПКО) источника.
В ПКО, которое выгружает нужный нам объект, создадим новое Правило Конвертации Свойств (ПКС). Важный момент: это ПКС будет служить "каналом" для передачи нашего параметра.
ПараметрыОбъекта на стороне приемника.ВходящиеДанные.После этих действий у нашего ПКС будут установлены оба флага, и оно будет ожидать значение из ВходящиеДанные.
Шаг 2: Заполнение ВходящиеДанные в обработчике "Перед выгрузкой" ПКО источника.
Теперь нам нужно поместить нужное значение в структуру ВходящиеДанные, чтобы наше ПКС могло его забрать. Мы сделаем это в обработчике "Перед выгрузкой" того же ПКО, в котором мы создали ПКС на предыдущем шаге. Здесь мы можем вычислить любое значение, которое хотим передать, и вставить его в ВходящиеДанные:
// Пример: Допустим, нам нужно передать значение какого-то дополнительного реквизита
// или результат сложного вычисления.
// Пусть это будет строка "ДополнительныйПараметрОбъекта".
ВходящиеДанные.Вставить("ИмяПараметраДляОбъекта", "ЗначениеДополнительногоПараметра");
// Или, если нам нужно передать значение реквизита объекта-источника,
// который не является прямым реквизитом для конвертации, но нужен на приемнике:
// Например, если в объекте-источнике есть Реквизит1, который мы хотим передать
// как параметр, а не как прямое свойство.
ВходящиеДанные.Вставить("ЗначениеРеквизита1", Источник.Реквизит1);
Обратите внимание, что "ИмяПараметраДляОбъекта" (или "ЗначениеРеквизита1") – это ключ, по которому наше ПКС, созданное на Шаге 1, получит значение из ВходящиеДанные. Важно: имя параметра, которое мы указываем в ВходящиеДанные.Вставить(), должно совпадать с именем свойства в ПКС (колонка "Свойство приемника" или "Свойство источника", если источник пустой и установлен флаг "Получить значение из входящих данных").
Шаг 3: Получение значения параметра в обработчике "После загрузки" ПКО приемника.
После того как объект был выгружен с параметром, он попадает на сторону приемника. Здесь, в обработчике "После загрузки" соответствующего ПКО, мы можем получить наше переданное значение. Оно будет доступно в структуре ПараметрыОбъекта.
// Получаем переданное значение по имени, которое мы использовали в ВходящиеДанные.Вставить()
Если ПараметрыОбъекта.Свойство("ИмяПараметраДляОбъекта") Тогда
ЗначениеПараметра = ПараметрыОбъекта["ИмяПараметраДляОбъекта"];
Сообщить("Получено значение параметра: " + ЗначениеПараметра);
// Теперь мы можем использовать это значение, например, для заполнения реквизита
// объекта-приемника, который не был напрямую связан с источником.
ОбъектПриемник.НовыйРеквизит = ЗначениеПараметра;
КонецЕсли;
Именно здесь, в обработчике "После загрузки", мы имеем доступ к ПараметрыОбъекта и можем использовать полученные данные для донастройки объекта-приемника перед его записью в базу.
Проанализируем ситуацию: Флаг "Передавать данные в параметр" в ПКС источника фактически говорит КД: "Значение, которое я получу для этого ПКС, нужно не просто сконвертировать, а отправить в специальный 'контейнер' для этого объекта, который будет доступен на стороне приемника через ПараметрыОбъекта". А флаг "Получить значение из входящих данных" в том же ПКС говорит: "Значение для меня лежит в ВходящиеДанные, и я его оттуда возьму".
Этот подход позволяет нам передавать практически любую дополнительную информацию, которая может потребоваться для корректной загрузки и обработки объекта на стороне приемника, но которая не является прямым реквизитом или свойством, подлежащим стандартной конвертации.
УстановитьВремя() в 7.7).Отказ: В обработчиках событий (например, "Перед выгрузкой" или "Перед записью") мы можем использовать переменную Отказ = Истина; для отмены выгрузки или записи текущего объекта, если какие-либо условия не выполняются.Мы рассмотрели основные способы передачи параметров в 1С Конвертации Данных 2.1. Используя глобальные Параметры для общесистемных значений и комбинацию ВходящиеДанные, флагов ПКС и ПараметрыОбъекта для объектно-специфической информации, мы получаем мощный инструментарий для создания гибких и надежных обменов данными.