|
Всем привет! 7 лет 3 месяца назад Суворов Вячеслав 4Интересовало подробное описание для ПолучитьСобытие(), коего я не нашел. Увидел на форуме что такое есть. Но методом тыка вообщем то с этой функцией разобрался.
А задача простая, есть С2000-2+Считывать Proxymity (LEGIC) карт с клавиатурой для PIN кодов. Нужно идентифицироваться картой и на клаве ввести например номер раздела и взять или снять его c охраны. Но не один раздел, а произвольное кол-во. – Суворов Вячеслав 7 лет 3 месяца назад В итоге задачу решили? Не покажите сценарий?
– Тремасов Константин Александрович 7 лет 3 месяца назад ПолучитьСобытие(); системная функция, которая запрашивает событие, по которому запускается сценарий.
– Петухов Андрей 7 лет 3 месяца назад Да, и с функцией разобрался и предварительно решил задачу, два скрипта, один идентифицирует карту, второй по пин коду управляет разделами, группами.
Вот пример сценариев DETECT_CARD и DETECT_PIN: СЦЕНАРИЙ Переменные Перем ТекущийСчитыватель, ИмяСчитывателя; Перем Карта; Перем ИмяСценария; Перем ЗадержкаОтключения; // сколько времени код карты активен на считывателе Перем Сотрудник, ФИО, ТабНомер; Перем ТекущееСобытие; Перем ТекущийПароль; НАЧАЛОСЦЕНАРИЯ ИмяСценария = "DETECT_CARD"; ЗадержкаОтключения = 60000; // 60екунд Попытка // получим событие которое запустило сценарий ТекущееСобытие = ПолучитьСобытие(); // получим пароль ТекущийПароль = ТекущееСобытие.Пароль(); Если Не ПустоеЗначение(ТекущийПароль) Тогда Карта = ТекущийПароль.СтроковыйПароль(); Сообщить("Карта - " + Карта, 0); Иначе ВызватьИсключение( "Нет пароля в событии." ); КонецЕсли; // получим сотрудника Сотрудник = ТекущийПароль.Сотрудник(); Если Не ПустоеЗначение( Сотрудник ) Тогда ФИО = Сотрудник.ФИО(); ТабНомер = Сотрудник.ТабНомер(); Сообщить("ФИО - " + ФИО, 0); Сообщить("Таб - " + ТабНомер, 0); Иначе ВызватьИсключение( "Нет сотрудника в событии." ); КонецЕсли; // получим считыватель ТекущийСчитыватель = ТекущееСобытие.Элемент(); Если Не ПустоеЗначение( ТекущийСчитыватель ) Тогда ИмяСчитывателя = ТекущийСчитыватель.Название(); Сообщить("Считыватель - " + ИмяСчитывателя, 0); Если ТекущийСчитыватель.Тег() == Карта Тогда // очищаем ввод пинов для карты ТекущийСчитыватель.ПоместитьВТег("НЕТ КАРТЫ"); Сообщить("Поместили в Тег - НЕТ КАРТЫ", 0); Иначе // запомним карту в теге считывателя ТекущийСчитыватель.ПоместитьВТег(Карта); Сообщить("Поместили в Тег - " + Карта, 0); Задержка( ЗадержкаОтключения ); ТекущийСчитыватель.ПоместитьВТег("НЕТ КАРТЫ"); Сообщить("Выход по задержке.", 0); КонецЕсли; Иначе ВызватьИсключение( "Нет считывателя в событии." ); КонецЕсли; Исключение Сообщить( ИмяСценария + ", исключение в сценарии - " + ОписаниеОшибки(), 3 ); КонецПопытки; КОНЕЦСЦЕНАРИЯ СЦЕНАРИЙ Переменные Перем ТекущееСобытие, ТекущийПароль, Сотрудник; Перем ТекущийСчитыватель, ИмяСчитывателя; Перем Карта, Карты, КартаВСобытии; Перем ИмяСценария, ФИО, ТабНомер; Перем Сч, ДлСтр, КолКарт, ПинКод; Перем Р1, Р2, ГР, ИмяГР; Перем Текст; Перем Компы, Комп, РМ, Ядро; Перем ПутьКСпискуКарт, Файл; НАЧАЛОСЦЕНАРИЯ ИмяСценария = "DETECT_PIN"; Карты = "НЕТ, БУДУТ ЗАГРУЖЕНЫ из ФАЙЛА"; Карта = "НЕТ КАРТЫ"; ГР = 0; ПутьКСпискуКарт = "c:\bolid\oris\"; ПинКод = "0000"; Попытка // получим событие которое запустило сценарий ТекущееСобытие = ПолучитьСобытие(); // получим пароль ТекущийПароль = ТекущееСобытие.Пароль(); Если Не ПустоеЗначение(ТекущийПароль) Тогда КартаВСобытии = ТекущийПароль.СтроковыйПароль(); Сообщить("1.Карта - " + КартаВСобытии, 0); Иначе ВызватьИсключение( "Нет пароля в событии." ); КонецЕсли; // получим сотрудника Сотрудник = ТекущийПароль.Сотрудник(); Если Не ПустоеЗначение( Сотрудник ) Тогда ФИО = Сотрудник.ФИО(); ТабНомер = Сотрудник.ТабНомер(); Сообщить("2.ФИО - " + ФИО, 0); Сообщить("3.Таб - " + ТабНомер, 0); Иначе ВызватьИсключение( "Нет сотрудника в событии." ); КонецЕсли; // чем управляем ГР = Число(Прав(КартаВСобытии, 4)); // из пинкода берем только 4 последних символа Если ГР < 1000 Тогда // это раздел Р1 = СоздатьОбъект( "Разделы" ); Если Не ПустоеЗначение( Р1 ) Тогда Р2 = Р1.ПолучитьПоИндексу( ГР ); Если Не ПустоеЗначение( Р2 ) Тогда ИмяГР = "Раздел " + Р2.Название(); Сообщить("4."+ ИмяГР, 0); Иначе ВызватьИсключение("4.Раздел " + Строка(ГР) + " не найдена."); КонецЕсли; Иначе ВызватьИсключение("4.Разделы не созданы."); КонецЕсли; Иначе Р1 = СоздатьОбъект( "ГруппыРазделов" ); Если Не ПустоеЗначение( Р1 ) Тогда Р2 = Р1.ПолучитьПоИндексу( ГР ); Если Не ПустоеЗначение( Р2 ) Тогда ИмяГР = "Группа разделов " + Р2.Название(); Сообщить("4." + ИмяГр, 0); Иначе ВызватьИсключение("4.Группа Разделов " + Строка(ГР) + " не найдена."); КонецЕсли; Иначе ВызватьИсключение("4.Гр.разделов не создана."); КонецЕсли; КонецЕсли; Компы = СоздатьОбъект( "Компьютеры" ); Комп = Компы.ПолучитьПоИд(1); РМ = Комп.РабочиеМеста(); Ядро = РМ.ПолучитьПоТипуСетевогоМеста("Ядро"); Если Не ПустоеЗначение(Ядро) Тогда Файл = ПутьКСпискуКарт + КартаВСобытии + ".txt"; Сообщить("5.Файл - " + Файл, 0); Карты = Ядро.ЧтениеИзФайла(Файл, 0, Ядро.РазмерФайла(Файл)); Сообщить("6.Карты в файле - " + Карты, 0); Иначе ВызватьИсключение( "Ядро не найдено."); КонецЕсли; ДлСтр = ДлинаСтроки(Карты); КолКарт = ДлСтр / 24; // длина кода карты + разделитель // получим считыватель Текст = "8.Нет прав на управление разделом/группой."; ТекущийСчитыватель = ТекущееСобытие.Элемент(); Если Не ПустоеЗначение( ТекущийСчитыватель ) Тогда ИмяСчитывателя = ТекущийСчитыватель.Название(); Сообщить("7.Считыватель - " + ИмяСчитывателя, 0); // цикл по картам Для Сч=1 По КолКарт Цикл Карта = Сред( Карты, (Сч-1)*24+1, 16 ); Если ТекущийСчитыватель.Тег() == Карта Тогда // управляем разделом/группой Если Р2.Состояние() == "СНЯТ" Тогда Р2.Взять(); Текст = "8. " + ИмяГР + " - " + " ВЗЯТ."; Иначе Р2.Снять(); Текст = "8. " + ИмяГР + " - " + " СНЯТ."; КонецЕсли; Прервать; КонецЕсли; КонецЦикла; Сообщить(Текст, 0); Иначе ВызватьИсключение( "Пустое значение переменной (ТекущийСчитыватель)."); КонецЕсли; Исключение Сообщить( ИмяСценария + ", исключение в сценарии - " + ОписаниеОшибки(), 3 ); КонецПопытки; КОНЕЦСЦЕНАРИЯ – Суворов Вячеслав 7 лет 3 месяца назад Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?) |
|
Итого: 7 лет 3 месяца назад Суворов Вячеслав 4Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?) |
4488 раз
7 лет 3 месяца назад
По каждому вопросу/ответу можно добавлять комментарии. Комментарии предназначены для уточнения вопроса/ответа.
– Тремасов Константин Александрович 7 лет 3 месяца назад
#ссылка