Как перенести реквизиты из 1С 7.7 в дополнительные реквизиты УТ 11 (8.3) через Конвертацию данных 2.1?

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

При переходе с конфигурации 1С:Торговля и Склад 7.7 на 1С:Управление торговлей 11 (8.3) часто возникает задача переноса доработанных реквизитов справочников (например, Контрагенты) в механизмы дополнительных реквизитов и сведений Библиотеки Стандартных Подсистем (БСП) объекта-приемника (справочник Партнеры или Контрагенты).

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

Вариант 1. Заполнение коллекций табличной части через ПКГС (Рекомендуемый)

Рассмотрим порядок настройки Правила конвертации группы свойств (ПКГС) для формирования строк табличной части объекта-приемника во время выгрузки из 1С 7.7.

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

Проанализируем пример кода для обработчика ПередОбработкой в ПКГС на стороне 1С 7.7:


КоллекцияОбъектов = СоздатьОбъект("ТаблицаЗначений");
КоллекцияОбъектов.НоваяКолонка("Свойство");
КоллекцияОбъектов.НоваяКолонка("Значение");

// Проверяем наличие заполненого реквизита в 7.7
Если ПустоеЗначение(Источник.ПРМЗ) = 0 Тогда
    КоллекцияОбъектов.НоваяСтрока();
    
    // В поле Свойство передаем наименование ПВХ для сопоставления в 8.3
    КоллекцияОбъектов.Свойство = "ПРМЗ"; 
    
    // В поле Значение передаем содержимое реквизита источника
    КоллекцияОбъектов.Значение = Источник.ПРМЗ;
КонецЕсли;

Разберем важные настройки правил для данного подхода:

1. Правило для ПВХ: Должно быть создано отдельное ПКО для ПВХ ДополнительныеРеквизитыИСвойства (источник пустой, приемник — ПВХ). В ПКС Наименование выставляется флаг Поиск.

2. Сопоставление имён: Наименование, передаваемое в КоллекцияОбъектов.Свойство, должно строго совпадать с наименованием элемента ПВХ в базе-приемнике. Если в УТ 11 элемент имеет представление с суффиксом (например, ПРМЗ (Общие)), передавать нужно точное имя элемента из справочника-приемника.

Вариант 2. Передача значений через параметры объекта и обработка при загрузке

Если сопоставление табличной части на стороне 7.7 выбывает сложности из-за различий в типах данных, можно применить передачу значений через параметры объекта с последующим заполнением дополнительных реквизитов в 1С 8.3.

В обработчик ПослеВыгрузки ПКО справочника в 7.7 добавим формирование узла с параметрами:


УзелСвойство = СоздатьУзел("ЗначениеПараметра");
УстановитьАтрибут(УзелСвойство, "Имя", "ДопРеквизит_ПРМЗ");
УстановитьАтрибут(УзелСвойство, "Тип", "Строка");
ПодЗаписатьЭлемент(УзелСвойство, "Значение", Источник.ПРМЗ);
ДобавитьПодчиненный(Приемник, УзелСвойство);

Затем в обработчике ПослеЗагрузки ПКО на стороне приёмника (1С 8.3) прочитаем переданный параметр и заполним значение табличной части объекта:


ЗначениеПараметра = Неопределено;
Если ПараметрыОбъекта.Свойство("ДопРеквизит_ПРМЗ", ЗначениеПараметра) И ЗначениеЗаполнено(ЗначениеПараметра) Тогда
    
    // Находим элемент ПВХ в приемнике
    СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСвойства.НайтиПоНаименованию("ПРМЗ");
    
    Если ЗначениеЗаполнено(СвойствоСсылка) Тогда
        // Ищем существующую строку или создаем новую в ТЧ объекта
        Отбор = Новый Структура("Свойство", СвойствоСсылка);
        НайденныеСтроки = Объект.ДополнительныеРеквизиты.НайтиСтроки(Отбор);
        
        Если НайденныеСтроки.Количество() > 0 Тогда
            СтрокаТЧ = НайденныеСтроки[0];
        Иначе
            СтрокаТЧ = Объект.ДополнительныеРеквизиты.Добавить();
            СтрокаТЧ.Свойство = СвойствоСсылка;
        КонецЕсли;
        
        СтрокаТЧ.Значение = ЗначениеПараметра;
    КонецЕсли;
    
КонецЕсли;

Особенности и технические нюансы работы с БСП

При переносе данных в дополнительные реквизиты конфигураций 8.3 обратим внимание на следующие моменты:

  1. Наборы свойств: Убедимся, что созданный дополнительный реквизит в УТ 11 входит в соответствующий Набор дополнительных реквизитов и сведений (например, набор для справочника Партнеры). Если реквизит записан в ТЧ объекта, но не включен в набор свойств, он не отобразится в интерфейсе формы.
  2. Типы значений: Если дополнительный реквизит имеет тип Дополнительное значение (выбор из списка), передаваемое значение должно являться ссылкой на элемент справочника ЗначенияСвойствОбъектов, а не простой строкой.
← На главную