Как выполнить выборочный перенос документов из ЗУП 2.5 в ЗУП 3.1 с помощью «Конвертации данных»?

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

Переход с конфигурации «Зарплата и управление персоналом» версии 2.5 на версию 3.1 — это всегда сложный и ответственный процесс. Основная трудность заключается в том, что архитектура этих программ принципиально различается. Если типовой переход «из коробки» по каким-то причинам не подходит или требуется перенести данные выборочно (например, только определенные типы документов за конкретный период), программисту приходится прибегать к использованию инструмента «1С:Конвертация данных 2.1» (КД).

В данной статье мы подробно разберем, как решить одну из самых распространенных проблем при таком переносе: ситуацию, когда данные из табличных частей документов в ЗУП 2.5 (например, даты начала и окончания командировки) не попадают в соответствующие поля документов в ЗУП 3.1. Мы вместе пройдем по шагам настройки правил и напишем необходимый программный код.

Различие в структурах: почему данные «теряются»?

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

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

Шаг 1. Подготовка запроса для получения данных

Рассмотрим пример с документом КомандировкиОрганизаций. Нам нужно выгрузить дату начала командировки, которая в версии 2.5 находится в табличной части РаботникиОрганизации. Для этого в ПКО (Правиле Конвертации Объектов) перед выгрузкой или непосредственно в ПКС (Правиле Конвертации Свойств) мы будем использовать запрос.

Разберем пример кода, который необходимо вставить в обработчик ПКС для реквизита ДатаНачала:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   КомандировкиОрганизацийРаботникиОрганизации.ДатаНачала
    |ИЗ
    |   Документ.КомандировкиОрганизаций.РаботникиОрганизации КАК КомандировкиОрганизацийРаботникиОрганизации
    |ГДЕ
    |   КомандировкиОрганизацийРаботникиОрганизации.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
Результат = Запрос.Выполнить().Выбрать();

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

Важный технический нюанс: Если вы переносите данные из многострочного документа 2.5 в одиночные документы 3.1, этот код должен работать в связке с алгоритмом расщепления строк. Если же вы просто хотите «подтянуть» значение из первой строки ТЧ в шапку, убедитесь, что логика обхода коллекции соответствует вашей задаче.

Шаг 2. Настройка ПКС в «Конвертации данных»

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

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

Шаг 3. Обработка соответствия сотрудников и физлиц

Одной из причин появления «пустых полей» (особенно реквизита «Сотрудник») является отсутствие ПКО для справочника Сотрудники или ФизическиеЛица. Проанализируем ситуацию: в ЗУП 3.1 связь между сотрудником и физлицом более жесткая, чем в 2.5.

Убедитесь, что:

Шаг 4. Особенности регистров и проведения документов

Выясним важную причину, по которой простого переноса документов бывает недостаточно. В ЗУП 3.1 вся отчетность (НДФЛ, страховые взносы, средний заработок) строится на регистрах накопления. В то время как в 2.5 часть данных могла браться напрямую из документов или регистров расчета.

При «выборочном» переносе через КД документы в приемник часто попадают в состоянии «не проведен». Чтобы данные отразились в учете, необходимо:

  1. Либо программно вызывать метод Записать(РежимЗаписиДокумента.Проведение) в обработчике «После загрузки».
  2. Либо вручную перепроводить документы в целевой базе.

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

Рекомендации по подготовке базы перед выгрузкой

Чтобы минимизировать ошибки в процессе переноса, проанализируем состояние исходной базы ЗУП 2.5. Рекомендуем выполнить следующие действия:

Резюме

Мы рассмотрели технический подход к решению проблемы «пустых полей» при переносе данных из ЗУП 2.5 в 3.1. Использование запросов в обработчиках и структуры ВходящиеДанные позволяет гибко настраивать правила даже для тех случаев, когда штатные средства переноса не справляются. Помните, что выборочный перенос — это ювелирная работа, требующая понимания взаимосвязей регистров и справочников в обеих конфигурациях.

← На главную