Имя: Пароль:
1C
1С v8
Сообщить на клиенте, в цикле, на форме внешней обработки, в реальном времени.
0 Oblako486
 
25.03.21
18:44
Почему сообщения копятся, функция сообщить ведь на клиенте?
Как сделать чтобы в реальном времени выводилось?


&НаКлиенте
Процедура ПереподставитьДоговорСчетНаОплату(Команда)
    выборкаДокументы = ЗапросСчетов();
    для каждого впДокумент из выборкаДокументы цикл
        ПереподставитьДоговорСчетНаОплатуНаСервере(впДокумент);
        Сообщить(впДокумент) ;
    конецЦикла;
КонецПроцедуры
1 breezee
 
25.03.21
19:43
через шэлскрипты прям виндой говорить)
2 Oblako486
 
25.03.21
22:28
(1) Вообще вариантов нет?
3 Юрий Лазаренко
 
25.03.21
22:33
(0) Потому что функция синхронная, она блокирует интерфейс на время своего выполнения. Нужно в реальном времени - используй ПодключитьОбработчикОжидания внутри цикла, в каждом обработчике выполняй  ПереподставитьДоговорСчетНаОплатуНаСервере(впДокумент); и Сообщить(впДокумент) ;
4 asady
 
25.03.21
22:34
(2 интересно а зачем такое требование - чтоб в реальном времени.
Что от этого зависит?
5 Oblako486
 
25.03.21
22:38
Пользователю непонятно выполняется или зависла. А так можно было бы видеть какой документ обрабатывается. Документов много.
6 acht
 
25.03.21
22:40
(5) Фоновые операции и сообщение прогресса
7 hhhh
 
25.03.21
22:42
(5) ну, вы уже сказали пользователю, что Сообщить увеличивает время работы в 10 раз? Оно это ему надо? Ждать лишние полчаса?
8 Юрий Лазаренко
 
25.03.21
22:46
(6) При фоновых операциях надо за их состоянием на сервер ходить, а это состояние надо где-то хранить. Кроме того, сервер не может уведомить клиента, что документ только что был обработан, поэтому сервер будет опрашиваться с клиента с определенной периодичностью и отображение может перескакивать сразу через несколько документов. Плюс фоновой операции - интерфейс программы не блокируется, можно параллельно работать в программе.
Если на форме делать, то состояние можно хранить непосредственно в реквизитах формы. Событие окончания обработки каждого документа сработает моментально, сообщение отобразится тоже моментально. Минус - интерфейс блокируется на время обработки документа и освобождается только на доли секунды после вывода сообщения и перед переходом к обработке следующего документа, то есть, работать в программе будет невозможно.
2 + 2 = 3.9999999999999999999999999999999...