Имя: Пароль:
1C
1С v8
Вывод данных на форму в режиме клиент-сервер
0 kors_
 
14.02.20
17:24
Задача, наверное, банальная и простая, но всё же.
Предположим. Есть форма, на ней одна кнопка. По команде с клиента вызывается серверная процедура.
Перед началом выполнения серверной процедуры, нужно произвести действия на клиенте - например, показать декорацию формы и вывести сообщение. После выполнения - скрыть.
1 acht
 
14.02.20
17:25
И?
2 kors_
 
14.02.20
17:27
(1) действия на клиенте (все) выполняются после завершения серверной процедуры и возвращения на клиент. то есть и то, что нужно "до" и то, что нужно "после".
3 acht
 
14.02.20
17:30
Кнопка отрисовывает декорацию и ставит обработчик ожидания. Обработчик вызывает сервер, после возвращения управления отрисовывает нужное.
4 Лефмихалыч
 
14.02.20
17:33
&НаКЛиенте
Процедура онКнопка(кнопка)
    ПоказатьХернюНаКлиенте();
    ВызватьСервернуюПроцедуру();
    СкрытьХЕрнюНаКлиенте();
КОнецПроцедуры
5 acht
 
14.02.20
17:35
(2) Они выполняются в нужном порядке. Только не отрисовываются до окончания серверного вызова. Чтобы разорвать поток и обеспечить отрисовку - подключают обработчик ожидания на минимальный интервал.
6 1Сергей
 
14.02.20
17:43
(4) +1
7 eTmy
 
14.02.20
17:58
(3) это пять
8 fisher
 
14.02.20
18:03
(5) Не пробовал, но возможно для разрыва потока и отрисовки будет достаточно чего-то вроде ВыполнитьОбработкуОповещения(). Все красивше, чем обработчик ожидания.
9 kors_
 
14.02.20
18:10
(4) (6) увы, но нет


(5) (8) обработчик ожидания для вызова клиентской процедуры перед серверной? Не разъясните чуть подробнее? Спасибо
10 kors_
 
14.02.20
18:13
В общем да, порядок условно понятен - при вызове 3 серверных процедур отрисовка действительно происходит после 1. Но как это теперь написать, чтобы глаза от своего же кода выпадали. И правильно ли вообще так делать...
11 fisher
 
14.02.20
18:22
(10) Не очень правильно. Синхронный серверный вызов все равно "завесит" клиента и толку от дополнительных телодвижений будет мало. Принято длительные серверные вызовы делать фоновым заданием. Тогда мало того что на клиенте можно отобразить прогресс, клиент может во время его выполнения переключиться на другую работу. В БСП для этого целая подсистема, а на инфостарте - куча статей по использованию.
12 lodger
 
14.02.20
18:25
13 kors_
 
14.02.20
18:26
(11) понятно, а если заведомо известно, что обработчик выполнится за 5-10 секунд - есть смысл вот так заморачиваться? Или в любом случае правильнее делать именно так?
14 fisher
 
14.02.20
18:36
(13) Оно-то правильнее, но стоит ли овчинка выделки - решать вам. Скажу так - либо вообще не заморачиваться, либо уж через фоновое.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший