Как программно определить, была ли у сотрудника явка в конкретный день в ЗУП 3.1?

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

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

Анализ данных через типовые механизмы

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

  1. Отчет Личные данные: позволяет проанализировать состояние сотрудника на конкретную дату.
  2. Отчет Отсутствия сотрудников: наглядно показывает периоды, когда сотрудник не работал.

Эти отчеты являются эталонными. Изучив их структуру в конфигураторе, вы сможете «подсмотреть» функции или запросы, которые используют типовые разработчики для сбора данных.

Программное получение данных с помощью регистра расчета «Начисления»

Если требуется программное решение, наиболее надежным способом является работа с регистром расчета Начисления. Именно этот регистр является основным хранилищем данных о результатах расчетов зарплаты.

Для определения явки мы можем использовать виртуальную таблицу Фактический период действия. Рассмотрим пример структуры запроса, который поможет вам получить данные по конкретному сотруднику:


ВЫБРАТЬ
    НачисленияФактическийПериодДействия.Сотрудник,
    НачисленияФактическийПериодДействия.ВидРасчета,
    НачисленияФактическийПериодДействия.ПериодДействияНачало,
    НачисленияФактическийПериодДействия.ПериодДействияКонец
ИЗ
    РегистрРасчета.Начисления.ФактическийПериодДействия(
        &ПериодНачало,
        &ПериодКонец,
        ,
        Сотрудник = &Сотрудник
    ) КАК НачисленияФактическийПериодДействия
ГДЕ
    НачисленияФактическийПериодДействия.ВидРасчета.КатегорияНачисления = ЗНАЧЕНИЕ(Перечисление.КатегорииНачислений.ОплатаВремени)

Важные замечания:

Использование общего модуля «УчетРабочегоВремени»

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

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

Учет графиков работы и производственного календаря

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

Алгоритм действий разработчика

Подводя итог, разберем порядок действий при разработке:

  1. Определите, на каком этапе (до или после расчета зарплаты) вам нужны данные.
  2. Для оперативного анализа используйте регистр накопления ДанныеОтработанногоВремениСотрудников — он заполняется быстрее и дает информацию о фактическом времени.
  3. Для аналитических целей применяйте регистр расчета Начисления с использованием виртуальной таблицы Фактический период действия.
  4. Если задача сложная, изучите общий модуль УчетРабочегоВремени — это самый «безопасный» способ получения данных.

Работая в ЗУП 3.1, всегда помните, что система многогранна. Простая проверка «есть запись или нет» часто приводит к неверным результатам. Всегда учитывайте все виды времени и состояние сотрудника на заданную дату!

← На главную