Переход с конфигурации «Зарплата и управление персоналом» версии 2.5 на версию 3.1 — это всегда сложный и ответственный процесс. Основная трудность заключается в том, что архитектура этих программ принципиально различается. Если типовой переход «из коробки» по каким-то причинам не подходит или требуется перенести данные выборочно (например, только определенные типы документов за конкретный период), программисту приходится прибегать к использованию инструмента «1С:Конвертация данных 2.1» (КД).
В данной статье мы подробно разберем, как решить одну из самых распространенных проблем при таком переносе: ситуацию, когда данные из табличных частей документов в ЗУП 2.5 (например, даты начала и окончания командировки) не попадают в соответствующие поля документов в ЗУП 3.1. Мы вместе пройдем по шагам настройки правил и напишем необходимый программный код.
Проанализируем ситуацию: в ЗУП 2.5 многие кадровые документы (Командировки, Отпуска, Больничные листы) были «списочными». Это означает, что в одном документе-источнике могла содержаться табличная часть с данными по нескольким сотрудникам. В ЗУП 3.1 реализована иная концепция: один физический документ чаще всего соответствует одному сотруднику (даже если используется многострочная форма, система внутри создает отдельные записи).
При настройке простого соответствия полей в КД программа может «не видеть» данные, которые в источнике лежат в табличной части, а в приемнике должны оказаться в «шапке» (основных реквизитах) документа. Чтобы исправить это, нам потребуется механизм ВходящиеДанные.
Рассмотрим пример с документом КомандировкиОрганизаций. Нам нужно выгрузить дату начала командировки, которая в версии 2.5 находится в табличной части РаботникиОрганизации. Для этого в ПКО (Правиле Конвертации Объектов) перед выгрузкой или непосредственно в ПКС (Правиле Конвертации Свойств) мы будем использовать запрос.
Разберем пример кода, который необходимо вставить в обработчик ПКС для реквизита ДатаНачала:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КомандировкиОрганизацийРаботникиОрганизации.ДатаНачала
|ИЗ
| Документ.КомандировкиОрганизаций.РаботникиОрганизации КАК КомандировкиОрганизацийРаботникиОрганизации
|ГДЕ
| КомандировкиОрганизацийРаботникиОрганизации.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
Результат = Запрос.Выполнить().Выбрать();
Если Источник.РаботникиОрганизации.Количество() > 0 Тогда
Пока Результат.Следующий() Цикл
// Формируем структуру для передачи в приемник
ВходящиеДанные = Новый Структура("ДатаНачала");
ВходящиеДанные.Вставить("ДатаНачала", Результат.ДатаНачала);
КонецЦикла;
КонецЕсли;
Важный технический нюанс: Если вы переносите данные из многострочного документа 2.5 в одиночные документы 3.1, этот код должен работать в связке с алгоритмом расщепления строк. Если же вы просто хотите «подтянуть» значение из первой строки ТЧ в шапку, убедитесь, что логика обхода коллекции соответствует вашей задаче.
После того как мы подготовили код для получения данных, необходимо правильно настроить параметры в интерфейсе КД. Выясним, какие флажки критически важны:
ДатаНачала).ВходящиеДанные, которую мы заполнили в коде выше.Номеру и Дате документа, либо по уникальному идентификатору (GUID).Одной из причин появления «пустых полей» (особенно реквизита «Сотрудник») является отсутствие ПКО для справочника Сотрудники или ФизическиеЛица. Проанализируем ситуацию: в ЗУП 3.1 связь между сотрудником и физлицом более жесткая, чем в 2.5.
Убедитесь, что:
СправочникСсылка.ФизическиеЛица.Сотрудник или ФизическоеЛицо также имеет настроенное ПКО.Выясним важную причину, по которой простого переноса документов бывает недостаточно. В ЗУП 3.1 вся отчетность (НДФЛ, страховые взносы, средний заработок) строится на регистрах накопления. В то время как в 2.5 часть данных могла браться напрямую из документов или регистров расчета.
При «выборочном» переносе через КД документы в приемник часто попадают в состоянии «не проведен». Чтобы данные отразились в учете, необходимо:
Записать(РежимЗаписиДокумента.Проведение) в обработчике «После загрузки».Внимание: Если документ «Командировка» перенесся, но не рассчитался (пустые суммы), проверьте, перенесены ли данные о плановых начислениях и графиках работы сотрудника. Без этой информации механизм расчета в ЗУП 3.1 не сможет определить сумму оплаты.
Чтобы минимизировать ошибки в процессе переноса, проанализируем состояние исходной базы ЗУП 2.5. Рекомендуем выполнить следующие действия:
Мы рассмотрели технический подход к решению проблемы «пустых полей» при переносе данных из ЗУП 2.5 в 3.1. Использование запросов в обработчиках и структуры ВходящиеДанные позволяет гибко настраивать правила даже для тех случаев, когда штатные средства переноса не справляются. Помните, что выборочный перенос — это ювелирная работа, требующая понимания взаимосвязей регистров и справочников в обеих конфигурациях.