Электронная проходная своими руками::Журнал СА 9.2009
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

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

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6227
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6933
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4217
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3009
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3807
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3825
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6317
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3172
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3462
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7279
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10647
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12367
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14000
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9126
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7079
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5389
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4617
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3428
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3156
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3402
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3027
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Электронная проходная своими руками

Архив номеров / 2009 / Выпуск №9 (82) / Электронная проходная своими руками

Рубрика: Острый угол /  Острый угол

АНДРЕЙ ЛУКОНЬКИН, ведущий инженер-программист ОАО «НижегородАвтоДор». Занимается автоматизацией производства, бухгалтерского, управленческого и кадрового учета

Электронная проходная своими руками

Задача автоматизации учета рабочего времени сотрудников – типовая для средних и крупных организаций. Руководителю и отделу кадров важно знать время прихода и ухода, а также время присутствия или отсутствия человека на территории предприятия. Иногда также нужно контролировать время доступа на определенные объекты. Имея данные, можно принимать решения о премировании и депремировании, оплате сверхурочных часов, а также облегчить работу кадровой службы по ведению табелей учета рабочего времени.

Можно купить и поставить «вертушки», прилагающийся софт, закупить магнитные карточки и принтер для печати на них. Но на логичный вопрос руководства: «А почему выходит так дорого?» – можно скромно ответить: «Давайте за пару дней сэкономим несколько десятков или даже сотен тысяч рублей и создадим свою систему». Затраты минимальные: компьютер (подойдет даже старый), сканер штрихкодов (дешевый однолучевой Metrologic, подключаемый в разрыв клавиатуры) и работы по созданию программы и печати пропусков.

Итак, начнем с подготовительных работ. В любой базе «1С:Предприятия» имеется справочник «Физические лица», нам нужно добавить туда строковый реквизит «Штрихкод». Формировать штрихкод можно как вручную, так и автоматически, используя непериодический регистр сведений с одним измерением (сотрудник) и одним ресурсом (штрихкод). Формат штрихкода лучше выбрать самый распространенный – EAN13, начинать его с внутреннего префикса, используемого только на данном предприятии (например, 22). Также нам понадобится регистр сведений для фиксирования времени входа и выхода сотрудников. Назовем его «ПриходУходСотрудников», установим периодичность в пределах секунды и создадим следующую структуру: измерение «ФизЛицо» (справочник физических лиц), ресурсы «Вход» и «Выход», тип данных у которых Булево. Создадим обработку с реквизитами: «Штрихкод» (строка длиной 13), «НайденныйСотрудник» (справочник физических лиц), «СписокПрошедших» (таблица значений). Замысел прост: при сканировании напечатанного уникального штрихкода производится поиск нужного человека, затем проверяется, входит он или выходит. Информация отображается на экране и записывается в регистр сведений (см. рис. 1).

Рисунок 1. Рабочий режим обработки

Рисунок 1. Рабочий режим обработки

В модуле формы обработки размещаем процедуру, срабатывающую при сканировании пропуска с напечатанным штрихкодом.

Процедура ШтрихкодПриИзменении(Элемент)

    ЭлементыФормы.НадписьОшибкаСотрудника.Заголовок = "";

    ЭлементыФормы.НадписьНайденныйСотрудник.Заголовок = "";

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ

    | ФизическиеЛица.Штрихкод,

    | ФизическиеЛица.Ссылка

    |ИЗ

    | Справочник.ФизическиеЛица КАК ФизическиеЛица

    |ГДЕ

    | ФизическиеЛица.Штрихкод = &Штрихкод";

    Запрос.УстановитьПараметр("Штрихкод", Штрихкод);


    Выборка = Запрос.Выполнить().Выбрать();

    Если Выборка.Следующий() Тогда

      НайденныйСотрудник = Выборка.Ссылка;

      ЭлементыФормы.НадписьНайденныйСотрудник.Заголовок = НайденныйСотрудник.Наименование;

      Штрихкод="";

      ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Штрихкод;

    Иначе

      ЭлементыФормы.НадписьОшибкаСотрудника.Заголовок = "Не найден сотрудник с таким штрихкодом! Обратитесь к администратору.";

      Штрихкод="";

      ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Штрихкод;

      возврат;

    КонецЕсли;


    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ

    | ПриходУходСотрудниковСрезПоследних.ФизЛицо,

    | ПриходУходСотрудниковСрезПоследних.Вход,

    | ПриходУходСотрудниковСрезПоследних.Выход,

    | ПриходУходСотрудниковСрезПоследних.Период

    |ИЗ

    | РегистрСведений.ПриходУходСотрудников.СрезПоследних(&ТекДата, ФизЛицо.Ссылка = &Найденный) КАК ПриходУходСотрудниковСрезПоследних";


    Запрос.УстановитьПараметр("ТекДата", ТекущаяДата());

    Запрос.УстановитьПараметр("Найденный", НайденныйСотрудник.Ссылка);


    Выборка = Запрос.Выполнить().Выбрать();

    Если Выборка.Следующий() Тогда

      //Проверим, последний раз входил или выходил

      Если Выборка.Вход Тогда

          //Значит выходим

          НовСтрока = СписокПрошедших.Добавить();

          НовСтрока.Сотрудник = НайденныйСотрудник;

          НовСтрока.Выход = ТекущаяДата();

          НовЗапись = РегистрыСведений. ?

            ПриходУходСотрудников. ??

            СоздатьМенеджерЗаписи();

          НовЗапись.ФизЛицо = НайденныйСотрудник;

          НовЗапись.Выход = Истина;

          НовЗапись.Период = ТекущаяДата();

          НовЗапись.Записать();

          ЭлементыФормы.СписокПрошедших.ТекущаяСтрока = НовСтрока;

      Иначе

          //Входим

          НовСтрока = СписокПрошедших.Добавить();

          НовСтрока.Сотрудник = НайденныйСотрудник;

          НовСтрока.Вход = ТекущаяДата();

          НовЗапись = РегистрыСведений. ?

            ПриходУходСотрудников. ?

            СоздатьМенеджерЗаписи();

          НовЗапись.ФизЛицо = НайденныйСотрудник;

          НовЗапись.Вход = Истина;

          НовЗапись.Период = ТекущаяДата();

          НовЗапись.Записать();

          ЭлементыФормы.СписокПрошедших.ТекущаяСтрока = НовСтрока;

      Конецесли;

    Иначе

      //Не нашли, значит вход

      НовСтрока = СписокПрошедших.Добавить();

      НовСтрока.Сотрудник = НайденныйСотрудник;

      НовСтрока.Вход = ТекущаяДата();

      НовЗапись = РегистрыСведений.ПриходУходСотрудников.СоздатьМенеджерЗаписи();

      НовЗапись.ФизЛицо = НайденныйСотрудник;

      НовЗапись.Вход = Истина;

      НовЗапись.Период = ТекущаяДата();

      НовЗапись.Записать();

      ЭлементыФормы.СписокПрошедших.ТекущаяСтрока = НовСтрока;

    Конецесли;

КонецПроцедуры

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

Процедура ПриОткрытии()

    СписокПрошедших.Колонки.Добавить("Сотрудник");

    СписокПрошедших.Колонки.Добавить("Вход");

    СписокПрошедших.Колонки.Добавить("Выход");

    ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Штрихкод;

КонецПроцедуры

Пример обработки – минимальный каркас, функционал которого можно наращивать. Например, можно добавить вывод фотографии сотрудника, его подразделения и должности.

Процедура КнопкаВыполнитьНажатие(Кнопка)

    Если (НЕ ЗначениеЗаполнено(НачПериода))

    ИЛИ (НЕ ЗначениеЗаполнено(КонПериода)) Тогда

    Предупреждение("Выберите период!");   

    Возврат;

    КонецЕсли;

    //Создание объекта MS Excel

    Excel = Новый COMОбъект("Excel.Application");

    //Создаём новую книгу в Excel

    Excel.WorkBooks.Add();

    //Выводим текст заголовка документа

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,1).value = "Таб. №";

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,2).value = "Сотрудник";

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,3).value = "Дата";

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,4).value = "Время";

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,5).value = "Подразделение";

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(1,6).value = "Событие";

    //Заполняем со 2-й строки

    Счетчик = 2;

    //Выберем записи о входах-выходах за период

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ

    |      ПриходУходСотрудников.Период,

    |      ПриходУходСотрудников.ФизЛицо,

    |      ПриходУходСотрудников.Вход,

    |      ПриходУходСотрудников.Выход

    |ИЗ

    |      РегистрСведений.ПриходУходСотрудников КАК ПриходУходСотрудников

    |ГДЕ

    |      ПриходУходСотрудников.Период МЕЖДУ &НачПериода И &КонПериода";

    Запрос.УстановитьПараметр("НачПериода", НачалоДня(НачПериода));

    Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));

 

    Выборка = Запрос.Выполнить().Выбрать();

    Пока Выборка.Следующий() Цикл

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,1).NumberFormat = "@";

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,1).value = Строка(Выборка.ФизЛицо.ТабНомер);

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,2).NumberFormat = "@";

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,2).value = Строка(Выборка.ФизЛицо);

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,3).NumberFormat = "@";

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,3).value = Строка(Формат(Выборка.Период,"ДЛФ=D"));

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,4).NumberFormat = "@";

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,4).value = Строка(Формат(Выборка.Период,"ДЛФ=T"));

    Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,6).NumberFormat = "@";

    Если Выборка.Вход Тогда

        Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,6).value = "Вход";

    ИначеЕсли Выборка.Выход Тогда

        Excel.WorkBooks(1).WorkSheets("Лист1").cells(Счетчик,6).value = "Выход";

    КонецЕсли;

    Счетчик = Счетчик + 1;

    КонецЦикла;

    //Записываем файл Excel

    Попытка

    Excel.ActiveWorkBook.SaveAs(СокрЛП(Путь)+ИмяФайла);

    Исключение

    Сообщить("Неудачная попытка сохранения файла");

    КонецПопытки;

    //Закрываем книгу Excel

    Excel.ActiveWorkBook.Close();

КонецПроцедуры

Процедура ВыбПериодНажатие(Элемент)

    НастройкаПериода = Новый НастройкаПериода;

    НастройкаПериода.УстановитьПериод(НачПериода,?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));

    НастройкаПериода.РедактироватьКакИнтервал = Истина;

    НастройкаПериода.РедактироватьКакПериод = Истина;

    НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;

    Если НастройкаПериода.Редактировать() Тогда

    НачПериода = НастройкаПериода.ПолучитьДатуНачала();

    КонПериода = НастройкаПериода. ?

        ПолучитьДатуОкончания();

    КонецЕсли;

    ИмяФайла = Строка(Формат(НачПериода,"ДЛФ=D"))+".xls";

КонецПроцедуры

Процедура НачПериодаПриИзменении(Элемент)

    ИмяФайла = Строка(Формат(НачПериода,"ДЛФ=D"))+".xls";

КонецПроцедуры

Результатом нашей обработки будет являться сформированный набор записей, удобный для дальнейшего анализа (см. рис. 2).

Рисунок 2. Набор записей для анализа

Рисунок 2. Набор записей для анализа

Как можно использовать полученные данные? Зная графики работы, можно отслеживать несанкционированный выход за территорию предприятия, можно подсчитать общее рабочее время, можно выявлять опоздавших сотрудников. Также возможно автоматически формировать табель рабочего времени.

Как анализировать данные? Каждый выбирает свой способ. Идеальный вариант, если кадровый учет ведется в той же программе, в которой мы и запускали электронную проходную. Если же это другая база данных, то придется или подключаться через COM-соединение, или выгружать сведения в файл для дальнейшей загрузки и обработки.

Приведу пример выгрузки данных за определенный период в файл Excel (см. рис. 3).

Рисунок 3. Обработка выгрузки сведений в файл Excel

Рисунок 3. Обработка выгрузки сведений в файл Excel

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


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru