Как перенести подчиненный справочник между базами данных 1С 7.7?

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

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

Понимание проблемы иерархии данных

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

Для успешного переноса необходимо выполнить два условия:

  1. Сначала должны быть созданы все объекты-владельцы («Филиалы»).
  2. После этого должны быть созданы зависимые объекты («Контрагенты») с установкой ссылки на владельца.

Метод 1: Использование «Конвертации данных»

Наиболее профессиональным способом решения данной задачи является использование конфигурации «Конвертация данных». Этот инструмент позволяет описать правила обмена, которые гарантированно учитывают все связи между справочниками.

Рассмотрим порядок действий при работе с Конвертацией данных:

  1. Создайте правила обмена, указав в них соответствие объектов метаданных между базами.
  2. Настройте правила выгрузки для справочника «Филиалы».
  3. Для справочника «Контрагенты» настройте правило таким образом, чтобы оно использовало «Владельца» как обязательный реквизит поиска.
  4. При выгрузке данных система сформирует XML-файл, в котором будет прописана вся иерархия. При загрузке в новую базу 1С корректно восстановит связи, так как будет опираться на уникальные идентификаторы (ID) или выбранные ключи поиска (код или наименование).

Метод 2: Применение специализированных обработок

Если базы абсолютно идентичны, вы можете воспользоваться уже проверенными сообществом обработками, которые лучше справляются с иерархией, чем базовые инструменты. Рекомендуем обратить внимание на UNIVERSAM.ERT.

Почему стоит выбрать UNIVERSAM.ERT:

Метод 3: Программный перенос через XBase

Если вы хотите полностью контролировать процесс, мы можем написать небольшой скрипт на встроенном языке 1С. Это самый надежный способ, если нужно гарантированно сохранить все связи. Разберем алгоритм такого переноса:

Для начала создадим объект СправочникОбъект и используем метод Записать(). Важно правильно определить владельца объекта.


Процедура ПеренестиДанные()
    СпрИсточник = СоздатьОбъект("Справочник.Контрагенты");
    СпрПриемник = СоздатьОбъект("Справочник.Контрагенты");
    
    СпрИсточник.ВыбратьЭлементы();
    Пока СпрИсточник.ПолучитьЭлемент() = 1 Цикл
        Если СпрИсточник.ЭтоГруппа() = 0 Тогда
            СпрПриемник.ИспользоватьВладельца(СпрИсточник.Владелец);
            СпрПриемник.Новый();
            СпрПриемник.Наименование = СпрИсточник.Наименование;
            СпрПриемник.Код = СпрИсточник.Код;
            // Перенос остальных реквизитов
            СпрПриемник.Записать();
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

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

Рекомендации по проверке результата

После завершения процесса переноса обязательно выполните следующие действия:

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

Использование вышеуказанных методов позволит вам избежать потерь данных и гарантирует, что список контрагентов будет отображаться в филиалах так же, как в исходной базе данных.

← На главную