При переходе с конфигурации «Зарплата и управление персоналом», редакция 2.5 на редакцию 3.1 часто применяется сценарий параллельного ведения баз в течение одного или нескольких расчетных периодов. Если начальный перенос остатков уже выполнен (например, с помощью штатного упрощенного механизма), у специалистов регулярно возникает задача догрузить отдельные текущие кадровые и расчетные документы, введенные в старой базе.
Разберем основные архитектурные сложности такого переноса и проанализируем проверенные практические подходы к решению этой задачи.
Просто выгрузить документы «один в один» не удается из-за фундаментальных различий в архитектуре двух редакций:
ПланируемаяДатаВыплаты.Сотрудники, Подразделения, Должности). Поиск по внутреннему идентификатору при последующей загрузке документов работать не будет — необходимо сопоставлять данные по бизнес-полям.Использование конфигурации «Конвертация данных», редакция 2.1 является стандартным инструментом 1С для настройки XML-обмена между различными конфигурациями.
Рассмотрим порядок действий при создании правил переноса:
MD82Exp.epf (для 2.5) и MD83Exp.epf (для 3.1) и загрузим их в базу «Конвертации данных 2.1».ФизическиеЛица и Сотрудники обязательно снимем флаг поиска по внутреннему идентификатору. Настроим поиск по полям: СНИЛС, ИНН или комбинации ТабельныйНомер + ФизическоеЛицо.Для разового или периодического переноса ограниченного списка документов (например, больничных листов или кадровых приказов) быстрее и проще написать собственную внешнюю обработку, подключающуюся к ЗУП 2.5 через COMConnector.
Посмотрим на пример структуры кода для создания подключения и выборки документов из базы-источника:
// Создаем COM-соединение с исходной базой ЗУП 2.5
V83COM = Новый COMОбъект("V83.COMConnector");
ПараметрыПодключения = "Srvr=""ServerName"";Ref=""zup25_base"";Usr=""Admin"";Pwd=""Password"";";
Попытка
БазаИсточник = V83COM.Connect(ПараметрыПодключения);
Исключение
Сообщить("Ошибка подключения к ЗУП 2.5: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// Выполняем выборку документов в базе-источнике
Запрос = БазаИсточник.NewObject("Запрос");
Запрос.Текст =
"ВЫБРАТЬ
| Док.Ссылка КАК Ссылка,
| Док.Дата КАК Дата,
| Док.Организация.ИНН КАК ОрганизацияИНН,
| Док.Сотрудник.Код КАК ТабельныйНомер,
| Док.Сотрудник.Физлицо.СтраховойНомерПФР КАК СНИЛС,
| Док.ДатаНачала КАК ДатаНачала,
| Док.ДатаОкончания КАК ДатаОкончания
|ИЗ
| Документ.НачислениеПоБольничномуЛисту КАК Док
|ГДЕ
| Док.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
| И Док.Проведен = ИСТИНА";
Запрос.УстановитьПараметр("ДатаНачала", НачалоПериода);
Запрос.УстановитьПараметр("ДатаОкончания", КонецПериода);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Поиск физического лица и сотрудника в текущей базе ЗУП 3.1 по СНИЛС и табельному номеру
ФизЛицо = Справочники.ФизическиеЛица.НайтиПоРеквизиту("СтраховойНомерПФР", Выборка.СНИЛС);
Если ЗначениеЗаполнено(ФизЛицо) Тогда
// Создание черновика документа в ЗУП 3.1
НовыйДок = Документы.БольничныйЛист.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата();
НовыйДок.ФизическоеЛицо = ФизЛицо;
НовыйДок.ДатаНачала = Выборка.ДатаНачала;
НовыйДок.ДатаОкончания = Выборка.ДатаОкончания;
// Заполнение расчетных реквизитов типовыми процедурами
НовыйДок.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецЦикла;
Проанализируем другие способы организации обмена данными между базами:
СоздатьДокумент(). Этот способ исключает проблемы с несовпадением разрядности COM-библиотек (32/64 бит) на сервере.