Как перенести запросы по плановым начислениям и показателям из ЗУП 2.5 в ЗУП 3.1?

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

При переходе с конфигурации Зарплата и Управление Персоналом 2.5 на ЗУП 3.1 разработчики часто сталкиваются с невозможностью прямого перенесения запросов, работающих с плановыми начислениями сотрудников. Запросы из версии 2.5, обращавшиеся к регистру сведений ПлановыеНачисленияРаботниковОрганизации, перестают работать, так как в 3.1 концепция хранения кадровых данных и показателей расчета заработной платы полностью изменилась.

В этой статье разберем ключевые архитектурные различия двух конфигураций, проанализируем, почему нельзя просто переписать старый запрос, и рассмотрим правильные механизмы получения сведений о плановых начислениях и показателях в ЗУП 3.1.

Главные архитектурные различия между ЗУП 2.5 и ЗУП 3.1

Проанализируем основные изменения в структуре хранения данных, которые необходимо учитывать при написании отчетов и обработок выгрузки:

  1. Разделение начислений и значений показателей: В ЗУП 2.5 сведения о виде расчета и его показатели (например, оклад, тарифная ставка, процент надбавки) хранились в одной строке регистра ПлановыеНачисленияРаботниковОрганизации в реквизитах Показатель1 ... Показатель6. В ЗУП 3.1 сами начисления и значения показателей разнесены по разным регистрам сведений. Каждый показатель фиксируется отдельной записью.
  2. Отказ от реквизитов завершения: В ЗУП 2.5 для временных начислений активно использовались реквизиты ДействуетДо, ВидРасчетаЗавершения, Показатель1Завершения и т. д. В ЗУП 3.1 применена интервальная модель: для периода действия вводятся явные границы ДатаНачала и ДатаОкончания. По окончании периода действие начисления прекращается без необходимости хранить специальные реквизиты завершения.
  3. Использование трех типов регистров: В ЗУП 3.1 данные о плановых начислениях и кадровой истории одновременно представлены в трех видах регистров:
    1. Основной регистр сведений (например, ПлановыеНачисления);
    2. Интервальный регистр (например, ПлановыеНачисленияИнтервальный) — хранит подготовленные периоды действия сведений для быстрого выбора среза на любой день;
    3. Регистр исправлений (например, ПлановыеНачисленияИспр) — хранит информацию о перерасчетах и исправлениях документов прошлых периодов.
  4. Связь с тарифными разрядами: В ЗУП 3.1 тарифный разряд или категория не являются реквизитами регистра начислений. Разряд хранится в кадровых данных (справочник РазрядыКатегорииПерсонала или регистр КадроваяИсторияСотрудников), а необходимость ввода разряда определяется на уровне формулы вида расчета через используемые показатели.

Получение плановых начислений в ЗУП 3.1 через запросы

Рассмотрим, как правильно составить запрос для получения действующих плановых начислений. Для работы с периодами действия лучше всего обращаться к интервальным регистрам сведений.

Посмотрим на пример запроса к интервальному регистру ПлановыеНачисленияИнтервальный:


ВЫБРАТЬ
	ПлановыеНачисления.Сотрудник КАК Сотрудник,
	ПлановыеНачисления.Начисление КАК Начисление,
	ПлановыеНачисления.ДатаНачала КАК ДатаНачала,
	ПлановыеНачисления.ДатаОкончания КАК ДатаОкончания
ИЗ
	РегистрСведений.ПлановыеНачисленияИнтервальный КАК ПлановыеНачисления
ГДЕ
	ПлановыеНачисления.ДатаНачала <= &КонецПериода
	И (ПлановыеНачисления.ДатаОкончания >= &НачалоПериода
		ИЛИ ПлановыеНачисления.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1))

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

Использование программного API конфигурации ЗУП 3.1

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

Рассмотрим использование функции модуля КадровыйУчетРасширенный для получения текущих плановых начислений сотрудника:


МассивСотрудников = Новый Массив;
МассивСотрудников.Добавить(СотрудникСсылка);

ТаблицаНачислений = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудников(МассивСотрудников, ТекущаяДата());

Если требуется сформировать сложный пакетный запрос с кадровыми данными и начислениями, рекомендуется задействовать процедуры общего модуля ЗарплатаКадрыОбщиеНаборыДанных, которые автоматически создают и заполняют временные таблицы с учетом таблиц исправлений и приоритетов документов.

Рекомендации по переносу логики из ЗУП 2.5

  1. Не пытайтесь перенести структуру запроса «один в один»: Перепишите алгоритм с нуля, исходя из новой структуры регистров ЗУП 3.1.
  2. Выделите показатели в отдельные сущности: Вместо колонок Показатель1 ... Показатель6 используйте связи по ссылкам на элементы справочника ПоказателиРасчетаЗарплаты.
  3. Учитывайте исправления: При прямой работе с регистрами сведений всегда проверяйте наличие записей в регистрах исправлений (с суффиксом Испр).
  4. Сравнивайте движения документов: Создайте идентичные документы (например, «Прием на работу» или «Изменение оплаты труда») в ЗУП 2.5 и ЗУП 3.1 и проанализируйте движения по регистрам для точного сопоставления полей.
← На главную