В практике сопровождения и разработки на платформе 1С часто возникает ситуация, когда разработка функционала (новых документов, регистров, проводок и отчетов) велась в одной информационной базе (часто устаревшей или урезанной копии), в то время как в основной или оригинальной базе параллельно велся учет, заполнялись актуальные справочники и накапливались данные. Разберем по шагам, как корректно объединить конфигурации и данные двух таких баз, избежав дублирования информации и нарушения ссылочной целостности.
Прежде чем приступать к механическому объединению, проанализируем ключевые сложности, с которыми сталкивается разработчик при слиянии разнородных баз:
<Объект не найден...>.Рассмотрим последовательность действий для безопасного слияния конфигураций и переноса учетной информации.
.dt или через средства СУБД). Для экспериментов создаем отдельную третью базу — копию целевой рабочей базы с полными справочниками.Выгружаем файл конфигурации .cf из базы с доработками. В созданной тестовой базе открываем Конфигуратор и запускаем процедуру через меню Конфигурация — Сравнить, объединить с конфигурацией из файла.
При объединении внимательно настраиваем дерево объектов:
Выясним, какие инструменты лучше использовать для переноса накопленной информации в зависимости от сложности учета.
Это наиболее надежный и гибкий способ, исключающий появление дублей и битых ссылок. Разберем порядок настройки правил обмена:
MD83Exp.epf..xml и выполняем выгрузку/загрузку данных с помощью штатной обработки УниверсальныйОбменДаннымиXML.epf.Если требуется перенести ограниченный объем данных (например, записи отдельных добавленных регистров или документов), можно написать собственную обработку прямого переноса. Посмотрим на пример кода подключения и выгрузки данных через V83.COMConnector:
// Пример программного подключения к исходной базе и чтения данных
Подключение = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "File=""C:\Bases\BaseSource"";Usr=""Администратор"";Pwd=""Пароль"";";
Попытка
БазаИсточник = Подключение.Connect(СтрокаПодключения);
Исключение
Сообщить("Ошибка подключения к базе-источнику: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
ЗапросИсточника = БазаИсточник.NewObject("Запрос");
ЗапросИсточника.Текст =
"ВЫБРАТЬ
| КастомныйРегистр.Период КАК Период,
| КастомныйРегистр.Контрагент.ИНН КАК КонтрагентИНН,
| КастомныйРегистр.Сумма КАК Сумма
|ИЗ
| РегистрСведений.КастомныйРегистр КАК КастомныйРегистр";
Выборка = ЗапросИсточника.Выполнить().Выбрать();
НаборЗаписей = РегистрыСведений.КастомныйРегистр.СоздатьНаборЗаписей();
Пока Выборка.Следующий() Цикл
// Выполняем поиск контрагента в текущей базе по ИНН
СсылкаНаКонтрагента = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", Выборка.КонтрагентИНН);
Если ЗначениеЗаполнено(СсылкаНаКонтрагента) Тогда
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = Выборка.Период;
НоваяЗапись.Контрагент = СсылкаНаКонтрагента;
НоваяЗапись.Сумма = Выборка.Сумма;
КонецЕсли;
КонецЦикла;
Если НаборЗаписей.Количество() > 0 Тогда
НаборЗаписей.Записать(Ложь);
КонецЕсли;
После завершения загрузки конфигурации и данных обязательно выполняем комплекс проверок:
Проверка логической целостности, Проверка ссылочной целостности (с режимом «Очищать ссылки» или «Создавать объекты») и Пересчет итогов.