Как передать данные в параметр объекта в 1С:Конвертация данных 2.1

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

В процессе разработки правил обмена данными в «1С:Конвертация данных 2.1» (КД 2.1) часто возникают ситуации, когда в базе-источнике есть важная информация, которую необходимо передать, но в базе-приемнике для нее нет соответствующего реквизита. Вместо создания лишних полей в конфигурации-приемнике правильным архитектурным решением будет использование механизма параметров объекта. Рассмотрим подробнее, как настроить такую передачу, избежать типичных ошибок сериализации и правильно обработать данные на стороне приемника.

Постановка задачи и базовые настройки

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

Для начала создадим ПКС (Правило конвертации свойства) внутри нужного ПКО (Правила конвертации объекта). В настройках этого ПКС выполним следующие действия:

  1. В поле «Источник» укажем реквизит, значение которого хотим передать.
  2. Поле «Приемник» оставим пустым (так как физического реквизита в целевой базе нет).
  3. Установим флаг «Передавать данные в параметр».
  4. В поле «Имя параметра» впишем произвольное имя, например, ВидРасчетов.

Проблема сериализации ссылочных типов

Часто программисты сталкиваются с тем, что при попытке получить параметр в приемнике они видят странную строку вида {"#",4238019d-7e49-4fc9-91db-b6b951d5cf8e...}. Проанализируем причину: если передаваемый реквизит является ссылочным типом, система пытается сериализовать его в XML. Если для этого параметра не указано конкретное ПКО, 1С выгружает внутреннее представление ссылки, которое неудобно обрабатывать вручную.

Выясним, как решить эту проблему. У нас есть два пути:

  1. Если тип существует в приемнике: Укажите в ПКС соответствующее ПКО. Тогда в параметр придет уже готовая ссылка на объект в базе-приемнике.
  2. Если типа в приемнике нет или нужна только строка: Приведите значение к примитивному типу (строке или числу) еще на этапе выгрузки.

Рассмотрим пример кода в обработчике «Перед выгрузкой» для ПКС:


// Передаем не саму ссылку, а наименование, чтобы избежать проблем с типами
Значение = Источник.ВидВзаиморасчетовСПодотчетником.Наименование;

Получение данных в базе-приемнике

Теперь перейдем к самому важному — извлечению данных. Все параметры, для которых в ПКС был установлен флаг «Передавать в параметр», попадают в специальную структуру ПараметрыОбъекта. Эта структура доступна в обработчиках загрузки ПКО.

Наиболее подходящим местом для логики заполнения реквизитов является обработчик «После загрузки». Посмотрим на пример кода, который позволит нам извлечь параметр и использовать его для поиска нужного счета:


Если ПараметрыОбъекта <> Неопределено Тогда
    // Извлекаем переданное строковое значение
    ИмяВидаРасчетов = ПараметрыОбъекта["ВидРасчетов"];
    
    // Пример логики заполнения другого реквизита
    Если ИмяВидаРасчетов = "РасчетыСПоставщиками" Тогда
        Объект.СчетРасчетов = ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками;
    ИначеЕсли ИмяВидаРасчетов = "Прочее" Тогда
        Объект.СчетРасчетов = ПланыСчетов.Хозрасчетный.ПрочиеРасчеты;
    КонецЕсли;
КонецЕсли;

Важный нюанс: Обработчик «После загрузки» выполняется, когда объект уже может быть записан в базу. Если вы изменяете реквизиты объекта в этом обработчике, убедитесь, что это не приведет к необходимости повторной записи (или используйте обработчик «При загрузке», если объект еще находится в памяти до основной записи).

Работа с параметрами в табличных частях

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

Если вы настраиваете ПКС внутри табличной части, помните о правильном обращении к данным в обработчике «Перед выгрузкой»:

Пример кода для ПКС в строке ТЧ:


// Получаем данные из конкретной строки текущей выгружаемой таблицы
Значение = ОбъектКоллекции.СпецификацияНоменклатуры.Наименование;

Отличие от глобальных параметров конвертации

Не путайте параметры объекта с глобальными параметрами конвертации. Глобальные параметры задаются на отдельной вкладке в КД 2.1 и доступны во всех правилах через структуру Параметры. Они удобны для передачи настроек обмена (например, «Склад по умолчанию»), в то время как ПараметрыОбъекта уникальны для каждой конкретной выгружаемой единицы данных (документа или элемента справочника).

Таким образом, использование параметров — это мощный инструмент, позволяющий гибко управлять данными без изменения структуры конфигурации-приемника. Следуя этим правилам, мы обеспечиваем чистоту кода и стабильность процесса обмена.

← На главную