|
Добры всем день. 5 лет 10 месяцев назад Бабаев М. А. 172Андрей, оно:
Пример простого сценария, запускаемого по горячей клавише, из дерева управления, или по расписанию в системе с несколькими Ядрами опроса. Так как сценарий запускаемый по горячей клавише, из дерева управления, или по расписанию, запускается сразу во всех Ядрах опроса, то в большинстве случаев необходимо разделять объекты, которыми производится управление, по принадлежности к конкретному Ядру опроса. Другими словами, необходимо проверять, принадлежит ли объект, для которого посылаются команды, тому Ядру опроса, в котором выполняется сценарий. Рассмотрим пример, когда необходимо блокировать доступ для одной точки доступа (с номером 3, и принадлежащей Ядру опроса с IP-адресом «192.168.11.5»). В тексте сценария производится проверка на принадлежность точки доступа Ядру опроса, в котором и запущен сценарий. Данный сценарий запуститься во всех Ядрах опроса, но команда на блокирование доступа будет произведена только в одном из них. ? РабочееМесто1 = Компьютеры1.ПолучитьПоТипуИСетевомуАдресу( "Ядро" , "192.168.11.5" ); Если Не ПустоеЗначение( РабочееМесто1 ) Тогда Если РабочееМесто1.Локальное() == ИСТИНА Тогда // Требуемая проверка Сам не сталкивался еще и не проверял. Полный текст сценария из вышеописанного примера: Сценарий Переменные Перем Компьютеры1; Перем РабочееМесто1; Перем Двери1; Перем Дверь1; Перем Считыватель1; НачалоСценария Компьютеры1 = СоздатьОбъект( "Компьютеры" ); Если Не ПустоеЗначение( Компьютеры1 ) Тогда РабочееМесто1 = Компьютеры1.ПолучитьПоТипуИСетевомуАдресу( "Ядро" , "192.168.11.5" ); Если Не ПустоеЗначение( РабочееМесто1 ) Тогда Если РабочееМесто1.Локальное() == ИСТИНА Тогда // Требуемая проверка Двери1 = РабочееМесто1.Двери(); Если Не ПустоеЗначение( Двери1 ) Тогда Дверь1 = Двери1.ПолучитьПоИндексу( 3 ); Если Не ПустоеЗначение( Дверь1 ) Тогда Сообщить( Дверь1.Название(), 0 ); Считыватель1 = Дверь1.СчитывательНаВход(); Если Не ПустоеЗначение( Считыватель1 ) Тогда Сообщить( " " + Считыватель1.Название(), 0 ); Считыватель1.ЗаблокироватьДоступ(); КонецЕсли; Считыватель1 = Дверь1.СчитывательНаВыход(); Если Не ПустоеЗначение( Считыватель1 ) Тогда Сообщить( " " + Считыватель1.Название(), 0 ); Считыватель1.ЗаблокироватьДоступ(); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецСценария Более подробно в документации, Описание макроязыков... – Тремасов Константин Александрович 5 лет 10 месяцев назад Еще есть такое:
ОграничитьВыполнение(Компьютер1); // Логическое, запуск сценария ограничен выполнением его, только на указанном Компьютер1. В примере выглядит так: Ядро1 = СоздатьОбъект( "Ядро" ); Если Не ПустоеЗначение( Ядро1 ) Тогда Ядро1.ОграничитьВыполнение( 1 ); КонецЕсли; ... Остальной текст сценария – Тремасов Константин Александрович 5 лет 10 месяцев назад сценарии то шаблонные и в них такое уже не вписать, но на будущее видимо стоит совсем отказаться от шаблонов, чтобы потом не пришлось переписывать)
– Волков Андрей 5 лет 10 месяцев назад Очевидную вещь скажу, но все же, чтоб с нуля не "мудохаться" со сценариями, создаешь шаблон, копируешь из него текст, создаешь "нешаблон", вставляешь и правишь/добавляешь.
– Тремасов Константин Александрович 5 лет 10 месяцев назад так я так и изучал сценарии) а ещё я из шаблонов беру ИДшники оборудования. Просто те сценарии в которых только парочка стандартных Открыть/Восстановить доступ ну совсем не интересно переписывать в "нешаблон"
– Волков Андрей 5 лет 10 месяцев назад Либо изучать этот "боярский" язык програвммирования. Я так понял он близок (если не он и есть) к языку 1С++ - встроенный язык для 1С бухгалтерии.
– Бабаев М. А. 5 лет 10 месяцев назад Ну судя по таким процедурам как "ОткрытиеДоступ()" язык больше на "олбанский" похож)
– Тремасов Константин Александрович 5 лет 10 месяцев назад судя по таким процедурам как "ОткрытиеДоступ()" убил бы того криворукого! я два дня пытался понять, почему мой "нешаблонный" сценарий не хочет работать, в то время как шаблон идеально отрабатывает, а всё потому что я ручками писал ОткрытиеДоступа... – Волков Андрей 5 лет 10 месяцев назад Ну что поделать? Любят они потроллить нас) То прошивку молча выпилят "недавновыложенную", то вот такие процедуры)
P.S. Я кстати так же попал как ты и хорошо это написание запомнил) – Тремасов Константин Александрович 5 лет 10 месяцев назад Чисто для примера.
Сравнить… https://yadi.sk/i/5o6CkFKqcx8SSQ (как выглядит фрагмент кода в 1С конфигураторе (v8.3)). – Карпов Дмитрий 5 лет 3 месяца назад Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?) |
|
10 раз, столько рабочих ядер как раз. Очень интересно... 5 лет 10 месяцев назад Бабаев М. А. 172Вариант со строкой "Если РабочееМесто1.Локальное() == ИСТИНА Тогда" работает. Сценарий выполняется один раз.
– Бабаев М. А. 5 лет 10 месяцев назад А весь текст показать? Или интеллектуальная собственность?)))
P.S. Только не скрин, а именно копипаст. – Тремасов Константин Александрович 5 лет 10 месяцев назад Сценарий то есть? Вот
Сценарий Переменные Перем РабочееМесто1; Перем РабочиеМеста1; Перем Компьютер1; Перем Компьютеры1; Перем Считыватель1; НачалоСценария Попытка Компьютеры1 = СоздатьОбъект( "Компьютеры" ); Компьютер1 = Компьютеры1.ПолучитьПоИд(12); РабочиеМеста1 = Компьютер1.РабочиеМеста(); РабочееМесто1 = РабочиеМеста1.ПолучитьПоТипуСетевогоМеста("Ядро"); Если не ПустоеЗначение( РабочееМесто1.Считыватели() ) Тогда Если РабочееМесто1.Локальное() == ИСТИНА Тогда Считыватель1 = РабочееМесто1.Считыватели().ПолучитьПоИД( 4142 ); Если не ПустоеЗначение( Считыватель1 ) Тогда Считыватель1.ОткрытиеДоступ(); иначе Сообщить( "Считыватель не найден", 1 ); КонецЕсли; КонецЕсли; КонецЕсли; Исключение Сообщить("Произошло исключение",0); КонецПопытки; КонецСценария Просто вставил в шаблонный сценарий нужную строку условия, ну и в конце закрыл его (КонецЕсли). – Бабаев М. А. 5 лет 10 месяцев назад Благодарю, я просто думал что оно работает именно в связке с
"РабочееМесто1 = Компьютеры1.ПолучитьПоТипуИСетевомуАдресу( "Ядро" , "192.168.11.5" );" – Тремасов Константин Александрович 5 лет 10 месяцев назад Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?) |
3541 раз
5 лет 10 месяцев назад
По каждому вопросу/ответу можно добавлять комментарии. Комментарии предназначены для уточнения вопроса/ответа.
на 1.12.2.2 наблюдаю такое же чудо, но у меня два ядра всего, поэтому список меньше и запускается всё в одно время) а решения так же никто не подсказал
– Волков Андрей 5 лет 10 месяцев назад
#ссылка