Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 дек 2024, 19:57

Обновление формы по событию, методы Оповестить() + ОбработкаОповещения()

Автор mixqn, 28 сен 2012, 14:21

0 Пользователей и 1 гость просматривают эту тему.

mixqn

Коллеги!
Стоит такая задача: есть некая форма (форма задач пользователя), которая должна обновляться при определенных событиях. Я это реализовал связкой методов Оповестить() при возникновении события и ОбработкаОповещения() в форме. Все это прекрасно работает внутри одного сеанса, но этого мало: нужно, чтобы оповещение отправлялось всем открытым формам во всех сеансах (буквально, задача такая: при выполнении задач одним пользователем, состав задач других пользователей может измениться, о чем они должны узнать – форма задач должна обновиться).
Что делать? Как заставить эту штуку работать для всех сеансов? Если это невозможно, какие есть иные пути решения?
Клиент «толстый» - обычное приложение.

MuI_I_Ika

Пиши флаг изменения в константу или в регистр сведений и читай периодически.

mixqn

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

mixqn

Итак, еще раз суть проблемы коротко:
Нужно обновлять форму во всех открытых сеансах. Обновление формы – это запрос. Выполнение запроса по расписанию (допустим, каждые 5 секунд) может привести к тормозам (убедиться в этом можно только на опыте), поэтому хочется найти другое решение: чтобы обновление ВО ВСЕХ СЕАНСАХ, где открыта форма задач, происходило по событию, а не по расписанию раз в 5 секнунд.

sadovod

На каком-то ресурсе, убей не помню на каком (м.б. на инфостарте?), читал ветку по этой проблеме. Народ пришел к выводу, что штатными средствами 1С - никак, нужен какой-нибудь сторонний софт. Ну и по ходу дела там предлагались и net send, и "WinSent Messenger" и чуть ли не WinPopUp :)

mixqn

решение найдено. без "простукивалки" правда не обойтись, но можно облегчить задачу, не выполняя весь запрос, в общем вариация, решения предложенного MuI_I_Ika, только доработанная (в предложенном им решении нет ответа на 1 важный вопрос: если будет константа - когда надо снимать флаг обратно в ложь). в общем чуть позже опишу как сделал. пока занят...

Dethmontt

Определенное Событие на каждом клиенте пишет в регистр сведений что нужно обновить задачи (Наверное можно даже указывать для какого пользователя) "простукивалка" опрашивает этот РС на каждом клиенте с отбором по пользователю видит что значение появилось обновляет список задач - далее - значение либо удаляет (что наверное как раз затормозит это выполнение...) либо меняет значение для пользователя на противоположный (типа БУЛЕВО или 1-0)

Как то так?
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

mixqn

почти. идея была озвучена MuI_I_Ika, но там не хватало одного - самого главного - идентификатора соединения. это была главная проблема: как понять, что флаг относится к текущему соединению. один добрый человек за пределами форума подсказал: есть методы глобального контекста ПолучитьСоединенияИнформационнойБазы() и НомерСеансаИнформационнойБазы(). первый получает список всех открытых соединений, второй - идентификатор текущего соединения. вот собственно через эту связку: по событию регистр событий очищается (с отбором по нужному типу событий), в регистр пишутся все идентификаторы соединений, затем простукивалка лезет в регистр, получает список всех соединений и если находит там себя (идентификатор текущего соединения) - выполняет обновление формы по нужным событиям (там несколько вариантов), после чего удаляет запись о необходимости обновления из регистра (чтобы они там не плодились, хотя плодиться они все равно будут, поэтому наверно нужно будет регламентное задание, которое по ночам будет регистр чистить).

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск