Привет!

Может глупый вопрос,
но как правильно организовать (и возможно-ли) отправку сообщений (текстовых или числовых) с сервера на клиент.
Конкретно, толстый клиент вызвал процедуру с выполнением на сервере. Она должна периодически сообщать о ходе выполнения клиенту. Ну например на экран выводить проценты, чтобы пользователь не скучал.
---
Это один из аспектов, который реализован неудобно в клиент-серверном взаимодействии (проблем две - нельзя вызвать клиентскую процедуру с сервера, неудобно хранить контекст выполнения задачи на сервере). Я видел много предложений по реализации алгоритма - люди и на фоновых заданиях обмен делали, и еще варианты были (смотрим тут: http://infostart.ru/public/65665/, http://infostart.ru/public/71407/).

Самым, на мой взгляд, правильным вариантом будет переписывание исходной процедуры по следующему алгоритму:
На клиенте иметь массив объектов, над которыми выполняется некая операция на сервере. Для каждого элемента из коллекции выполнить операцию на сервере, показать ход выполнения.

Тут возникает вопрос, если надо хранить какой-либо контекст на сервере. Например, в моей конкретной задаче нужно было формировать документ. Если я верну управление клиенту, документ на сервере затрется. В таком случае мне помогло использование функций ПоместитьВоВременноеХранилище и ПолучитьИзВременногоХранилища. Но у них тоже есть проблема - то, что вы поместили в хранилище будет там хранится только еще на один серверный вызов - потом сотрется.

Надеюсь, мой ответ вам чем-то поможет. Сам долго недоумевал над фактической невозможностью индикации выполнения какого-либо долгого процесса.
---
В толстом клиенте нет понятия разделения клиент - сервер. По сути, что-то действительно сделать на сервере вы можете, вызвав процедуру из общего модуля с пометкой "Сервер".

Если вы что-то делаете в толстом клиенте, и не пишите код в общем модуле, вы спокойно можете в реальном времени отображать ход выполнения задачи.
---
Пардон, забыл написать, работает 1С в серверном варианте, в режиме обычного приложения. Разделение все же есть :).
Именно такой случай. Выполняемая процедура живет в общем модуле помеченным "сервер". Вызывается она из Формы.
Хочется ход ее выполнения отображать пользователю в форме.

"сообщить()" не проходит, вываливает все сообщения скопом после отработки процедуры. Поздновато получается.
---
Это один из аспектов, который реализован неудобно в клиент-серверном взаимодействии (проблем две - нельзя вызвать клиентскую процедуру с сервера, неудобно хранить контекст выполнения задачи на сервере). Я видел много предложений по реализации алгоритма - люди и на фоновых заданиях обмен делали, и еще варианты были (смотрим тут: http://infostart.ru/public/65665/, http://infostart.ru/public/71407/).

Самым, на мой взгляд, правильным вариантом будет переписывание исходной процедуры по следующему алгоритму:
На клиенте иметь массив объектов, над которыми выполняется некая операция на сервере. Для каждого элемента из коллекции выполнить операцию на сервере, показать ход выполнения.

Тут возникает вопрос, если надо хранить какой-либо контекст на сервере. Например, в моей конкретной задаче нужно было формировать документ. Если я верну управление клиенту, документ на сервере затрется. В таком случае мне помогло использование функций ПоместитьВоВременноеХранилище и ПолучитьИзВременногоХранилища. Но у них тоже есть проблема - то, что вы поместили в хранилище будет там хранится только еще на один серверный вызов - потом сотрется.

Надеюсь, мой ответ вам чем-то поможет. Сам долго недоумевал над фактической невозможностью индикации выполнения какого-либо долгого процесса.
---
juntatalor, большое Спасибо!
Основную мысль вроде понял, пошел думать...

Да несколько расстраивают эти ограничения. Усложняется код и теряем во времени выполнения.