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