партнерский раздел
ФорумЭксплуатацияИспользование функции ПолучитьСобытие() в скриптах

Эксплуатация » Использование функции ПолучитьСобытие() в скриптах

Всем привет!
Поскажите, на форуме в сценариях видел использование функции ПолучитьСобытие()
Где можно найти подробное описание этой функции? В описании макроязыка не нашел.

6 лет 8 месяцев назад

avatar
А что конкретно интересует? Есть задача? Давайте на примере разберем.

Тремасов Константин Александрович 6 лет 8 месяцев назад

Интересовало подробное описание для ПолучитьСобытие(), коего я не нашел. Увидел на форуме что такое есть. Но методом тыка вообщем то с этой функцией разобрался.
А задача простая, есть С2000-2+Считывать Proxymity (LEGIC) карт с клавиатурой для PIN кодов. Нужно идентифицироваться картой и на клаве ввести например номер раздела и взять или снять его c охраны. Но не один раздел, а произвольное кол-во.

Суворов Вячеслав 6 лет 8 месяцев назад

В итоге задачу решили? Не покажите сценарий?

Тремасов Константин Александрович 6 лет 8 месяцев назад

ПолучитьСобытие(); системная функция, которая запрашивает событие, по которому запускается сценарий.

Петухов Андрей 6 лет 8 месяцев назад

Да, и с функцией разобрался и предварительно решил задачу, два скрипта, один идентифицирует карту, второй по пин коду управляет разделами, группами.
Вот пример сценариев 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 );
КонецПопытки;

КОНЕЦСЦЕНАРИЯ

 

Суворов Вячеслав 6 лет 8 месяцев назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

1 ответ

Итого:
Как оказалось в описании макроязыка Орион Про версии 1.12 обновление 2 отсуствует описание функции ПолучитСобытие().
В версии 1.20.2 есть. А заявлена она была еще в 1.11.
Также нет описания функций доступа к разделам, группам, дверям в объекте ГруппаДоступа описания макроязыка версии 1.12.2.
 

6 лет 8 месяцев назад

avatar
Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

Добавить ответ

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

ПОКАЗАН

4129 раз

ЗАДАН

6 лет 8 месяцев назад

ПРОДУКТЫ

АБД Орион Про

По каждому вопросу/ответу можно добавлять комментарии. Комментарии предназначены для уточнения вопроса/ответа.