gifts2017

Загрузка в 1С данных с проходной из СКУД на базе firebird 2.0

Опубликовал Федот (zzhiraf) в раздел Программирование - Внешние компоненты

Загрузка в 1С 8.3 данных о проходах сотрудников через турникет

Система контроля доступа - это автономная система, которая хранит свои данные на firebird. Система позволяет строить отчеты по различным разрезам, однако на каждое рабочее место оператора нужно покупать лицензию. Поэтому решено было для пользователей, которым нужны отчеты, перегружать эти данные в 1С, а для ресепшена оставить текущую систему.

В лицензии на ПО была строчка "ОГРАНИЧЕНИЕ НА ВСКРЫТИЕ ТЕХНОЛОГИИ И ДЕКОМПИЛЯЦИЮ.  Запрещается вскрывать технологию или декомпилировать программу. ". Однако программу мы не вскрывали, просто подключились к кроссплатформенной системе управления базами данных firebird.

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

Далее периодически подгружаем новые данные. Делается это через компоненту COMОбъект("AutoIBX.Application"); Компонента позволяет подключаться к файлу *.FDB или *.gdb и далее читать данные.

Функция ПодключитьИБ(ИБ)
    ЮзерДБ="SYSDBA";
	ПарольДБ="masterkey";
	ИмяДБ="E:\Kronwerk\Temp\IBNET.FDB";
	
	ИБ.SetUser(СокрЛП(ЮзерДБ),СокрЛП(ПарольДБ));

	Рез=ИБ.Connect(ИмяДБ);
		
	Если Рез>0 тогда
		Сообщить("Соединение установлено!");
		Возврат 1;
	КонецЕсли;
	Возврат Рез;
КонецФункции

Подключаться можно не только к локальной базе на текущем компьютере, но также по сети.

имя-сервера:буква-диска:\путь-к-файлу\имя-файла-базы-данных

Для чтения данных используем следующий запрос:

Зап="select 
		|	events.EV_ID, 
		|	events.ev_date, 
		|	events.ev_objid, 
		|	owner.OW_MIDDLENAME, 
		|	owner.ow_firstname, 
		|	owner.ow_lastname, 
		|	owner.ow_jd_id
		|from 
		|	events, owner 
		|where 
		|	events.ev_ow_id = owner.ow_id 
		|	and EV_ID > " + MaxCode();
	Рез=СоединениеИБ.ExecQuery("",Зап);
    Рез_= СоединениеИБ.FirstRecord();

	Пока Рез_>0 цикл 
		ИД			= СоединениеИБ.GetItem("EV_ID");
		ДатаСобытия = СоединениеИБ.GetItem("Ev_date");
		КодВхода    = СоединениеИБ.GetItem("ev_objid");	
		Имя		    = СоединениеИБ.GetItem("ow_firstname");	
		Фамилия     = СоединениеИБ.GetItem("ow_lastname");	
        Рез_=СоединениеИБ.NextRecord();
     КонецЦикла

Загружаем только новые данные, для этого функция MaxCode() возращает номер последней записанной строки.

Код элемента справочника Посещения равен ID в таблице посещений на firebird.

Отчет к справочнику "Посещения" строим на основе СКД. Можно вывести приход и уход с подстветкой, если сотрудник опоздал. Также можно вывести, сколько раз сотрудник бегал "покурить" на улицу.

Из замеченных проблем - синхронизация часов на турникете с Московским временем и проход по чужой карточке.

В архиве внешняя компонента AutoIBX.dll для подключения к базе firebird 2.0 и обработка 1С 8.3 для загрузки данных в 1С из firebird.

Просмотреть файл *.gdb можно с помощью http://sqlly.com/ 

Система управления базами данных firebird 2.0 http://firebirdsql.org/en/firebird-2-0/

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
1C_Firebird
.7z 339,19Kb
08.09.16
2
.7z 339,19Kb 2 Скачать
Отчет по посещениям на СКД
.erf 8,15Kb
08.09.16
1
.erf 8,15Kb 1 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий Егоров (Diego_Iv) 08.09.16 16:36
С какой целью "Посещения" сделаны справочником???
Логичнее - регистр сведений.
2. Федот (zzhiraf) 08.09.16 17:16
Регистр сведений - логичнее сделать, и он быстрее работает. Обработка работает с 2013 года, тогда казалось что справочник лучше подходит для этих задач. Сейчас уже неохота переделывать. Загрузка месяца данных занимает около минуты.
3. Андрей Акулов (DrAku1a) 15.09.16 03:30
Компонента своя? Работает на 64-битном сервере?
Пробовал свою делать ВК - но она только 32-битная, в итоге сделал программу, которая коннектится к FDB и сохраняет данные в виде XML-файла. Программа 32-битная, но нормально запускается из фонового задания. Медленно работает, но зато - стабильно!
4. Валентин Терёхин (Valet) 16.09.16 08:48
ODBC драйвера для FireBird/Interbase позволяют подключаться без компонент посредством виндового COM объекта ADODB. Есть версии и для x64.
5. Федот (zzhiraf) 26.09.16 11:04
К(3) DrAku1a,

Компонента самописная, писал прог. для проекта под 1С 7.7 для магазина розницы. Скорость работы довольно быстрая. Сейчас запускаю её на 64 win 10 для загрузки посещений - все работает.
6. Роман (ustinov_greendale) 02.12.16 13:59
Очень помогло при интеграции систем контроля доступа Кронверк, так что до сих пор актуально.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа