Имя: Пароль:
1C
1С v8
Как приостановить печать документов в цикле на время ожидания ответа пользователя на вопрос?
0 TDI
 
29.12.21
11:55
Есть печать документов в цикле.
Если делать через ПоказатьВопрос(Новый ОписаниеОповещения("НапечататьСледующийДокументВыбораДиалога", ЭтотОбъект.....
Цикл будет продолжать работать без ожидания ответа.

Как сделать, чтобы цикл не продолжал выполнятся, до того момента как пользователь ответит на вопрос ?
1 fisher
 
29.12.21
11:57
Версия платформы какая?
2 fisher
 
29.12.21
11:57
Асинхи тебе уже завезли?
3 Kassern
 
29.12.21
11:58
(0) вынести продолжение цикла в процедуру которая оповещается после вопроса
4 Kassern
 
29.12.21
11:58
либо использовать модальную версию этого метода
5 TDI
 
29.12.21
12:01
(4) а как модально открыть.
Всовременных конфах же нельзя
6 fisher
 
29.12.21
12:03
(3) Скоро сказка сказывается, да нескоро дело делается
7 Kassern
 
29.12.21
12:03
(5) Режим использования модальности в свойствах конфигурации. И правильно, что не рекомендуют, так как это не модно и молодежно теперь, есть варианты с оповещениями, которые могут работать и в вебе, а для модальных штучек веб уже не канает
8 mistеr
 
29.12.21
12:04
(0) Задать все вопросы до печати.
9 Kassern
 
29.12.21
12:05
вы просто должны понимать, как это работает без модальности. Вы вызвали метод, передали ему оповещение с именем процедуры. Код выполнится до конца, а после запустится выбранная процедура и в зависимости от результата вы обрабатываете данные. Не нужно все пихать в процедуру с вопросом
10 Мимохожий Однако
 
29.12.21
12:06
(0) Что ты хочешь спросить? Может быть, вывести информацию на кнопку печати до того как?
11 TDI
 
29.12.21
12:06
(8) так в том и дело,
нужно ждать команды пользователя, перед печатью следующего пакета документов..
12 mistеr
 
29.12.21
12:07
(11) Зачем? Чтобы пользователь бумагу вставил? Поясни схему работы.
13 Kassern
 
29.12.21
12:08
(11) Ну так задавайте вопрос в цикле, а печать перенесите в процедуру оповещения, при положительном результате
14 fisher
 
29.12.21
12:09
Если асинхов тебе еще не подвезли, тогда красивых вариантов не вижу.
15 Kassern
 
29.12.21
12:09
(13) Точнее не в цикле, а после печати первого документа, проверяете, есть ли еще и вызываете снова процедуру с вопросом
16 TDI
 
29.12.21
12:10
да понятно, тогда в процедуру оповещения переносить надо будет
17 Мимохожий Однако
 
29.12.21
12:11
(16) Переноси
18 azernot
 
29.12.21
12:12
Процедура ЦиклПечати(Счетчик)
Для А = Счетчик по КонецСчетчика Цикл
...
Печать(А)

Если НасталоВремяЗадатьВопрос ТОгда
ПараметрыВопроса.ТекущийСчетчик = А;
ПоказатьВОпрос(...ПараметрыВопроса..)
Прервать;
КОнецЕсли;


Процедура ОповещеинеПослеВопроса()
Если ОТветПредполагаетПродолжениеПечати Тогда
ЦиклПечати(ПараметрыВопроса.ТекущийСчетчик)
19 Мимохожий Однако
 
29.12.21
12:21
(18) Так какой вопрос ты хочешь задать пользователю?
"Вась, ты пойдешь сегодня в бар?"
20 Kassern
 
29.12.21
12:23
(16) Вот вам на коленке сделанный пример:
&НаКлиенте
Процедура Команда1(Команда)     
    ЗадатьВопрос();
КонецПроцедуры    

&НаКлиенте
Процедура ЗадатьВопрос();
    
    МассивПовторений=Новый Массив;
    Для к=1 По 10 Цикл
        МассивПовторений.Добавить(к);    
    КонецЦикла;    
    Если МассивПовторений.Количество()>0 Тогда
        Режим = РежимДиалогаВопрос.ДаНет;
        СтруктураПараметров=Новый Структура;
        СтруктураПараметров.Вставить("МассивЧисел",МассивПовторений);
        Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект, СтруктураПараметров);
        ПоказатьВопрос(Оповещение, НСтр("ru = 'Продолжить выполнение операции?';"
        + " en = 'Do you want to continue?'"), Режим, 0);
    КонецЕсли;
КонецПроцедуры    

&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, ПараметрыВопроса) Экспорт
    Если Результат = КодВозвратаДиалога.Нет Тогда
        ТекПозиция=0;
        Возврат;
    КонецЕсли;    
    МассивЧисел=ПараметрыВопроса.МассивЧисел;
    Сообщить(МассивЧисел[ТекПозиция]);
    ТекПозиция=ТекПозиция+1;
    Если ТекПозиция<МассивЧисел.Количество() Тогда
        ЗадатьВопрос();    
    КонецЕсли;
    
КонецПроцедуры
21 Kassern
 
29.12.21
12:23
(20) ну ТекПозиция = 0 определить
22 fisher
 
29.12.21
12:26
Если цикл выполняется в тяжелом контексте, то без потерь выкрутиться не получится.
Ну а в противном случае и проблемы нет.
23 Kassern
 
29.12.21
12:31
(22) тут явно другой случай, у ТС просто мало опыта работы с оповещениями
24 Kassern
 
29.12.21
17:59