Как выбрать сотрудников, отработавших полный месяц в 1С:ЗУП Ред 3

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

В кадровом учете и при расчете заработной платы часто возникает задача выделить список сотрудников, которые отработали календарный месяц полностью. Под «полной отработкой» обычно подразумевается отсутствие любых отклонений: отпусков, больничных, прогулов, отгулов и даже командировок. В этой статье мы подробно разберем, как решить эту задачу в программе 1С:Зарплата и управление персоналом (редакция 3), используя как встроенные отчёты, так и возможности программирования.

Способ 1. Использование типовых отчетов системы

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

Рассмотрим отчет «Потери рабочего времени» (раздел Кадры — Кадровые отчеты). Этот отчет предназначен для анализа неявок. Чтобы получить список «полностью отработавших», мы можем пойти от обратного: сформировать отчет за нужный месяц и увидеть всех, у кого были потери. Те сотрудники организации, которые не попали в этот список, потенциально отработали месяц полностью.

Также полезно обратить внимание на отчет «Отсутствия сотрудников». В нем можно настроить фильтры по конкретному подразделению. Если нам нужно быстро проверить конкретного человека, этот инструмент будет самым оперативным.

Способ 2. Программный метод через анализ данных учета времени

Если задача стоит в автоматизации процесса (например, для создания заполнения какого-либо документа), нам потребуется обратиться к программным механизмам. Наиболее надежным источником данных является регистр накопления ДанныеТабельногоУчетаРабочегоВремениСотрудников.

Разберем логику построения запроса. Нам необходимо выбрать сотрудников, у которых за период зарегистрированы только виды времени, относящиеся к явке или выходным дням по графику. Проанализируем пример кода, который базируется на логике регламентированного отчета 57-Т. Этот отчет собирает данные именно о полностью отработавших сотрудниках.

Рассмотрим основные этапы реализации такого запроса:

  1. Использование временных таблиц для получения данных учета времени.
  2. Исключение сотрудников, у которых есть виды времени, не являющиеся «Рабочим временем» или «Выходными днями».
  3. Проверка периодов работы (дата приема и дата увольнения).

Пример программной реализации в консоли запросов или модуле:


// 1. Создаем временную таблицу с данными учета времени
УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(Запрос.МенеджерВременныхТаблиц, Ложь, ПараметрыЗаполнения);

// 2. Выбираем сотрудников, имеющих отклонения
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ДанныеУчетаВремени.Сотрудник КАК Сотрудник
    |ПОМЕСТИТЬ ВТСотрудникиСОтклонениями
    |ИЗ
    |    ВТДанныеУчетаВремени КАК ДанныеУчетаВремени
    |ГДЕ
    |    ДанныеУчетаВремени.ВидУчетаВремени <> ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.РабочееВремя)
    |    И ДанныеУчетаВремени.ВидУчетаВремени <> ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.ВыходныеДни)
    |    И НЕ ДанныеУчетаВремени.ВидУчетаВремени.РабочееВремя";

После того как мы получили список сотрудников с отклонениями, мы можем соединить его с общим списком сотрудников подразделения и исключить тех, кто попал в таблицу ВТСотрудникиСОтклонениями.

Способ 3. Сравнение нормы и факта в регистре расчета

Еще один эффективный метод — проанализировать данные регистра расчета Начисления. Выясним причину, по которой этот метод считается одним из самых точных: при расчете зарплаты система автоматически вычисляет показатели ОтработаноДней и НормаДней.

Проанализируем ситуацию: если сотрудник отработал месяц без пропусков, то его фактически отработанное время будет строго равно норме по его графику работы. В запросе это выглядит следующим образом:


ВЫБРАТЬ
    ОсновныеНачисления.Сотрудник,
    СУММА(ОсновныеНачисления.ОтработаноДней) КАК Факт,
    СУММА(ОсновныеНачисления.НормаДней) КАК Норма
ИЗ
    РегистрРасчета.Начисления КАК ОсновныеНачисления
ГДЕ
    ОсновныеНачисления.ПериодРегистрации = &Период
    И ОсновныеНачисления.Подразделение = &Подразделение
СГРУППИРОВАТЬ ПО
    ОсновныеНачисления.Сотрудник
ИМЕЮЩИЕ
    СУММА(ОсновныеНачисления.ОтработаноДней) = СУММА(ОсновныеНачисления.НормаДней)
    И СУММА(ОсновныеНачисления.НормаДней) > 0

Важный момент: этот метод сработает только в том случае, если по сотрудникам уже произведен расчет документа Начисление зарплаты и взносов. Если расчет еще не выполнен, данные в регистре могут быть неактуальными.

Важные нюансы: прием и увольнение

Рассмотрим ситуацию, когда сотрудник принят на работу в середине месяца, например, 15-го числа, и до конца месяца не имел прогулов. С точки зрения учета времени у него не будет «отклонений», но он не отработал полный месяц.

Для корректного отбора необходимо добавить условия по кадровым данным. Выясним, как это сделать правильно. Мы должны проверить, что:

  1. ДатаПриема меньше или равна первому числу анализируемого месяца.
  2. ДатаУвольнения либо пустая, либо больше или равна последнему числу месяца.

В коде это реализуется через обращение к кадровым данным сотрудников. В ЗУП 3 для этого удобно использовать программный интерфейс КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников. Это позволит нам отсечь тех, кто работал в организации не с начала месяца или уволился до его окончания.

Анализ через регистр «Состояния сотрудников»

Разберем еще один способ, который часто используют опытные разработчики. Существует регистр сведений СостоянияСотрудников. В нем фиксируются периоды, когда сотрудник находится в состояниях, отличных от основной работы (Отпуск, Больничный, Командировка).

Если нам нужно быстро проверить список, мы можем выполнить запрос к этому регистру за указанный период. Если по сотруднику нет ни одной записи, период которой пересекается с нашим месяцем (или есть только записи со значением Работа), значит, отклонений не было. Этот метод работает быстрее, чем анализ детальных записей табеля, так как объем данных в регистре состояний значительно меньше.

Резюме

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

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

← На главную