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