Как при переносе данных в КД 2.1 заменить обычный элемент справочника на предопределенный?

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

При настройке правил обмена в Конвертации Данных 2.1 часто возникает задача: перенести данные из одной базы в другую так, чтобы элемент справочника из источника «превратился» в предопределенный элемент в приемнике. Стандартные механизмы поиска по наименованию или коду не всегда позволяют сделать это корректно, особенно если предопределенные элементы в конфигурации базы-приемника еще не созданы или имеют иные идентификаторы.

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

Метод передачи признака через ПараметрыОбъекта

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

Выполним реализацию по шагам:

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

// В обработчике ПКС "Перед выгрузкой"
Если Источник = Параметры.СегментЭксклюзивы Тогда
    Значение = Истина;
Иначе
    Значение = Ложь;
КонецЕсли;

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

Реализация подмены в обработчике ПослеЗагрузки

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

Рассмотрим, как именно нужно изменить объект:


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

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

Почему стоит использовать именно этот подход?

Разберем подробнее, почему именно ПослеЗагрузки является лучшим местом для такой операции:

Рекомендации и предостережения

При работе с предопределенными данными всегда помните о следующих моментах:

Избегайте жесткого кодирования: Если база-приемник может отличаться структурой, добавьте проверки на наличие предопределенного элемента. Можно использовать метод НайтиПоНаименованию или проверить наличие свойства через Метаданные, чтобы избежать ошибок вида Поле объекта не обнаружено.

Риск дублирования: Будьте внимательны при настройке правил поиска (ПКС с флагом Поиск). Если правила поиска настроены некорректно, система может попытаться создать дубль предопределенного элемента. Всегда используйте актуальные версии обработок ВыгрузкаЗагрузкаДанныхXML (рекомендуется версия 2.1.8 и выше).

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

← На главную