При переносе данных между устаревшими конфигурациями на обычных формах (например, Управление производственным предприятием 1.3) и современными конфигурациями на базе Библиотеки стандартных подсистем (например, Бухгалтерия предприятия 3.0) часто возникает проблема несовпадения структур данных. В УПП 1.3 контактная информация контрагентов хранится в независимом регистре сведений КонтактнаяИнформация, тогда как в БП 3.0 она размещена непосредственно в табличной части КонтактнаяИнформация справочников (Контрагенты, Организации, ФизическиеЛица).
Разберем основные причины сложностей, с которыми сталкиваются разработчики, и подробно рассмотрим правильные способы переноса данных.
Проанализируем ситуацию: попытки перенести данные во временный регистр приемника (например, УдалитьКонтактнаяИнформация) и запустить стандартные процедуры обновления вроде ПереносКИПриОбновленииС20() часто терпят неудачу по следующим причинам:
ВерсииПодсистем. Если целевая база уже работает на актуальном релизе, процедура просто прерывает выполнение без каких-либо действий.Удалить постепенно полностью удаляются разработчиками из метаданных, что приводит к синтаксическим ошибкам при обращении к ним.Для корректного решения задачи рассмотрим два надежных подхода: перенос напрямую через правила «Конвертации данных 2.0» и программную обработку с использованием штатных методов БСП.
Это наиболее чистый и архитектурно правильный способ, так как данные сразу ложатся в табличную часть приемника без использования промежуточных таблиц.
Разберем по шагам настройку правила конвертации объектов (ПКО):
Контрагенты создадим правило конвертации группы свойств (ПКГС) для табличной части КонтактнаяИнформация.ПередВыгрузкой для ПКГС табличной части сформируем таблицу значений запросом к регистру сведений источника. Посмотрим на пример кода:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КИ.Тип КАК Тип,
| КИ.Вид КАК Вид,
| КИ.Представление КАК Представление,
| КИ.Поле1,
| КИ.Поле2,
| КИ.Поле3
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КИ
|ГДЕ
| КИ.Объект = &Объект";
Запрос.УстановитьПараметр("Объект", Источник);
КоллекцияОбъектов = Запрос.Выполнить().Выгрузить();
Рассмотрим подробнее важный нюанс сопоставления видов контактной информации. В БП 3.0 справочник ВидыКонтактнойИнформации имеет строгую иерархию по типам владельцев (предопределенная группа «Для контрагентов»). Если синхронизировать виды контактной информации исключительно по наименованию, они могут создаться в корне справочника вне нужной группы, из-за чего форма контрагента в приемнике их просто не отобразит. Настраивайте синхронизацию по полям ИмяПредопределенныхДанных либо по связке Наименование и Родитель.
Если контактная информация уже была перенесена во внешнюю таблицу или читается напрямую из базы-источника (например, через COM-соединение), не следует записывать строки в табличную часть объекта напрямую через метод Добавить(). В БП 3.0 реквизит ЗначенияПолей хранит сложную структуру (в формате JSON или XML), содержащую коды ФИАС/ГАР. При обычной текстовой вставке форма редактирования адреса не сможет разложить контакт по отдельным полям (город, улица, дом).
Выясним причину, почему лучше использовать программный интерфейс БСП: методы подсистемы самостоятельно нормализуют структуру и корректно формируют служебные поля.
Разберем по шагам заполнение табличной части через экспортный метод общего модуля:
ПолучитьОбъект().ВидыКонтактнойИнформации).УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию().Посмотрим на пример обработки:
ОбъектКонтрагент = ВыбраннаяСсылка.ПолучитьОбъект();
ВидКИ = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
ТипКИ = Перечисления.ТипыКонтактнойИнформации.Адрес;
СтрокаАдреса = "г. Москва, ул. Ленина, д. 10";
// Запись контактной информации средствами БСП
УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(
ОбъектКонтрагент,
СтрокаАдреса,
ВидКИ,
ТипКИ
);
ОбъектКонтрагент.Записать();
Данный подход избавляет от необходимости вручную формировать структурированные строки формата XML или JSON в поле ЗначенияПолей. Текстовое представление сразу запишется в карточку объекта, а дальнейшую привязку к актуальному классификатору адресов можно выполнить штатной регламентной обработкой БСП по проверке адресов уже в рабочей базе.