Перенос данных между двумя идентичными конфигурациями 1С:Документооборот часто превращается в сложную задачу из-за обилия ссылочных связей. Документы в данной системе жестко привязаны к бизнес-процессам, файлам, правам доступа и регистрам. Стандартные инструменты переноса часто избыточны и пытаются перенести «весь мир» за один раз, что приводит к ошибкам. Рассмотрим, как решить эту задачу программно, контролируя процесс переноса.
Одним из наиболее эффективных способов перемещения объектов между идентичными базами является использование СериализаторXDTO. Этот механизм позволяет выгрузить объект в XML-файл, сохранив его структуру и ссылочные данные, а затем загрузить его в другую базу.
Рассмотрим, как это выглядит на практике. В базе-источнике нам необходимо собрать нужные объекты в массив и записать их в файл:
// В базе-источнике
ЗаписьХМЛ = Новый ЗаписьXML;
ЗаписьХМЛ.ОткрытьФайл(\"C:\\DataExchange.xml\");
МассивОбъектов = Новый Массив;
// Предположим, мы собрали ссылки на нужные документы
Для каждого Ссылка ИЗ ВыборкаДокументов Цикл
МассивОбъектов.Добавить(Ссылка.ПолучитьОбъект());
КонецЦикла;
СериализаторXDTO.ЗаписатьXML(ЗаписьХМЛ, МассивОбъектов);
ЗаписьХМЛ.Закрыть();
После того как файл создан, переходим к базе-приемнику. Здесь нам нужно считать данные и записать их в информационную базу:
// В базе-приемнике
ЧтениеХМЛ = Новый ЧтениеXML;
ЧтениеХМЛ.ОткрытьФайл(\"C:\\DataExchange.xml\");
МассивОбъектов = СериализаторXDTO.ПрочитатьXML(ЧтениеХМЛ);
Для Каждого Объект ИЗ МассивОбъектов Цикл
// Записываем объект, сохраняя его уникальный идентификатор
Объект.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
Использование простого перебора всех документов может привести к захвату огромного количества лишних данных. Чтобы сделать процесс управляемым, рекомендуем придерживаться следующих правил:
Запрос. Это позволит отобрать только те документы, которые действительно нужны (например, за определенный период или по списку).УникальномуИдентификатору. Если объект уже существует, принимайте решение: пропускать запись или обновлять существующий элемент.СериализаторXDTO автоматически пытается обработать ссылки. Если в документе есть ссылки на справочники, которые еще не перенесены, загрузка может завершиться с ошибкой. Сначала всегда переносите справочную информацию (корреспонденты, пользователи, виды документов).Как показывает опыт, наиболее надежный способ переноса — это создание собственной обработки, где вы самостоятельно управляете выборкой. Интерфейсные решения часто не дают той гибкости, которая требуется при работе с «тяжелыми» конфигурациями, такими как 1С:Документооборот.
Когда вы пишете код сами, вы можете реализовать алгоритм, который:
Помните, что при загрузке бизнес-процессов и задач логика усложняется, так как они имеют глубокую иерархию состояний. В таких случаях лучше переносить данные по типам объектов, начиная с простых справочников и заканчивая сложными документами с присоединенными файлами.
Применяя этот подход, вы сможете перенести данные максимально чисто, избежав конфликтов и дублирования информации в базе-приемнике.