Имя: Пароль:
1C
1С v8
Не отрабатывает ОбработкаОповещения
,
0 richin
 
16.07.16
12:48
Добрый день. 1с 8.2. обычное приложение

Есть внешняя обработка, которая запускается у нескольких пользователей: под админом в ней выполняются различные записи в документы и справочники, а у пользователей по Оповещению - выполняются открытия форм, изменение инфы на форме их, этой же обработки и т.д.

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

Подскажите, что я делаю не так?
1 richin
 
16.07.16
12:49
Работает ли вообще Оповестить() на эту же внешнюю обработку, запущенную у другого пользователя?
2 Beretta
 
16.07.16
13:19
Нет
3 richin
 
16.07.16
13:20
(2) а как тогда можно среагировать на Оповещение из внешней обработки в другой этой же открытой форме, но у пользователя?
4 richin
 
16.07.16
13:26
(3) а что если подтянуть эту внешнюю обработку к обработкам конфиги? Так будет работать?
5 Beretta
 
16.07.16
13:31
(3) Нет. Без внешних компонент организовать взаимодействие пользователь-пользователь можно только через базу или иной общий источник сведений.
6 richin
 
16.07.16
13:40
Загрузил обработку в базу - у админа отрабатывают действия по оповещению, но всё равно на стороне пользователя ничего не происходит при этой открытой загруженной обработке. Может как то решить это подключением обработчика ожидания..или кто его знает, как ещё можно
7 richin
 
16.07.16
13:50
Вообще не пойму, почему не работает Оповестить() и ОбработкаОповещения() для одной и той же формы обработки у разных пользователей. Должно ведь отрабатывать события
8 Beretta
 
16.07.16
13:56
(7) Почему должно?
9 richin
 
16.07.16
13:58
(8) Оповестить()

Описание:

Посылает оповещение всем созданным формам и всем подключенным через метод ПодключитьОбработчикОповещения процедурам модуля управляемого приложения (модуля обычного приложения) или общего модуля. Если для формы задана процедура-обработчик события ОбработкаОповещения, то она будет запущена, в процедуру будут переданы указанные параметры.
Данный механизм может, например, применяться для организации обмена сообщениями между открытыми формами.

ну вроде бы как написано
10 richin
 
16.07.16
13:59
или это работает только в рамках данного запущенного клиента?? :( т.е. в данном случае у админа
11 Beretta
 
16.07.16
14:07
(10) Да
12 richin
 
16.07.16
14:09
(11) Теперь всё ясно, спасибо.
13 Фрэнки
 
16.07.16
14:40
(12) не просто у админа, а только в одном сеансе. Вот в одной сессии/сеансе открыто множество окон и нужно инфу между ними синхронизировать - работает. А если между разными сеансами, то там нужно ставить обработки ожидания, которые будут считывать, допустим регистр сведений в поиске новых сообщений. А перед отправкой сообщений можно проверить списки и сделать записи в РС только в адрес активных сеансов\пользователей. Вариантов много можно придумать.
14 richin
 
16.07.16
14:42
(13) Понятно, буду пробовать. Спасибо
15 Фрэнки
 
16.07.16
14:46
(14) кстати, обращает на себя внимание запрет на запуск под одним пользователем нескольких сеансов одновременно. Это делается, в том числе, для корректной обработки новых сообщений и выставления/снятия флагов прочитано на них.
16 richin
 
16.07.16
15:09
(13) А я почему то считал, что Оповестить(), работает для всех запущенных сеансов 1с :) Жаль..очень жаль, что не так)
17 richin
 
16.07.16
15:21
(13) ПРоблема в том, что нужно быстро получить новую информацию (по входящему внешнему событию), которую получает админ,  и отрисовать её на запущенных формах обработки у пользователей. А считывание информации - "слегка" затянутый процесс, ведь её ещё нужно сначала записать куда то :((( А так вот, событием с параметрами - было бы очень удобно и быстро сделать это
18 Фрэнки
 
16.07.16
15:32
(17) нет, быстро не получится. Даже если посмотришь, как работает оповещение между окнами в одном сеансе, то все равно происходит обновление/опрос процедуры обработки оповещения в рамках получения этим окном фокуса. Т.е. будет открыто два-три окна. Открыл еще какое-то и оно отправило сообщения разные в разные окна, но само продолжает работать - те окна ничего не отобразят, пока им не отдадут обработчик ожидания (он дефолтно ко всем окнам привязывается)

Точно также в любом другом сеансе. Будет запущено пользователем обработка ожидания в постоянно открытой обработке "Рабочий стол на складе", значит все сообщения этому рабочему столу дойдут в том обработчике. А будет запущен отчет или расчет минут на 10, так и не получишь ничего до окончания текущего действия.
19 Фрэнки
 
16.07.16
15:35
(17) если речь про "отрисовывать", то для постоянной готовности к рисованию на всех этих клиентах нельзя открывать иных форм.

Если же не рисовать, а действовать, то надо фоновый процесс запускать. И ясно, что интерактивная реакция для фонового действия противопоказана.
20 richin
 
16.07.16
15:38
Жаль:( Значит мне при старте клиента нужно делать обработчикОжидания какой то процедуры, которая ежесекундно будет проверять значения регистра/документа на обновление данных, и при удовлетворительном условии заполнять эти данные на форме обработки пользователя.

и других вариантов нет ? :(
21 Зая Бусечка
 
16.07.16
15:52
(20) Есть. Применить древнеславянское заклинание.
22 Фрэнки
 
16.07.16
16:44
(20) ну почему же нет? А если посмотреть, как в типовом решении сделано, допустим, В Документообороте, который обрабатывает получение сеансами пользователя новых почтовых сообщений? В типовой БП 3.0 боковая панель задач пользователю тоже что-то получает... Может быть у ваших клиентов, кому все это поставить нужно, сама постановка задач пользователю нужна другая немного, но еще не продумали до конца...

Ведь им что-то нужно конкретное, не просто цифры где-то сверху или сбоку новые нарисовывать, с той же примерно пользой, как под потолком в комнатах часы на своем табло высвечивают такие же. Скорей всего, на новые данные у ответственных лиц должны быть новые задачи, с реакциями на них. А механизм задач в обновленных версиях платформы весьма и весьма свеж. Ну как минимум, просто красив :)
23 hhhh
 
16.07.16
21:58
(18) да нет, работает всё и без фокуса. Я передавал данные между формами в режиме обмена встречными оповещениями. Данные приходили от формы, которая вроде и не в фокусе.
24 Фрэнки
 
17.07.16
10:38
(23) понятно, что заморачиваться со сложными тестами никто не будет, но если в той точке вызова процедуры, которая отправляет данные из формы, поставить длительно работающую процедуру, то никакие другие процедуры не начнут работать в данном сеансе, так ведь?