Закрыть модальное окно программно

1. n_mezentsev 57 04.12.24 13:54 Сейчас в теме
Всем здравствуйте! Хочу программно закрыть модальное окно (в обычных формах - оповещение пользователя) и никак не найду решения, уже небольшой комод собрал, вот:
//1. только управляйки
//Для Каждого Запись Из АктивноеОкно().Содержимое Цикл
//	Сообщить(Запись.Заголовок);
//	Запись.Закрыть();
//КонецЦикла;
//2. Не работает
//Оповестить("ИзменениеОповещенияПользователей");
//3. Не работает
//ФормаОповещения = ПолучитьОбщуюФорму("ДиалогОшибкаВопрос");
//ФормаОповещения.Закрыть();
//4. не работает с модальным также 
//Попытка
//	Shell= Новый COMОбъект("Wscript.Shell");
//	Shell.SendKeys("{ESC}");
//Исключение
//КонецПопытки;
Показать

Кто-нибудь знает решение? Отказаться от модальности здесь не реально
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. MissionOnly 8 04.12.24 14:02 Сейчас в теме
(1) ОткрытьМодально(<Таймаут>), Таймаут = 10 сек. Закроется через 10 секунд.
3. n_mezentsev 57 04.12.24 14:03 Сейчас в теме
(2) Спасибо, но таймер не подходит - нужно закрывать только при смене основного сообщения, а это может произойти или нет
4. MissionOnly 8 04.12.24 14:07 Сейчас в теме
(3) Боюсь, тут проблема в точной формулировке задачи. Верно сформулированная задача на 50% и есть решение.
6. n_mezentsev 57 04.12.24 14:44 Сейчас в теме
(2)
(4) В модуле обычного приложения раз в минуту (обработчик ожидания) запускается проверка оповещений пользователям. Поскольку имеем дело с обработчиком ожидания, то для запуска процедуры заново необязательно завершение предыдущего запуска, а при этом в ходе него может модально открыться окно формы. Я могу определить, закончилось ли выполнение предыдущей процедуры путем Сохранения значений в хранилище, однако, среагировать и закрыть открытое в предыдущей процедуре модальное окно я не в силах, оно не реагирует на мои попытки! Сохранять в хранилище дескриптор формы я даже не пытался, да, это не УФ, но думаю и здесь нелепо. Тысячу лет назад нам рассказывали об объектах Приложение или как-то так, может и в 8.3 есть подобный объект, от которого можно добраться даже до модального окна?
8. Sashares 35 04.12.24 14:51 Сейчас в теме
(6) Отправляй оповещение с определенным именем.
Оповестить("ЗакрытьЭтоМодальноеОкно");
В форме в обработчике оповещения проверяй имя события, и если имя совпадает - закрывай.
9. n_mezentsev 57 04.12.24 14:52 Сейчас в теме
(8) не работает в модальном окне, проверял же (в теме есть)
10. Sashares 35 04.12.24 14:54 Сейчас в теме
(9) Что именно не работает? В какой момент?
Оповещения не приходят, или что именно?
11. n_mezentsev 57 04.12.24 14:56 Сейчас в теме
(10) Оповещения не приходят, да - соответственно, команда закрытия не срабатывает
15. Sashares 35 04.12.24 15:02 Сейчас в теме
(11) Оповещения должны отправляться в том же сеансе, где открыто окно.
Во вложении обработка - из одного окна по кнопке Выполнить открывается другое модальное, и по оповещению через 20 секунд закрывается.
Прикрепленные файлы:
ТестМодальногоОкна.epf
20. n_mezentsev 57 04.12.24 19:36 Сейчас в теме
(15) Здесь работает, вижу, но видимо, модуль обычного приложения не совсем клиент, проверял - ОбработкаОповещения не срабатывает в принципе - такие дела8|
21. Sashares 35 04.12.24 19:44 Сейчас в теме
(20) Приведите пример с кодом на пустой базе.
17. Sashares 35 04.12.24 15:07 Сейчас в теме
(11) Стоит понимать, что когда вы открываете модально, код останавливается на этой строке, и далее выполнится только после того как окно будет закрыто.
24. n_mezentsev 57 05.12.24 10:27 Сейчас в теме
(17) Да, действительно - оповещения работают и в модуле обычного приложения, просто мой код в другом месте повлиял и оповещение не вызывалось. Так что извините!
Sashares; +1 Ответить
5. RustamZz 04.12.24 14:42 Сейчас в теме
(1) best practice, от вендора: не использовать модальность. Тем более, что все современные конфигурации выпускаются уже с отключенной возможностью модальных окон.
7. n_mezentsev 57 04.12.24 14:46 Сейчас в теме
(5) Знаете другой способ показать окно поверх всех окон пользователя и затребовать (!) ответ, то есть, чтобы нельзя было переключиться, не отреагировав? При этом окно должно быть репрезентабельным, не мелким вопросом, который все равно читать никто не будет...
12. MissionOnly 8 04.12.24 14:56 Сейчас в теме
(7) Вы можете определить некий признак завершения процесса. Осталось программно в модальной форме создать функцию. И закрывать модальное окно при условии, что эта функция вернет ИСТИНА (по обработчику ожидания).
n_mezentsev; +1 Ответить
13. n_mezentsev 57 04.12.24 14:57 Сейчас в теме
(12) Точняк! Так и сделаю! Класс!
14. RustamZz 04.12.24 15:01 Сейчас в теме
(7) У пользователя всегда должна быть возможность переключиться на другую задачу, а на вопрос ответить позже. А уже после его ответа пусть продолжит работать ваш код. Хотите вы того или нет, но ваш подход перестанет работать, поэтому его надо менять.
16. n_mezentsev 57 04.12.24 15:05 Сейчас в теме
(14) Не парьтесь, вы, видимо, с такими задачами не сталкивались, на УФ тоже старался отходить от них, но здесь -
1. пользователь не вернется - забудет, а оповещение важное (тех работы)
2. пользователь в списке окон может не найти окно, чтобы вернуться
3. если окно не модальное, может просто быстро ткнуть и даже не заметить, что что-то выскочило
4. не обдуманные мной случаи...
18. RustamZz 04.12.24 15:10 Сейчас в теме
(16) Конечно же не парюсь. А на вопросы вы сами себе должны ответить как это будет работать у вас в будущем.
19. independ 1552 04.12.24 15:53 Сейчас в теме
(1) использовать модальное окно(приложение) не от 1c, hta vbs
https://forum.script-coding.com/viewtopic.php?id=5835
22. user5300 1064 05.12.24 09:31 Сейчас в теме
Попробуй вызывать не модальное окно а обычное, с присоединением, и выводить там информацию... Как вариант...

Пример:
Прикрепленные файлы:
ВнешняяОбработка1.epf
n_mezentsev; VyacheslavShilov; +2 Ответить
23. n_mezentsev 57 05.12.24 10:24 Сейчас в теме
(22) Ух-ты! Даже и не подумал об этом, а ведь для этого сценария прям ластится) Спасибо! Попробую
Оставьте свое сообщение

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