Обработка прерывания по нажатию на крестик в окне, выводимом функцией Состояние()

1. native-api 19 21.03.25 13:17 Сейчас в теме
Работаю с Универсальными Инструментами v24.1.4, вариант расширение, обработка "Групповая обработка справочников и документов".

Там вывод прогресса обработки сделан через функцию глобального контекста "Состояние()" (да, для каждого объекта свой серверный вызов; предполагаю, потому, что либо подсистема БСП "длительные операции" еще не полностью перетащена в расширение, либо у разработчика еще не дошли руки переделать через нее).

Эта функция выводит информацию во всплывающее окно с прогресс-баром (см. вл.). У этого окна в правом верхнем углу есть крестик, при нажатии на который ничего не происходит.
Судя по коду обработки ("Обработка.УИ_ГрупповаяОбработкаСправочниковИДокументов.Форма.ПроизвольныйАлгоритм.ОбработатьИндикатор()"), предполагается вместо этого нажимать Ctrl-Break (перед началом каждой итерации вызывается "ОбработатьПрерываниеПользователя()"). Но у меня при этом ничего не происходит, даже если я нажму на окно прогресса или основное окно приложения (которое на время обработки блокируется), чтобы убедиться, что у них есть фокус.
(Update: выяснил, почему: из-за того, что основное окно клиента заблокировано, по щелчке мышью на него оно не получает фокус; окно прогресса не заблокировано, но оно Ctrl-Break, видимо, не обрабатывает. Окно клиента получит фокус, и Ctrl-Break сработает, если переключиться на него через переключение задач (Alt-Tab или щелкнуть на нужный пункт в панели задач). Но ответ на вопрос темы по-прежнему интересен.)

Можно ли как-то задать обработчик нажатия на крестик в окне прогресса, выводимом функцией "Состояние()", либо определить постфактум, что он был нажат?

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

В СП, раздел "Процедуры и функции интерактивной работы" (где находятся "Состояние" и "ОбработкаПрерыванияПользователя") не увидел ничего релевантного; гугление по ключевым словам в заголовке тоже ничего не нашло.
Прикрепленные файлы:
Найденные решения
2. starik-2005 3172 21.03.25 13:29 Сейчас в теме
На сколько я знаю, нельзя. Это системное окошко. Ну если я правильно понял, о чем речь. Крестик там чтобы закрыть это окно быстрее, чем оно закроется само.

Ctrl+Break работает только когда ты вываливаешься в клиентский контекст и не кешируется в буфере клавиатуры. Поэтому единственная возможность прервать что-то этими - нажать их много-много раз, чтобы один раз попал на момент вызова функции прерывания.
native-api; +1 Ответить
6. native-api 19 09.04.25 09:54 Сейчас в теме
(5)
Видимо, крестик таки сломан.

Тикет в багтрекере: https://bugboard.v8.1c.ru/error/000173727
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starik-2005 3172 21.03.25 13:29 Сейчас в теме
На сколько я знаю, нельзя. Это системное окошко. Ну если я правильно понял, о чем речь. Крестик там чтобы закрыть это окно быстрее, чем оно закроется само.

Ctrl+Break работает только когда ты вываливаешься в клиентский контекст и не кешируется в буфере клавиатуры. Поэтому единственная возможность прервать что-то этими - нажать их много-много раз, чтобы один раз попал на момент вызова функции прерывания.
native-api; +1 Ответить
3. native-api 19 21.03.25 14:25 Сейчас в теме
(2)
Ctrl+Break работает только когда ты вываливаешься в клиентский контекст и не кешируется в буфере клавиатуры.


Я уже выяснил, почему у меня не работало Ctrl-Break (см. "Update:" выше, заблокированное окно клиента не получало фокуса обычным способом). После этого даже однократное нажатие работает.

Крестик там чтобы закрыть это окно быстрее, чем оно закроется само.


Вот мне и показалось странным, что при нажатии ничего не происходит! Я бы понял, если бы оно закрылось, а при следующем вызове "Состояние()" вывелось снова!

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

Видимо, крестик таки сломан.
4. starik-2005 3172 21.03.25 14:40 Сейчас в теме
(3)
Нажал на крестик, хоть раз, хоть много раз быстро-быстро -- не пропадает.
Так пока код выполняется, то и не пропадет. Форма блокируется.
5. native-api 19 21.03.25 14:41 Сейчас в теме
(4) Форма блокируется, но всплывающее окно с прогрессом и крестиком -- нет. Когда я навожу мышь на крестик, он подсвечивается.
6. native-api 19 09.04.25 09:54 Сейчас в теме
(5)
Видимо, крестик таки сломан.

Тикет в багтрекере: https://bugboard.v8.1c.ru/error/000173727
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот