В конфигурации «Зарплата и управление персоналом 2.5» задача получения списка сотрудников, которые должны выйти на работу «сегодня» или в любую другую дату, требует комплексного подхода. Недостаточно просто посмотреть график работы, назначенный сотруднику, так как реальная ситуация на производстве корректируется отпусками, больничными и командировками. Проанализируем, как правильно собрать эти данные программно или с помощью типовых отчетов.
Первым делом нам необходимо определить плановое рабочее время. Основным источником этой информации является регистр сведений ГрафикиРаботыПоВидамВремени. Именно здесь система хранит развернутую информацию о том, сколько часов и по какому виду времени (явка, ночные, вечерние) должен отработать сотрудник согласно своему графику.
Разберем структуру данных в этом регистре:
Рассмотрим пример логики запроса для получения плановых данных. Нам нужно выбрать записи, где ОсновноеЗначение больше нуля на искомую дату. Обратите внимание, что если в компании используются индивидуальные графики, данные в этом регистре будут иметь приоритет над общим графиком, назначенным при приеме на работу, так как при проведении документа «Индивидуальный график работы» записи в этом регистре обновляются.
Даже если по графику у сотрудника стоит рабочий день, он может отсутствовать по уважительной причине. Чтобы получить достоверный список «тех, кто выйдет», мы должны исключить людей, находящихся в отпусках, на больничных или в командировках. Проанализируем основные источники данных об отклонениях:
ДатаНачала и ДатаОкончания. Если состояние сотрудника отлично от «Работает», его следует исключить из итогового списка.Для реализации задачи программным способом рекомендуется выполнить следующие шаги:
Шаг 1. Выбираем из регистра ГрафикиРаботыПоВидамВремени всех сотрудников, у которых на нужную дату количество часов (ОсновноеЗначение) больше 0 по виду времени «Явка».
Шаг 2. Выполняем Левое соединение полученной таблицы с данными регистра СостояниеСотрудниковОрганизаций. Условие соединения должно проверять вхождение нашей даты в период действия состояния.
Шаг 3. Фильтруем результат. Если в колонке состояния обнаружено значение (отпуск, болезнь и т.д.), такой сотрудник в список «сегодня работающих» не попадает.
Пример структуры запроса (схематично):
ВЫБРАТЬ
Графики.Сотрудник,
Графики.ОсновноеЗначение КАК Часы
ИЗ
РегистрСведений.ГрафикиРаботыПоВидамВремени КАК Графики
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.СостояниеСотрудниковОрганизаций КАК Состояния
ПО Графики.Сотрудник = Состояния.Сотрудник
И (&НужнаяДата МЕЖДУ Состояния.ДатаНачала И Состояния.ДатаОкончания)
ГДЕ
Графики.Дата = &НужнаяДата
И Графики.ОсновноеЗначение > 0
И Состояния.Состояние ЕСТЬ NULL
Если нет возможности писать код, проанализируем стандартные возможности ЗУП 2.5. Профессионалы часто советуют обратить внимание на отчет «Табель учета рабочего времени (Т-13)». Хотя он обычно формируется за месяц, алгоритмы, заложенные в его основе, идеально подходят для нашей задачи.
В коде формирования этого отчета реализованы сложные механизмы сопоставления графиков и фактических документов отклонений. Вы можете сформировать этот отчет за один конкретный день. Те сотрудники, у которых в ячейке будет стоять «Я» (Явка) с указанием часов, и являются теми, кто должен выйти на работу.
Рассмотрим подробнее ситуации, которые могут усложнить расчет:
ПроцедурыУправленияПерсоналом, которые позволяют получить состояние сотрудника на конкретный момент времени без написания сложных запросов вручную.Выяснив все эти детали, мы можем построить максимально точный отчет, который покажет реальную картину выхода персонала на смену.