Работа с 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    22613    19    1    

22

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

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

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

60000 руб.

05.10.2022    9303    9    8    

11

Экстрактор данных 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    13630    12    SQV0    47    

28

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

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

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

24000 руб.

24.04.2017    48825    97    163    

86

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

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

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

4200 руб.

23.08.2019    53773    162    63    

150
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 2311 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 2311 27.03.13 12:57 Сейчас в теме
+(12) У меня получилось привязать это все к своей конфигурации. Единственное с чем столкнулся: необходимо все же использовать SDK от PerCo.
+
14. Nas'ka 102 27.03.13 13:01 Сейчас в теме
(13) Прошу прощения за то, что молчала. Да, без модуля SDK не происходит передачи в аппаратуру. Да и в принципе с SDK не нужно громоздких запросов.
+
15. Diversus 2311 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)да. Там не хранится семейство и номер, а хранится идентификатор который получается преобразованием семейства и номера через шестнадцатеричную систему
svilsa; +1
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 Сейчас в теме
(29)У меня это Appoint_ref
+
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
+
Оставьте свое сообщение