|   |   | 
| 
 | Как приостановить печать документов в цикле на время ожидания ответа пользователя на вопрос? | ☑ | ||
|---|---|---|---|---|
| 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 | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |