Интеграция 1С с Perco

02.06.16

Интеграция - Внешние источники данных

Как работать с  базой электронной проходной Perco  через 1С.

Доброго всем времени суток.  Поделюсь с Вами опытом, который приобрел совсем недавно, решая задачу по организации доступа к данным базы Perco  через 1С.

На данный момент работа не закончена.  Но думаю, многим моя статья будет полезна.  

Читал  тут статью  //infostart.ru/public/154693/   и это была основа для меня, с которой я начинал.

Для начала (самое главное) перед тем, как браться за реализацию данной задачи, вам понадобится SDK  модуль, который вы можите получить у поставщиков Perco,  заключив  договор о неразглашении.

Также вам понадобится Драйвер для подключения  к FDB   базе. Я брал вот такой Firebird/Interbase(r) driver .  Где качал,  уже не помню. Но точно найти нетрудно.

 

Для просмотра таблиц базы FDB я использовал IBExpert.exe.

Таблиц там очень много! Связаны они через ID.

Начнем по порядку с подключения к базе.

//Loca************

    //

    //БД = Новый COMОбъект("ADODB.Connection");     

    //

    //ПутьКФайлуБД     = "D:1c8_Prohodnaya\SCD17K.FDB"; 

    //ПутьКСерверу="";

    //ПутьКБазе=ПутьКФайлуБД;

    //ИмяПользователя = "Admin";

    //ПарольПользователя = "Admin";

    //

    //

    ////Строка подключения

    //ConnectString = "driver={Firebird/Interbase(r) driver};" +

    //"DbName=localhost:" + ПутьКФайлуБД + ";" +

    //"UID=SYSDBA;" +

    //"PWD=masterkey;" +

    //"CHARSET=WIN1251";

    //

    //БД.ConnectionString = ConnectString;

    //БД.ConnectionTimeOut = 15;

    //БД.CommandTimeout = 30 ;

    //

    //Попытка 

    //    БД.Open(БД.ConnectionString); 

    //    Сообщить("Соединение успешно уставнолено !!!"); 

    //Исключение 

    //    Сообщить("Невозможно установить соединение с Perco: 

    //    | "+ОписаниеОшибки()); 

    //    //    Возврат; 

    //КонецПопытки; 

    
    //local


//Server

    
    БД = Новый COMОбъект("ADODB.Connection"); 
    //БД.ConnectionString = "driver={Firebird/Interbase(r) driver};" + 

    //"Dbname=192.168.10.219:D:\1c8_Prohodnaya\SCD17K.FDB;" +

    //"UID=SYSDBA;" + 

    //"PWD=masterkey;" +  

    //"CHARSET=WIN1251";  

    
    
    БД.ConnectionString = "driver={Firebird/Interbase(r) driver};" + 
    "Dbname=192.168.*.*:C:\SCD17K.FDB;" +
    "UID=SYSDBA;" + 
    "PWD=masterkey;" +  
    "CHARSET=WIN1251";  
    
    
    
    БД.ConnectionTimeout = 15; 
    БД.CursorLocation = 3; 
    // Подключаемся к базе данных 

    
    попытка 
        БД.Open(БД.ConnectionString); 
    исключение 
        Сообщить("Не удалось выполнить подключение " + ОписаниеОшибки()); 
    КонецПопытки;
 

Далее начинаем добавлять данные напрямую в таблици Перко. 

STАFF - Сотрудники.
STАFF - Сотрудники.

ЗапросНаДобавление = Новый COMОбъект("ADODB.Recordset");
    ЗапросНаДобавление.ActiveConnection = БД;
    
    
    ФИОпроверка =  Сокрлп(Фамилия)+Сокрлп(имя)+Сокрлп(отчество);
    
    ПоискВпров = ТЗпров.Найти(ФИОпроверка,"ФИО");    
    
    
    
    
    
    // Максимальный ИД в Таблице для присвоения его новому элементу. 

    ЗапросНаДобавление.Open("SELECT MAX(id_staff) + 1 AS max_id FROM STAFF");
    ИД = Формат(ЗапросНаДобавление.Fields("max_id").Value, "ЧН=; ЧГ=");
    ЗапросНаДобавление.Close();
    
    
    
    
    
    
    
    если Сокрлп(ПоискВпров)<>"" тогда
        Сообщить("Сотрудник  с таким ФИО уже есть в базе данных!!!");    
        
    Иначе
        
        ID_STAFF = ИД;
        ДатаБезВремени_1 = Формат(ДатаБезВремени,"ДЛФ=Д");
        
        ТекстЗапросаНаДобавление =  "Insert INTO STAFF (ID_STAFF, LAST_NAME, FIRST_NAME, MIDDLE_NAME, TABEL_ID, DATE_BEGIN,DATE_DISMISS, VALID, TEMPORARY_ACC, DELETED) " +
        "VALUES (" + СокрЛП(ID_STAFF) + ", '" + Фамилия + "', '" + Имя + "', '" + Отчество + "', '"  + СокрЛП(ТабельныйНомер) 
        + "', '" + ДатаБезВремени_1+ "', '" + ДатаБезВремени_1 + "' , 1, 0, 0)";
        попытка 
            
            ЗапросНаДобавление.Open(ТекстЗапросаНаДобавление); 
        исключение 
            Сообщить ("Проблемы с выполнением запроса к FireBird"); 
            Возврат;
        КонецПопытки; 
        //ЗапросНаДобавление.Close();


Должности и подразделение

ТекстЗапросаПодразделение=  "Insert INTO STAFF_REF (STAFF_ID, DATE_ACTION, SUBDIV_ID, APPOINT_ID, GROUP_WT_ID, LAST_TIMESTAMP) " +
        "VALUES (" + ID_STAFF + ", '" + Формат(ДатаБезВремени_1, "ДФ=dd.MM.yyyy") + "', " + ИДПодразделения + ", " + ИДДолжности + ", 0, '" 
        + Формат(ТекущаяДата(), "ДФ='dd.MM.yyyy HH:mm:ss'") + "')";
        
        попытка 
            
            ЗапросПодразделение.Open(ТекстЗапросаПодразделение); 
        исключение 
            Сообщить ("Проблемы с выполнением запроса к FireBird"); 
        КонецПопытки;
 
 

Выдаем ему карту 

// Максимальный ИД в Таблице для присвоения его новому элементу. 

            ЗапросНаДобавление.Open("SELECT MAX(ID_CARD) + 1 AS max_id FROM STAFF_CARDS");
            ИД = Формат(ЗапросНаДобавление.Fields("max_id").Value, "ЧН=; ЧГ=");
            ЗапросНаДобавление.Close();
            
            ID_CARD = ИД;
            
            ДатаНачалаДействия =ДатаБезВремени_1;
            ДатаОкончанияДействия =  ДатаБезВремени_2;
            
            
            
            ЗапросНаДобавлениеКарты = Новый COMОбъект("ADODB.Recordset");
            
            ЗапросНаДобавлениеКарты.ActiveConnection = БД;
            
            ТекстЗапросаНаДобавлениеКарты = "Insert INTO STAFF_CARDS (ID_CARD, STAFF_ID, VALID,VALID_TRANSFER, DATE_BEGIN, DATE_END, TEMPORARY_ACC, DOCUMENTS_ID, HISTORY_DATE, PROHIBIT, IDENTIFIER, TYPE_IDENTIFIER, IDENTIFIER_TRANSFORMED) " +
            "values (" + СокрЛП(ID_CARD) + ", " + Сокрлп(ID_STAFF) + ",  1, 1,'" + ДатаНачалаДействия + "', '" + ДатаОкончанияДействия + "', 0, 0, '" + ТекущаяДата + "', 0, '" + Сокрлп(НомерКарты) + "', 0, '" + Сокрлп(НомерКарты) + "' )";
            
            
            //Сообщить(ТекстЗапросаНаДобавлениеКарты);

            
            попытка 
                ЗапросНаДобавлениеКарты.Open(ТекстЗапросаНаДобавлениеКарты); 
                
            исключение 
                Сообщить ("Проблемы с выполнением запроса к FireBird" + ОписаниеОшибки()); 
            КонецПопытки; 
            
            
        КонецЕсли;
 

Доступы для карты

 

// Максимальный ИД в Таблице для присвоения его новому элементу. 

            ЗапросНаДоступ.Open("SELECT MAX(ID_STAFF_CARDS_AREAS) + 1 AS max_id FROM STAFF_CARDS_AREAS");
            ИД = Формат(ЗапросНаДоступ.Fields("max_id").Value, "ЧН=; ЧГ=");
            ЗапросНаДоступ.Close();
            
            
            
            ID_STAFF_CARDS_AREAS =  ИД;
            ЛЛ = AREAS_TREE_ID;
            AREAS_TREE_ID = УбратьПробелы(ЛЛ);  // Убиваем пробелы

            AREAS_TREE_ID  =  ЛЛ;
            
            ТекДата = Формат(ТекущаяДата(),"ДЛФ=ДВ");
            
            ТекДата = Сред(Сокрлп(ТекДата),11,11);
            
            ТекстЗапросаНаДоступ =  "Insert INTO STAFF_CARDS_AREAS (ID_STAFF_CARDS_AREAS,STAFF_CARDS_ID, AREAS_TREE_ID,TIME_ATTENDANCE,PROHIBIT,AREAS_IS_REQUIRED) " +
            "values ("+ ID_STAFF_CARDS_AREAS + ", " + СокрЛП(ID_CARD) + ", " + AREAS_TREE_ID + " ,'" + ТекДата +"', 0,0)";
            
            
            //Сообщить(ТекстЗапросаНаДоступ);

            
            ТекстUpdate = "Update STAFF_CARDS_AREAS set STAFF_CARDS_ID = "+СокрЛП(ID_CARD)+", TIME_ATTENDANCE = '" +ТекДата+ "', PROHIBIT = 0, AREAS_IS_REQUIRED = 0, AREAS_TREE_ID = " +AREAS_TREE_ID+"
            | where ID_STAFF_CARDS_AREAS="+ ID_STAFF_CARDS_AREAS ;
            
            
            
            //Сообщить(ТекстUpdate);

            //Возврат;

            попытка 
                ЗапросНаДоступ.Open(ТекстЗапросаНаДоступ); 
                ЗапросНаДоступ.Open(ТекстUpdate); 
                
            исключение 
                Сообщить ("Проблемы с выполнением запроса к FireBird" + ОписаниеОшибки()); 
            КонецПопытки;
 

Сразу же пишем данные в таблицу STAFF_CARDS_AREAS_DEVICE 

 

// Максимальный ИД в Таблице для присвоения его новому элементу. 

            ЗапросНаДоступ_D.Open("SELECT MAX(ID_STAFF_CARDS_AREAS_DEVICE) + 1 AS max_id FROM STAFF_CARDS_AREAS_DEVICE");
            ИД = Формат(ЗапросНаДоступ_D.Fields("max_id").Value, "ЧН=; ЧГ=");
            ЗапросНаДоступ_D.Close();
            
            
            
            ID_STAFF_CARDS_AREAS_DEVICE =  ИД;
            л_Груп = 7478;
            ACCESS_GROUPS_ID = УбратьПробелы(л_Груп);  // Убиваем пробелы

            ACCESS_GROUPS_ID = л_Груп;
            
            
            Если  Сокрлп(AREAS_TREE_ID)= "7432"  тогда
                л_CONFIG_TREE_ID = "5399";
            ИначеЕсли   Сокрлп(AREAS_TREE_ID) = "7433"  тогда
                л_CONFIG_TREE_ID = "6194";
            ИначеЕсли   Сокрлп(AREAS_TREE_ID) = "7434"  тогда
                л_CONFIG_TREE_ID = "6989";
            КонецЕсли;        
            
            CONFIG_TREE_ID = УбратьПробелы(л_CONFIG_TREE_ID);
            CONFIG_TREE_ID = л_CONFIG_TREE_ID;
            
            
            
            
            
            ТекстЗапросаНаДоступ_DEVICE =  "Insert INTO STAFF_CARDS_AREAS_DEVICE (ID_STAFF_CARDS_AREAS_DEVICE,STAFF_CARDS_AREAS_ID, CONFIG_TREE_ID,ACCESS_GROUPS_ID,DELETED,NEVERMORE_TRANSFER) " +
            "values ("+ ID_STAFF_CARDS_AREAS_DEVICE + ", " + СокрЛП(ID_STAFF_CARDS_AREAS) + ", " + CONFIG_TREE_ID +" ," + ACCESS_GROUPS_ID +", 0,0)";
            попытка 
                ЗапросНаДоступ_D.Open(ТекстЗапросаНаДоступ_DEVICE); 
                
            исключение 
                Сообщить ("Проблемы с выполнением запроса к FireBird" + ОписаниеОшибки()); 
            КонецПопытки;
 

Циферки, прописанные руками, это ИД строк в таблицах в нашей базе. В вашей они, естественно, будут другими. 


На это все работает хорошо. В базу Perco все попадает и корректно записывается. Одноко чтобы передать данные в аппаратуру, необходимо выпросить у разработчиков перки модуль SDK. Он бесплатный. Нужен для связи базы и аппаратуры. 

Собственно пока сделал вот так. Сотрудник в базе появляется. Карта и доступы ему присваиваются. Но через турникет не пускает. Буду копать дальше. Если есть идеи или вопросы - пишите. 

Perco 1c Интеграция

См. также

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

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

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

84000 руб.

19.08.2020    22460    19    1    

22

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

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

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

60000 руб.

05.10.2022    9217    9    8    

10

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

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

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

24000 руб.

24.04.2017    48712    96    163    

86

Перенос начальных остатков из Парус 7.71 в БГУ

Внешние источники данных Взаиморасчеты Учет ОС и НМА Логистика, склад и ТМЦ Бюджетный учет Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 2.0 1С:Бухгалтерия государственного учреждения Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Перенос словарей и начальных остатков из ПП Парус-Бухгалтерия Бюджет 7.71 в 1Сv8 БГУ2. Заполнение словарей и документов по вводу начальных остатков. Не требуется установка ПП Парус7. Возможна дозагрузка. Позволит автоматически и наиболее полно ввести данные в программу для начала работы. 

15600 руб.

08.12.2011    81584    128    123    

147

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

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

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

24000 руб.

16.11.2018    30006    20    31    

21

Загрузка спецификаций в УНФ из системы Базис-мебельщик

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

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

7200 руб.

24.06.2021    19136    52    50    

29
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. PiccaHut001 17.10.14 18:34 Сейчас в теме
"Но через турникет не пускает." - ничего ещё не работает, копайте дальше
2. EliasShy 48 22.10.14 11:20 Сейчас в теме
У перки своя программа, сравнительно удобная, для работы с данными, отчетами и прочим.
Зачем велосипед?
Мы из нее получаем фотки и сотрудников запросом.
4. PiccaHut001 23.10.14 10:51 Сейчас в теме
(2) EliasShy, вспомнилась молодость, когда я из обработки 1С 7.7 загружал остатки в складскую программу на Джава. Insert-ами в базу на оракле. Отчёты по остаткам сходились, документы проводились, но товары не списывались. Был остаток 100, списали 50, остаток как ни в чём не бывало 100. Пришлось обращаться ребятам в поддержку, мол чего-это товары не списываются, ваша программа не работает. Бедняги корячились дня 4 в pl-sql developere, с матами поправили.
5. DrAku1a 1679 30.10.14 02:46 Сейчас в теме
(2) нифига она не удобная у них. Да и свои отчеты в 1С налабать можно.
3. alexstey 427 22.10.14 12:58 Сейчас в теме
заполнения базы не достаточно. Нужно передать измененные параметры на контроллер турникета или на все контроллеры в системе.
6. Alex33614 53 30.10.14 12:36 Сейчас в теме
Именно. + Программа от перко требует больше операций сделать. И она ( в нашем случае ) на 1 пользователя. а зачем покупать сетевую если моно реализовать это в 1с.
7. selv 40 15.11.16 13:38 Сейчас в теме
Воспользовались вашей статьей, написали обработку по добавлению вновь введенного сотрудника в перку, но по факту исполнение обработки выпадает в исключение еще на этапе обработки запроса по добавлению записи в таблицу STAFF
Вот часть кода обработки:
ТекстЗапросаНаДобавление = "Insert INTO STAFF (ID_STAFF, LAST_NAME, FIRST_NAME, MIDDLE_NAME, TABEL_ID, DATE_BEGIN,DATE_DISMISS, VALID, TEMPORARY_ACC, DELETED,STAFF_STATE) " +
"VALUES (" + СокрЛП(ID_STAFF) + ", '" + Фамилия + "', '" + Имя + "', '" + Отчество + "', '" + СокрЛП(ТабельныйНомер)
+ "', '" + ДатаБезВремени_1+ "', '" + ДатаБезВремени_1 + "' , 1, 0, 0, 0)";
попытка
ЗапросНаДобавление.Open(ТекстЗапросаНаДобавление,СоединениеODBC);
исключение
Сообщить ("Проблемы с выполнением запроса к FireBird при добавлении сотрудника");
Возврат;
КонецПопытки;
ЗапросНаДобавление.Close();

Кажется что касяк в самом запросе.??!
18. shaykhelov 03.09.21 16:02 Сейчас в теме
(7) возможно введённый ID_STAFF не проходит. свой запрос проверить возможно в ibexpert
8. it4hr 28 26.01.17 17:08 Сейчас в теме
Тут заметил, что в таблице STAFF_CARDS_AREAS_DEVICE у только что добавленной строки ( через сервер Перки)
поле NEVERMORE_TRANSFER равно единице. А после передачи данных в аппаратуру становиться равным нулю.

9. ilaurel 20.07.17 14:32 Сейчас в теме
Вы пишете, что обязателен модуль SDK.
Но где, в какой момент, он использован? У Вас просто COM соединение.

Спрашиваю, т.к. в инструкции PERCo по подключению через SDK, в разделе "Подключение стороннего ПО к серверу PERCo" ("стороннее ПО" - это 1С) написано, что для подключения следует использовать метод SetConnect.
И что метод вызывается первым и без него COM-соединение не возможно.

Если вы используете SDK, то где этот SetConnect?
10. alexstey 427 20.07.17 17:59 Сейчас в теме
(9) Записать в БД мало. Нужно еще передать обновленную информацию из БД в контроллеры. Вот тут и, видимо, нужен SDK. В примере его вызова нет.
11. Alex33614 53 21.07.17 09:48 Сейчас в теме
(10) да все верно. Ком записывает в Базу SDK передает в Контроллер.
12. Aitbay 11.04.18 11:27 Сейчас в теме
5 лет назад ставили турникеты в школах и нужно было собирать данные о входах/выходах школьника и отправлять смс родителям что чадо в школе или ушел из школы + автоматизация библиотеки и столовой по карте доступа.
тоже подключал перковские турникеты к 1с, даже гдето конфига осталась, у тебя база перковская пухнуть не начала?

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

кстати здесь на инфостарте была статья общения с контроллерами напрямую посредством xml минуя перковское ПО.
13. Aitbay 12.04.18 06:26 Сейчас в теме
вот файлик, запускаешь его каждые 15-20 минут и база будет обновляться на самих контроллерах
Прикрепленные файлы:
PERCo.7z
shaykhelov; svilsa; +2 Ответить
14. Aitbay 12.04.18 06:28 Сейчас в теме
только нужно длл-ки перковские зарегить в системе через regsvr32
чуть позже время будет накопаю запрос к событиям был гдето.
15. Artem1995amyr 12.04.18 08:26 Сейчас в теме
Мы у себя используем обработчик "Модуль учета рабочего времени. Интеграция с perco"
16. Darkvetal-x 20.06.18 09:27 Сейчас в теме
(15)С ЗУП 2.5 да использовали такой модуль, но с переходом на ЗУП 3.0(1) нужно заново покупать этот модуль. Плюс насколько я понял - модуль обработки закрыт. Только через разработчика изменения. у нас конфигурация далеко не типовая (да, да, обновления - это боль) - разработчик не гарантирует работу своей обработки. Выход - своя разработка. Ну это мой личное мнение.
17. Shock1985 15.01.20 11:11 Сейчас в теме
Добрый день! Подскажите, а как подключить контрольный считыватель Perco IR.05 к 1С для того, чтобы можно было получить информацию от считывателя (желательно пример кода).
Оставьте свое сообщение