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

03.10.12

Учетные задачи - Учет рабочего времени

Сейчас предлагаются различные готовые модули для работы 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-мя видами операций (Первичная выдача пропуска, замена пропуска, изменение прав и изъятие карты) и два регистра сведений: в один попадают строки подключения для разных организаций, в другой пишу права доступа. Как видно на скриншоте, при создании документа загружается полное дерево прав доступа и контроллеры к ним, в этом дереве пользователь может галочками расставлять права доступа.

См. также

Перенос данных из Парус 8 в ЗГУ 3

Зарплата Внешние источники данных Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    22588    19    1    

22

Экстрактор данных 1С в BI - выгрузка данных из 1С в BI-аналитику

Внешние источники данных Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

15.11.2022    13560    12    SQV0    47    

28

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9295    9    8    

11

Путевой лист грузового автомобиля в 1С:Бухгалтерия 3.0

Печатные формы Учет рабочего времени Платформа 1С v8.3 Бухгалтерский учет Оперативный учет 1С:Бухгалтерия 3.0 Транспорт, автопарки, такси Россия Бухгалтерский учет Платные (руб)

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

4200 руб.

23.08.2019    53728    161    63    

149

Перенос данных из Парус 7.хх в ЗГУ ред.3

Внешние источники данных Зарплата Бюджетный учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

24000 руб.

24.04.2017    48807    96    163    

86
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DimaP 63 03.10.12 18:42 Сейчас в теме
Хорошо... В старой системе через эксель из перки выгружали, а потом в 1С
2. Wanderer.nk 18 10.10.12 09:16 Сейчас в теме
Можно попросить у Вас конфигурацию для выдачи карт?
3. Nas'ka 102 10.10.12 09:21 Сейчас в теме
(2) Wanderer.nk, что Вы имеете ввиду?
7. Wanderer.nk 18 10.10.12 18:07 Сейчас в теме
(3) Посмотрел внимательнее на скриншоты и понял, что Вы в УПП запихнули это. Это сделано внешней обработкой?
8. Nas'ka 102 10.10.12 18:16 Сейчас в теме
(7) Wanderer.nk, да УПП, нет документ
9. Wanderer.nk 18 10.10.12 18:22 Сейчас в теме
(8) эх, буду сам вписывать в свою конфу. За код и идею спасибо - самому в голову не пришло что-то, а родной софт удручает. Особенно печать бейджиков за 4000 руб.
10. Nas'ka 102 10.10.12 18:49 Сейчас в теме
(9) Wanderer.nk, успехов в Ваших начинаниях. Конфой не делюсь, сами наверное понимаете почему =) Все пилено-перепилено.
12. Diversus 2310 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 2310 27.03.13 12:57 Сейчас в теме
+(12) У меня получилось привязать это все к своей конфигурации. Единственное с чем столкнулся: необходимо все же использовать SDK от PerCo.
14. Nas'ka 102 27.03.13 13:01 Сейчас в теме
(13) Прошу прощения за то, что молчала. Да, без модуля SDK не происходит передачи в аппаратуру. Да и в принципе с SDK не нужно громоздких запросов.
15. Diversus 2310 27.03.13 13:09 Сейчас в теме
(14) Я пробовал сделать все через SDK, но при таком подходе работа из 1С становится невыносимо долгой... Поэтому остановился на комбинированном варианте.
Все изменения произвожу запросами в которых создаю, изменяю, блокирую пропуски, создаю новых сотрудников и т.д. SDK используется лишь для передачи данных в аппаратуру.

Работает все очень быстро и без проблем.
4. Walker.pro 7 10.10.12 09:48 Сейчас в теме
Насколько я понимаю, в PERCO после изменения таблиц нужно еще производить обмен с аппаратурой. Какой командой Вы это делаете?
5. Nas'ka 102 10.10.12 09:59 Сейчас в теме
(4) Walker.pro, Если вы имеете ввиду сами контроллеры, то при назначении прав, пишу еще в STAFF_CARDS_AREAS_DEVICE
6. Walker.pro 7 10.10.12 15:10 Сейчас в теме
(5)
То есть если добавить или изменить запись в таблице STAFF_CARDS_AREAS_DEVICE, то автоматом происходит обмен с контроллерами?
11. DrAku1a 1715 08.11.12 07:55 Сейчас в теме
Эх... Опять что-то устанавливать...
Я написал компоненту на NativeAPI, которая выполняет SELECT-запрос и сохраняет его результаты в XML-файле для последующего чтения из 1С.
В Delphi для доступа к FireBird есть набор компонент "InterBase", и используется только GDS32.DLL (либо FBClient.DLL), и ничего устанавливать не нужно, даже если сам FireBird и его база установлены и находятся на удаленном сервере...
Есть в планах поделиться тут :-)
16. Aleksey58 23.06.14 11:32 Сейчас в теме
Может немножко не по теме, но возникла задача сделать выгрузку из БД firebird СКУД Реверс, нужно вытащить из нее отчет прохода сотрудников, как можно определить какие таблицы нужно использовать, в самой клиентской программе приложение отчет написано сыровато, фильтры в ней не работают. Может кто-то работал с этой БД?
17. kazakoff 08.07.15 11:30 Сейчас в теме
Может кто выложить SDK хочу на него посмотреть?
18. ilychuk 11.03.19 15:14 Сейчас в теме
А может кто из гуру подскажет где в базе PERCo хранятся значения семейства и самого номера карточки. Пока нашел только идентификатор
19. gospodenkods 12.06.19 08:20 Сейчас в теме
(18) Нашли ? Я просто ищу :)
20. ilychuk 12.06.19 16:58 Сейчас в теме
(19)да. Там не хранится семейство и номер, а хранится идентификатор который получается преобразованием семейства и номера через шестнадцатеричную систему
21. svilsa 12 10.07.19 16:54 Сейчас в теме
(18) Нашли как получить идентификатор карты по коду?
22. svilsa 12 10.07.19 17:24 Сейчас в теме
(21)Нашелся пример: вот онлайн конвертер: http://guardsaas.com/ru/content/keycode
Fant1q71; +1 Ответить
23. ilychuk 11.07.19 18:50 Сейчас в теме
(21)да. Есть функции на c# для преобразования кода и семейства в идентификатор и наоборот. Могу поделиться
24. svilsa 12 15.07.19 10:56 Сейчас в теме
(23)Спасибо, нашелся алгоритм на 1С перевода кодов карт RFID в десятичную систему как хранятся в БД Perco:
Функция ПеревестиКодыКарт(ТЗ)
	Для каждого Строка из Тз Цикл
		Код = Строка.КодКарты;
		Запятая = СтрНайти(Код, ",");
		Если Запятая = 0 Тогда
			Сообщить("Неверный код карты " + Строка.Сотрудник + ": " + Строка.КодКарты);
			Продолжить;
		КонецЕсли;
		ЛевЧасть = Число(Лев(Код, Запятая - 1));
		ПравЧасть = Число(Сред(Код, Запятая + 1));
		Лев = Прав("00" + Из_10_В_Любую(ЛевЧасть), 2);
		Прав = Прав("0000" + Из_10_В_Любую(ПравЧасть), 4);
		Итог = "" + Лев + Прав;
		Строка.КодКарты10 = Из_Любой_В_10(Итог);
		Сообщить("" + Код + Символы.Таб + СтрЗаменить(Строка.КодКарты10, Символы.НПП, ""));
	КонецЦикла;
КонецФункции

Функция Из_10_В_Любую(Знач Значение=0,Нотация=16) Экспорт
     Если Нотация<=0 Тогда Возврат("") КонецЕсли;
     Значение=Число(Значение);
     Если Значение<=0 Тогда Возврат("0") КонецЕсли;
     Значение=Цел(Значение);
     Результат="";
     Пока Значение>0 Цикл
          Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Значение%Нотация+1,1)+Результат;
          Значение=Цел(Значение/Нотация) ;
     КонецЦикла;
     Возврат Результат;
КонецФункции
//_________________________________________________________

Функция Из_Любой_В_10(Знач Значение="0",Нотация=16) Экспорт
     Если Нотация<=0 Тогда Возврат(0) КонецЕсли;
     Значение=СокрЛП(Значение);
     Если Значение="0" Тогда Возврат(0) КонецЕсли;
     Результат=0;
     Длина=СтрДлина(Значение);
     Для Х=1 По Длина Цикл
          М=1;
          Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла;
          Результат=Результат+(Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1)*М;
     КонецЦикла;
     Возврат Окр(Результат);
 КонецФункции
Показать


Код перевода из десятичной системы в шестнадцатиричную и обратно взят отсюда: Перевод
Fant1q71; +1 Ответить
25. Yura77 30 10.11.20 10:56 Сейчас в теме
(21)
катор

//Функция переводит в десятиричное

Функция ИзХСчислВЧисло(аф,Шаблон) Экспорт

   аф = ВРег(аф); // на всякий случай.

    ДлинаШаблона = СтрДлина(Шаблон);

    ДлинаСтроки = СтрДлина(аф);

    Результат = 0;

    Для ТекСимвол = 1 По ДлинаСтроки Цикл

        ОбрабатываемыйСимвол = Сред(аф, ТекСимвол,1);

        ПозицияВШаблоне = Найти(Шаблон,ОбрабатываемыйСимвол)-1;

        Результат = Результат * ДлинаШаблона + ПозицияВШаблоне;

    КонецЦикла;

 

    Возврат Результат;

КонецФункции

 

Функция ТекстВЧислоМК(текстоваяСтрокаМК) Экспорт

                Число16Ричное1=Из_Число_В_XСчисл(Число(Лев(текстоваяСтрокаМК,СтрНайти(текстоваяСтрокаМК,",")-1)),"0123456789ABCDEF");

                Число16Ричное2=Из_Число_В_XСчисл(Число(Сред(текстоваяСтрокаМК,СтрНайти(текстоваяСтрокаМК,",")+1)),"0123456789ABCDEF");

                Возврат ИзХСчислВЧисло(Число16Ричное1+Число16Ричное2,"0123456789ABCDEF");

КонецФункции              

 

Функция ЧислоВТекстМК(ЧисловаяСтрокаМК) Экспорт

                Число16Ричное=Из_Число_В_XСчисл(ЧисловаяСтрокаМК,"0123456789ABCDEF");

                НомерОбъекта=ИзХСчислВЧисло(Лев(Число16Ричное,2),"0123456789ABCDEF");

                НомерДоступа=ИзХСчислВЧисло(Сред(Число16Ричное,3),"0123456789ABCDEF");

                Возврат ДобавитьЛидирующиеНули(Формат(НомерОбъекта,"ЧГ=0"),3)+","+ДобавитьЛидирующиеНули(формат(НомерДоступа,"ЧГ=0"),5);

КонецФункции
Показать
Fant1q71; +1 Ответить
26. user1373628 13.10.21 09:27 Сейчас в теме
Добрый день. Я только начинаю пользоваться программой perco s20. Подскажите, пожалуйста, почему перестали выходить данные о выходе сотрудника. О входе есть, о выходе - нет. Благодарю
27. Fant1q71 13 11.04.23 13:42 Сейчас в теме
Привет.
А в какой таблице Perco хранит ссылку на карту, которую использовали при проходе? Ну то есть если смотреть таблицу TABLE_INTERMEDIATE, то в ней просто STUFF_ID, а у меня у сотрудника может быть несколько карт и все активные.
Подскажите. Благодарю
29. knutovis 17.04.23 08:59 Сейчас в теме
Подскажите, в какой таблице в БД Perco хранится должность?
30. Fant1q71 13 17.04.23 09:07 Сейчас в теме
(29) Привет! Поищи таблицу appoint
31. Fant1q71 13 17.04.23 09:07 Сейчас в теме
32. knutovis 17.04.23 09:38 Сейчас в теме
Таблицу нашёл, спасибо! Проблема состоит в том, что при выгрузке Должностей из 1с, в Перко эти должности дублируются, то есть каждый раз создаёт новую запись с той же должностью. Не понимаю даже куда копать.
Fant1q71; +1 Ответить
33. Fant1q71 13 17.04.23 09:41 Сейчас в теме
(32) Может нужно хотя бы по наименованию искать должность? Если есть то не создавать. Либо id должности в перко сопоставить с должностью в 1с.

У меня с должностями есть проблема, как по всем этим таблицам понять последнюю должность человека т.е. актуальную.
34. Fant1q71 13 17.04.23 09:43 Сейчас в теме
(32)У меня в таблице с должностями есть поле ID_FROM_1C кстати, можно и по нему отбор делать
35. knutovis 17.04.23 09:49 Сейчас в теме
(33) искать где по наименованию? в самой БД Перко? В триггере? ID_FROM_1C у дублей должностей все одинаковые в БД Перко.
36. Fant1q71 13 17.04.23 09:51 Сейчас в теме
(35) Ну вот я думаю:
Если это действительно все дубли, то схлопнуть их запросом можно через 1с, можно через IBexpert. А потом уже перед выгрузкой в Перко проверять если есть должность с таким ID, то не добавлять запись. У вас же наверное в коде где то выполняется запрос на добавление должности в таблицу.
37. knutovis 17.04.23 10:42 Сейчас в теме
(36) Да. В коде 1с создаётся COM-соединение.
Соединение = Новый COMОбъект("PERCo_S20_SDK.ExchangeMain")
И туда как в чёрный ящик засовываются данные, а что там на стороне Перки происходит чёрт его знает :)
38. Fant1q71 13 17.04.23 10:44 Сейчас в теме
(37) А ну дак у вас через API похоже сделано, там да можно сказать черный ящик, но я как то с Timex делал интеграцию и там все исходники API были предоставлены, можно было весь код просмотреть.
Просто я с perco через файл БД делаю сейчас, без использования API
Оставьте свое сообщение