Как организовать учет времени прихода сотрудников в 1С с помощью штрих-кодов

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

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

Выбор архитектуры хранения данных: Справочник или Регистр?

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

Рассмотрим структуру оптимального регистра сведений (назовем его ЖурналРегистрацииПриходов):

  1. Измерение: Сотрудник (тип СправочникСсылка.Сотрудники).
  2. Ресурс: ВремяСобытия (тип Дата, состав даты: Дата и время).
  3. Реквизит: ВидСобытия (Перечисление: Приход, Уход).

Использование регистра позволит нам быстро строить отчеты, избегать дублирования данных за счет управления периодами и легко очищать базу от старых записей.

Настройка торгового оборудования: сканер в режиме эмуляции COM-порта

Выясним причину, почему обычный сканер, работающий "в разрыв клавиатуры", не подходит для автоматизации. В режиме клавиатуры сканер просто "печатает" цифры туда, где стоит курсор. Это заставляет пользователя постоянно держать открытым нужное поле ввода.

Для создания полноценного АРМ (автоматизированного рабочего места) мы должны перевести сканер в режим Virtual COM-port. В этом случае 1С будет получать Внешнее событие, которое можно обработать программно, даже если окно ввода не активно. Разберем алгоритм настройки:

  1. Переведите сканер в режим эмуляции COM-порта (обычно это делается сканированием специального кода из инструкции к устройству).
  2. Установите драйвер производителя или используйте стандартный драйвер 1С.
  3. В конфигурации настройте "Подключаемое оборудование", выбрав тип "Сканеры штрихкода".

Программная реализация: обработка штрих-кода

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

Посмотрим на пример кода, который идентифицирует сотрудника по штрих-коду и делает запись в регистр:


&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "ScanData" Тогда
        Штрихкод = Параметр[0]; // Получаем считанный код
        ЗафиксироватьСобытиеНаСервере(Штрихкод);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗафиксироватьСобытиеНаСервере(Штрихкод)
    // Поиск сотрудника по штрихкоду (предположим, ШК хранится в реквизите сотрудника)
    СотрудникСсылка = Справочники.Сотрудники.НайтиПоРеквизиту("Штрихкод", Штрихкод);
    
    Если Не СотрудникСсылка.Пустая() Тогда
        МенеджерЗаписи = РегистрыСведений.ЖурналРегистрацииПриходов.СоздатьМенеджерЗаписи();
        МенеджерЗаписи.Сотрудник = СотрудникСсылка;
        МенеджерЗаписи.Период = ТекущаяДата();
        МенеджерЗаписи.ВидСобытия = Перечисления.ВидыСобытийПосещения.Приход;
        МенеджерЗаписи.Записать();
        
        Сообщить("Сотрудник " + СотрудникСсылка + " отмечен в " + ТекущаяДата());
    Иначе
        Сообщить("Сотрудник с таким кодом не найден!");
    КонецЕсли;
КонецПроцедуры

Защита от "задовений" и повторных сканирований

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

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

Борьба с фальсификацией (Buddy Punching)

Основной минус штрих-кодов — их легкость копирования. Один сотрудник может принести пять бейджей и "пропикать" всех своих коллег. Как отмечено в обсуждении, наличие камер у генерального директора помогает, но можно автоматизировать и этот контроль.

Рекомендация: Если бюджет позволяет, вместо штрих-кодов лучше использовать RFID-метки (брелоки или карты) — их сложнее скопировать. Если же остаетесь на штрих-кодах, рассмотрите возможность подключения веб-камеры через компоненту 1С, которая будет делать фото в момент сканирования и сохранять его в привязке к записи регистра.

Юридический аспект и дисциплина

Важно понимать, что сама по себе запись в 1С не является юридическим основанием для увольнения за прогул. Чтобы система работала законно, выполните следующие шаги:

  1. Издайте приказ о введении системы автоматизированного учета рабочего времени.
  2. Ознакомьте сотрудников с правилами пользования картами под роспись.
  3. Убедитесь, что время на сервере 1С синхронизировано с точным временем, чтобы избежать споров о "спешащих часах".

Внедрение такой системы, даже в самом простом варианте "сканер + регистр сведений", позволяет существенно разгрузить секретаря или табельщика, переводя учет посещаемости в цифровую плоскость с возможностью мгновенного построения отчетов по опозданиям.

← На главную