Как узнать график работы сотрудника на определенную дату в 1С:УПП и 1С:ЗУП

Программист 1С v8.3 (Обычные формы) Управленческий учет
← На главную

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

Способ 1. Получение графика через запрос к регистру сведений «Работники организаций»

В типовых конфигурациях 1С:Управление производственным предприятием 1.3 и 1С:Зарплата и Управление Персоналом 2.5 вся история кадровых изменений (приемы, переводы, изменения графиков) фиксируется в периодическом регистре сведений РаботникиОрганизаций.

Для выборки актуального графика на дату используем виртуальную таблицу СрезПоследних. Разберем по шагам построение оптимального запроса:

  1. Определяем дату среза (рекомендуется передавать конец дня через КонецДня(&НаДату) или объект Граница, чтобы учесть кадровые документы, проведенные внутри дня).
  2. Передаем условия отбора по сотруднику и организации непосредственно в параметры виртуальной таблицы, а не в блок ГДЕ. Это критически важно для производительности СУБД, так как отсекает лишние данные на уровне выборки индекса.

Посмотрим на пример текста запроса:


ВЫБРАТЬ
    РаботникиОрганизацийСрезПоследних.Период КАК Период,
    РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
    РаботникиОрганизацийСрезПоследних.Организация КАК Организация,
    РаботникиОрганизацийСрезПоследних.ГрафикРаботы КАК ГрафикРаботы,
    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния КАК ПричинаИзмененияСостояния
ИЗ
    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ПериодСреза, Сотрудник = &Сотрудник) КАК РаботникиОрганизацийСрезПоследних

Важное замечание: Срез последних возвращает последнее кадровое состояние. Если сотрудник был уволен до указанной даты, запрос все равно вернет последнюю строку с графиком. Для исключения уволенных сотрудников обязательно анализируем реквизит ПричинаИзмененияСостояния (он не должен быть равен значению перечисления ПричиныИзмененияСостояния.Увольнение) или проверяем условие ЗанимаемыхСтавок > 0.

Способ 2. Учет индивидуальных графиков работы

Проанализируем ситуацию, когда на предприятии применяются индивидуальные графики. Если сотруднику введен документ «Ввод индивидуальных графиков работы», то назначенный в кадровом учете график работы из справочника ГрафикиРаботы вытесняется индивидуальным расписанием.

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

  1. Проверяем наличие индивидуального графика в регистре сведений ГрафикиРаботыПоВидамВремени с отбором по сотруднику на требуемый месяц.
  2. Если индивидуальный график не зарегистрирован, получаем основной график из среза последних регистра РаботникиОрганизаций.
  3. По полученному основному графику считываем норму часов и расписание из регистра ГрафикиРаботыПоВидамВремени с отбором по измерению ГрафикРаботы и конкретной дате.

Способ 3. Интерактивное получение графика через типовые отчеты

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

  1. Открываем типовой отчет «Списки сотрудников организаций».
  2. Переходим в командную панель: Настройка → вкладка Колонки.
  3. Добавляем поле «Трудовой договор: График работы» (или раскрываем ветку кадровых данных).
  4. На вкладке Общие указываем нужную дату отчета. Программа автоматически выполнит срез кадровых сведений на заданный день и выведет действующий график каждого работника.
  5. Для произвольного среза также подходит «Универсальный отчет» по регистру сведений РаботникиОрганизаций (тип данных — Таблица среза последних на заданную дату).
← На главную