Как перенести данные в документ «Перенос данных» с помощью правил обмена?

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

Рассмотрим частую задачу при переходе на новые версии 1С:Зарплата и Управление Персоналом (ЗУП) — создание документа ПереносДанных с помощью правил обмена (Конвертация данных 2.0). Если нам нужно перенести кадровую историю сотрудников, мы обычно делаем выборку по регистру с помощью запроса. Но как правильно загрузить эти записи в сам документ переноса? Проанализируем специфику этого объекта и разберем по шагам несколько рабочих вариантов.

Особенности документа «Перенос данных»

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

Однако есть один важный нюанс. У документа существует обязательная служебная табличная часть — ТаблицаРегистров. В нее записываются имена регистров (в виде строк), по которым документ делает движения. Если мы запишем движения в регистр сведений, но не добавим имя этого регистра (например, КадроваяИсторияСотрудников) в данную табличную часть, данные просто не будут отображаться в форме документа, а при пересохранении пользователем движения могут быть безвозвратно очищены.

Способ 1: Использование входящих данных (ВыгрузитьПоПравилу)

Первый вариант основан на преобразовании таблицы значений (ТЗ) в движения. Рассмотрим по шагам этот алгоритм:

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

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

Способ 2: Использование параметров и программная запись (После загрузки)

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

  1. В базе-источнике мы формируем Таблицу Значений с нужными записями (например, кадровой историей).
  2. Передаем эту таблицу в базу-приемник через ПараметрыОбъекта.
  3. В ПКО документа переноса в базе-приемнике мы используем обработчик После загрузки.

Посмотрим на пример кода, который необходимо прописать в обработчике:


Если ПараметрыОбъекта <> Неопределено И ПараметрыОбъекта.Свойство("ТЗКадроваяИстория") Тогда
    
    НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(Объект.Ссылка);
    НаборЗаписей.Загрузить(ПараметрыОбъекта.ТЗКадроваяИстория);
    НаборЗаписей.Записать();
    
    // Не забываем добавить имя регистра в служебную ТЧ документа
    НоваяСтрока = Объект.ТаблицаРегистров.Добавить();
    НоваяСтрока.Имя = "КадроваяИсторияСотрудников";
    
КонецЕсли;

Способ 3: Через ПКО набора записей регистра

Третий путь — создать отдельное ПКО не только для документа, но и для самого набора записей регистра сведений. В правилах выгрузки (ПВД) мы выгружаем сам набор записей, а в качестве свойства Регистратор передаем ссылку на предварительно сформированный или генерируемый документ ПереносДанных. Этот способ часто применяется в типовых правилах перехода между редакциями.

Важные правила работы: Режим записи и оптимизация

Документ переноса является искусственным регистратором и не имеет стандартного модуля проведения. При настройке ПКО в КД 2.0 необходимо строго следить за режимом записи. Обязательно установите:

РежимЗаписи = РежимЗаписиДокумента.Запись;

Попытка провести загруженный документ приведет к системным ошибкам или потере сформированных наборов записей.

Также обратим внимание на группировку данных. Документ спроектирован так, чтобы хранить большие массивы данных. При выгрузке не создавайте отдельный документ на каждого сотрудника. Сгруппируйте записи в сводные таблицы (например, по организациям или периодам) и выгружайте их единым массивом в один документ. Это многократно ускорит обмен и не перегрузит интерфейс системы.

← На главную