Сейчас предлагаются различные готовые модули для работы PerCo с 1С, как, например, вот этот http://www.perco.ru/products/sistemy-kontrolya-dostupa/sistema-kontrolya-dostupa-s-20/programmnoe-obespechenie/setevoe/1s-modul-uchet-rabochego-vremeni/. Но не всегда решение простых задач требует установки дополнительного модуля. Рассмотрим подключение для создания и изменения карт сотрудников.
Допустим перед нами стоит задача подключиться и создать новую карту (пропуск) для сотрудника. Для этого нам нужно подключится через СОМ объект к базе:
БД = Новый COMОбъект(«ADODB.Connection»);
БД.Provider = «LCPI.IBProvider»;
БД.ConnectionString = стрПодключения;
Попытка
БД.Open();
Исключение
Сообщить(«Не удалось подключиться к БД PerCo. » + ОписаниеОшибки());
КонецПопытки;
Соответственно необходимо, что бы был установлен IBProvider.
В строке подключения должно быть что-то такое:
стрПодключения = «data source = ПутьКФайлу:Файл.fdb; ctype = WIN1251; User ID = sysdba; Password = masterkey; auto_commit = true»;
Затем с помощью запросов обращаемся к базе и оперируем данными. Рассмотрим добавление карты в базу, как одно из самых простых.
ЗапросНаДобавление = Новый COMОбъект(«ADODB.Recordset»);
ЗапросНаДобавление.ActiveConnection = БД;
ТекстЗапросаНаДобавление = «Insert INTO STAFF (ID_STAFF, LAST_NAME, FIRST_NAME, MIDDLE_NAME, TABEL_ID, DATE_BEGIN, VALID, TEMPORARY, DELETED) » +
«VALUES (» + СокрЛП(ID_STAFF) + «, ‘» + Фамилия + «‘, ‘» + Имя + «‘, ‘» + Отчество + «‘, ‘» + СокрЛП(ТабельныйНомер) + «‘, ‘» + ДатаБезВремени + «‘ , 1, 0, 0)»;
ЗапросНаДобавление.Open(ТекстЗапросаНаДобавление);
ЗапросНаДобавление.Close();
ЗапросНаДобавлениеКарты = Новый COMОбъект(«ADODB.Recordset»);
ЗапросНаДобавлениеКарты.ActiveConnection = БД;
ТекстЗапросаНаДобавлениеКарты = «Insert INTO STAFF_CARDS (ID_CARD, STAFF_ID, VALID, DATE_BEGIN, DATE_END, TEMPORARY, DOCUMENTS_ID, HISTORY_DATE, PROHIBIT, IDENTIFIER, TYPE_IDENTIFIER, IDENTIFIER_TRANSFORMED) » +
«values (» + СокрЛП(ID_CARD) + «, » + ID_STAFF + «, 1, ‘» + ДатаНачалаДействия + «‘, ‘» + ДатаОкончанияДействия + «‘, 0, 0, ‘» + ТекущаяДата() + «‘, 0, ‘» + НомерКарты + «‘, 0, ‘» + НомерКарты + «‘ )»;
ЗапросНаДобавлениеКарты.Open(ТекстЗапросаНаДобавлениеКарты);
ЗапросНаДобавлениеКарты.Close();
Не забывайте, что мало добавить пользователя и карту, необходимо назначить ему заданные права и права доступа к контроллерам.
При замене пропуска так же нужно заменять права, при изъятии карты удаляем карту и ее права, а также помещаем карту в стоп-лист с описанием причины изъятия. В работе Вам очень пригодится программа IBExpert. В ней очень удобно просматривать таблицы, результаты своих действий, а также можно посмотреть стандартные процедуры.
В моем случае я создала отдельный документ с 4-мя видами операций (Первичная выдача пропуска, замена пропуска, изменение прав и изъятие карты) и два регистра сведений: в один попадают строки подключения для разных организаций, в другой пишу права доступа. Как видно на скриншоте, при создании документа загружается полное дерево прав доступа и контроллеры к ним, в этом дереве пользователь может галочками расставлять права доступа.
Хорошо… В старой системе через эксель из перки выгружали, а потом в 1С
Можно попросить у Вас конфигурацию для выдачи карт?
(2) Wanderer.nk, что Вы имеете ввиду?
Насколько я понимаю, в PERCO после изменения таблиц нужно еще производить обмен с аппаратурой. Какой командой Вы это делаете?
(4) Walker.pro, Если вы имеете ввиду сами контроллеры, то при назначении прав, пишу еще в STAFF_CARDS_AREAS_DEVICE
(5)
То есть если добавить или изменить запись в таблице STAFF_CARDS_AREAS_DEVICE, то автоматом происходит обмен с контроллерами?
(3) Посмотрел внимательнее на скриншоты и понял, что Вы в УПП запихнули это. Это сделано внешней обработкой?
(7) Wanderer.nk, да УПП, нет документ
(8) эх, буду сам вписывать в свою конфу. За код и идею спасибо — самому в голову не пришло что-то, а родной софт удручает. Особенно печать бейджиков за 4000 руб.
(9) Wanderer.nk, успехов в Ваших начинаниях. Конфой не делюсь, сами наверное понимаете почему =) Все пилено-перепилено.
Эх… Опять что-то устанавливать…
Я написал компоненту на NativeAPI, которая выполняет SELECT-запрос и сохраняет его результаты в XML-файле для последующего чтения из 1С.
В Delphi для доступа к FireBird есть набор компонент «InterBase», и используется только GDS32.DLL (либо FBClient.DLL), и ничего устанавливать не нужно, даже если сам FireBird и его база установлены и находятся на удаленном сервере…
Есть в планах поделиться тут 🙂
(10) Уважаемый автор!
Сейчас занимаюсь примерно тем же, связываю КПП с 1С.
Жаль конечно, что не поделились конфигурацией пусть даже пиленной-перепиленной )))
Есть пара вопросов, если не сложно ответьте пожалуйста.
1) Как добавляете новое подразделение в иерархию? Разобрался, что таблица подразделений SUBDIV_REF, но не понятно что за столбцы N_LEFT и N_RIGHT. И где присваивается родительский элемент?
2) Какими запросами присваиваете права? Там какая то каша из соединений таблиц: ACCESS_GROUPS, STAFF_CARDS_AREAS_DEVICE, ACCESS_GROUPS. Как строете дерево подразделений?
3) Получение всех проходов сотрудников по запросу, насколько я понимаю:
Верно ли?
Обращение в тех поддержку результатов не принесло. Поэтому сам ковыряюсь. Тяжело, когда ты не знаешь для чего та или иная таблица была задумана авторами.
Благодарю за любую помощь.
+(12) У меня получилось привязать это все к своей конфигурации. Единственное с чем столкнулся: необходимо все же использовать SDK от PerCo.
(13) Прошу прощения за то, что молчала. Да, без модуля SDK не происходит передачи в аппаратуру. Да и в принципе с SDK не нужно громоздких запросов.
(14) Я пробовал сделать все через SDK, но при таком подходе работа из 1С становится невыносимо долгой… Поэтому остановился на комбинированном варианте.
Все изменения произвожу запросами в которых создаю, изменяю, блокирую пропуски, создаю новых сотрудников и т.д. SDK используется лишь для передачи данных в аппаратуру.
Работает все очень быстро и без проблем.
Может немножко не по теме, но возникла задача сделать выгрузку из БД firebird СКУД Реверс, нужно вытащить из нее отчет прохода сотрудников, как можно определить какие таблицы нужно использовать, в самой клиентской программе приложение отчет написано сыровато, фильтры в ней не работают. Может кто-то работал с этой БД?
Может кто выложить SDK хочу на него посмотреть?
А может кто из гуру подскажет где в базе PERCo хранятся значения семейства и самого номера карточки. Пока нашел только идентификатор
(18) Нашли ? Я просто ищу 🙂
(19)да. Там не хранится семейство и номер, а хранится идентификатор который получается преобразованием семейства и номера через шестнадцатеричную систему
(18) Нашли как получить идентификатор карты по коду?
(21)Нашелся пример: вот онлайн конвертер:http://guardsaas.com/ru/content/keycode
(21)да. Есть функции на c# для преобразования кода и семейства в идентификатор и наоборот. Могу поделиться
(23)Спасибо, нашелся алгоритм на 1С перевода кодов карт RFID в десятичную систему как хранятся в БД Perco:
Показать
Код перевода из десятичной системы в шестнадцатиричную и обратно взят отсюда:Перевод