Как установить реквизит справочника из числового значения источника при переносе из 1С 7.7 в 1С 8.х

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При перегрузке данных из 1С 7.7 в конфигурацию на платформе 1С 8.х (8.2 / 8.3) часто возникает ситуация, когда структура данных источника и приемника существенно отличается. Например, в источнике 7.7 у справочника есть числовой реквизит (код категории, тип ТС, числовой флаг), а в приемнике 8.х ему соответствует ссылочный реквизит, указывающий на другой справочник (например, предопределенные элементы или классификатор).

Рассмотрим подробнее доступные механизмы в конфигурации Конвертация данных 2.1, которые позволяют установить нужный элемент справочника-приемника в зависимости от числового значения из источника.

Вариант 1. Использование переменной Выражение в обработчике «Перед выгрузкой» ПКС

Если конфигурация-приемник реализована на платформе 1С 8.х и целевое значение является предопределенным элементом справочника, самым простым и лаконичным решением будет использование специальной служебной переменной Выражение в Правиле конвертации свойств (ПКС).

Разберем по шагам, как это настроить:

  1. Откроем нужный ПКС для ссылочного реквизита справочника-приемника.
  2. Перейдем на вкладку Обработчики событий и выберем событие «Перед выгрузкой».
  3. Запишем строковое выражение на языке 1С 8.х, которое возвращает ссылку на элемент:

Если Источник.РеквизитЧисло = 1 Тогда
    Выражение = "Справочники.Справочник2.ПредопределенныйЭлемент1";
ИначеЕсли Источник.РеквизитЧисло = 2 Тогда
    Выражение = "Справочники.Справочник2.ПредопределенныйЭлемент2";
КонецЕсли;

Вычисление выражения происходит на стороне базы-приемника при загрузке с помощью системного метода Выполнить(). Обратите внимание: когда переменная Выражение задана в теле обработчика, стандартное вычисление и выгрузка текущего свойства из 7.7 прекращаются, а данные реквизита источника в XML-файл не записываются.

Вариант 2. Заполнение реквизита в обработчике «После загрузки» ПКО на стороне 8.х

Выполнение логики подстановки на стороне базы-приемника считается наиболее устойчивым и надежным подходом. Если числовое значение из 7.7 также переносится в базу-приемник (или переносится во служебный реквизит объекта), то подстановку ссылочного значения можно выполнить в Правиле конвертации объектов (ПКО) в событии «После загрузки».

Проанализируем пример кода для базы-приемника:


Если Объект.ЧисловойРеквизит = 1 Тогда
    Объект.РеквизитСправочник2 = Справочники.Справочник2.ПредопределенныйЭлемент1;
ИначеЕсли Объект.ЧисловойРеквизит = 2 Тогда
    Объект.РеквизитСправочник2 = Справочники.Справочник2.ПредопределенныйЭлемент2;
КонецЕсли;

Этот способ гарантирует, что если структура предопределенных элементов или алгоритм поиска в 8.х изменятся, вам не придется пересобирать правила выгрузки на стороне 1С 7.7.

Вариант 3. Передача значений через ПараметрыОбъекта

Если числовой реквизит источника не сохраняется в объекте-приемнике, но его значение требуется только для определения нужного элемента Справочник2, можно использовать механизм передачи параметров объекта.

Разберем по шагам работу с этим механизмом:

  1. На стороне 7.7 в ПКО объекта в обработчике «При выгрузке» формируем параметр:

Параметры.Вставить("КодКатегории", Источник.ЧисловойРеквизит);

  1. На стороне 8.х в ПКО объекта в обработчике «После загрузки» считываем параметр из соответствия ПараметрыОбъекта и устанавливаем нужную ссылку:

КодКатегории = 0;
Если ПараметрыОбъекта.Свойство("КодКатегории", КодКатегории) Тогда
    Если КодКатегории = 1 Тогда
        Объект.РеквизитСправочник2 = Справочники.Справочник2.НайтиПоНаименованию("Категория 1");
    ИначеЕсли КодКатегории = 2 Тогда
        Объект.РеквизитСправочник2 = Справочники.Справочник2.НайтиПоКоду("000000002");
    КонецЕсли;
КонецЕсли;

Вариант 4. Передача структуры поиска через ИсходящиеДанные

Выясним еще один вариант, когда требуется найти или создать элемент Справочник2 по ключам поиска (код или наименование), сгенерированным на этапе выгрузки из 7.7.

Для этого используется обработчик ПКС «Перед выгрузкой» и переключатель «Получить из входящих данных»:

  1. Создаем ПКО для Справочник1, в нем добавляем ПКС для реквизита РеквизитСправочник2. Указываем для этого ПКС отдельное правило ПКО (из 7.7 в Справочник2).
  2. В ПКО для Справочник2 у полей поиска (например, Наименование или Код) отмечаем флаг «Получить из входящих данных».
  3. В ПКС для РеквизитСправочник2 в событии «Перед выгрузкой» на стороне 7.7 формируем объект СписокЗначений:

ИсходящиеДанные = СоздатьОбъект("СписокЗначений");

Если Источник.ЧисловойРеквизит = 1 Тогда
    ИсходящиеДанные.ДобавитьЗначение("Грузовые ТС", "Наименование");
ИначеЕсли Источник.ЧисловойРеквизит = 2 Тогда
    ИсходящиеДанные.ДобавитьЗначение("Легковые ТС", "Наименование");
КонецЕсли;

Значение = 1; // Указываем, что свойство заполнено

Важные нюансы при работе с ИсходящиеДанные в 1С 7.7:

← На главную