Как перенести записи регистра сведений «Кадровая история сотрудников» из ЗУП 2.5 в БП КОРП 3.0 без переноса кадровых документов?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При интеграции или миграции данных между конфигурациями 1С часто возникает задача перенести накопленную историю кадровых изменений без переноса всей массы первичных кадровых документов (приказов о приеме, переводе, увольнении). В конфигурации «Бухгалтерия предприятия КОРП» редакции 3.0 регистр сведений КадроваяИсторияСотрудников имеет режим записи Подчинение регистратору, что не позволяет просто так загрузить записи без документа, выступающего регистратором этих движений.

Разберем по шагам, как правильно настроить правила обмена в конфигурации «Конвертация данных» (КД 2.1), какой документ выбрать в качестве регистратора, как передать движения программно и как обойти характерные ошибки загрузки.

1. Выбор документа-регистратора в базе-приемнике (БП 3.0)

Проанализируем состав регистраторов регистра КадроваяИсторияСотрудников в типовой конфигурации БП 3.0. По умолчанию документ ВводНачальныхОстатков не делает движений по кадровым регистрам. Если попытаться назначить его регистратором в правилах обмена, платформа выдаст ошибку либо проигнорирует движения.

Для решения задачи можно использовать следующие варианты:

  1. Типовой документ ОперацияБух (Операция, введенная вручную): содержит движения по кадровым регистрам сведений, однако в организациях со строгим разграничением прав доступ к нему обычно ограничен исключительно бухгалтерией.
  2. Документ КорректировкаРегистров: типовой документ для конфигураций ERP и КА, который может быть добавлен в нетиповую БП КОРП специально для фиксации технических корректировок и движений по любым регистрам.
  3. Типовой документ КадровыйПеревод / ПриемНаРаботу: создание единого документа-заглушки без заполнения шапки и реквизитов, куда программно «привязываются» все наборы записей.

2. Настройка выгрузки данных в КД 2.1 через ИсходящиеДанные

Рассмотрим подробнее реализацию переноса с использованием произвольного алгоритма в Правиле выгрузки данных (ПВД). В источнике (ЗУП 2.5) мы выбираем записи регистра кадровых данных, формируем структуру и передаем ее в Правило конвертации объектов (ПКО) через параметр ИсходящиеДанные.

В ПВД со способом выборки Произвольный алгоритм в обработчике «Перед обработкой» пропишем выборку записей по каждой организации:


Выборка_Организации = Запросы.РС_РаботникиОрганизаций_ТолькоОрганизации.Выполнить().Выбрать();

Пока Выборка_Организации.Следующий() Цикл
    Сообщить("Выгрузка записей кадровой истории по организации: " + Выборка_Организации.Организация.Наименование);
    
    Запросы.РС_РаботникиОрганизаций.УстановитьПараметр("Организация", Выборка_Организации.Организация);
    РезультатЗапроса = Запросы.РС_РаботникиОрганизаций.Выполнить();
    КадроваяИсторияСотрудников = РезультатЗапроса.Выгрузить();
    
    // Формируем структуру исходящих данных для передачи в ПКО документа-регистратора
    ИсходящиеДанные = Новый Структура("Организация, Дата, ТаблицаРегистровСведений, КадроваяИсторияСотрудников");
    ИсходящиеДанные.Организация = Выборка_Организации.Организация;
    ИсходящиеДанные.Дата = ДатаВводаОстатков; // Дата формирования регистратора
    
    // Передаем таблицу списка регистров (актуально для Корректировки регистров / Операции)
    ТабРегистров = Новый ТаблицаЗначений;
    ТабРегистров.Колонки.Добавить("Имя");
    СтрокаРегистра = ТабРегистров.Добавить();
    СтрокаРегистра.Имя = "КадроваяИсторияСотрудников";
    ИсходящиеДанные.ТаблицаРегистровСведений = ТабРегистров;
    
    ИсходящиеДанные.КадроваяИсторияСотрудников = КадроваяИсторияСотрудников;
    
    // Явный вызов правила конвертации
    ВыгрузитьПоПравилу(,, ИсходящиеДанные,, "КорректировкаРС_КадроваяИсторияСотрудников");
КонецЦикла;

3. Альтернативный вариант: выгрузка через коллекцию ВыборкаДанных

Посмотрим на пример, когда требуется собрать и передать данные шапки и набора записей в рамках одной таблицы значений, передаваемой через ВыборкаДанных в ПВД:


ТабДок = Новый ТаблицаЗначений;
ТабДок.Колонки.Добавить("Организация");
ТабДок.Колонки.Добавить("Дата");
ТабДок.Колонки.Добавить("Комментарий");
ТабДок.Колонки.Добавить("КадроваяИсторияСотрудников");

Запрос = Новый Запрос(ТекстЗапросаКадров);
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Выборка = Запрос.Выполнить().Выбрать();

НоваяСтрокаТабДок = ТабДок.Добавить();
НоваяСтрокаТабДок.Организация = ВыбраннаяОрганизация;
НоваяСтрокаТабДок.Дата = ТекущаяДата();
НоваяСтрокаТабДок.Комментарий = "Перенос кадровой истории из ЗУП 2.5";

// Заполняем движения регистра
НоваяСтрокаТабДок.КадроваяИсторияСотрудников = Запрос.Выполнить().Выгрузить();

ВыборкаДанных = ТабДок;

4. Настройка ПКО и правил группы свойств (ПКГС)

Разберем по шагам структуру ПКО для документа-регистратора:

  1. Создаем ПКО с пустым объектом-источником и объектом-приемником ДокументСсылка.КорректировкаРегистров (или ОперацияБух).
  2. В табличной части правил создаем конвертацию реквизитов шапки (Организация, Дата, Комментарий), установив флаг Получить из входящих данных.
  3. Создаем группу свойств для набора записей регистра сведений КадроваяИсторияСотрудников.
  4. Внутри группы создаем правила конвертации свойств (ПКС) для всех измерений и ресурсов регистра (Сотрудник, Период, Подразделение, Должность, ВидСобытия и др.), сопоставляя имена колонок выгруженной таблицы с полями регистра-приемника.

5. Типовые проблемы и способы их устранения

Выясним причины ошибок, которые часто возникают при загрузке движений кадровой истории в БП 3.0, и способы их решения:

1. Ошибка «Запись с такими ключевыми полями существует»

В подчиненных регистрах сведений уникальность контролируется по составному ключу Регистратор + Период + [Все измерения]. В ЗУП 2.5 записи на одну дату по одному сотруднику могли быть созданы разными документами. Когда все эти записи попадают в один общий документ-регистратор в БП 3.0, их ключи дублируются. Для предотвращения ошибки необходимо в запросе выгрузки группировать записи или удалять дубли по периоду и измерениям.

2. Блокировка загрузки датой запрета изменения данных

При загрузке исторических движений за прошлые годы механизм БСП «Даты запрета изменения данных» может заблокировать запись объекта. Чтобы обойти это ограничение штатно без изменения кода конфигурации:

  1. Добавьте пользователя, под которым выполняется обмен, в список исключений настройки дат запрета в режиме «1С:Предприятие».
  2. Убедитесь, что загрузка выполняется в режиме ОбменДанными.Загрузка = Истина.

3. Обновление текущего состояния сотрудников в БП 3.0

В конфигурации БП 3.0 списки сотрудников и печатные формы используют вспомогательный регистр сведений Текущие кадровые данные сотрудников. Так как при прямой загрузке набора записей типовые процедуры проведения кадровых документов не вызываются, после завершения переноса данных необходимо запустить штатную процедуру пересчета текущего кадрового состояния сотрудников через обработчик После загрузки данных или регламентное задание.

← На главную