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