При переходе с конфигурации Зарплата и Управление Персоналом 2.5 на ЗУП 3.1 разработчики часто сталкиваются с невозможностью прямого перенесения запросов, работающих с плановыми начислениями сотрудников. Запросы из версии 2.5, обращавшиеся к регистру сведений ПлановыеНачисленияРаботниковОрганизации, перестают работать, так как в 3.1 концепция хранения кадровых данных и показателей расчета заработной платы полностью изменилась.
В этой статье разберем ключевые архитектурные различия двух конфигураций, проанализируем, почему нельзя просто переписать старый запрос, и рассмотрим правильные механизмы получения сведений о плановых начислениях и показателях в ЗУП 3.1.
Проанализируем основные изменения в структуре хранения данных, которые необходимо учитывать при написании отчетов и обработок выгрузки:
ПлановыеНачисленияРаботниковОрганизации в реквизитах Показатель1 ... Показатель6. В ЗУП 3.1 сами начисления и значения показателей разнесены по разным регистрам сведений. Каждый показатель фиксируется отдельной записью.ДействуетДо, ВидРасчетаЗавершения, Показатель1Завершения и т. д. В ЗУП 3.1 применена интервальная модель: для периода действия вводятся явные границы ДатаНачала и ДатаОкончания. По окончании периода действие начисления прекращается без необходимости хранить специальные реквизиты завершения.ПлановыеНачисления);ПлановыеНачисленияИнтервальный) — хранит подготовленные периоды действия сведений для быстрого выбора среза на любой день;ПлановыеНачисленияИспр) — хранит информацию о перерасчетах и исправлениях документов прошлых периодов.РазрядыКатегорииПерсонала или регистр КадроваяИсторияСотрудников), а необходимость ввода разряда определяется на уровне формулы вида расчета через используемые показатели.Рассмотрим, как правильно составить запрос для получения действующих плановых начислений. Для работы с периодами действия лучше всего обращаться к интервальным регистрам сведений.
Посмотрим на пример запроса к интервальному регистру ПлановыеНачисленияИнтервальный:
ВЫБРАТЬ
ПлановыеНачисления.Сотрудник КАК Сотрудник,
ПлановыеНачисления.Начисление КАК Начисление,
ПлановыеНачисления.ДатаНачала КАК ДатаНачала,
ПлановыеНачисления.ДатаОкончания КАК ДатаОкончания
ИЗ
РегистрСведений.ПлановыеНачисленияИнтервальный КАК ПлановыеНачисления
ГДЕ
ПлановыеНачисления.ДатаНачала <= &КонецПериода
И (ПлановыеНачисления.ДатаОкончания >= &НачалоПериода
ИЛИ ПлановыеНачисления.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1))
Для получения конкретных значений показателей (например, размера оклада или тарифной ставки) потребуется соединение с интервальным регистром показателей ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковИнтервальный.
Прямое обращение к регистрам сведений в ЗУП 3.1 через запросы может привести к ошибкам, если не учитывать таблицы исправлений и нюансы интервальных виртуальных таблиц. Разработчики конфигурации рекомендуют получать актуальные данные с помощью встроенных функций программного интерфейса.
Рассмотрим использование функции модуля КадровыйУчетРасширенный для получения текущих плановых начислений сотрудника:
МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(СотрудникСсылка);
ТаблицаНачислений = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудников, ТекущаяДата());
Если требуется сформировать сложный пакетный запрос с кадровыми данными и начислениями, рекомендуется задействовать процедуры общего модуля ЗарплатаКадрыОбщиеНаборыДанных, которые автоматически создают и заполняют временные таблицы с учетом таблиц исправлений и приоритетов документов.
Показатель1 ... Показатель6 используйте связи по ссылкам на элементы справочника ПоказателиРасчетаЗарплаты.Испр).