Как перенести справочники и данные из 1С:УПП 1.3 в чистую конфигурацию

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

Перенос данных между различными конфигурациями 1С — задача, с которой рано или поздно сталкивается любой разработчик. В нашем случае мы рассматриваем ситуацию, когда необходимо перенести несколько справочников из тяжеловесной УПП 1.3 в абсолютно пустую конфигурацию на платформе 8.3.12. Мы разберем по шагам несколько эффективных методов: от использования стандартных обработок до программного переноса через COM-соединение.

Метод 1. Сравнение и объединение конфигураций для переноса метаданных

Прежде чем переносить сами данные (записи в таблицах БД), нам необходимо подготовить структуру в целевой базе. Если мы просто создадим справочники вручную, велика вероятность ошибиться в типах реквизитов или их именах, что сделает автоматическую загрузку данных невозможной. Рассмотрим, как сделать это правильно через механизм сравнения.

Разберем последовательность действий:

  1. Откроем пустую конфигурацию в режиме Конфигуратор.
  2. Выберем пункт меню Конфигурация — Сравнить, объединить с конфигурацией из файла.
  3. Укажем файл конфигурации УПП (заранее выгруженный в формате .cf).
  4. В появившемся окне снимем все галочки. Это критически важно, так как нам нужна лишь "пару справочников", а не вся УПП.
  5. Найдем в дереве нужные справочники и отметим их. Проанализируем зависимости: если справочник использует специфические перечисления или другие справочники в качестве типов реквизитов, их также нужно отметить для переноса.
  6. Нажмем Выполнить.

Проанализируем ситуацию с общими модулями. Часто справочники содержат код в модуле объекта или менеджера, который обращается к общим модулям УПП. Чтобы конфигурация прошла проверку синтаксиса, нам придется либо перенести нужные модули, либо временно закомментировать вызовы функций, которые в новой базе не нужны.

Метод 2. Использование механизма Copy-Paste между Конфигураторами

Мало кто пользуется этим приемом, но он крайне эффективен для небольшого объема метаданных. Мы можем открыть два окна Конфигуратора одновременно: одно с исходной базой УПП, другое — с пустой.

Выполним следующие шаги:

  1. В дереве метаданных УПП выделим нужный справочник и нажмем Ctrl+C.
  2. Перейдем в окно пустой конфигурации, выделим корень дерева или ветку Справочники и нажмем Ctrl+V.
  3. Платформа проанализирует объект и предложит скопировать зависимые объекты. Если реквизит ссылается на объект, которого нет в целевой базе, 1С создаст "пустышку" или предложит перенести тип.

Этот метод быстрее сравнения, так как позволяет точечно переносить объекты, не дожидаясь полного сопоставления огромной конфигурации УПП с пустой базой.

Метод 3. Перенос данных с помощью обработки ВыгрузкаЗагрузкаДанныхXML

Когда структура метаданных в обеих базах стала идентичной (совпадают имена справочников, имена реквизитов и их типы), мы можем приступить к переносу самих записей. Самый простой инструмент для этого — универсальная обработка ВыгрузкаЗагрузкаДанныхXML82.epf (она корректно работает и на платформе 8.3).

Рассмотрим алгоритм работы с обработкой:

  1. Запустим УПП в режиме Предприятие и откроем обработку.
  2. На вкладке Выгрузка отметим нужные справочники.
  3. Настроим период (если нужно) и укажем путь к файлу выгрузки. Нажмем Выгрузить.
  4. Запустим пустую конфигурацию в режиме Предприятие и откроем ту же обработку.
  5. На вкладке Загрузка выберем наш файл и нажмем Загрузить.

Важный нюанс: Данная обработка переносит данные "один в один", сохраняя УникальныйИдентификатор (GUID) каждого объекта. Это позволит в будущем синхронизировать объекты без создания дублей.

Метод 4. Программный перенос через COM-соединение

Если нам не нужна полная идентичность структур или мы хотим трансформировать данные в процессе (например, объединить два поля в одно), лучше всего написать простую процедуру. Мы подключимся из новой базы к УПП и прочитаем данные напрямую.

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


Процедура ПеренестиКонтрагентовЧерезCOM()
    // Создаем соединение с базой УПП
    COMConnector = Новый COMОбъект("V83.COMConnector");
    СтрокаСоединения = "Srvr='ServerName';Ref='UPP_Base';Usr='admin';Pwd='123';";
    
    Попытка
        Соединение = COMConnector.Connect(СтрокаСоединения);
    Исключение
        Сообщить("Ошибка подключения: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;

    // Выбираем данные из УПП
    ВыборкаУПП = Соединение.Справочники.Контрагенты.Выбрать();

    Пока ВыборкаУПП.Следующий() Цикл
        // Создаем элемент в новой базе
        НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
        НовыйЭлемент.Наименование = ВыборкаУПП.Наименование;
        НовыйЭлемент.ИНН = ВыборкаУПП.ИНН;
        
        // Чтобы сохранить GUID, используем специальный метод
        СсылкаУПП = Соединение.String(ВыборкаУПП.Ссылка.УникальныйИдентификатор());
        НовыйGUID = Новый УникальныйИдентификатор(СсылкаУПП);
        
        // УстановитьСсылкуНового работает до первой записи объекта
        НовыйЭлемент.УстановитьСсылкуНового(Справочники.Контрагенты.ПолучитьСсылку(НовыйGUID));
        
        Попытка
            НовыйЭлемент.Записать();
        Исключение
            Сообщить("Не удалось записать: " + ВыборкаУПП.Наименование);
        КонецПопытки;
    КонецЦикла;
КонецПроцедуры

Этот метод хорош тем, что нам не нужно добиваться 100% схожести конфигураций. Мы можем программно сопоставить реквизит ПолноеНаименование из УПП с реквизитом Наименование в новой базе или пропустить ненужные группы элементов.

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

Если перенос планируется делать регулярно или структура данных в целевой базе сильно отличается, рекомендуется использовать конфигурацию Конвертация данных 2.0. Она позволяет создать правила обмена (XML), которые описывают логику сопоставления объектов.

Проанализируем шаги работы с КД 2.0:

  1. Выгрузим структуру метаданных УПП и пустой базы с помощью обработки MD82Exp.epf.
  2. Загрузим эти описания в базу Конвертация данных.
  3. Создадим новую конвертацию, где источником будет УПП, а приемником — наша новая база.
  4. Создадим Правила Обмена Данными (ПОД) и Правила Конвертации Объектов (ПКО). Для простой задачи можно воспользоваться "Мастером создания правил".
  5. Сохраним правила в файл xml.
  6. В базе УПП используем обработку УниверсальныйОбменДаннымиXML для выгрузки, а в новой базе — её же для загрузки.

Важные советы по сохранению ссылочной целостности

Выясним причину возможных ошибок при переносе. Основная проблема — "битые ссылки". Если справочник Номенклатура ссылается на ЕдиницыИзмерения, а вы переносите только Номенклатуру, то в новой базе в поле единицы измерения будет пусто или отобразится "Объект не найден".

Чтобы этого избежать, при использовании ВыгрузкаЗагрузкаДанныхXML обязательно оставляйте включенным флаг "Выгружать объекты по ссылкам". В этом случае система автоматически найдет все связанные элементы и включит их в файл выгрузки, что обеспечит корректность данных в целевой базе.

Рассмотрим подробнее вопрос УникальныхИдентификаторов. При любом способе переноса (кроме ручного набора текста) старайтесь сохранять исходные GUID. В 1С это "ключ" к объекту. Если вы сохраните GUID, то в будущем сможете легко связать эти базы через COM или EnterpriseData, так как система будет понимать, что "Контрагент А" в УПП и "Контрагент А" в новой базе — это один и тот же физический объект, даже если их наименования изменятся.

Таким образом, для разового переноса пары справочников с минимальными затратами оптимальным будет сочетание Copy-Paste метаданных и обработки ВыгрузкаЗагрузкаДанныхXML.

← На главную