Статья рассчитана на специалистов, знакомых с КД 2.0. Это общее описание, а не пошаговое руководство. Внимание, присутствует неоптимальный и плохочитаемый код!
Подготовка
Приводим обе базы к одному релизу. Выгружаем описание конфигурации и обязательно устанавливаем галочку «Выгружать все движения».
Далее загружаем описание конфигурации в КД 2.0 и создаем правила автоматически.
Выгрузка документов
Первичной будет выгрузка документы с движениями – при их выгрузке автоматически будут выгружены объекты, которые есть в реквизитах документов и их движений. Это справочники, планы видов расчета и др.
Отключим все Правила выгрузки данных кроме Документов. Отключение ПВД не означает, что они будут исключены из файла правил обмена, просто при чтении правил в обработке «Универсальный обмен данными в формате XML» с них будет снята галочка.
Отключить ПВД один раз в правилах обмена удобнее, чем каждый раз в обработке при тестировании выгрузки.
В дальнейшем, включим ПВД для некоторых независимых регистров сведений.
Справочники
Было решено, что если элемент справочника уже существует в базе-приемнике, то он не должен перезаполняться по данным базы-источника. Поэтому для всех ПКО Справочников установил галочку «Не замещать существующие объекты в приемнике при загрузке, а только создавать новые и заполнять их».
Сопоставление справочников
Самый трудоемкий этап. Нужно пройтись по всем справочникам базы-источника и решить, как их сопоставлять со справочниками базы-приемника.
Примеры
Для предопределенных элементов автоматически были созданы Правила конвертации значений, ручное вмешательство не требуется.
Справочник Виды доходов НДФЛ имеет уникальные коды – можно сопоставлять по Коду.
Справочник Воинские звания – по наименованию и т.д.
Особое внимание нужно уделить Физическим лицам. Для их сопоставления я использовал поля ИНН, СНИЛ, ФИО, Дата рождения и написал обработчик Поля поиска.
Если СвойстваПоиска.Получить("ЭтоГруппа") = Истина Тогда
ПрекратитьПоиск = Истина
Иначе
ТекстЗапроса = "";
Запрос = Новый Запрос;
СНИЛССоответствуетТребованиям = Ложь;
Выполнить(Алгоритмы.КонтрольСНИЛС);
Если СНИЛССоответствуетТребованиям Тогда
Запрос.УстановитьПараметр("СтраховойНомерПФР", СвойстваПоиска.Получить("СтраховойНомерПФР"));
ТекстЗапроса = "Выбрать
|0 как ПолеУпорядочивания,
|Выбор Когда Спр.ПометкаУдаления = &ПометкаУдаления Тогда 0 Иначе 1 Конец Как УпорядочиваниеПоПометкеУдаления,
|Спр.Ссылка,
|Спр.СтраховойНомерПФР,
|Спр.ИНН,
|Спр.ФИО,
|Спр.ДатаРождения,
|Спр.ПометкаУдаления
|из
|Справочник.ФизическиеЛица как Спр
|Где
|Спр.СтраховойНомерПФР = &СтраховойНомерПФР";
КонецЕсли;
ИННСоответствуетТребованиям = Ложь;
Выполнить(Алгоритмы.КонтрольИННКПП);
Если ИННСоответствуетТребованиям Тогда
Запрос.УстановитьПараметр("ИНН", СвойстваПоиска.Получить("ИНН"));
ТекстИНН = "Выбрать
|1 как ПолеУпорядочивания,
|Выбор Когда Спр.ПометкаУдаления = &ПометкаУдаления Тогда 0 Иначе 1 Конец Как УпорядочиваниеПоПометкеУдаления,
|Спр.Ссылка,
|Спр.СтраховойНомерПФР,
|Спр.ИНН,
|Спр.ФИО,
|Спр.ДатаРождения,
|Спр.ПометкаУдаления
|из
|Справочник.ФизическиеЛица как Спр
|Где
|Спр.ИНН = &ИНН";
Если ПустаяСтрока(ТекстЗапроса) Тогда
ТекстЗапроса = ТекстИНН;
Иначе
ТекстЗапроса = ТекстЗапроса + Символы.ПС + "Объединить " + Символы.ПС + ТекстИНН;
КонецЕсли;
КонецЕсли;
ФИО = СвойстваПоиска.Получить("ФИО");
ДатаРождения = СвойстваПоиска.Получить("ДатаРождения");
Если Не ПустаяСтрока(ФИО) и Не ДатаРождения = Дата(1, 1, 1) Тогда
Запрос.УстановитьПараметр("ФИО", СокрЛП(ФИО));
Запрос.УстановитьПараметр("ДатаРождения", ДатаРождения);
ТекстФИОДата = "Выбрать
|2 как ПолеУпорядочивания,
|Выбор Когда Спр.ПометкаУдаления = &ПометкаУдаления Тогда 0 Иначе 1 Конец Как УпорядочиваниеПоПометкеУдаления,
|Спр.Ссылка,
|Спр.СтраховойНомерПФР,
|Спр.ИНН,
|Спр.ФИО,
|Спр.ДатаРождения,
|Спр.ПометкаУдаления
|из
|Справочник.ФизическиеЛица как Спр
|Где
|Спр.ФИО = &ФИО
|и Спр.ДатаРождения = &ДатаРождения";
Если ПустаяСтрока(ТекстЗапроса) Тогда
ТекстЗапроса = ТекстФИОДата;
Иначе
ТекстЗапроса = ТекстЗапроса + Символы.ПС + "Объединить " + Символы.ПС + ТекстФИОДата;
КонецЕсли;
КонецЕсли;
Если ПустаяСтрока(ТекстЗапроса) Тогда
ПрекратитьПоиск = Истина;
Иначе
Запрос.Текст = ТекстЗапроса + Символы.ПС +
"Упорядочить по
|ПолеУпорядочивания,
|УпорядочиваниеПоПометкеУдаления";
Запрос.УстановитьПараметр("ПометкаУдаления", СвойстваПоиска.Получить("ПометкаУдаления"));
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
СсылкаНаОбъект = Выборка.Ссылка;
Параметры.СопоставленныеФизическиеЛица.Вставить(СсылкаНаОбъект, СвойстваПоиска.Получить("{УникальныйИдентификатор}"));
КонецЕсли;
ПрекратитьПоиск = Истина;
КонецЕсли;
КонецЕсли; //Если СвойстваПоиска.Получить("ЭтоГруппа") = Истина Тогда
Алгоритмы проверки СНИЛС и ИНН взяты с интернета, поэтому приводить их здесь не буду.
Для ускорения работы со справочниками написал обработку, которая подсчитывает количество объектов в базе
Обработка выводит справочники, документы и независимые регистры сведений (понадобится далее). Позволяет быстро переходить к форме списка выбранного объекта
Планы видов расчета
Коллеги-ЗУПовцы и расчетчики клиента подсказали, что Начисления и Удержания должны сопоставляться по коду, если код содержит только буквы.
Обработчик Поля поиска для Планов видов расчета
Код = СокрЛП(СвойстваПоиска.Получить("Код"));
ТолькоБуквы = СтрДлина(Код) > 0;
к1 = 1040;
к2 = 1103;
Для Сч = 1 по СтрДлина(Код) Цикл
КС = КодСимвола(Сред(Код, Сч, 1));
Если КС < к1 или КС > к2 Тогда
ТолькоБуквы = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если ТолькоБуквы Тогда
СтрокаИменСвойствПоиска = "Код, ВАрхиве";
Иначе
СсылкаНаОбъект = Неопределено;
ПрекратитьПоиск = Истина;
КонецЕсли;
Перед обменом нужно убедиться в уникальности буквенных кодов планов видов расчета.
Выгрузка независимых регистров сведений
Нужно пройтись по независимым регистрам сведений и определить какие из них необходимо выгрузить. В моих данных получилось поделить их на 2 группы – выгружаются всегда, выгружаются только вместе физическими лицами или сотрудниками.
Пример выгружаемого всегда регистра – «История регистраций в налоговом органе», для таких регистров включаем ПВД.
Некоторые регистры нужны только тогда, когда выгружены соответствующие физические лица или сотрудники, например «ФИО Физических лиц», «Состояния сотрудников» и др.
В обработчик конвертации «Перед выгрузкой данных» добавил создание параметров «ВыгруженныеФизическиеЛица» и «ВыгруженныеСотрудники».
Параметры.Вставить("ВыгруженныеФизическиеЛица", Новый Массив);
Параметры.Вставить("ВыгруженныеСотрудники", Новый Массив);
Эти массивы дополняются в обработчике «После выгрузки» ПКО для физических лиц и сотрудников.
В обработчике конвертации «После выгрузки данных» выгружаются записи регистров с отбором по физическим лицам и сотрудникам.
Если Не Параметры.ВыгруженныеФизическиеЛица.Количество() = 0 Тогда
мРегистрыСведений = Новый Массив();
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ФИОФизическихЛиц", "ФизическоеЛицо", "ФИОФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ВоинскийУчет", "ФизическоеЛицо", "ВоинскийУчет"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ВидыСтажаТрудовойДеятельностиФизическихЛиц", "ФизическоеЛицо", "ВидыСтажаТрудовойДеятельностиФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ГражданствоФизическихЛиц", "ФизическоеЛицо", "ГражданствоФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ДокументыФизическихЛиц", "Физлицо", "ДокументыФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ИзменениеСведенийФизическихЛиц", "ФизическоеЛицо", "ИзменениеСведенийФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам", "ФизическоеЛицо", "ЛицевыеСчетаСотрудниковПоЗарплатнымПроектам"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "МероприятияТрудовойДеятельностиПрочие", "ФизическоеЛицо", "МероприятияТрудовойДеятельностиПрочие"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "НаградыФизическихЛиц", "ФизическоеЛицо", "НаградыФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "НакопленныеСтажиФизическихЛиц", "ФизическоеЛицо", "НакопленныеСтажиФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ОсновныеСотрудникиФизическихЛиц", "ФизическоеЛицо", "ОсновныеСотрудникиФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ПараметрыИсчисленияПроцентаСевернойНадбавкиФизическихЛиц", "ФизическоеЛицо", "ПараметрыИсчисленияПроцентаСевернойНадбавкиФи"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ПериодыСтажаПФР", "ФизическоеЛицо", "ПериодыСтажаПФР"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ПрименениеСтандартныхВычетовПоНДФЛВторичный", "ФизическоеЛицо", "ПрименениеСтандартныхВычетовПоНДФЛВторичный"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ПроцентыСевернойНадбавкиФизическихЛиц", "ФизическоеЛицо", "ПроцентыСевернойНадбавкиФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "РолиФизическихЛиц", "ФизическоеЛицо", "РолиФизическихЛиц00001"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СведенияОбИнвалидностиФизическихЛиц", "ФизическоеЛицо", "СведенияОбИнвалидностиФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СведенияОВремениДляРасчетаСреднегоФCC", "ФизическоеЛицо", "СведенияОВремениДляРасчетаСреднегоФCC"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СведенияОНачисленияхДляРасчетаСреднегоЗаработкаФСС", "ФизическоеЛицо", "СведенияОНачисленияхДляРасчетаСреднегоЗаработ00001"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СостоянияВБракеФизическихЛиц", "ФизическоеЛицо", "СостоянияВБракеФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СтажиФизическихЛиц", "ФизическоеЛицо", "СтажиФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СтандартныеВычетыПоНДФЛВторичный", "ФизическоеЛицо", "СтандартныеВычетыПоНДФЛВторичный"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СтатусФизическихЛицКакНалогоплательщиковНДФЛ", "ФизическоеЛицо", "СтатусФизическихЛицКакНалогоплательщиковНДФЛ"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СтатусФизическихЛицКакНалогоплательщиковНДФЛВторичный", "ФизическоеЛицо", "СтатусФизическихЛицКакНалогоплательщиковНДФЛВ"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СтатусыЗастрахованныхФизическихЛиц", "ФизическоеЛицо", "СтатусыЗастрахованныхФизическихЛиц"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ТекущаяТарифнаяСтавкаСотрудников", "ФизическоеЛицо", "ТекущаяТарифнаяСтавкаСотрудников"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ТекущиеКадровыеДанныеСотрудников", "ФизическоеЛицо", "ТекущиеКадровыеДанныеСотрудников"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ТрудоваяДеятельностьФизическихЛиц", "ФизическоеЛицо", "ТрудоваяДеятельностьФизическихЛиц"));
МассивОтбор = Параметры.ВыгруженныеФизическиеЛица;
ИмяТаблицы = "Справочник.ФизическиеЛица";
Выполнить(Алгоритмы.ВыгрузитьПодчиненныеРегистрыСведений);
КонецЕсли;//Если Не Параметры.ВыгруженныеФизическиеЛица.Количество() = 0 Тогда
Если Не Параметры.ВыгруженныеСотрудники.Количество() = 0 Тогда
мРегистрыСведений = Новый Массив();
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "БухучетЗарплатыСотрудников", "Сотрудник", "БухучетЗарплатыСотрудников"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ВидыЗанятостиСотрудниковИнтервальный", "Сотрудник", "ВидыЗанятостиСотрудниковИнтервальный"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ГрафикРаботыСотрудниковИнтервальный", "Сотрудник", "ГрафикРаботыСотрудниковИнтервальный"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ДанныеДляПодбораСотрудников", "Сотрудник", "ДанныеДляПодбораСотрудников"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ДанныеОбОплатеТрудаДляПодбораСотрудников", "Сотрудник", "ДанныеОбОплатеТрудаДляПодбораСотрудников"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ЗанятостьПозицийШтатногоРасписанияИнтервальный", "Сотрудник", "ЗанятостьПозицийШтатногоРасписанияИнтервальны"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ЗаработанныеПраваНаОтпуска", "Сотрудник", "ЗаработанныеПраваНаОтпуска"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "КадроваяИсторияСотрудниковИнтервальный", "Сотрудник", "КадроваяИсторияСотрудниковИнтервальный"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "МестаВыплатыЗарплатыСотрудников", "Сотрудник", "МестаВыплатыЗарплатыСотрудников"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ОрганизацииВКоторыхРаботалиСотрудники", "Сотрудник", "ОрганизацииВКоторыхРаботалиСотрудники"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ПлановыеАвансыИнтервальный", "Сотрудник", "ПлановыеАвансыИнтервальный"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ПлановыеНачисленияИнтервальный", "Сотрудник", "ПлановыеНачисленияИнтервальный"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ПлановыйФОТ", "Сотрудник", "ПлановыйФОТ"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "ПлановыйФОТИтоги", "Сотрудник", "ПлановыйФОТИтоги"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "РолиСотрудников", "Сотрудник", "РолиСотрудников00001"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СведенияОВремениДляРасчетаСреднегоОбщий", "Сотрудник", "СведенияОВремениДляРасчетаСреднегоОбщий"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СведенияОНачисленияхДляРасчетаСреднегоЗаработкаОбщий", "Сотрудник", "СведенияОНачисленияхДляРасчетаСреднегоЗаработ"));
мРегистрыСведений.Добавить(Новый Структура("ИмяРегистра, ПолеОтбора, ИмяПКО", "СостоянияСотрудников", "Сотрудник", "СостоянияСотрудников"));
МассивОтбор = Параметры.ВыгруженныеСотрудники;
ИмяТаблицы = "Справочник.Сотрудники";
Выполнить(Алгоритмы.ВыгрузитьПодчиненныеРегистрыСведений);
КонецЕсли;//Если Не Параметры.ВыгруженныеСотрудники.Количество() = 0 Тогда
Код алгоритма ВыгрузитьПодчиненныеРегистрыСведений:
Непериодический = Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический;
Для Каждого Структура из мРегистрыСведений Цикл
ИмяРегистра = Структура.ИмяРегистра;
ПолеОтбора = Структура.ПолеОтбора;
ИмяПКО = Структура.ИмяПКО;
мПоляРегистра = Новый Массив();
МетаданныеРегистра = Метаданные.РегистрыСведений[ИмяРегистра];
Для Каждого ПолеРегистра из МетаданныеРегистра.Измерения Цикл
мПоляРегистра.Добавить(ПолеРегистра.Имя);
КонецЦикла;
Для Каждого ПолеРегистра из МетаданныеРегистра.Ресурсы Цикл
мПоляРегистра.Добавить(ПолеРегистра.Имя);
КонецЦикла;
Для Каждого ПолеРегистра из МетаданныеРегистра.Реквизиты Цикл
мПоляРегистра.Добавить(ПолеРегистра.Имя);
КонецЦикла;
ПолеПериод = ?(МетаданныеРегистра.ПериодичностьРегистраСведений = Непериодический, "", "Период,");
ТекстЗапроса = "Выбрать "
+ ПолеПериод
+ СтрСоединить(мПоляРегистра, ",")
+ " из РегистрСведений." + ИмяРегистра
+ " Где " + ПолеОтбора + " В (&ЗначениеОтбора)";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ЗначениеОтбора", МассивОтбор);
ПоляРегистра = ПолеПериод + СтрСоединить(мПоляРегистра, ",");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтруктураСтроки = Новый Структура(ПоляРегистра);
ЗаполнитьЗначенияСвойств(СтруктураСтроки, Выборка);
СтруктураСтроки.Вставить("Активность", Истина);
ВыгрузитьПоПравилу(СтруктураСтроки,,,,ИмяПКО);
КонецЦикла;
КонецЦикла;//Для Каждого Структура из мРегистрыСведений Цикл
Сейчас этот механизм кажется мне лишним, количество физических лиц и сотрудников незадействованных в документах незначительное, можно было выгрузить их и регистры полностью.
Загрузка в базу-приемник
При загрузке данных обнаружилось, что при записи движений документа выполняются расчеты и запись в регистры, стандартного признака загрузки данных недостаточно чтобы их отключить.
Вместо обычной конструкции
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
вызывается функция ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи
Функция ОтключитьБизнесЛогикуПриЗаписи(Знач Объект) Экспорт
Возврат Объект.ОбменДанными.Загрузка И (НЕ Объект.ДополнительныеСвойства.Свойство("ПроверятьБизнесЛогикуПриЗаписи"));
КонецФункции
Реализовал удаление из дополнительных свойств объекта флажка «ПроверятьБизнесЛогикуПриЗаписи» в обработчике «После загрузки объекта» конвертации
Если Лев(ИмяТипаОбъекта, 8) = "Документ" Тогда
Для Каждого НаборЗаписей из Объект.Движения Цикл
НаборЗаписей.ОбменДанными.Загрузка = Истина;
Если НаборЗаписей.ДополнительныеСвойства.Свойство("ПроверятьБизнесЛогикуПриЗаписи") Тогда
НаборЗаписей.ДополнительныеСвойства.Удалить("ПроверятьБизнесЛогикуПриЗаписи");
КонецЕсли;
КонецЦикла;
КонецЕсли;
Прочее
В моем случае база-источник была небольшого объема и удалось перенести все данные в один прием. Иначе пришлось бы выгружать данные по частям, например, вначале НСИ а затем документы с движениями.
В обеих базах заведены префиксы, поэтому проблем с дублированием кодов и номеров не возникло.