УПП + Perco + SDK

24.10.14

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

1С: УПП интеграция с Perco через SDK

В прошлой теме   //infostart.ru/public/307641/  выкладывал "труды" по интеграции УПП с системой электронной проходной Perco.  Данные записывал напрямую в базу данный электронной проходной , затем передавал  в апаратуру но ничего не работало.  

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

Читал в комментариях где то здесь, что работа через SDK модуль очень нудная, и  процедуры отрабатывают долго. Изучил мануал и решил попробовать. Все оказалось очень даже красиво и просто. Выдача карты доступа занимает порядка 2-3 секунд. Так же удаляются карты и изменяются права.

 

Делюсь наработками.

Принцип системы достаточно прост. Вы подключаете dll -ку SDK ,заполняете XML  файлик определенного формата, вызываете процедуру и в качестве параметра передаете этот XML.

 

1. Подключение DLL  -  Открываете командную строку под администратором и пишите regsvr32 "Полный путь до dll". Например

regsvr32 "C:\123.dll" 

 

2.  Подключаетесь к DLL  через 1С .

	Попытка
		Соединение = Новый COMОбъект("Perco_s20_SDK.ExchangeMain");	
	Исключение
		Предупреждение("ОШИБКА: Не удалось установить COM соединение с ПО PERCo-S-20. Возможная причина: Отсутствует или не зарегистрирована библиотека ""PERCo_S20_1C.dll"". См. описание ПО ""Perco-S-20""",10);
        КонецПопытки;

3.  Формируете XML файлик. В качестве примера  покажу как делал файл для Добавление Сотрудника с картой и изменения сотрудника.

СоздатьXMLОбъект(БД,mode) Экспорт
	
	Попытка
		
		
		id_internal =  ПолучитьИдСотрудника(БД);
		ЛЛ = Сокрлп(id_internal);
		id_internal = УбратьПробелы(ЛЛ);

		
		subdiv_id_external = ПолучитьИДПодразделение(БД);
		//Должность
		ЛЛ = Сокрлп(Должность_.ИД);
		ИДДолжности = УбратьПробелы(ЛЛ);
		appoint_id_external  = ИДДолжности;
		
		//
		
		//Карта
		ЛЛ = Сокрлп(Номер);
		Л_номер = УбратьПробелы(ЛЛ);
		лл= Сокрлп(Семейство);
		л_Семейство = УбратьПробелы(ЛЛ);
		
		identifier = ПолучитьНомерКарты(бд);
		shablon_id_internal =  ПолучитьИдШаблонаДоступа(бд);
		
		КолДней = 365;
		КолДнейДобавить = КолДней*24*60*60; 
		
		ДатаБезВремени_1 = Формат(ДатаБезВремени,"ДЛФ=Д");
		ДатаБезВремени_2 = Формат(ДатаБезВремени+КолДнейДобавить,"ДЛФ=Д");
		ТекущаяДата =  Формат(ТекущаяДата(),"ДЛФ=Д");

		//
		
		XML_DOM = Новый COMОбъект("Microsoft.XMLDOM");
		Header = XML_DOM.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"" standalone=""yes""");
		XML_DOM.appendChild(Header);
		Elem = XML_DOM.createElement("documentrequest");
		Elem.setAttribute("type", "staff");
		//Elem.setAttribute("mode", "withdraw_one_card_selected_employ");
		NodeRoot = XML_DOM.appendChild(Elem);
		Elem = XML_DOM.createElement("login");
		Elem.setAttribute("loginname", "ADMIN");
		NodeRoot = NodeRoot.appendChild(Elem);
		Elem = XML_DOM.createElement("workmode");
		Elem.setAttribute("mode", Сокрлп(mode));
		NodeRoot = NodeRoot.appendChild(Elem);
		
		Elem = XML_DOM.createElement("staff");
		NodeRoot = NodeRoot.appendChild(Elem);
		Elem.setAttribute("photo", "");               //фотография путь
		Elem.setAttribute("date_begin", Формат(ДатаБезВремени,"ДЛФ=Д"));               // Дата приема
		Elem.setAttribute("graph_id_internal", "0");           // -//-  график работы
		//Elem.setAttribute("appoint_id_internal","");        //  значение Внутреннего ключевого поля Должность
		//Elem.setAttribute("subdiv_id_internal","");        //  Значение внутреннего ключевого поля подразделение
		Elem.setAttribute("graph_id_external", "");         // -//-  график работы
		Elem.setAttribute("appoint_id_internal",  Сокрлп(appoint_id_external));     //  значение внешнего ключевого поля Должность
		Elem.setAttribute("subdiv_id_internal", Сокрлп(subdiv_id_external));     // Значение внешнего ключевого поля подразделение
		Elem.setAttribute("id_internal", Сокрлп(id_internal));           // -//-  график работы
		Elem.setAttribute("tabl_id", Сокрлп(ТабельныйНомер));          //Табельный номер
		Elem.setAttribute("middle_name", Сокрлп(Отчество));      //Отчество
		Elem.setAttribute("first_name", Сокрлп(Имя));       // Фамилия
		Elem.setAttribute("last_name", Сокрлп(Фамилия));        // Фамилия
		Elem.setAttribute("id_external","");      // ID   сотрудника в   STAFF
		
		//Доступы
		Elem = XML_DOM.createElement("identifiers");
		NodeRoot = NodeRoot.appendChild(Elem);
		
		Elem = XML_DOM.createElement("identifier");
		NodeRoot = NodeRoot.appendChild(Elem);
		
		Elem.setAttribute("shablon_id_internal",shablon_id_internal );      //Ид шаблона доступов
		Elem.setAttribute("prohibit", "false");      //Запред на использование карты
		Elem.setAttribute("date_end_action", ДатаБезВремени_2);          // дата окончания
		Elem.setAttribute("date_begin_action",ДатаБезВремени_1);     // дата  начала действия карты
		Elem.setAttribute("identifier",identifier  );     //  Значение   идентификатора
		Elem.setAttribute("type_identifier", "family_number");              // Тим идентификатора
		//
		
		
		
		
		XML_DOM.save("\\Путь\" + "ИмяФайла.xml");  
	Исключение
		Сообщить("Не удалось создать XML объект.");
		XML_DOM=Неопределено;
	КонецПопытки;
	
	Возврат XML_DOM;
	
КонецФункции

 

Данные для заполнения берем из базы perco  через простые  SQL  запросы.  Как подключить описано в предыдущей статье.

 

5. после заполнения файла  подключаемся через SDK к базе  и предаем данные. 

 

Процедура SDK(БД)
	
	
	//Обновляем данные или создаем нового сотрудника
	Обновление = ПроверкаСотрудника(БД);
	
	Если Обновление = 1 тогда
	mode ="update"; 	
	Иначе
	mode = "append";	
	КонецЕсли;

    Если Обновление <> 3 тогда
	
	ОбъектХМЛ =   СоздатьXMLОбъект(БД,mode);
	
	Попытка
		Соединение = Новый COMОбъект("Perco_s20_SDK.ExchangeMain");	
	Исключение
		Предупреждение("ОШИБКА: Не удалось установить COM соединение с ПО PERCo-S-20. Возможная причина: Отсутствует или не зарегистрирована библиотека ""PERCo_S20_1C.dll"". См. описание ПО ""Perco-S-20""",10);
	КонецПопытки;
	
	
	Если Соединение.SetConnect(Сокрлп("ip_адрес_сервера_системы_perco"),Сокрлп("211"),Сокрлп("admin"),Сокрлп("Пароль"))<>  0 тогда
		Сообщить("Соединение с сервером системы не установлено!!!");
	Иначе
		Соединение.SendData(ОбъектХМЛ);
	КонецЕсли;		
	
	 
	Соединение.Disconnect();
	Соединение = Неопределено;
	
	КонецЕсли;
КонецПроцедуры

 

 

6. передаем данные в аппаратуру по той же системе.  Формируем XML  и передаем его через процедуру.

 

	ОбъектХМЛ_1 =   СоздатьXMLОбъектПрименение();
	
	Попытка
		Соединение = Новый COMОбъект("Perco_s20_SDK.ExchangeMain");	
	Исключение
		Предупреждение("ОШИБКА: Не удалось установить COM соединение с ПО PERCo-S-20. Возможная причина: Отсутствует или не зарегистрирована библиотека ""PERCo_S20_1C.dll"". См. описание ПО ""Perco-S-20""",10);
	КонецПопытки;
	
	
	Если Соединение.SetConnect(Сокрлп("АдресСервера"),Сокрлп("211"),Сокрлп("admin"),Сокрлп("ПарольАдмина"))<>  0 тогда
		Сообщить("Соединение с сервером системы не установлено!!!");
	Иначе
		Соединение.ExecuteAccessCardsAction(ОбъектХМЛ_1);
	КонецЕсли;		
	
	 
	Соединение.Disconnect();
	Соединение = Неопределено;

 

 

формат файла XML  для передачи карт в апаратуру описан в мануале.  Я использовал "Передать Все Изменения" .

 

Так же для удобства я в УПП сделал справочник "Должности Perco"    в который загрузил Все ID должностей в базе перки и Наименования.  Чтобы  процесс выбора должности занимал меньше времени.

 

Все работает, все проверено.  Если будут вопросы  - обращайтесь. 

УПП PERCO perco SDK электронная Проходная

См. также

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

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

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

84000 руб.

19.08.2020    22612    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    13628    12    SQV0    47    

28

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

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

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

24000 руб.

24.04.2017    48825    97    163    

86

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

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

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

24000 руб.

16.11.2018    30078    20    31    

21

Загрузка в БГУ из УРМ "Криста"

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

Обработки для загрузки данных из УРМ "Криста" в бухгалтерию государственного учреждения редакция 2.0. Есть Демо доступ на вкладке Бесплатные файлы на 1 месяц со дня получения демонстрационного ключа регистрации. Поддерживает ПО "Web-исполнение" от НПО "Криста".

4800 руб.

19.06.2013    38481    137    90    

30
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. DrAku1a 1715 30.10.14 02:45 Сейчас в теме
Firebird (SQL) - ВК для чтения без дополнительных настроек (Native API) - делал как раз для P.E.R.C.o., есть даже рабочий проект на этом деле.
+
2. STEPPRK 29 19.12.14 05:41 Сейчас в теме
А где можно найти мануал по SDK Perco?
+
3. Alex33614 53 30.12.14 22:25 Сейчас в теме
(2) STEPPRK, он вместе с модулем поставляется.
+
4. kazakoff 07.07.15 13:24 Сейчас в теме
Попытка
Соединение = Новый COMОбъект("Perco_s20_SDK.ExchangeMain");
Исключение
Предупреждение("ОШИБКА: Не удалось установить COM соединение с ПО PERCo-S-20. Возможная причина: Отсутствует или не зарегистрирована библиотека ""PERCo_S20_1C.dll"". См. описание ПО ""Perco-S-20""",10);
КонецПопытки;


Выходит ошибка!

Я думаю что этот объект "Perco_s20_SDK.ExchangeMain" по другому называется.
+
5. kazakoff 07.07.15 14:18 Сейчас в теме
Разобрался, а как получить список проходящих?
+
6. selv 40 21.11.16 11:12 Сейчас в теме
Здравствуйте, по вашей статье написали процедуру добавления сотрудника из 1С в СКУД PERCo. Выполняется без ошибок, НО них**на не ложится в базу СКУД. В мануале по SDK проверяли файлик xml. Программно формируем такой же.. где косяк не поймем... может помимо staff - таблицы нужно еще что-то заполнить, чтобы новый сотрудник появился в базе СКУД?
+
7. gos 25.04.19 09:56 Сейчас в теме
Можете подсказать по какой причине могут не загружаться события из Perco при использовании этой обработки http://timeaccount.ru/files/formula_polucheniespiskasobitiiyizperkoposredstvoms­omsoedineniya.epf
Соединение устанавливается, но события входа-выхода не подгружаются
+
8. gos 26.04.19 09:19 Сейчас в теме
10. Sergio D 24.08.19 16:41 Сейчас в теме
(8) а подскажите в чем проблема?
я менял в обработке код на: COMОбъект("Perco_s20_SDK.ExchangeMain");
+
9. gospodenkods 21.05.19 14:15 Сейчас в теме
Интересно , а кто нибудь пробовал получить через SDK список пропусков , с зонами и датой действия ?
+
11. kazakoff 29.01.20 15:10 Сейчас в теме
Выложите пожалуйста SDK а что-то там много бумаг подписывать.
+
12. kazakoff 08.06.20 14:11 Сейчас в теме
А покажите сам СоздатьXMLОбъектПрименение()
+
Оставьте свое сообщение