Довольно часто в практике возникает задача переноса данных за небольшой период (например, за один рабочий день) из одной базы 1С в другую. Ситуация усложняется, когда базы имеют разные версии конфигурации. Например, источник — это нетиповая 1С:Управление торговлей релиза 10.3.11, а приемник — обновленная база релиза 10.3.41. Разберем по шагам, как можно перенести документы и справочники так, чтобы не пришлось вбивать их заново вручную.
Проанализируем ситуацию. Платформа 1С строго валидирует соответствие схемы метаданных. При использовании стандартных обработок для идентичных конфигураций (прямая сериализация) перенос завершится критической ошибкой на этапе чтения, если структура объектов отличается хотя бы на один реквизит. Поэтому прямой перенос между разными релизами стандартной выгрузкой не сработает. Рассмотрим подробнее несколько проверенных способов решения этой проблемы.
Если конфигурация-источник содержит много доработок, но нам нужны только данные (документы и справочники), мы можем пойти на хитрость и временно привести структуру старой базы к структуре новой. Выясним причину: тексты модулей и алгоритмы при переносе нас не интересуют, главное — чтобы совпала структура таблиц для успешного чтения XML.
Разберем алгоритм действий:
Важное замечание по движениям документов: Поскольку конфигурация сильно дорабатывалась или обновлялась с пропуском множества релизов, структура регистров почти наверняка изменилась. Оптимальный сценарий — выгружать только "шапки" и табличные части документов, полностью исключив их движения по регистрам. После успешной загрузки в базу-приемник запустите штатное групповое проведение. Это гарантирует, что данные в регистрах сформируются корректно по правилам обновленной конфигурации.
Если обновление копии по каким-то причинам невозможно (например, добавлены новые обязательные реквизиты, которые не заполнятся при простом обновлении), наиболее безопасным вариантом станет полноценное использование конфигурации Конвертация данных 2.x (КД).
Посмотрим на процесс работы с КД:
Альтернативным вариантом для опытных разработчиков является написание скрипта переноса с использованием COM-соединения. Для этого используется объект V82.COMConnector.
При передаче данных через COM объекты из другой базы воспринимаются как COM-объекты. Их нельзя напрямую присваивать реквизитам текущей базы. Требуется программное сопоставление каждого ссылочного объекта. Если вы пишете собственный скрипт, обязательно сохраняйте оригинальные идентификаторы (GUID). Если перенести данные, просто создавая новые элементы без явного указания старого GUID, базы необратимо рассинхронизируются.
Посмотрим на пример того, как правильно устанавливать ссылку новому объекту в коде базы-приемника, чтобы сохранить связь:
// Предположим, мы прочитали GUID документа из COM-базы
СтарыйУникальныйИдентификатор = ТекДокументCOM.УникальныйИдентификатор();
// Создаем документ в текущей базе
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДокумент.УстановитьСсылкуНового(СтарыйУникальныйИдентификатор);
// ... программное заполнение реквизитов документа ...
НовыйДокумент.Записать(РежимЗаписиДокумента.Запись);
Если за пропущенный день пользователи ввели документы всего одного-двух видов (например, только реализации и приходные ордера), быстрым решением без программирования является использование стандартной обработки загрузки из табличного документа.
Рассмотрим этот экспресс-метод:
Подведем итог: выбор метода зависит от объема изменений в конфигурации и квалификации специалиста. Для разового переноса пары десятков документов проще всего использовать метод "обновления копии" или даже перенос через табличный документ. Если же задача требует регулярного обмена между разными конфигурациями, обязательно инвестируйте время в настройку правил через Конвертацию данных.