Прерывание цикла с диалогом


Представляю Вам пример обработки, которая посредством windows-среды позволяет выходить из длительных циклических операций, наподобие метода ОбработкаПрерыванияПользователя(), но без прерывания выполнения кода.

Родился он из-за того, что на ноутбуке у меня нет кнопки Break (рецепты в инете, комбинации c  “Fn”, а также советы бывалых найти её не помогли, а менять из-за этого сканкоды… пфф).

 

Нет. Не так. Вот так (выделено):1cifixedit.png

То есть вместо «Ctrl+Break» выскакивает окошко, при закрытии которого выполнение некоего цикла прерывается.
Сигналом прерывания служит отсутствие процесса с окном диалога.
Исполнено это с помощью нескольких вспомогательных скриптов vbs:
vbsLauncher      — Запускает необходимые скрипты и завершается. 1С ждёт завершения его выполнения.
vbsDialog            — Просто процесс с окном диалога.
vbsChecker        — Скрипт, проверяющий наличие процесса 1С, если 1С умрёт, то vbsDialog и vbsChecker завершаются.

Располагая вышеперечисленными скриптами нужно их вовремя запустить в 1С-ке и правильно с ними работать.

Как это выглядит в конечном результате показано в приложенной обработке:

1cRepeater.png

6 Comments

  1. ilov_boris

    Плюс за хорошее настроение )

    Reply
  2. makas

    я тоже плюсую за «красно-зеленый движок» 🙂

    Reply
  3. Jogeedae

    Забыл в статье указать, что для работы с процессами используется класс Win32_Process объекта WbemScripting.SWbemLocator

    Reply
  4. leles

    Хорошая идея!

    Есть два вопроса:

    1. Какой алгоритм управляет движением палки-рычага на первой картинке? Умный дом? Модернизатор-рационализатор? Пульт от телевизора?

    2. Как я понял, всё завязано на КодВозврата в ЗапуститьПриложение()? У меня такое впечатление, что этот параметр появился начиная так с версии 8.2.15. Что должны курить пользователи младших версий?

    Спасибо.

    Reply
  5. Jogeedae

    (4) leles,

    1. алгоритм? отнюдь, — ленивый хозяин. дабы не вставать чтобы воспользоваться выключателем.

    2. Совершенно не задумываясь, использовал Запуститьприложение() увидев там эти параметры, а для пользователей младших версий придётся использовать тот же WScript.Shell объект.

    Спасибо-пожалуйста.

    Reply
  6. leles

    1. О, какое изящное решение! А то метание тапочка по выключателю это как SendKey, если находишься слегка не в фокусе, то не всегда срабатывает.

    2. Да, Вы правы, с «WScript.Shell» обработка работает.

    WshShell=Новый ComОбъект(«WScript.Shell»);

    КодВозврата=WshShell.Run(«wscript «»» + ИмяФайлаЛаунчера + «»» «»» + ИмяФайлаДиалога + «»» «»» + ИмяФайлаЧекера + «»» «»» + Заголовок + «»» «»» + Надпись + «»»»,1,-1);

    3.+

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *