При переходе с конфигурации 1С:Торговля и Склад 7.7 на 1С:Управление торговлей 11 (8.3) часто возникает задача переноса доработанных реквизитов справочников (например, Контрагенты) в механизмы дополнительных реквизитов и сведений Библиотеки Стандартных Подсистем (БСП) объекта-приемника (справочник Партнеры или Контрагенты).
В конфигурациях на платформе 8.3 дополнительные реквизиты хранятся в табличной части объекта (обычно с именем ДополнительныеРеквизиты), состоящей из колонок Свойство (ссылка на План видов характеристик) и Значение. Разберем основные варианты реализации этой задачи в правилах конвертации данных (КД 2.1).
Рассмотрим порядок настройки Правила конвертации группы свойств (ПКГС) для формирования строк табличной части объекта-приемника во время выгрузки из 1С 7.7.
Контрагенты -> Партнеры) добавим ПКГС для табличной части ДополнительныеРеквизиты. Поле источника оставляем пустым, а в качестве приемника указываем ДополнительныеРеквизиты.Свойство и Значение с пустыми источниками. Для ПКС Свойство необходимо указывать правило конвертации (ПКО), отвечающее за выгрузку Плана видов характеристик ДополнительныеРеквизитыИСвойства.ПередОбработкой группы свойств (ПКГС) сформируем программно таблицу значений КоллекцияОбъектов, которая передаст выгружаемые данные.Проанализируем пример кода для обработчика ПередОбработкой в ПКГС на стороне 1С 7.7:
КоллекцияОбъектов = СоздатьОбъект("ТаблицаЗначений");
КоллекцияОбъектов.НоваяКолонка("Свойство");
КоллекцияОбъектов.НоваяКолонка("Значение");
// Проверяем наличие заполненого реквизита в 7.7
Если ПустоеЗначение(Источник.ПРМЗ) = 0 Тогда
КоллекцияОбъектов.НоваяСтрока();
// В поле Свойство передаем наименование ПВХ для сопоставления в 8.3
КоллекцияОбъектов.Свойство = "ПРМЗ";
// В поле Значение передаем содержимое реквизита источника
КоллекцияОбъектов.Значение = Источник.ПРМЗ;
КонецЕсли;
Разберем важные настройки правил для данного подхода:
1. Правило для ПВХ: Должно быть создано отдельное ПКО для ПВХ ДополнительныеРеквизитыИСвойства (источник пустой, приемник — ПВХ). В ПКС Наименование выставляется флаг Поиск.
2. Сопоставление имён: Наименование, передаваемое в КоллекцияОбъектов.Свойство, должно строго совпадать с наименованием элемента ПВХ в базе-приемнике. Если в УТ 11 элемент имеет представление с суффиксом (например, ПРМЗ (Общие)), передавать нужно точное имя элемента из справочника-приемника.
Если сопоставление табличной части на стороне 7.7 выбывает сложности из-за различий в типах данных, можно применить передачу значений через параметры объекта с последующим заполнением дополнительных реквизитов в 1С 8.3.
В обработчик ПослеВыгрузки ПКО справочника в 7.7 добавим формирование узла с параметрами:
УзелСвойство = СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелСвойство, "Имя", "ДопРеквизит_ПРМЗ");
УстановитьАтрибут(УзелСвойство, "Тип", "Строка");
ПодЗаписатьЭлемент(УзелСвойство, "Значение", Источник.ПРМЗ);
ДобавитьПодчиненный(Приемник, УзелСвойство);
Затем в обработчике ПослеЗагрузки ПКО на стороне приёмника (1С 8.3) прочитаем переданный параметр и заполним значение табличной части объекта:
ЗначениеПараметра = Неопределено;
Если ПараметрыОбъекта.Свойство("ДопРеквизит_ПРМЗ", ЗначениеПараметра) И ЗначениеЗаполнено(ЗначениеПараметра) Тогда
// Находим элемент ПВХ в приемнике
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСвойства.НайтиПоНаименованию("ПРМЗ");
Если ЗначениеЗаполнено(СвойствоСсылка) Тогда
// Ищем существующую строку или создаем новую в ТЧ объекта
Отбор = Новый Структура("Свойство", СвойствоСсылка);
НайденныеСтроки = Объект.ДополнительныеРеквизиты.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() > 0 Тогда
СтрокаТЧ = НайденныеСтроки[0];
Иначе
СтрокаТЧ = Объект.ДополнительныеРеквизиты.Добавить();
СтрокаТЧ.Свойство = СвойствоСсылка;
КонецЕсли;
СтрокаТЧ.Значение = ЗначениеПараметра;
КонецЕсли;
КонецЕсли;
При переносе данных в дополнительные реквизиты конфигураций 8.3 обратим внимание на следующие моменты:
Партнеры). Если реквизит записан в ТЧ объекта, но не включен в набор свойств, он не отобразится в интерфейсе формы.Дополнительное значение (выбор из списка), передаваемое значение должно являться ссылкой на элемент справочника ЗначенияСвойствОбъектов, а не простой строкой.