Как перенести строковый реквизит из 1С 7.7 в реквизит-ссылку справочника в УТ 11 через Конвертацию Данных 2.1

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

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

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

Шаг 1. Настройка ПКО для справочника-приемника «Марки»

Так как в источнике (1С 7.7) отдельного справочника марок нет, а в приемнике (УТ 11) элемент должен быть найден или создан, создадим специальное правило конвертации объектов:

  1. В Конвертации Данных 2.1 создаем новое ПКО.
  2. Указываем Объект-источник: не заполняем (пусто).
  3. Указываем Объект-приемник: СправочникСсылка.Марки.
  4. Снимаем флаг «Поиск по внутреннему идентификатору», так как идентификаторов 7.7 для данного справочника не существует.
  5. В табличной части ПКС создаем правило для свойства Наименование (Источник — пусто, Приемник — Наименование) и устанавливаем у него флаг «Поиск».

Шаг 2. Настройка ПКС в ПКО «Номенклатура»

Теперь перейдем в ПКО Номенклатура и настроим передачу строки КодПоставщика в реквизит Марка:

  1. Добавляем ПКС для реквизита Марка.
  2. Указываем Источник: пусто (или КодПоставщика).
  3. Указываем Приемник: Марка.
  4. В качестве Правила (ПКО) выбираем ранее созданное правило для справочника Марки.
  5. Разберем написание обработчика «Перед выгрузкой» для данного ПКС.

Важный нюанс синтаксиса 1С 7.7: В платформе 7.7 отсутствует объект Структура и конструктор Новый. Формирование передаваемых данных на стороне 7.7 выполняется через объект СписокЗначений или прямое присвоение строкового значения переменной Значение с обрезанием концевых пробелов методом СокрЛП().

Рассмотрим два корректных варианта кода обработчика «Перед выгрузкой» в ПКС:

Вариант A (присвоение через переменную Значение):


Значение = СокрЛП(Источник.КодПоставщика);
Если ПустаяСтрока(Значение) = 1 Тогда
    Отказ = 1;
КонецЕсли;

Вариант Б (передача через ИсходящиеДанные):


ИсходящиеДанные = СоздатьОбъект("СписокЗначений");
ИсходящиеДанные.ДобавитьЗначение(СокрЛП(Источник.КодПоставщика), "Наименование");

Причина ошибки «Функция не обнаружена (ПКС_ПередВыгрузкой_...)»

Проанализируем частую проблему при работе с выгрузкой из 1С 7.7. При запуск обработки выгрузки платформа может выдать ошибку:

Функция не обнаружена (ПКС_ПередВыгрузкой_Номенклатура_Марка_...)

Выясним причину: В отличие от 1С 8, где алгоритмы выгрузки могут исполняться динамически, обработка выгрузки из 7.7 (V77EXP.ERT) содержит компилируемый модуль. При изменении или добавлении кода в обработчиках КД 2.1 генерирует новый текст модуля выгрузки.

Решение: После внесения любых изменений в обработчики событий правил конвертации необходимо заново скопировать сгенерированный текст модуля из Конвертации Данных и вставить его в модуль формы/объекта обработки выгрузки V77EXP.ERT в Конфигураторе 7.7 (либо перегрузить правила с автоматической заменой модуля обработки).

Причина ошибки запроса при загрузке данных в УТ 11

При загрузке данных в 1С 8.3 УТ 11 может возникнуть ошибка следующего вида:

Ошибка при вызове метода контекста (Выполнить): Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ...

Выясним причину: При поиске существующего объекта универсальная обработка загрузки формирует динамический запрос к базе приемника. Ошибка возникает в том случае, если в ПКО случайно установлен флажок «Поиск» у реквизитов с типом Строка неограниченной длины (например, «Описание», «Комментарий») или у сложного составного типа/табличной части (например, «Дополнительные реквизиты»). База данных SQL не позволяет выполнять прямое сравнение на равенство в секции ГДЕ для неограниченных строк.

Решение: Проверим все ПКС в ПКО Номенклатура и ПКО Марки. Убедимся, что флаг «Поиск» стоит исключительно на индексируемых полях ограниченной длины (например, Код, Артикул, Наименование).

Итоги

Для успешного переноса строки из 1С 7.7 в объект-ссылку 1С 8.3 требуется:

  1. Настроить ПКО справочника-приемника без поиска по GUID и с поиском по реквизиту ограниченной длины.
  2. Использовать синтаксис 7.7 (СокрЛП, СоздатьОбъект("СписокЗначений")) в обработчиках.
  3. Снять флаги «Поиск» с полей неограниченной длины.
  4. Обновлять модуль обработки V77EXP.ERT после любых изменений в коде обработчиков.
← На главную