Как избежать задвоения справочников при переносе данных из 1С 7.7 в 1С 8.3 через Конвертацию данных?

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

При настройке правил обмена в конфигурации «Конвертация данных 2.1» для переноса информации из 1С 7.7 в 1С 8.3 разработчики часто сталкиваются со ситуацией, когда при повторной загрузке данных элементы и группы справочников задваиваются. Проанализируем причины возникновения этой проблемы и разберем по шагам, как правильно настроить поиск объектов и конвертацию типов.

Почему происходит задвоение иерархических справочников?

Выясним главные причины дублирования элементов и иерархических групп при переносе из платформы 7.7 в 8.3:

  1. Флаг поиска на реквизите «Родитель»: В Конвертации Данных 2.1 установленный флаг «Поиск» у свойства Родитель вызывает рекурсивный поиск. При загрузке каждого подчиненного элемента обработка сначала пытается найти или создать его родительскую группу. Если группа еще не найдена в базе-приемнике, система создает новую группу-дубликат, не сопоставляя ее с уже имеющимися.
  2. Отсутствие встроенных GUID в 1С 7.7: В отличие от 1С 8.x, в платформе 7.7 нет типа УникальныйИдентификатор. Внешняя обработка выгрузки V8Exch77.ert генерирует текстовый идентификатор на основе внутреннего ID объекта 7.7. Поиск по идентификатору при выгрузке из 7.7 часто выключен или работает иначе, поэтому сопоставление полностью зависит от полей поиска.
  3. Концевые пробелы в строковых полях: В файловых базах 1С 7.7 (DBF) текстовые поля дополняются пробелами до максимальной длины. Из-за этого наименование "Товар " из 7.7 при загрузке в 8.3 не совпадает с наименованием "Товар", создавая дубликат.

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

Рассмотрим, как правильно настроить правила конвертации свойств (ПКС) для иерархического справочника, чтобы исключить создание дублей:

  1. Откроем Правило Конвертации Объектов (ПКО) для проблемного справочника.
  2. В таблице правил конвертации свойств найдём реквизит Родитель и принудительно снимем флаг «Поиск».
  3. Убедимся, что флаги «Поиск» установлены только для тех реквизитов, которые однозначно идентифицируют объект (например, Наименование, Код или ЭтоГруппа).

Если необходимо гарантировать совпадение наименований без учета лишних концевых пробелов, перейдем в ПКС Наименование и в обработчике ПередВыгрузкой укажем следующий код:

Значение = СокрЛП(Источник.Наименование);

Снятие поиска с Родитель позволяет механизму загрузки сначала найти сам объект или группу по ключевым полям, а затем корректно установить связь с родительской группой в иерархии.

Перенос данных из типа «Строка» в «СправочникСсылка»

Разберем вторую частую задачу: перенос текстовых данных из источника (1С 7.7) в ссылочный реквизит справочника базы-приемника (1С 8.3).

Настроим алгоритм перехода от простой строки к объекту справочника по шагам:

  1. Создание ПКО для справочника-приемника:
    • Тип источника оставляем пустым (так как источником является строка).
    • Тип приемника выбираем нужный справочник (например, СправочникСсылка.ФизическиеЛица).
    • Добавляем ПКС для поля Наименование, указываем для него тип приемника Строка и взводим флаг «Поиск».
    • В обработчике ПередВыгрузкой данного ПКС пишем: Значение = Источник;
  2. Настройка ПКС в основном правиле:
    • В правиле конвертации документа или справочника выбираем реквизит (например, Физлицо).
    • Указываем созданное ранее ПКО в качестве правила конвертации.
    • В обработчике ПередВыгрузкой формируем строковое значение, которое будет передано для поиска и создания объекта: Значение = Источник.Наименование;

Важно: Проверьте правильность выбора метаданных приемника. Если в базе 8.3 присутствуют несколько однотипных справочников (например, ФизическиеЛица и Сотрудники), ошибочный выбор не того справочника в поле «Приемник» приведет к тому, что реквизит при загрузке останется незаполненным.

← На главную