Перенос данных между конфигурациями, где ДополнительныеРеквизиты реализованы по-разному, — это распространенная задача при интеграции старых систем (например, УПП) и современных конфигураций на базе БСП (как БП 3.0). В старых системах доп. реквизиты часто являются обычными полями объекта, тогда как в современных — это строки в табличной части.
Основная сложность заключается в том, что стандартная выгрузка КД 2.0 пытается обратиться к реквизиту напрямую. Если в объекте-источнике (УПП) нет табличной части ДополнительныеРеквизиты, система выдает ошибку Поле объекта не обнаружено. Чтобы решить эту задачу, мы будем использовать механизм ВходящиеДанные, который позволяет динамически формировать структуру данных непосредственно перед выгрузкой объекта.
Для корректного переноса данных мы должны «подменить» источник данных для табличной части. Процесс состоит из нескольких этапов:
ПередВыгрузкой справочника.В правиле конвертации объекта (ПКО) для нужного справочника (например, Номенклатура) в обработчике ПередВыгрузкой мы программно сформируем коллекцию, которую КД 2.0 воспримет как нашу будущую табличную часть. Важно добавить проверку на ЭтоГруппа, чтобы не пытаться перенести данные для групп, если это не требуется.
Если Не Источник.ЭтоГруппа Тогда
Если ТипЗнч(ВходящиеДанные) <> Тип("Структура") Тогда
ВходящиеДанные = Новый Структура;
КонецЕсли;
ДополнительныеРеквизиты = Новый ТаблицаЗначений;
ДополнительныеРеквизиты.Колонки.Добавить("Значение");
ДополнительныеРеквизиты.Колонки.Добавить("Свойство");
ДополнительныеРеквизиты.Колонки.Добавить("ТекстоваяСтрока");
// Добавляем реквизиты
НоваяСтрока = ДополнительныеРеквизиты.Добавить();
НоваяСтрока.Значение = Источник.Код;
НоваяСтрока.Свойство = "УточняющийКод";
НоваяСтрока.ТекстоваяСтрока = "";
НоваяСтрока = ДополнительныеРеквизиты.Добавить();
НоваяСтрока.Значение = Источник.Наименование;
НоваяСтрока.Свойство = "УточняющееНаименование";
НоваяСтрока.ТекстоваяСтрока = "";
ВходящиеДанные.Вставить("ДополнительныеРеквизиты", ДополнительныеРеквизиты);
КонецЕсли;
После того как мы подготовили ВходящиеДанные, необходимо настроить само правило конвертации группы свойств (ПКГС) для ДополнительныеРеквизиты. В настройках этого правила обязательно установите флажок Получать из входящих данных. Это укажет КД 2.0 не искать реквизит в объекте-источнике, а взять подготовленную нами таблицу значений из структуры ВходящиеДанные.
Теперь рассмотрим, как настроить ПКО для колонок этой таблицы:
ПКО с поиском по наименованию (поле Заголовок или Наименование в ПВХ). Это позволит системе найти нужный ДополнительныйРеквизит в базе-приемнике.КД 2.0 успешно перенесет их автоматически. Если значение — это ссылка на справочник, создайте соответствующее ПКО. Если тип значения зависит от самого свойства, используйте обработчик ПередВыгрузкой в правиле конвертации значения для выбора подходящего ПКО.Если вы сталкиваетесь с ошибками при выгрузке, попробуйте следующие приемы:
БСП: Свойство, Значение, ТекстоваяСтрока.ПКГС, временно отключите выгрузку этой табличной части. Убедитесь, что сам справочник выгружается корректно.ВходящихДанных перед присвоением, чтобы избежать ошибок типизации.Используя этот подход, вы сможете гибко переносить любые данные из «плоских» реквизитов в табличные части современных конфигураций, сохраняя целостность и структуру БСП.