Как правильно рассчитать время нахождения сотрудника на рабочем месте по данным турникетов в 1С

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

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

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

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

Метод 1: По крайним точкам (Ранний вход — Поздний выход)
Этот метод заключается в поиске самой ранней отметки «Приход» и самой поздней отметки «Выход» за рабочую смену. Разница между ними за вычетом фиксированного обеденного перерыва принимается за отработанное время. Преимущество: простота реализации. Недостаток: полная незащищенность от «фиктивного» присутствия. Сотрудник может зайти в 9:00, через минуту выйти через тот же турникет (или незаметно для системы), вернуться к 18:00 и снова выйти. Система посчитает, что он был на работе весь день.

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

Алгоритм преобразования данных в 1С

Для реализации интервального метода нам необходимо преобразовать плоский список событий в таблицу интервалов. Разберем этот процесс по шагам.

1. Сортировка данных. Первым делом отсортируем все события по сотруднику и времени события. Это критически важно для корректного поиска пар.

2. Поиск парных событий. Проанализируем последовательность записей. Идеальная цепочка выглядит так: Вход -> Выход -> Вход -> Выход. В этом случае мы просто вычитаем время входа из времени последующего выхода и суммируем результат.

Рассмотрим пример кода на языке 1С, который демонстрирует логику обхода выборки для расчета чистого времени:


// Предположим, РезультатЗапроса содержит колонки: Сотрудник, ВремяСобытия, ТипСобытия
ЧистоеВремя = 0;
ВремяВхода = '00010101';

Для Каждого Строка Из РезультатЗапроса Цикл
    Если Строка.ТипСобытия = Перечисления.ТипыСобытийСКУД.Вход Тогда
        // Запоминаем время входа для последующей пары
        ВремяВхода = Строка.ВремяСобытия;
    ИначеЕсли Строка.ТипСобытия = Перечисления.ТипыСобытийСКУД.Выход И ЗначениеЗаполнено(ВремяВхода) Тогда
        // Нашли пару, считаем интервал в секундах
        Интервал = Строка.ВремяСобытия - ВремяВхода;
        ЧистоеВремя = ЧистоеВремя + Интервал;
        // Сбрасываем время входа, чтобы не использовать его повторно
        ВремяВхода = '00010101';
    КонецЕсли;
КонецЦикла;

3. Обработка непарных отметок. Это самая сложная часть задачи. Что делать, если зафиксирован Вход, а затем снова Вход? Или если первым событием в середине дня идет Выход? Такие ситуации возникают, когда сотрудники проходят турникет «паровозиком», прикладывают карту, но не проходят, или используют запасные выходы. Проанализируем ситуацию: если мы видим два входа подряд, первый следует считать ошибочным или использовать логику «виртуального выхода» по графику работы, но лучше всего помечать такие данные как «требующие проверки».

Технические приемы в запросах 1С

Для эффективного расчета в 1С часто используют механизм соединения таблицы самой с собой. Мы можем соединить таблицу событий СКУД с ней же самой по условию Т1.Время < Т2.Время и найти для каждого входа минимальное время выхода. В 1С это удобно делать через временные таблицы в языке запросов.

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

Особенности учета ночных смен

Если на предприятии есть ночные смены, расчет времени «внутри суток» перестает работать. В этом случае интервал может начаться в 22:00 одного дня и закончиться в 06:00 следующего. Разберем, как это решить: при расчете мы не должны жестко ограничиваться выборкой за календарные сутки. Мы берем интервал времени с запасом (например, +/- 12 часов от границ смены) и ищем пары событий Вход и Выход, игнорируя смену календарной даты. Итоговое время следует относить на ту дату, в которую началась смена согласно графику работы сотрудника.

Юридические и организационные аспекты

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

Чтобы данные из 1С имели вес, необходимо придерживаться следующей схемы:

  1. Использовать данные СКУД как сигнальную информацию для ответственных лиц (кадровиков, руководителей).
  2. При обнаружении отклонений запрашивать у сотрудника объяснительную записку.
  3. Основанием для взыскания должна служить именно объяснительная записка (или акт об отказе в её предоставлении) и бумажный табель, подписанный ответственным лицом.
  4. В компании должно быть утверждено «Положение о пропускном режиме», в котором зафиксирована обязанность сотрудника отмечаться на турникете.

Методы борьбы с махинациями

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

Резюме

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

← На главную