Как перенести записи регистра сведений и назначить регистратором документ «Перенос данных» в Конвертации данных 2.1?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При реализации сложных обменов между конфигурациями (например, ЗУП 3.1 и УПП 1.3) часто возникает задача переноса кадровых данных. Особенность таких задач заключается в том, что в базе-источнике данные могут храниться в одном регистре, а в базе-приемнике их необходимо «привязать» к специфическому регистратору, такому как документ ПереносДанных. Это позволяет сохранить структуру движений и обеспечить корректную работу типовых отчетов в приемнике.

В этой статье мы подробно разберем, как правильно настроить правила конвертации объектов (ПКО) и правил выгрузки данных (ПВД) для решения этой задачи, проанализируем программные способы создания документа-регистратора «на лету» и рассмотрим важные нюансы синхронизации.

Постановка задачи и выбор стратегии

Рассмотрим ситуацию: нам нужно перенести данные из регистра КадроваяИсторияСотрудников (ЗУП 3.1) в регистр РаботникиОрганизаций (УПП 1.3). В УПП этот регистр является подчиненным регистратору. Прямого аналога документа в источнике может не существовать, поэтому мы будем создавать виртуальный документ ПереносДанных в приемнике и назначать его регистратором для каждой записи.

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

  1. Программный вызов выгрузки в ПВД: через произвольный алгоритм мы собираем данные и инициируем выгрузку сначала документа, а затем связанных с ним записей регистра.
  2. Использование входящих данных в ПКО: создание регистратора через передачу структуры в параметр Значение свойства Регистратор.

Шаг 1. Настройка ПКО для документа «Перенос данных»

Прежде всего, нам необходимо создать ПКО для самого документа-приемника ПереносДанных. Поскольку в источнике (ЗУП 3.1) такого документа для конкретных записей регистра может не быть, ПКО создается с пустым источником.

Важно правильно настроить синхронизацию, чтобы при каждом обмене не создавались дубли. Для этого в обработчике ПоляПоиска или на закладке «Настройки» ПКО укажем ключевые реквизиты: Номер, Дата и Организация.

Рассмотрим пример кода в обработчике ПриВыгрузке для программного формирования структуры документа:


ВходящиеДанные = Новый Структура;
ВходящиеДанные.Вставить("Номер", "ЗУП-" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd"));
ВходящиеДанные.Вставить("Дата", НачалоДня(ТекущаяДата()));
ВходящиеДанные.Вставить("Организация", Справочники.Организации.НайтиПоНаименованию("ООО Наша Организация"));
ВходящиеДанные.Вставить("ПериодРегистрации", НачалоМесяца(ТекущаяДата()));

// Инициируем выгрузку по правилу документа
ВыгрузитьПоПравилу(,, ВходящиеДанные, , "ПереносДанных");

Шаг 2. Передача данных регистра через ПВД

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

В обработчике ПВД ПередОбработкой мы пишем запрос к регистру КадроваяИсторияСотрудников. Полученную выборку мы обходим в цикле и передаем данные в ПКО регистра сведений.


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрСведений.КадроваяИсторияСотрудников ГДЕ ...";
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    ВходящиеДанныеРегистра = Новый Структура;
    ВходящиеДанныеРегистра.Вставить("Период", Выборка.Период);
    ВходящиеДанныеРегистра.Вставить("Сотрудник", Выборка.Сотрудник);
    ВходящиеДанныеРегистра.Вставить("Организация", Выборка.Организация);
    ВходящиеДанныеРегистра.Вставить("Должность", Выборка.Должность);
    
    // Ссылаемся на наш документ-регистратор
    // Здесь можно передать структуру для поиска/создания документа
    ВходящиеДанныеРегистра.Вставить("Регистратор", Параметры.СсылкаНаДокументПереноса);
    
    ВыгрузитьПоПравилу(,, ВходящиеДанныеРегистра, , "РаботникиОрганизаций");
КонецЦикла;

Шаг 3. Обработка реквизита «Регистратор» в ПКО регистра

Теперь выясним, как правильно принять эти данные в ПКО регистра сведений. В правиле конвертации свойств (ПКС) для реквизита Регистратор нужно выполнить следующие настройки:

  1. Оставить поле «Источник» пустым.
  2. В обработчике ПередВыгрузкой ПКС прописать логику получения ссылки.

Если вы решили использовать совет опытных коллег, можно применить передачу структуры в переменную Значение. Это позволит системе Конвертации Данных найти объект в приемнике или создать его по описанию:


// В обработчике ПКС "Регистратор" ПередВыгрузкой
СтруктураРегистратора = Новый Структура;
СтруктураРегистратора.Вставить("Номер", "ПЕРЕНОС-001");
СтруктураРегистратора.Вставить("Дата", ТекущаяДата());
СтруктураРегистратора.Вставить("Организация", ОбъектКоллекции.Организация);

Значение = СтруктураРегистратора;

Важный нюанс: для ПКО документа ПереносДанных в этом случае должен быть включен флаг «Продолжить поиск по полям поиска, если по идентификатору не найден».

Шаг 4. Особенности периодических регистров в УПП 1.3

При переносе в РаботникиОрганизаций важно помнить, что этот регистр в УПП имеет измерения и ресурсы, которые могут отсутствовать в ЗУП 3.1 в явном виде. Например, реквизит ЗанимаемыхСтавок или дополнительные сведения о графике работы.

Разберем, как дополнить данные. Мы можем использовать функции типовых модулей источника (ЗУП 3.1) прямо в правилах обмена, если обмен запускается на стороне источника:


// Получение дополнительных данных перед выгрузкой записи
ДанныеГрафика = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Выборка.Сотрудник, "ГрафикРаботы", Выборка.Период);
Если ДанныеГрафика.Количество() > 0 Тогда
    ВходящиеДанные.Вставить("ГрафикРаботы", ДанныеГрафика[0].ГрафикРаботы);
КонецЕсли;

Оптимизация процесса загрузки

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

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

Рекомендации по стабильности обмена:

Таким образом, мы обеспечим надежную связку между данными регистра и универсальным регистратором в целевой базе, сохранив целостность кадровой истории сотрудников.

← На главную