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

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

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

Понимание архитектуры данных

Важно различать График работы и Табель учета рабочего времени (Т-13). Если табель отражает фактическое использование времени, то график — это плановые показатели, которые назначаются сотруднику. В системе 1С:ЗУП эти данные не являются «отчетом» в привычном понимании, который можно вызвать одной функцией, а представляют собой набор сведений, хранящихся в регистрах.

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

Шаг 1: Получение ссылки на график сотрудника

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

Разберем пример кода для получения данных сотрудника:


КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, 
    ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СотрудникСсылка), 
    "Организация, ФизическоеЛицо, ГрафикРаботы", 
    ТекущаяДата());

В результате работы этой функции вы получите структуру, в которой поле ГрафикРаботы будет содержать ссылку на элемент справочника ГрафикиРаботыСотрудников. Имея эту ссылку, мы можем двигаться дальше к получению детализации.

Шаг 2: Получение сетки графика (часов работы)

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

  1. Использование регистра данных: Данные о плановом времени хранятся в регистре ДанныеГрафика. Вы можете сформировать запрос к этому регистру, отфильтровав данные по ссылке на график, полученной на предыдущем шаге.
  2. Анализ служебных модулей: Если вам требуется поведение, аналогичное тому, как данные отображаются в форме «Самообслуживание», стоит изучить процедуру СформироватьФормуГрафикаРаботыСотрудника. В сложных случаях может потребоваться копирование логики заполнения данных из этой процедуры в ваш модуль.

Шаг 3: Формирование файла для вывода

Для реализации задачи по сохранению данных в Excel, пройдем по шагам процесса:

  1. Соберите данные из регистра ДанныеГрафика, используя полученную ссылку на график и заданный период.
  2. Создайте объект ТабличныйДокумент в коде.
  3. Последовательно заполните ячейки табличного документа полученными значениями часов за каждый день.
  4. Сохраните готовый табличный документ в файл, используя метод ТабличныйДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX).

Важные рекомендации

При проектировании алгоритма помните, что график работы сотрудника — величина динамическая. Она может меняться в течение месяца (например, при кадровых перемещениях). Поэтому при получении данных всегда указывайте корректный период, за который вы хотите собрать информацию. Не пытайтесь искать готовый «отчет», так как в ЗУП 3.1 работа с графиками — это процесс обработки данных регистров, а не генерация статических печатных форм.

Следуя этим рекомендациям и используя методы модуля КадровыйУчет, вы сможете построить гибкий механизм получения и выгрузки графиков работы сотрудников, адаптированный под нужды вашего бизнеса.

← На главную