Имя: Пароль:
1C
 
Сообщения на клиенте с задержкой
, ,
0 Fuas4
 
23.06.20
15:27
Отцы, объясните мне, как теперь работает клиент 1С. На каком-то из релизов платформы стал замечать, что сообщения на клиенте выводятся с задержкой
Например, пишем:
&НаКлиенте
Процедура ЗагрузитьНаКлиенте()
Сообщить("Начало загрузки");
ЗАгрузитьНаСервере();
Сообщить("Конец загрузки");
КонецПроцедуры

Вот такая процедура сообщит "Начало загрузки", только когда вернется из процедуры "ЗагрузитьНаСервере"
Я подумал, может с Сообщить и СообщениеПОльзователю какая беда случилась и попробовал использовать "мотылятор" длительных операций. И там тоже самое: https://skr.sh/s2oFGUkbFeS
Сообщение "Начало..." появилось только когда с сервера процедура вернулась, а "Окончание" не выводится, хотя отладчиком я уже прошел эту строку

Как сейчас с пользователем взаимодействовать-то правильно, чтобы он своевременно мои сообщения видел?
1 Franchiser
 
гуру
23.06.20
15:32
Всегда так было. Сразу вернет только если использовать фоновые задания или с подключением обработки ожидания разовой.
2 Fuas4
 
23.06.20
15:34
(1) простите, а что оно возвращает на клиент? я на клиенте меняю заголовок поля. Почему надо "нырнуть" на сервер, чтобы обновить данные на клиенте?
3 Franchiser
 
гуру
23.06.20
15:36
(2) ничего не понял, причем тут сервер. у тебя синхронный вызов серверной процедуры, сообщения появятся когда закончатся вызовы и клиентская форма разблокируется, до этого момент работа пользователя параллизована.
4 Fuas4
 
23.06.20
15:37
(3) т.е. мне надо под сообщения делать отдельную процедуру на клиенте, которую вызывать из другой процедуры, или как?
Вот на моем примере, как мне ДО вызова серверной процедуры поменять заголовок поля?
5 ДенисЧ
 
23.06.20
15:48
(4) Например, в фон передать
6 Вафель
 
23.06.20
15:48
можно через обработсик ожидания
7 Fuas4
 
23.06.20
15:49
ок, я попробую оба варианта
А можете объяснить, ПОЧЕМУ это так работает?
8 ДенисЧ
 
23.06.20
15:50
(7) Это ТАК и должно работать.
9 Franchiser
 
гуру
23.06.20
15:53
(7) Потому что это УФ, а не обычные формы
10 Fuas4
 
23.06.20
15:54
Вы оба не ответили на вопрос, почему это так должно работать. Где то можно почитать про это?
11 ДенисЧ
 
23.06.20
15:55
(10) В любом учебнике по программированию. Про последовательность выполнения вызовов процедур
12 Vadim_37
 
23.06.20
15:58
13 Fuas4
 
23.06.20
15:58
(11) вот из-за таких как ты, Миста и считается токсичным сообществом)
14 Fuas4
 
23.06.20
15:59
(12) Спасибо!
15 dezss
 
23.06.20
16:03
(13) Так он прав чуть более, чем полностью.
Синхронные вызовы - они такие. И были такими всегда и везде. А то, что в толстом выводилось, но при этом окно так же было заблокировано, это просто особенности вывода, но никак не выполнения кода.
16 Franchiser
 
гуру
23.06.20
16:04
(14) что за конфигурация? если самописка то включи модальные вызовы.
17 ДенисЧ
 
23.06.20
16:07
(13) Из-за таких, как ты миста считается чатом тупарей...
18 fisher
 
23.06.20
16:28
(0) Насколько я понимаю, в УФ поменяли механизм вывода сообщений. В ОФ они выводились сразу в момент вызова, а в УФ ставятся в очередь и выводятся из очереди только когда пользовательский поток переходит в режим ожидания. То есть даже без серверных вызовов сообщения начнут выводиться из очереди только когда завершится клиентский вызов. Определенные неудобства это доставляет. Во время длительного КЛИЕНТСКОГО алгоритма выводить промежуточные сообщения - вообще без шансов.
19 PR
 
23.06.20
16:31
(18) Используй состояние, нахрен тебе сообщить?
20 fisher
 
23.06.20
16:33
(19) Я и так в курсе, что мне делать.
21 Fuas4
 
23.06.20
16:46
(18) во, спасибо. Теперь понятно
22 Fuas4
 
23.06.20
16:54
(18) Хотя стоп, а изменения заголовков элементов формы тоже в очередь встает?
23 fisher
 
23.06.20
16:59
(22) Не проверял, но вроде вся отрисовка формы откладывается до завершения вызова. И с этим вероятно связана и фишка с сообщениями. В ОФ для них было отдельное окно со своими правилами, а в УФ они - часть формы.
24 dezss
 
24.06.20
11:31
(18) +1
Не помню насчет ОФ, но в УФ еще можно и перехватить эти сообщения и не выводить вообще, а как-то обрабатывать. Еще один способ передать что-то с сервера на клиент или внутри клиента другому методу. Это моветон и костыль, конечно, но можно)))
25 Fuas4
 
24.06.20
11:34
(23) Спасибо
26 Tihon_aka_kot
 
24.06.20
15:42
(18) для таких нужд нужно использовать фоновые задания с контекстом клиента. 1С рекомендует если клиентский вызов дольше 8 сек (кажется) использовать выполнение в фоне. А сообщения можно выдергивать из фонового задания через ожидание. В БСП есть функция для этого в ОМ ДлительныеОперации
27 Вафель
 
24.06.20
16:00
почему так? 1с так решила ибо уф и так тормозят а если еще формы обновлять сразу по ходу кода то ваще капут будет
28 ДедМорроз
 
24.06.20
16:57
Сообщения выводятся сразу,если они с клиента,так как поймать их через сообщения пользователю нельзя,но отрисовка формы происходит только после окончания выполнения кода,причем,если на сервер не ходить,а просто на клиенте что-то долго делать,то тапки будут те же.