При разработке внешних обработок в конфигурации Зарплата и управление персоналом 3.1 часто возникает потребность в анализе рабочего времени сотрудников. Определение факта явки — это не просто проверка отсутствия больничного или отпуска, а сложный процесс, учитывающий графики работы, производственный календарь и проведенные документы отклонений. Рассмотрим, как подойти к решению этой задачи грамотно и избежать ошибок.
Прежде чем писать собственный запрос, полезно изучить, как сама система определяет рабочее время. Если вам необходимо проверить логику работы вашей обработки, воспользуйтесь стандартными средствами:
Личные данные: позволяет проанализировать состояние сотрудника на конкретную дату.Отсутствия сотрудников: наглядно показывает периоды, когда сотрудник не работал.Эти отчеты являются эталонными. Изучив их структуру в конфигураторе, вы сможете «подсмотреть» функции или запросы, которые используют типовые разработчики для сбора данных.
Если требуется программное решение, наиболее надежным способом является работа с регистром расчета Начисления. Именно этот регистр является основным хранилищем данных о результатах расчетов зарплаты.
Для определения явки мы можем использовать виртуальную таблицу Фактический период действия. Рассмотрим пример структуры запроса, который поможет вам получить данные по конкретному сотруднику:
ВЫБРАТЬ
НачисленияФактическийПериодДействия.Сотрудник,
НачисленияФактическийПериодДействия.ВидРасчета,
НачисленияФактическийПериодДействия.ПериодДействияНачало,
НачисленияФактическийПериодДействия.ПериодДействияКонец
ИЗ
РегистрРасчета.Начисления.ФактическийПериодДействия(
&ПериодНачало,
&ПериодКонец,
,
Сотрудник = &Сотрудник
) КАК НачисленияФактическийПериодДействия
ГДЕ
НачисленияФактическийПериодДействия.ВидРасчета.КатегорияНачисления = ЗНАЧЕНИЕ(Перечисление.КатегорииНачислений.ОплатаВремени)
Важные замечания:
Начисление зарплаты и взносов. Если вам нужны данные «на лету», до расчета зарплаты, этот метод может не показать результат.Вид расчета, чтобы отсеять отпуска и больничные, которые также могут попадать в этот регистр.Одной из лучших практик в современных конфигурациях на платформе 1С:Предприятие 8.3 является использование типовых API. В ЗУП 3.1 за учет времени отвечает общий модуль УчетРабочегоВремени. Разработчики 1С регулярно обновляют эти функции, чтобы соответствовать изменениям в законодательстве.
Вместо прямого обращения к таблицам БД, мы рекомендуем искать методы, названия которых содержат ДанныеУчетаВремени. Использование данных функций гарантирует, что ваша обработка останется работоспособной после обновления конфигурации. Посмотрите структуру модуля в конфигураторе: там скрыта логика учета индивидуальных графиков, командировок и праздничных дней, которую крайне сложно реализовать самостоятельно в одном запросе.
Помните, что сотрудник может не выйти на работу, потому что по его графику этот день является выходным. В этом случае отсутствие явки не является нарушением. Для получения нормативных данных о рабочем времени следует обращаться к регистру сведений ГрафикиРаботыПоВидамВремени. Сопоставление фактических данных из документов с нормативными данными из этого регистра позволит вам с высокой точностью определить, был сотрудник на рабочем месте или нет.
Подводя итог, разберем порядок действий при разработке:
ДанныеОтработанногоВремениСотрудников — он заполняется быстрее и дает информацию о фактическом времени.Начисления с использованием виртуальной таблицы Фактический период действия.УчетРабочегоВремени — это самый «безопасный» способ получения данных.Работая в ЗУП 3.1, всегда помните, что система многогранна. Простая проверка «есть запись или нет» часто приводит к неверным результатам. Всегда учитывайте все виды времени и состояние сотрудника на заданную дату!