Как перенести дополнительные реквизиты справочника из УПП в БП 3.0 с помощью КД 2.0?

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

Перенос данных между конфигурациями, где ДополнительныеРеквизиты реализованы по-разному, — это распространенная задача при интеграции старых систем (например, УПП) и современных конфигураций на базе БСП (как БП 3.0). В старых системах доп. реквизиты часто являются обычными полями объекта, тогда как в современных — это строки в табличной части.

Понимание причины ошибки

Основная сложность заключается в том, что стандартная выгрузка КД 2.0 пытается обратиться к реквизиту напрямую. Если в объекте-источнике (УПП) нет табличной части ДополнительныеРеквизиты, система выдает ошибку Поле объекта не обнаружено. Чтобы решить эту задачу, мы будем использовать механизм ВходящиеДанные, который позволяет динамически формировать структуру данных непосредственно перед выгрузкой объекта.

Разбор решения: пошаговое руководство

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

  1. Подготовка данных в обработчике ПередВыгрузкой справочника.
  2. Настройка ПКО для табличной части.
  3. Настройка правил для свойств и значений.

Шаг 1: Формирование входящих данных

В правиле конвертации объекта (ПКО) для нужного справочника (например, Номенклатура) в обработчике ПередВыгрузкой мы программно сформируем коллекцию, которую КД 2.0 воспримет как нашу будущую табличную часть. Важно добавить проверку на ЭтоГруппа, чтобы не пытаться перенести данные для групп, если это не требуется.


Если Не Источник.ЭтоГруппа Тогда
    Если ТипЗнч(ВходящиеДанные) <> Тип("Структура") Тогда
        ВходящиеДанные = Новый Структура;
    КонецЕсли;

    ДополнительныеРеквизиты = Новый ТаблицаЗначений;
    ДополнительныеРеквизиты.Колонки.Добавить("Значение");
    ДополнительныеРеквизиты.Колонки.Добавить("Свойство");
    ДополнительныеРеквизиты.Колонки.Добавить("ТекстоваяСтрока");

    // Добавляем реквизиты
    НоваяСтрока = ДополнительныеРеквизиты.Добавить();
    НоваяСтрока.Значение = Источник.Код;
    НоваяСтрока.Свойство = "УточняющийКод";
    НоваяСтрока.ТекстоваяСтрока = "";

    НоваяСтрока = ДополнительныеРеквизиты.Добавить();
    НоваяСтрока.Значение = Источник.Наименование;
    НоваяСтрока.Свойство = "УточняющееНаименование";
    НоваяСтрока.ТекстоваяСтрока = "";

    ВходящиеДанные.Вставить("ДополнительныеРеквизиты", ДополнительныеРеквизиты);
КонецЕсли;

Шаг 2: Настройка правил выгрузки для табличной части

После того как мы подготовили ВходящиеДанные, необходимо настроить само правило конвертации группы свойств (ПКГС) для ДополнительныеРеквизиты. В настройках этого правила обязательно установите флажок Получать из входящих данных. Это укажет КД 2.0 не искать реквизит в объекте-источнике, а взять подготовленную нами таблицу значений из структуры ВходящиеДанные.

Шаг 3: Конвертация свойств и значений

Теперь рассмотрим, как настроить ПКО для колонок этой таблицы:

Советы по отладке

Если вы сталкиваетесь с ошибками при выгрузке, попробуйте следующие приемы:

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

← На главную