Головоломка с сценарием взятия/снятия

FORUM_NAME: АРМ Орион Про версии до 1.20
Описание: АРМ "Орион Про" — пакет программного обеспечения для аппаратно-программного комплекса ИСО "Орион", на котором реализуются системы охранной сигнализации, контроля и управления доступом, охранного видеонаблюдения, автоматика противопожарных систем, сопряженные с инженерными системами объектов.
Справочная информация, руководства для АРМ Орион Про версии до 1.20
Модератор: Модераторы
google M
Активный участник
Активный участник
Аватара
google M
Активный участник
Активный участник
Возраст: 31
Репутация: 27
Сообщения: 1178
Зарегистрирован: 11.06.2015
С нами: 1 год 5 месяцев
Профессия: Инженер
Откуда: Sml - Msk
ICQ

Непрочитанное сообщение #41 google » 19.10.2015, 16:23

XAMMEP писал(а):.
Вот тока при проходе начальника, раздел 118, еще раз снимаеться...
Проверку бы засунуть...
Пиво с меня за все....

Сценарий встудию

XAMMEP
Автор темы
Аватара
XAMMEP
Автор темы
Репутация: 2
Сообщения: 159
Зарегистрирован: 17.10.2014
С нами: 2 года 1 месяц
Профессия: Специалист ИТСО
Откуда: Чебоксары

Непрочитанное сообщение #42 XAMMEP » 19.10.2015, 16:38

google писал(а):
XAMMEP писал(а):.
Вот тока при проходе начальника, раздел 118, еще раз снимаеться...
Проверку бы засунуть...
Пиво с меня за все....

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


Спойлер
Сценарий
Переменные
Перем Событие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.ПолучитьПоИД( 381 );
ЗонаДоступа1 = ЗоныДоступа1.ПолучитьПоИД( 2 );
Если Не ПустоеЗначение( Событие1 ) Тогда
Если Не ПустоеЗначение( Событие1.Событие() ) Тогда
Если Не ПустоеЗначение( Событие1.ЗонаДоступа() ) Тогда
Если Не ПустоеЗначение( Событие1.Пароль() ) Тогда
Если Не ПустоеЗначение( Событие1.Пароль().Сотрудник() ) Тогда
Если Не ПустоеЗначение( Событие1.Пароль().ГруппаДоступа() ) Тогда
Если не ПустоеЗначение( ЗонаДоступа1 ) Тогда
Если (Событие1.ЗонаДоступа().ИД()==ЗонаДоступа1.ИД()) Тогда
Если (Событие1.Событие().ИД()==32) Тогда
Если (ЗонаДоступа1.ПервыйПроход(Событие1.Пароль().Сотрудник().ИД())) Тогда
Если (Событие1.Пароль().ГруппаДоступа().ИД() ==71) Тогда
Если ( ЗонаДоступа1.КоличествоСотрудниковПоуровню( 71 ) == 1 ) Тогда
Если не ПустоеЗначение( Раздел1 ) Тогда
Раздел1.Снять();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Исключение Сообщить("Произошло исключение ",0); КонецПопытки;
КонецСценария

google M
Активный участник
Активный участник
Аватара
google M
Активный участник
Активный участник
Возраст: 31
Репутация: 27
Сообщения: 1178
Зарегистрирован: 11.06.2015
С нами: 1 год 5 месяцев
Профессия: Инженер
Откуда: Sml - Msk
ICQ

Непрочитанное сообщение #43 google » 19.10.2015, 16:56

Вот так если попробовать? Вообще сократил до минимума.


Спойлер
Приход начальника

Сценарий
Переменные
Перем РабочееМесто1;
Перем РабочиеМеста1;
Перем Компьютеры1;
Перем Компьютер1;
Перем Раздел1;
Перем Раздел2;
Перем Разделы1;
НачалоСценария


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

google M
Активный участник
Активный участник
Аватара
google M
Активный участник
Активный участник
Возраст: 31
Репутация: 27
Сообщения: 1178
Зарегистрирован: 11.06.2015
С нами: 1 год 5 месяцев
Профессия: Инженер
Откуда: Sml - Msk
ICQ

Непрочитанное сообщение #44 google » 19.10.2015, 17:02

Удалил проверку по уровню доступа, вот исправленный

Спойлер
Приход начальника

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


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

XAMMEP
Автор темы
Аватара
XAMMEP
Автор темы
Репутация: 2
Сообщения: 159
Зарегистрирован: 17.10.2014
С нами: 2 года 1 месяц
Профессия: Специалист ИТСО
Откуда: Чебоксары

Непрочитанное сообщение #45 XAMMEP » 19.10.2015, 20:59

google писал(а):Удалил проверку по уровню доступа, вот исправленный

Спойлер
Приход начальника

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


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

Завтра потестю... Google и Drug, премного благодарен за проявленное участие, в решении столь не легкой для меня задачи!!! :-ok-: :co_ol: :a_g_a:

XAMMEP
Автор темы
Аватара
XAMMEP
Автор темы
Репутация: 2
Сообщения: 159
Зарегистрирован: 17.10.2014
С нами: 2 года 1 месяц
Профессия: Специалист ИТСО
Откуда: Чебоксары

Непрочитанное сообщение #46 XAMMEP » 20.10.2015, 10:27

XAMMEP писал(а):
google писал(а):Удалил проверку по уровню доступа, вот исправленный

Спойлер
Приход начальника

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


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

Завтра потестю... Google и Drug, премного благодарен за проявленное участие, в решении столь не легкой для меня задачи!!! :-ok-: :co_ol: :a_g_a:
тут вроде наоборот присутствует проверка уровня доступа...
Последний раз редактировалось XAMMEP 20.10.2015, 10:33, всего редактировалось 1 раз.

XAMMEP
Автор темы
Аватара
XAMMEP
Автор темы
Репутация: 2
Сообщения: 159
Зарегистрирован: 17.10.2014
С нами: 2 года 1 месяц
Профессия: Специалист ИТСО
Откуда: Чебоксары

Непрочитанное сообщение #47 XAMMEP » 20.10.2015, 10:28

google писал(а):Вот так если попробовать? Вообще сократил до минимума.


Спойлер
Приход начальника

Сценарий
Переменные
Перем РабочееМесто1;
Перем РабочиеМеста1;
Перем Компьютеры1;
Перем Компьютер1;
Перем Раздел1;
Перем Раздел2;
Перем Разделы1;
НачалоСценария


Попытка
Компьютеры1 = СоздатьОбъект( "Компьютеры" );
Компьютер1 = Компьютеры1.ПолучитьПоИд(1);
РабочиеМеста1 = Компьютер1.РабочиеМеста();
РабочееМесто1 = РабочиеМеста1.ПолучитьПоТипуСетевогоМеста("Ядро");
Разделы1 = РабочееМесто1.Разделы();
Раздел1 = Разделы1.ПолучитьПоИД( 122 );
Раздел2 = Разделы1.ПолучитьПоИД( 381 );
Если Раздел1.Состояние() <> "СНЯТ" Тогда
Раздел1.Снять();
КонецЕсли;
Раздел2.Снять();
Исключение Сообщить("Произошло исключение ",0);
КонецПопытки;
КонецСценария
Этот прекрасно работает!!!! :co_ol:

nick108
nick108
Репутация: 0
Сообщения: 65
Зарегистрирован: 04.09.2015
С нами: 1 год 3 месяца
Профессия: iT

Непрочитанное сообщение #48 nick108 » 30.10.2015, 11:16

Где вы берете значения для "ПолучитьПоИД" ?!

И еще, кто бы помог сделать сценарий для взять раздел, если указанные 10 и не по порядку под охраной, по последнему уходящему брать коридор? Поиск не помгает, где то читал, но все обыскал уже. :zvez_ochki:

google M
Активный участник
Активный участник
Аватара
google M
Активный участник
Активный участник
Возраст: 31
Репутация: 27
Сообщения: 1178
Зарегистрирован: 11.06.2015
С нами: 1 год 5 месяцев
Профессия: Инженер
Откуда: Sml - Msk
ICQ

Непрочитанное сообщение #49 google » 30.10.2015, 11:22

nick108 писал(а):Где вы берете значения для "ПолучитьПоИД" ?!

И еще, кто бы помог сделать сценарий для взять раздел, если указанные 10 и не по порядку под охраной, по последнему уходящему брать коридор? Поиск не помгает, где то читал, но все обыскал уже. :zvez_ochki:

Где брать ИД, я так и не понял. Делаю как и все, беру из шаблонных сценариев.
Если будет время, попробую помочь со сценарием.

nick108
nick108
Репутация: 0
Сообщения: 65
Зарегистрирован: 04.09.2015
С нами: 1 год 3 месяца
Профессия: iT

Непрочитанное сообщение #50 nick108 » 30.10.2015, 11:41

Соот-но если разделов 50, они не по порядку, то их ИД увижу только через шаблонные? Что есть гимор ведь, так? Вставлять комментарии для себя.

Снятие кордиора брать в обратку? Ставить всем на событие снятия и:

Если (РабочееМесто1.ГруппыРазделов().ПолучитьПоИД( хх ).Состояние() == "СНЯТ") или (РабочееМесто1.ГруппыРазделов().ПолучитьПоИД( уу ).Состояние() == "СНЯТ") или ( ннн ) Тогда
РабочееМесто1.ГруппыРазделов().ПолучитьПоИД( %ИД_коридора% ).Снять();

Верно мыслю?

nick108
nick108
Репутация: 0
Сообщения: 65
Зарегистрирован: 04.09.2015
С нами: 1 год 3 месяца
Профессия: iT

Непрочитанное сообщение #51 nick108 » 30.10.2015, 12:03

DruG писал(а):способ то должен быть, но мы его пока не узнали :ne_vi_del:

я думаю для снятия может пойти и шаблонный сценарий снятие раздела коридор записанный в событие "Снятие раздела" у всех нужных разделов.
хотя такой сценарий будет срабатывать при снятии всех кабинетов
Так да, в день по сто раз будет проходить снятие коридора :) Т.к. владельцы в течении дня ставят под охрану кабинеты.

nick108
nick108
Репутация: 0
Сообщения: 65
Зарегистрирован: 04.09.2015
С нами: 1 год 3 месяца
Профессия: iT

Непрочитанное сообщение #52 nick108 » 30.10.2015, 12:14

DruG писал(а):тогда допилить шаблонный сценарий условием:
Если (РабочееМесто1.ГруппыРазделов().ПолучитьПоИД( %ИД_коридора% ).Состояние() <> "СНЯТ") Тогда
РабочееМесто1.ГруппыРазделов().ПолучитьПоИД( %ИД_коридора% ).Снять();
Плюс "или" и пошли далее перечислять. А если счетчик? Разделы по порядку будут?

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1676
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #53 pet-and » 30.10.2015, 12:18

nick108 писал(а):Где вы берете значения для "ПолучитьПоИД" ?!
Возможно это пользовательский номер, но надо проверить.
nick108 писал(а):И еще, кто бы помог сделать сценарий для взять раздел, если указанные 10 и не по порядку под охраной, по последнему уходящему брать коридор? Поиск не помгает, где то читал, но все обыскал уже. :zvez_ochki:
Для этого можно использовать какой-нибудь из тегов объектов системы.
Например, создаем сценарий который запускается при постановке разделов на охрану, внутри выдергиваем номер раздела и после проверки условия:
Если НомерРаздела В [1,5,10,25] Тогда
ТегОбъекта=ТегОбъекта+1;
ну а далее, после выхода последнего проверить ТегОбъекта==10. Снятие раздела должно запускать обратную процедуру, т.е. вычитать из ТегаОбъекта.
Или, как вариант, организовать внутри одного сценария "пролистывание" всех разделов системы, опять же использовать условие
Если НомерРаздела В [1,5,10,25] Тогда
Если раздел взят Тогда
СчетчикВзятых=СчетчикВзятых+1;
Если СчетчикВзятых==10 Тогда
НужныйРаздел(Взять);
Как-то так.

nick108
nick108
Репутация: 0
Сообщения: 65
Зарегистрирован: 04.09.2015
С нами: 1 год 3 месяца
Профессия: iT

Непрочитанное сообщение #54 nick108 » 30.10.2015, 12:30

НужныйРаздел(Взять);

После этой фразы не вижу будущего )

А такого плана как правильно будет?
Если НомерРаздела В [1] и Если НомерРаздела В [2] и Если НомерРаздела В [5] и Если НомерРаздела В [8] и Если НомерРаздела В [34]
Если раздел взят Тогда
НужныйРаздел(Взять);

А нужный это какой? Пока еще тяжко, а разделы с ИД это куча доп. комментариев для себя, кто есть кто.

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1676
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #55 pet-and » 30.10.2015, 12:50

nick108 писал(а):После этой фразы не вижу будущего )
Вот щас не понял.
nick108 писал(а):А такого плана как правильно будет?
Если НомерРаздела В [1] и Если НомерРаздела В [2] и Если НомерРаздела В [5] и Если НомерРаздела В [8] и Если НомерРаздела В [34]
Если раздел взят Тогда
НужныйРаздел(Взять);
Создайте цикл, внутри которого пролистать все имеющиеся разделы, вытащите НомерРаздела, далее ставим условие проверки
Если НомерРаздела В [1,2,5,8,34] Тогда
ещё дальше получаем состояние раздела из перечисления [1,2,5,8,34], если состояние Взят, тогда плюсуем единичку. По окончании цикла проверяем количество "плюсиков", если необходимое количество, тогда берем на охрану НужныйРаздел.
nick108 писал(а):А нужный это какой? Пока еще тяжко, а разделы с ИД это куча доп. комментариев для себя, кто есть кто.
А кто кроме Вас знает какой раздел Вы хотите брать под охрану, после выполнения условия.

nick108
nick108
Репутация: 0
Сообщения: 65
Зарегистрирован: 04.09.2015
С нами: 1 год 3 месяца
Профессия: iT

Непрочитанное сообщение #56 nick108 » 30.10.2015, 16:35

pet-and писал(а):А кто кроме Вас знает какой раздел Вы хотите брать под охрану, после выполнения условия.
Я видимо потерялся в последовательности, что и где должно быть дальше.
Вот с

Код: Выделить всё

Если (РабочееМесто1.ГруппыРазделов().ПолучитьПоИД( хх ).Состояние() == "ВЗЯТ") и (РабочееМесто1.ГруппыРазделов().ПолучитьПоИД( уу ).Состояние() == "ВЗЯТ") и ( ннн ) Тогда
РабочееМесто1.ГруппыРазделов().ПолучитьПоИД( %ИД_коридора% ).Взять();
ясно около дела, только тут надо не группу, а просто раздел, домыслю. А с вашим вариантов сложнее как то.

nick108
nick108
Репутация: 0
Сообщения: 65
Зарегистрирован: 04.09.2015
С нами: 1 год 3 месяца
Профессия: iT

Непрочитанное сообщение #57 nick108 » 30.10.2015, 17:39

Верно я накидал? Ошибок вроде нет, пока тесты на демо с базой объекта.

Код: Выделить всё

Сценарий
Переменные
Перем РабочееМесто1;
Перем РабочиеМеста1;
Перем Компьютеры1;
Перем Компьютер1;

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


За идею счетчика спасибо, но пока хочется с малого начать разбираться, попробую и индексы, если сработает отпишу, объект не маленький, но поиграться можно, страшного произойти ничего не должно :)

ПС: ПолучитьПоИД - В 12.2 сп2 это цифра как для считывателя, реле, ШС означает "Пользовательский номер", в инспекторе он отчетливо виден. Для разделов - данный пункт отсутствует и вытаскиваем мы его только из шаблонных сценариев(с включенной галкой в настройки-настройка-показывать текст сценария в режиме ввода шаблонов), путем создания любого действия с указанным разделом. Странно, чего поле зажали разработчики?!
Последний раз редактировалось nick108 30.10.2015, 18:11, всего редактировалось 4 раза.

pet-and M
Активный участник
Активный участник
pet-and M
Активный участник
Активный участник
Возраст: 37
Репутация: 21
Сообщения: 1676
Зарегистрирован: 11.11.2012
С нами: 4 года
Профессия: инженер
Откуда: Санкт-Петербург

Непрочитанное сообщение #58 pet-and » 30.10.2015, 19:55

nick108 писал(а):... пока тесты на демо с базой объекта.
Вот это очень верное решение.
Далее, я не спец в программировании, но четко уяснил на уроках информатики, что лишние переменные сильно обременяют выполнение программы. Соответственно, естественно на мой субъективный взгляд, в Вашем скрипте много лишнего, а именно:
    Перем РабочееМесто1;
    Перем РабочиеМеста1;
    Перем Компьютер1;

nick108 писал(а):ПС: ПолучитьПоИД - В 12.2 сп2 это цифра как для считывателя, реле, ШС означает "Пользовательский номер", в инспекторе он отчетливо виден.
Главное, что пока непонятно, этот самый пользовательский номер удержится при модернизации/реиндексации БД или же съедет после удаления/добавления некоторых элементов. Ведь если вы обозвали раздел номером XYZ, то он таковым и останется, покуда вы же его собственноручно не измените, а если будет необходимо добавить раздел с номером XYZ-n, тогда что произойдет? Да и эксперименты с рабочей БД иногда вынуждают проводить модернизацию, после которой все записи в таблицах строго упорядочены с 1 до последнего, без всяких пропусков.

nick108
nick108
Репутация: 0
Сообщения: 65
Зарегистрирован: 04.09.2015
С нами: 1 год 3 месяца
Профессия: iT

Непрочитанное сообщение #59 nick108 » 05.11.2015, 14:58

Спасибо всех кто надоумил и показал пример, разобрался дальше сам и получилось ибо в примерах были ошибки, скрестил шаблонные и мануал, в итоге пришел к требуемому:
Сценарий повешенный на "раздел взят", если этот раздел последний то через 60 сек берется коридор(раздел 45):

Код: Выделить всё

Сценарий
Переменные
Перем Компьютеры1;
Перем РабочееМесто1;
Перем Компьютер1;
Перем РабочиеМеста1;
НачалоСценария


Попытка
Компьютеры1 = СоздатьОбъект( "Компьютеры" );
Компьютер1 = Компьютеры1.ПолучитьПоИд(1);
РабочиеМеста1 = Компьютер1.РабочиеМеста();
РабочееМесто1 = РабочиеМеста1.ПолучитьПоТипуСетевогоМеста("Ядро");
Задержка( 60000 );
Если (РабочееМесто1.РазделЫ().ПолучитьПоИндексу(1).Состояние() == "ВЗЯТ") и
(РабочееМесто1.РазделЫ().ПолучитьПоИндексу(2).Состояние() == "ВЗЯТ" ) и
(РабочееМесто1.РазделЫ().ПолучитьПоИндексу(66).Состояние() == "ВЗЯТ" ) тогда
РабочееМесто1.РазделЫ().ПолучитьПоИндексу(45).Взять();
КонецЕсли;
Исключение Сообщить("Произошло исключение ",0); КонецПопытки;
КонецСценария


Утро, если коридор взят, то вешаем сценарий на "раздел снят" наших разделов отделов, проверка увидит первый снятый и снимет коридор(вначале смотрит на себя, чтоб по сто раз не снимать, т.к. в день запуск будет не один раз, разные отделы в разное время ж).

Код: Выделить всё

Сценарий
Переменные
Перем Компьютеры1;
Перем РабочееМесто1;
Перем Компьютер1;
Перем РабочиеМеста1;
НачалоСценария


Попытка
Компьютеры1 = СоздатьОбъект( "Компьютеры" );
Компьютер1 = Компьютеры1.ПолучитьПоИд(1);
РабочиеМеста1 = Компьютер1.РабочиеМеста();
РабочееМесто1 = РабочиеМеста1.ПолучитьПоТипуСетевогоМеста("Ядро");
Если (РабочееМесто1.РазделЫ().ПолучитьПоИндексу(45).Состояние() == "ВЗЯТ" ) и
(РабочееМесто1.РазделЫ().ПолучитьПоИндексу(1).Состояние() == "СНЯТ" ) или
(РабочееМесто1.РазделЫ().ПолучитьПоИндексу(2).Состояние() == "СНЯТ" ) иЛИ
(РабочееМесто1.РазделЫ().ПолучитьПоИндексу(66).Состояние() == "СНЯТ" ) тогда
РабочееМесто1.РазделЫ().ПолучитьПоИндексу(45).Снять();
КонецЕсли;
Исключение Сообщить("Произошло исключение ",0); КонецПопытки;
КонецСценария


Сам на сегодня упёрся в запуск сценария из сценария, изначально по шаблону он таков:

Код: Выделить всё

Сценарий
Переменные
Перем СписокСценариев1;
Перем СценарийДляЗапуска1;
НачалоСценария


СписокСценариев1 = СоздатьОбъект( "Скрипты" );
Если не ПустоеЗначение( СписокСценариев1 ) Тогда
СценарийДляЗапуска1 = СписокСценариев1.ПолучитьПоИД( 0 );
Если не ПустоеЗначение( СценарийДляЗапуска1 ) Тогда
СценарийДляЗапуска1.ВыполнитьСценарий( 0 );
КонецЕсли;
КонецЕсли;
КонецСценария

Если я его сокращаю, то до:

Код: Выделить всё

Сценарий
Переменные
Перем Компьютеры1;
Перем РабочееМесто1;
Перем Компьютер1;
Перем РабочиеМеста1;
НачалоСценария


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

Ошибок нет. Но ядро не отрабатывает: CALL_METHOD Метод СПИСОКСЦЕНАРИЕВ у объекта не найден! 15, 30 (15)

Жаль что у форума нет раздела именно по сценариям, делиться там всем готовыми вещами, ведь можно такие вещи создавать!

nick108
nick108
Репутация: 0
Сообщения: 65
Зарегистрирован: 04.09.2015
С нами: 1 год 3 месяца
Профессия: iT

Непрочитанное сообщение #60 nick108 » 05.11.2015, 15:54

DruG писал(а):а шаблонный сценарий срабатывает? т.к. вот эта строчка СписокСценариев1 = СоздатьОбъект( "Скрипты" );, которую вы сократили, она как бы нужная

Шаблонный то да, при вашем варианте просит еще и переменную, но таков итог вызывает у ядра всё ту же ошибку:

Код: Выделить всё

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


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


А про заточка заточкой, сегодня вот надо, а сложность создания, а был б архив какой то, можно выдирать и делать уже под себя... Мысли, мысли...


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «АРМ Орион Про версии до 1.20»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 6 гостей

forum-bolid.ru : Отказ от ответственности