gifts2017

Работа с PerCo своими силами

Опубликовал Анастасия Фамилия (Nas'ka) в раздел Обмен - Обмен с другими системами

Сейчас предлагаются различные готовые модули для работы PerCo с 1С. Но не всегда решение простых задач требует установки дополнительного модуля. Рассмотрим подключение для создания и изменения карт сотрудников.

Сейчас предлагаются различные готовые модули для работы 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. Дмитрий Павлик (DimaP) 03.10.12 18:42
Хорошо... В старой системе через эксель из перки выгружали, а потом в 1С
2. Wanderer.nk 10.10.12 09:16
Можно попросить у Вас конфигурацию для выдачи карт?
3. Анастасия Фамилия (Nas'ka) 10.10.12 09:21
(2) Wanderer.nk, что Вы имеете ввиду?
4. Евгений (Walker.pro) 10.10.12 09:48
Насколько я понимаю, в PERCO после изменения таблиц нужно еще производить обмен с аппаратурой. Какой командой Вы это делаете?
5. Анастасия Фамилия (Nas'ka) 10.10.12 09:59
(4) Walker.pro, Если вы имеете ввиду сами контроллеры, то при назначении прав, пишу еще в STAFF_CARDS_AREAS_DEVICE
6. Евгений (Walker.pro) 10.10.12 15:10
(5) Nas'ka,
То есть если добавить или изменить запись в таблице STAFF_CARDS_AREAS_DEVICE, то автоматом происходит обмен с контроллерами?
7. Wanderer.nk 10.10.12 18:07
(3) Nas'ka, Посмотрел внимательнее на скриншоты и понял, что Вы в УПП запихнули это. Это сделано внешней обработкой?
8. Анастасия Фамилия (Nas'ka) 10.10.12 18:16
(7) Wanderer.nk, да УПП, нет документ
9. Wanderer.nk 10.10.12 18:22
(8) Nas'ka, эх, буду сам вписывать в свою конфу. За код и идею спасибо - самому в голову не пришло что-то, а родной софт удручает. Особенно печать бейджиков за 4000 руб.
10. Анастасия Фамилия (Nas'ka) 10.10.12 18:49
(9) Wanderer.nk, успехов в Ваших начинаниях. Конфой не делюсь, сами наверное понимаете почему =) Все пилено-перепилено.
11. Андрей Акулов (DrAku1a) 08.11.12 07:55
Эх... Опять что-то устанавливать...
Я написал компоненту на NativeAPI, которая выполняет SELECT-запрос и сохраняет его результаты в XML-файле для последующего чтения из 1С.
В Delphi для доступа к FireBird есть набор компонент "InterBase", и используется только GDS32.DLL (либо FBClient.DLL), и ничего устанавливать не нужно, даже если сам FireBird и его база установлены и находятся на удаленном сервере...
Есть в планах поделиться тут :-)
12. Виталий Барилко (Diversus) 29.12.12 12:10
(10) Уважаемый автор!
Сейчас занимаюсь примерно тем же, связываю КПП с 1С.
Жаль конечно, что не поделились конфигурацией пусть даже пиленной-перепиленной )))

Есть пара вопросов, если не сложно ответьте пожалуйста.
1) Как добавляете новое подразделение в иерархию? Разобрался, что таблица подразделений SUBDIV_REF, но не понятно что за столбцы N_LEFT и N_RIGHT. И где присваивается родительский элемент?

2) Какими запросами присваиваете права? Там какая то каша из соединений таблиц: ACCESS_GROUPS, STAFF_CARDS_AREAS_DEVICE, ACCESS_GROUPS. Как строете дерево подразделений?

3) Получение всех проходов сотрудников по запросу, насколько я понимаю:
SELECT * FROM REG_EVENTS WHERE (identifier is not null) and (identifier <> 0) ORDER BY ID_REG

Верно ли?

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

Благодарю за любую помощь.
13. Виталий Барилко (Diversus) 27.03.13 12:57
+(12) У меня получилось привязать это все к своей конфигурации. Единственное с чем столкнулся: необходимо все же использовать SDK от PerCo.
14. Анастасия Фамилия (Nas'ka) 27.03.13 13:01
(13) Прошу прощения за то, что молчала. Да, без модуля SDK не происходит передачи в аппаратуру. Да и в принципе с SDK не нужно громоздких запросов.
15. Виталий Барилко (Diversus) 27.03.13 13:09
(14) Я пробовал сделать все через SDK, но при таком подходе работа из 1С становится невыносимо долгой... Поэтому остановился на комбинированном варианте.
Все изменения произвожу запросами в которых создаю, изменяю, блокирую пропуски, создаю новых сотрудников и т.д. SDK используется лишь для передачи данных в аппаратуру.

Работает все очень быстро и без проблем.
16. Aleksey (Aleksey58) 23.06.14 11:32
Может немножко не по теме, но возникла задача сделать выгрузку из БД firebird СКУД Реверс, нужно вытащить из нее отчет прохода сотрудников, как можно определить какие таблицы нужно использовать, в самой клиентской программе приложение отчет написано сыровато, фильтры в ней не работают. Может кто-то работал с этой БД?
17. Михаил Казаков (kazakoff) 08.07.15 11:30
Может кто выложить SDK хочу на него посмотреть?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа