Рассмотрим частую задачу при переходе на новые версии 1С:Зарплата и Управление Персоналом (ЗУП) — создание документа ПереносДанных с помощью правил обмена (Конвертация данных 2.0). Если нам нужно перенести кадровую историю сотрудников, мы обычно делаем выборку по регистру с помощью запроса. Но как правильно загрузить эти записи в сам документ переноса? Проанализируем специфику этого объекта и разберем по шагам несколько рабочих вариантов.
Документ ПереносДанных — это аналог классической «Корректировки регистров», адаптированный специально для ЗУПа. Выясним его главную архитектурную особенность: у него нет стандартных табличных частей для хранения данных (самих записей). Данные нужно переносить сразу в наборы движений документа.
Однако есть один важный нюанс. У документа существует обязательная служебная табличная часть — ТаблицаРегистров. В нее записываются имена регистров (в виде строк), по которым документ делает движения. Если мы запишем движения в регистр сведений, но не добавим имя этого регистра (например, КадроваяИсторияСотрудников) в данную табличную часть, данные просто не будут отображаться в форме документа, а при пересохранении пользователем движения могут быть безвозвратно очищены.
Первый вариант основан на преобразовании таблицы значений (ТЗ) в движения. Рассмотрим по шагам этот алгоритм:
ВыгрузитьПоПравилу, указывая саму ТЗ как входящие данные.Движения.КадроваяИсторияСотрудников).Механизмы Конвертации данных 2.0 умеют автоматически преобразовывать переданные коллекции в наборы движений документа при загрузке.
Если автоматическая конвертация групп свойств не подходит, проанализируем ручной вариант с параметрами. Это даст нам максимальный контроль над процессом.
ПараметрыОбъекта.Посмотрим на пример кода, который необходимо прописать в обработчике:
Если ПараметрыОбъекта <> Неопределено И ПараметрыОбъекта.Свойство("ТЗКадроваяИстория") Тогда
НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Объект.Ссылка);
НаборЗаписей.Загрузить(ПараметрыОбъекта.ТЗКадроваяИстория);
НаборЗаписей.Записать();
// Не забываем добавить имя регистра в служебную ТЧ документа
НоваяСтрока = Объект.ТаблицаРегистров.Добавить();
НоваяСтрока.Имя = "КадроваяИсторияСотрудников";
КонецЕсли;
Третий путь — создать отдельное ПКО не только для документа, но и для самого набора записей регистра сведений. В правилах выгрузки (ПВД) мы выгружаем сам набор записей, а в качестве свойства Регистратор передаем ссылку на предварительно сформированный или генерируемый документ ПереносДанных. Этот способ часто применяется в типовых правилах перехода между редакциями.
Документ переноса является искусственным регистратором и не имеет стандартного модуля проведения. При настройке ПКО в КД 2.0 необходимо строго следить за режимом записи. Обязательно установите:
РежимЗаписи = РежимЗаписиДокумента.Запись;
Попытка провести загруженный документ приведет к системным ошибкам или потере сформированных наборов записей.
Также обратим внимание на группировку данных. Документ спроектирован так, чтобы хранить большие массивы данных. При выгрузке не создавайте отдельный документ на каждого сотрудника. Сгруппируйте записи в сводные таблицы (например, по организациям или периодам) и выгружайте их единым массивом в один документ. Это многократно ускорит обмен и не перегрузит интерфейс системы.