партнерский раздел
ФорумЭксплуатацияПомогите создать сценарий

Эксплуатация » Помогите создать сценарий

Знающие люди, помогите создать сценарий.
Суть такова, заказчику нужно, чтобы при заполнение зоны до 20 человек блокировался вход, работал лишь выход. Пытался освоить Макроязык, но как-то пока не очень. Если напишите в нём, сделайте пожалуйста пометки с пояснениями, чтобы самому понимать, что к чему. Заранее благодарен

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

avatar
борьба с ковидом выходит на новый уровень))

включите в настройках АБД отображение текста сценария в режиме шаблонов и поизучайте шаблонные шаги "Взять разделы рабочего места по уходу последнего из заданной зоны", "Заблокировать доступ" и "Восстановить доступ". На основе этого можно уже что-то собрать.

– Волков Андрей 6 лет 1 месяц назад

вот как вы писали, так и пытался, с такими же сценариями, нефига не вышло

– Мелентьев Артём Вячеславович 6 лет 1 месяц назад

так выложите пример того что пытались, там и будет видно, где ошибка.

– Волков Андрей 6 лет 1 месяц назад

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

Сценарий
 Переменные
  Перем Считыватель1;
  Перем Компьютеры1;
  Перем Компьютер1;
  Перем РабочиеМеста1;
  Перем РабочееМесто1;
  Перем ЗоныДоступа1;
  Перем ЗонаДоступа1;
 НачалоСценария
Попытка
 Компьютеры1 = СоздатьОбъект( "Компьютеры" );
 Компьютер1 = Компьютеры1.ПолучитьПоИд(1);
  РабочиеМеста1 = Компьютер1.РабочиеМеста();
  РабочееМесто1 = РабочиеМеста1.ПолучитьПоТипуСетевогоМеста("Ядро");
   ЗоныДоступа1 = СоздатьОбъект( "ЗоныДоступа" );
   Если не ПустоеЗначение( ЗоныДоступа1 ) Тогда
    ЗонаДоступа1 = ЗоныДоступа1.ПолучитьПоИД( 1 );
     Если не ПустоеЗначение( РабочееМесто1.Считыватели() ) Тогда
      Считыватель1 = РабочееМесто1.Считыватели().ПолучитьПоИД( 1 );
       Если ( ЗонаДоступа1.КоличествоСотрудниковПоУровню( 0 ) > 19 ) Тогда
        Если не ПустоеЗначение( Считыватель1 ) Тогда
        Считыватель1.ЗаблокироватьДоступ();
         иначе Сообщить( "Считыватель не найден", 1 );
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПопытки;
КонецСценария

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

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

– Мелентьев Артём Вячеславович 6 лет 1 месяц назад

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

Сам не проверял. Рукописный сценарий привязать к событию ПРОХОД считывателя который пускает в эту ЗД.
СЦЕНАРИЙ
Переменные
перем Событие1;
перем ЗД1;
перем ЗД2;
перем считыватель1;

НАЧАЛОСЦЕНАРИЯ
Событие1 = ПолучитьСобытие();
ЗД1 = СоздатьОбъект("ЗоныДоступа");
ЗД2 = ЗД1.ПолучитьПоИндексу(1); // указать номер ЗД
если (ЗД2.КоличествоСотрудниковВЗонеДоступа() == 20)  тогда
считыватель1 = Событие1.Элемент();
считыватель1.ЗаблокироватьСчитыватель();
КонецЕсли;

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

Далее создаете сценарий по шаблону, Восстановить Доступ, указать считыватель на вход в эту ЗД, но привязать к событию ПРОХОД считывателя который выпускает из этой ЗД.

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

avatar
а событие здесь нужно, только чтобы определить какой считыватель взять же? по сути можно было и строго задать, но так универсальность и на две двери можно)

– Волков Андрей 6 лет 1 месяц назад

Событие для считки, по сути можно создать, кому как удобнее.

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

объесните пожалуйста значение функции "событие"
как я понимаю в данном примере она привязывает считыватель, через который пытались пройти. Тоесть заместо события можно было жестко привязать считыватель.
Просто зоной доступа является парковка БЦ с двумя шлагбаумами на вьезд и выезд. На парков есть 2 вида мест для Арендаторов БЦ и гостей. Все проезжают через один шлагбаум, но у арендаторов карты дальней индификации, соответственно стоит отдельная двойка со считывателями дальней индификации, которая сценарием открытия привязана к двойке шлагбаума.
Всё это я пиши к тому, что мне нужна точная привязка считывателя.
Поэтому для общего развития, прошу пояснить, что есть "Получить Событие" и его функцианал

– Мелентьев Артём Вячеславович 6 лет 1 месяц назад

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

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

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

еще вопрос, почему у меня не выводит сообщение с количеством мест
просто сообщение выводит, а вот переменную нет, подскажите что не так

рабочееместо1.ПоказатьСообщение( Зонадоступа1.КоличествоСотрудниковВЗонеДоступа(), 0);

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

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

Попробуйте так: рабочееместо1.ПоказатьСообщение( "Зонадоступа1.КоличествоСотрудниковВЗонеДоступа()");

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

avatar
тоже сомнительно, оно и покажет "Зонадоступа..." )) там вроде надо в строку переводить

– Волков Андрей 6 лет 1 месяц назад

мне нужно это было для теста, для вывода переменной. Получилось вывести сообщение только в ядро, но мне этого хватило, чтобы понять  - это работает. 
Теперь стоит другая задача вывести значение переменной в качесте url в текст ie
С текстом так получается, с переменной опять же нет =(.
РабочееМесто1.ЗапуститьПрограмму( "C:\Program Files (x86)\Internet Explorer\iexplore.exe", Зонадоступа1.КоличествоСотрудниковВЗонеДоступа()

Если вставить текст
РабочееМесто1.ЗапуститьПрограмму( "C:\Program Files (x86)\Internet Explorer\iexplore.exe", "Привет"
то в url появляется текст, но если вставить переменную, то стартовая страница =(.

Эти махинации мне нужны, для вывода на циферблад количества мест.

– Мелентьев Артём Вячеславович 6 лет 1 месяц назад

Да, с ковычками было лишнее))
РабочееМестоЛок1.ПоказатьСообщение("Людей В Зоне Доступа:"+"  "+ Строка (ЗонаДоступа1.КоличествоСотрудниковВЗонеДоступа())); 
Вот так выводит.

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

ну вот и ответ, переменную выводить бесполезняк, зато через Строка() всё должно получиться.

– Волков Андрей 6 лет 1 месяц назад

да получилось, спасибо большое всем за помощь, правда со "cтрокой" сам нашёл в мануале, но забыл отписать на форуме, что всё норм, конец рабочего дня, замотался, всем еще раз спасибо. Теперь хоть немного вник в этот макроязык....

– Мелентьев Артём Вячеславович 6 лет 1 месяц назад

Если написать так: РабочееМестоЛок1.ЗапуститьПрограмму( "C:\Program Files\internet explorer\iexplore.exe", Строка(ЗД2.КоличествоСотрудниковВЗонеДоступа()));
То в IE показывает так: http://0.0.0.0/ последний 0 это количество в людей в ЗД

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

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

удалось полностью реализовать сценарий, с выводом на табло количества мест. Но возникла проблема, если 2 машины успевают проехать через шлагбаум, то количество мест отображается неправильно. При условии, что на ночь парковка закрыта и машин там не должно быть, то возникла необходимость, что-то придумать с обнулением людей в зоне доступа.
я решил создать сценарай который каждую ночь оценивает количество людей в зоне и предоставление им доступа, чтобы выгнать из зоны.
Для начала я хотел начать с чего-то простого - выявить сотрудника в зоне и вывести его. При успехи данного сценария попытаться его зациклить.
Но даже с первым пунктом возникли трудности.

Сценарий
Переменные
Перем РабочиеМеста1;
Перем Компьютеры1;
Перем Компьютер1;
Перем РабочееМестоЛок1;
Перем ЗоныДоступа1;
Перем ЗонаДоступа1;
Перем Сотрудники;
Перем Сотрудник1;
Перем Считыватель1;
НачалоСценария


Попытка
Компьютеры1 = СоздатьОбъект( "Компьютеры" );
Компьютер1 = Компьютеры1.ПолучитьПоИд(1);
РабочиеМеста1 = Компьютер1.РабочиеМеста();
РабочееМестоЛок1 = РабочиеМеста1.ПолучитьПоТипуСетевогоМеста("ядро");
ЗоныДоступа1 = СоздатьОбъект( "ЗоныДоступа" );
ЗонаДоступа1 = ЗоныДоступа1.ПолучитьПоИд( 2 );
Сотрудники = ЗоныДоступа1.Сотрудники()
Сотрудник1 = Сотрудники.Первый();
Считыватель1 = РабочееМестоЛок1.Считыватели().ПолучитьПоИд(42)
Считыватель1.ПредоставитьДоступ(Сотрудник1);


Если Не ПустоеЗначение(РабочееМестоЛок1)
Тогда
Сообщить(Сотрудник1, 0);
КонецЕсли;
Исключение Сообщить("Произошло исключение",0); КонецПопытки;
КонецСценария

Трудность в том, что я не могу вытащить информацию о сотрудники из зоны, любые команды типо его id, пароля или фио не приводят не к чему. Т.к. команда (Первый) даёт лишь порядковый номер в списке. Помогите пожалуйста справиться с этой задачей. Заранее благодарен

 

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

avatar
Читайте вот отсюда, подобная задача уже обсуждалась https://partners.bolid.ru/forum/forum_8009.html#comment47215

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

еще раз хочу сказать Спасибо
поправил только
Если ЗонаДоступа1.Индекс() > 0 Тогда
на
Если ЗонаДоступа1.ИД() == 2 Тогда
т.к. зон много а мне только с одной надо выгнать
И всё заработало как часики
Товарищь, вы гений))

– Мелентьев Артём Вячеславович 6 лет 1 месяц назад

Там задача была проверить ВСЕХ СОТРУДНИКОВ, у вас задача проверить ЗОНУ ДОСТУПА, не вижу смысла гонять сценарий по сотрудникам, надо попробовать только ЗД проверить, но когда, это вопрос, дойдут руки, можно переписать немного под вас.
 

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

Я понял, что он прогоняет всю базу сотрудников, в принципе - это не принципиально, т.к. прогонять он будет ночью и выводить только из второй зоны, думаю их будет там не так много. Если вы поправите сценарий буду примного благодарен

– Мелентьев Артём Вячеславович 6 лет 1 месяц назад

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

появилась новая задача от заказчика, и я опять не знаю как с ней справиться. По аналогии с первой задачей с блокировкой вьезда при определенном количество, но теперь зона должна быть разделена на 3 группы допуска, у каждой должно быть определенное количество мест на парковке. И допуск должен не блокироваться, а запрещаться.
Тоесть на одной парковке 3 арендатора, у каждого свое количество машиномест, при достиженние максимума на парковке, нужно запрещать вьезд другим машинам данного арендатора, а при выезде снимать запрет. Если такой сценарий вообще возможен, помогите написать.

6 лет назад

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

нужно понимание
команда
ПолучитьСобытие() отражает уже произошедшее событие или которое еще не совершенно.
Иными словами если человек прислонил карточку, ему предоставится доступ и я получу его данные или я сначала получаю его данные, только потом предоставляется доступ.
Тоесть могу ли я заблокировать его доступ или ему предоставится проход, а лишь затем он заблокируется

Плюсом хотелось бы знать команду запрета прохода и примерный скрипт системы антипасбека

6 лет назад

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

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

6 лет назад

avatar
Для примера:
если ЗД1.КоличествоСотрудниковПоУровню(5) > 0 тогда // 5 это номер уровня доступа в базе
считыватель1 = Событие1.Элемент();
считыватель1.ВосстановитьДоступ();

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

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

– Мелентьев Артём Вячеславович 6 лет назад

хмм, а зачем восстанавливать доступ? это по логике тогда второй раз махать же надо, но доступ то от этого не появится. Может быть имеет смысл в "Считыватель1.ПредоставитьДоступ(Событие1.Пароль().Сотрудник())", чтобы ещё и было событие о предоставлении доступа определённому сотруднику ну и знать что сотрудник действительно прошёл в ЗД

– Волков Андрей 6 лет назад

Это пример с другого сценария, как проверить по УД и все, делайте как вам надо, предоставить доступ.

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

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

Сценарий
Переменные
Перем Считыватель1;
Перем Компьютеры1;
Перем Компьютер1;
Перем РабочиеМеста1;
Перем РабочееМесто1;
перем Событие1;
Перем Пароль1;
Перем ГруппаДоступа1;
Перем Сотрудник1;
перем Проход;
Перем Число1;
Перем ЗоныДоступа1;
Перем ЗонаДоступа1;
НачалоСценария

Компьютеры1 = СоздатьОбъект( "Компьютеры" );
Компьютер1 = Компьютеры1.ПолучитьПоИд(1);
РабочиеМеста1 = Компьютер1.РабочиеМеста();
РабочееМесто1 = РабочиеМеста1.ПолучитьПоТипуСетевогоМеста("Ядро");
Считыватель1 = РабочееМесто1.Считыватели().ПолучитьПоИД( 1 );
ЗоныДоступа1 = СоздатьОбъект( "ЗоныДоступа" );
ЗонаДоступа1 = ЗоныДоступа1.ПолучитьПоИд(2);
Событие1 = ПолучитьСобытие();
Пароль1 = Событие1.Пароль();
Сотрудник1 = Пароль1.Сотрудник().ИД();
Число1 = число(Сотрудник1);
Проход = РабочееМесто1.Сотрудники().ПолучитьПоИД( Число1 );
ГруппаДоступа1 = Пароль1.ГруппаДоступа().ИД();
 Если ГруппаДоступа1 == 3 Тогда
  Если ЗонаДоступа1.КоличествоСотрудниковПоУровню(3) < 4 тогда
Считыватель1.ПредоставитьДоступ( Проход );
  КонецЕсли;
 КонецЕсли;
   Если ГруппаДоступа1 == 4 Тогда
    Если ЗонаДоступа1.КоличествоСотрудниковПоУровню(4) < 4 тогда
Считыватель1.ПредоставитьДоступ( Проход );
    КонецЕсли;
   КонецЕсли;
КонецСценария

– Мелентьев Артём Вячеславович 6 лет назад

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

ПОКАЗАН

4643 раза

ЗАДАН

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

ПРОДУКТЫ

Орион Про

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