|
Интеграция 1с с Perco. | ☑ | ||
---|---|---|---|---|
0
Юзер123
naïve
15.10.14
✎
14:59
|
Всем привет. Как и обещал ранее делюсь наработками.
На данный момент 1С умеет записывать данные в Perco, но не получается научить аппаратуру понимать то что я сделал, хотя через SDK модуль данные передаются. По порядку. Подключение к базе Perco (FDB файлик где то у вас на диске локальном). //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 - Сотрудники. ЗапросНаДобавление = Новый 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 . он бесплатный. Нужен для связи базы и аппаратуры. Собственно пока сделал вот так. Сотружник в базе появляется. Карта и доступы ему присваиваются. Но через турникет не пускает. Буду копать дальше. Если есть идеи или вопросы - пишите. http://i.gyazo.com/b8d8452f40b9bb216d6cc92d272bfcd7.png |
|||
1
Юзер123
naïve
15.10.14
✎
15:09
|
код корявый. Все запросы без соединений. Пишу быстро время поджимает) на коленках практически.
|
|||
2
Йохохо
15.10.14
✎
15:12
|
(0) в орионе после апдейта бп, надо еще "обновить БД в оперативной задаче" и "Перезаписать ключи в приборах", мб что то похожее и в перко
|
|||
3
Юзер123
naïve
15.10.14
✎
15:16
|
(2) у меня подозрение что я куда то что то не дописываю. Я через 1С создаю сотрудника, даю ему карту и доступы, открываю Базу перко. Вижу все изменения которые я сделал. Все корректно. Но аппаратура не реагирует. Даже если через консоль прки передаю данные руками в аппаратуру. Толку нет.
|
|||
4
Юзер123
naïve
15.10.14
✎
15:20
|
||||
5
Жан Пердежон
15.10.14
✎
15:27
|
(3) с этого и надо начинать - натрави на сервер какой-нибудь sqlmonitor, fbscanner и т.д., чтобы узнать, какие запросы шлет программа (наверняка дергается какая-нибудь хранимая процедура, которая пишет во все нужные таблицы)
|
|||
6
silent person
15.10.14
✎
15:28
|
||||
7
Юзер123
naïve
15.10.14
✎
15:32
|
(6) и? мне кажется в первом посте инфы больше раза в 4
|
|||
8
Юзер123
naïve
15.10.14
✎
15:32
|
(5) как это работает?
|
|||
9
Юзер123
naïve
15.10.14
✎
15:34
|
(6) да и автор не особо общительный =) деньгу хочет за любые наводки
|
|||
10
Юзер123
naïve
16.10.14
✎
09:14
|
никто не делал?
|
|||
11
Krolik Bezobraznik
16.10.14
✎
09:36
|
На Перке контроллеры перезагружал после заливки на них данных?
|
|||
12
Krolik Bezobraznik
16.10.14
✎
09:39
|
(10) Не хочу вводит в заблуждение, давно с перкой не имел дело, но помоему в настройках карты должна быть привязка к зонам и уровням доступа а так же еще какой то херне, то ли это называлось домен (не путать с доменом АД) то ли головной узал.. вот хоть убей не помню. Так вот без этой привязки правила для карты не работали.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |