Заставить 1С подождать РежимДиалогаВопрос.ДаНет

1. tatoshka0403 117 23.10.20 09:24 Сейчас в теме
Программа задает вопрос. Но выполнение процедуры продолжается, перенести в конец процедуры нету возможности т.к. это общий модуль и он все равно продолжает выполнятся. Модальность отключена. Есть ли способ заставить 1С подождать?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 23.10.20 09:28 Сейчас в теме
(1)Использовать обработчик оповещения о завешения для продолжения действий.


Глобальный контекст (Global context)
ПоказатьВопрос (ShowQueryBox)
Синтаксис:
ПоказатьВопрос(<ОписаниеОповещенияОЗавершении>, <ТекстВопроса>, <Кнопки>, <Таймаут>, <КнопкаПоУмолчанию>, <Заголовок>, <КнопкаТаймаута>)
Параметры:
<ОписаниеОповещенияОЗавершении> (обязательный)
Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после закрытия окна ввода значения со следующими параметрами:
<РезультатВопроса> - результат выбора пользователя: значение системного перечисления или значение, связанное с нажатой кнопкой. В случае закрытия диалога по истечении времени - значение Таймаут,
<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.
4. namazi74 5 23.10.20 09:30 Сейчас в теме
(1)
Есть ли способ заставить 1С подождать?

Режим = РежимДиалогаВопрос.ДаНет;
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтаФорма, Параметры);
ПоказатьВопрос(Оповещение, НСтр("ru = 'Продолжить выполнение операции?';"
    + " en = 'Do you want to continue?'"), Режим, 0);
3. tatoshka0403 117 23.10.20 09:30 Сейчас в теме
	ТекстВопроса = "Сегодня пятница?";
		ОбработчикРезультата = Новый ОписаниеОповещения("Проверка", ЭтотОбъект);
		ПоказатьВопрос(ОбработчикРезультата, ТекстВопроса, РежимДиалогаВопрос.ДаНет,60);


так тоже делал, не помогает.
5. nomad_irk 76 23.10.20 09:37 Сейчас в теме
(3)продолжение кода у вас должно быть в процедуре "Проверка", находящейся в том же модуле, что и ПоказатьВопрос().
6. tatoshka0403 117 23.10.20 09:44 Сейчас в теме
(5)
продолжение кода у вас должно быть в процедуре "Проверка", находящейся в том же модуле, что и ПоказатьВопрос().

тоже самое
8. nomad_irk 76 23.10.20 09:46 Сейчас в теме
(6)что тоже самое?
После открытия окошка с кнопками, код продолжает выполнятся в "Проверка" не дожидаясь действия пользователя или что происходит?
7. tatoshka0403 117 23.10.20 09:45 Сейчас в теме
(5)я этот код вставил в общий модуль после выхода из него продолжается выполнение.
9. Fox-trot 163 23.10.20 09:50 Сейчас в теме
(7) код перенеси в процедуру Проверка
12. tatoshka0403 117 23.10.20 10:04 Сейчас в теме
(9) такой возможности нет.
20. Fox-trot 163 23.10.20 10:55 Сейчас в теме
10. FatPanzer 23.10.20 09:58 Сейчас в теме
Кароч, после ПоказатьВопрос() в этом конкретном методе больше ничего быть не должно. И функция, которая вызывает эту функцию, если такая есть - тоже должна быть в конце метода.
В общих словах - надо выстраивать программный код таким образом, чтобы после вызова диалога программе некуда было идти в принципе, а оставалось только ждать ответа пользователя.

Спорю на бутылку коньяка, что после ПоказатьВопрос() у тебя есть еще какие-то строки... Ну или в стеке вызовов.
11. tatoshka0403 117 23.10.20 10:03 Сейчас в теме
(10)именно я это в (7) указал. Возможности переставить код нету.
13. FatPanzer 23.10.20 10:04 Сейчас в теме
(11) Значит это не код, а говнокод. ,
Либо докажи невозможность перестановки кода, тогда я признаюсь, что я говнокодер.

Покажи свой код.
Fox-trot; nomad_irk; +2 Ответить
14. tatoshka0403 117 23.10.20 10:10 Сейчас в теме
(13)пытаюсь сделаю прерывание типовой процедуры 1С.
15. FatPanzer 23.10.20 10:12 Сейчас в теме
(14) Расширение? И в чем проблема? Пытаешься &Перед процедурой задать вопрос, а он подлец все равно идет дальше и исполняет процедуру? Используй &Вместо...
24. FatPanzer 23.10.20 11:27 Сейчас в теме
(14) Ну давай, расскажи. А то я уже и схематическое решение практически реализовал...
19. koln 23.10.20 10:53 Сейчас в теме
(11)А если не переставлять код, а вынести строки, которые идут после вопроса, в отдельный метод? Данный метод будет вызываться по результатам ответа пользователя, т.е. в обработчике ответа, если все нормально, то должен будет вызываться метод, в котором вынесенная часть кода. В таком случае, как раз, вопрос и останется в конце метода и дальнейшего выполнения не будет, пока система не получить ответ на вопрос.
FatPanzer; +1 Ответить
23. FatPanzer 23.10.20 11:08 Сейчас в теме
(19) На поверхности ведь лежит, да?
25. koln 23.10.20 11:42 Сейчас в теме
(23)В принципе - да. Более того, если написать
ПоказатьВопрос()
а затем на этом тексте нажать "ПКМ-Рефакторинг-Создать обработку оповещения", то платформа сама все сделает, т.е. вынесет нужную часть кода в отдельный метод.
16. Dmitry888 41 23.10.20 10:13 Сейчас в теме
А ты не используй ДАнет. попробуй выбрать другой метод.
17. oleg-x 22 23.10.20 10:44 Сейчас в теме
(1) Без использования модальности, нельзя остановить выполнение кода простым способом.
Можно попробовать вставить бесконечный цикл, который будет проверять, что ответил пользователь. но для этого надо после ответа пользователя вызвать процедуру, в которой будет как то сохранен в базе ответ. А в цикле наконец получит ответ и либо прервет цикл, либо продолжит выполнение кода.

Пока Истина Цикл

        Если ПользовательОтветилДа() Тогда
            Прервать;
        Иначе
            Возврат;
        КонецЕсли;
КонецЦикла;


Ну и вставить исключения, когда пользователь долго не отвечает, прерывать выполнение кода.
18. FatPanzer 23.10.20 10:48 Сейчас в теме
(17) Каких костылей только не придумают люди вместо грамотной организации кода...
interstep; Kovekh; Fox-trot; +3 Ответить
21. oleg-x 22 23.10.20 11:00 Сейчас в теме
(18) И не говори пиши. Но так как я не вижу кода, а если он еще в модулях записи/проведения, то данный костыль будет палкой в колеса велосипеда.
22. FatPanzer 23.10.20 11:06 Сейчас в теме
(21) Интерактивные клиентские ПоказатьВопрос() в серверных транзакционных модулях записи-проведения? Ну....
26. oleg-x 22 23.10.20 11:51 Сейчас в теме
(22) Как бы это странно не звучало, но да, такое возможно. Например, запустив сеанс не под тонким клиентом, а под толстым. Тогда все отработает :-)
27. FatPanzer 23.10.20 11:56 Сейчас в теме
(26) Оно даже не откомпилируется... Хотя, я не пробовал в клиент-серверных общих модулях, может если транзакционные процедуры туда перенаправить, то и можно обмануть компилятор. Но в серверном контексте ПоказатьВопрос() все равно не сработает.
28. oleg-x 22 23.10.20 12:02 Сейчас в теме
(27) Отчасти я прав. Такое сработает только на файловых базах, на клиент серверных вариантах нет.
Мне приходится работать и с обычными (по большей части) и управляемыми приложениями, поэтому о таких вещах вспоминаю только в своей работе и это уже как то кажется естественным. А когда общаюсь на форуме, всегда думаю в рамках обычных приложений, если автор не указывает иное, хотя бы косвенно.
Прикрепленные файлы:
ТестВопроса.epf
29. FatPanzer 23.10.20 12:05 Сейчас в теме
(28) Я про обычные забыл лет 6 уже как, и даже не пытаюсь вникать, мыслю только управляемыми клиент-серверными... Ибо "пиши всегда для клиент-сервера - сработает и на файле" в обратную сторону не работает...
vadim.semyonov.rzn; user1464234; +2 Ответить
30. oleg-x 22 23.10.20 12:13 Сейчас в теме
(29) Про 7-у многие тоже забыли, но по прежнему не мало контор которые использует 7-у.
Правда у меня знакомы когда искал новую работу, принципиально не шел, там где 7-ка, хотя и знал её. Просто считает, что это путь назад, а уже привык к хорошему :-)
А ваш принцип правильный :-)
Оставьте свое сообщение

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