|
Как подпиской ПриЗаписи Оповестить клиента? | ☑ | ||
---|---|---|---|---|
0
Вася Теркин
08.02.19
✎
07:49
|
Хочу чтобы при записи какого-то документа у всех пользователей во всех клиентах обновлялся динсписок документов.
Оповестить годное или надо РС с заданиями оповещения пилить и читать оттуда чего и как обновить каждым клиентом через обработкуожидания? |
|||
1
Вася Теркин
08.02.19
✎
07:51
|
В БСП такое есть? НаСервере в подписке надо сформировать Оповестить у всех открытых клиентов?
Типа БСП.СформироватьОповеститьВсехКлиентов(ИмяСобытия, Параметр, источник); |
|||
2
Вася Теркин
08.02.19
✎
07:52
|
Не хочу Автообновление динсписка. Много народу. Хочу чтобы по оповещению все обновлялось.
|
|||
3
catena
08.02.19
✎
07:52
|
Думаете будет быстрее, чем штатное автообновление динамеческого списка?
|
|||
4
Вася Теркин
08.02.19
✎
07:54
|
Второй вариант - параметр сеанса делаю СобытияПрочитаныДо.
Пишу все оповещения в РС, обработками ожидания читаю на каждом клиенте (или на каждой форме) (3) Нагрузка меньше будет я думаю. Зачем мне лишние перечитывания. У меня динсписки сложные тяжелые запросы могут содержать. |
|||
5
Вася Теркин
08.02.19
✎
07:55
|
Штатное идет интервалом. а я хочу либо по оповещению, либо, что хуже, клевать только один РС специальный.
|
|||
6
Вася Теркин
08.02.19
✎
07:55
|
И только когда реально что-то изменилось обновлять динсписок.
|
|||
7
Вася Теркин
08.02.19
✎
07:56
|
В БСП это уже реализовано? Всех оповестить с сервера?
|
|||
8
Вася Теркин
08.02.19
✎
07:56
|
Там же какие-то оповещения можно рассылать вроде массово?
|
|||
9
Вася Теркин
08.02.19
✎
07:58
|
+4 При открытии форм придется создать переменную и запоминать последнее обработанное событие РС.
А при следующей обработке ожидания докачивать из РС недостающее. Т.е. РС будет что-то типа журнала логов. |
|||
10
Вася Теркин
08.02.19
✎
07:59
|
Логи писать подпиской придется если нельзя напрямую всем оповещения разослать.
|
|||
11
PuhUfa
08.02.19
✎
08:00
|
(4) >> Нагрузка меньше будет я думаю
Что будет если 5 человек поменяют данные связанные с 1 списком... и прилетит 5 оповещений с разницей в 1 сек? |
|||
12
Вася Теркин
08.02.19
✎
08:02
|
У меня 200 менеджеров ,у всех открыт журнал заяваок. Там "вычисляемые" колонки статус, остаток ,и т.д.
Просто 5 сек автообновление даст ГАРАНТИРОВАНО 1000 запросов в сек на сервер. "Что будет если 5 человек поменяют данные связанные с 1 списком... и прилетит 5 оповещений с разницей в 1 сек?" - но не каждую секунду, но прилетят. Думаешь виснуть будет интерфейс? |
|||
13
Вася Теркин
08.02.19
✎
08:04
|
"1000 запросов" = "100 запросов"
Это все равно нагрузка. Заявки не меняются каждую секунду. |
|||
14
Вася Теркин
08.02.19
✎
08:06
|
(11) Надо тогда каждые 5 сек делать выборку из логов, Сворачивать срезом последних по источнику. И решать один раз в пять секунд обновлять форму или нет.
|
|||
15
Вася Теркин
08.02.19
✎
08:08
|
Клевать одну РС проще чем все таблицы автообновлением насиловать.
|
|||
16
Mort
08.02.19
✎
08:14
|
интересно, а нахрена? Не, у меня тоже по молодости возникали такие хотелки, которые как мне сейчас кажется придурь полная, но может быть с тех времен что-то изменилось...
|
|||
17
unregistered
08.02.19
✎
08:43
|
(12) >> журнал заяваок. Там "вычисляемые" колонки статус, остаток ,и т.д.
Если возникает реальная проблема с производительностью (а не просто блажь, как думает(16)), то правильнее будет переделать этот журнал. Отказаться от вычисляемых колонок. Например, журнал заявок реализовать в виде отдельного регистра сведений, содержащего в готовом виде все эти вычисляемые поля. |
|||
18
mikecool
08.02.19
✎
09:00
|
(15) клевать одну таблицу 200 клиентами - думаю тоже весело
|
|||
19
Deon
08.02.19
✎
09:03
|
Так а разве "система взаймодействия" не для этого предназначена в том числе?
|
|||
20
Вася Теркин
08.02.19
✎
10:53
|
(14, 17) Проблема в том что у нас разделенный и очень интенсивный режим работы с одними и теми же заявками. Работа ведется в разных системах - САП, 1С, другие системы типа сторонних CRM и прочее.
Пользователи не будут постоянно нажимать обновить во всех журналах. Например, открыто сразу 3-4 основных списка и их надо постоянно держать актуальными. Для 200 рабочих мест просто включать автообновление на формах каждые 5 сек это не правильно. Вот хочется "универсальный" механизм обновлений. Может в РС писать подпиской поможет? Процедура ЗаписатьСобытияДляОповещенияФорм(ИмяСобытия, ИмяИсточника, Источник) Экспорт Событие = РегистрыСведений.СобытияДляОповещенияФорм.СоздатьМенеджерЗаписи(); Событие.ИмяСобытия = ИмяСобытия; Событие.ИмяИсточника = ИмяИсточника; Событие.Источник = Источник; Событие.Период = ТекущаяДата(); Событие.МоментРегистрации = ТекущаяДата(); Событие.Записать(Истина); КонецПроцедуры Процедура ОповеститьФормыПриЗаписиПриЗаписи(Источник, Отказ) Экспорт ЗаписатьСобытияДляОповещенияФорм("UpdateListsOfDocs", Источник.Метаданные().Имя, Источник); КонецПроцедуры |
|||
21
Вася Теркин
08.02.19
✎
10:53
|
(18) Ну сделать таблицу примитивной - самое простое решение. Нет?
|
|||
22
Вася Теркин
08.02.19
✎
10:55
|
(19) Можно поподробнее? По каждому модифицированному объекту отправлять уведомления только определенному кругу лиц?
|
|||
23
Вафель
08.02.19
✎
10:59
|
нужно сервер взаимодействия ставить
|
|||
24
Вася Теркин
08.02.19
✎
10:59
|
(18) Там может и больше быть если на многие формы повешу обработку ожидания и перечитывание заданий каждые 5 сек.
|
|||
25
Вася Теркин
08.02.19
✎
10:59
|
(23) Вот это уже мысль какая-то...
|
|||
26
Вафель
08.02.19
✎
10:59
|
(18) как раз если только читать, то очень легко для сервера.
ибо в кэше будет все лежать |
|||
27
Вася Теркин
08.02.19
✎
11:01
|
(26) У меня режим совместимости 8.3.6 и выше не пойдет. А так релиз 8.3.14
|
|||
28
Вася Теркин
08.02.19
✎
11:02
|
"Сервер взаимодействия Для платформы 8.3.11 реализована тестовая версия сервера взаимодействия." - оно в режиме совместимости крутится полноценно? Расширения и весь остальной современный ништяк мне не доступны.
|
|||
29
Вафель
08.02.19
✎
11:05
|
(28) ну если не доступно, тогда через long polling (те с клиента инициируй опрос регистра на наличие записей)
|
|||
30
Вася Теркин
08.02.19
✎
11:25
|
С клиента буду срезом последних. Но куда лучше прикрутить обработку ожидания. Если с каждой открытой формы запускать,то:
до 200 клиентов до 4-5 форм списков открытых, каждые 5 сек, не чаще. 200 запросов в сек. По идее просто срез последних должен справиться. Железо очень хорошее везде. |
|||
31
Mort
08.02.19
✎
17:27
|
Либо автор пилит что-то для центра управления полетами, когда все посекундно отслеживают инфу, либо... хз. Какой эффект от того что юзеры видят актуальную инфу? Как это влияет на бизнес, сколько рублей приносит гипотетических?
|
|||
32
Mort
08.02.19
✎
17:30
|
Если это дейтвительно важно, например, капнула важная срочная заявка, танцы со списком не спасут, мало кто лупится в список весь день. Обычно это открыл - закрыл. Тут уже надо думать о других способах оповещения, почта, смс. Вот опишите пример где (0) приносит профит.
|
|||
33
Вася Теркин
12.02.19
✎
09:05
|
Чего-то я туплю - как оповещение работает?
Его все открытые формы получат или только какая-то одна? Или только текущая активная форма? У меня есть Обработка оповещения на трех открытых формах, а оповещение возникает когда активна четвертая. Все три получат оповещение? |
|||
34
Вася Теркин
12.02.19
✎
09:06
|
Оповещение и обработка оповещения работает широковещательно в пределах сеанса или нет?
|
|||
35
Вася Теркин
12.02.19
✎
11:23
|
Проклятая копипаста. ОбработкаОжидания в модуль скопирована, а к форме не подключена...
|
|||
36
Вася Теркин
12.02.19
✎
11:27
|
Работает платформа оказываица...
|
|||
37
Вася Теркин
12.02.19
✎
11:40
|
Все работает отлично. Делайте так:
Создает параметр сеанса ПоследняяЗаписьСобытияДляОповещенияФорм дата время. Создаем РС СобытияДляОповещенияФорм ИмяСобытия - строка ИмяИсточника - строка ИмяИсточника - любая ссыль МоментРегистрации - датавремя В любом модуле формы достаточно добавить &НаКлиенте Процедура ПриОткрытии(Отказ) ПодключитьОбработчикОжидания("СформироватьОповещенияПроверкиОбновленийФормы",5); КонецПроцедуры &НаКлиенте Процедура СформироватьОповещенияПроверкиОбновленийФормы() МойИнтерфейсКлиент.ОбработатьОповещенияПроверкиОбновленийФормы(); КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "UpdateListsOfDocs" Тогда ЭтаФорма.ОбновитьОтображениеДанных(); КонецЕсли; КонецПроцедуры В модуле МойИнтерфейсКлиент Процедура ОбработатьОповещенияПроверкиОбновленийФормы() Экспорт МассивСобытий = МойИнтерфейсВызовСервера.СформироватьМассивСобытийПроверкиОбновленийФормы(); Для каждого стр из МассивСобытий Цикл Оповестить(Стр.ИмяСобытия, Стр.ИмяИсточника, "КритерийАвтоОбновленияФормы"); КонецЦикла; КонецПроцедуры В модуле МойИнтерфейсВызовСервера Процедура ЗаписатьСобытияДляОповещенияФорм(ИмяСобытия, ИмяИсточника, Источник) Событие = РегистрыСведений.СобытияДляОповещенияФорм.СоздатьМенеджерЗаписи(); Событие.ИмяСобытия = ИмяСобытия; Событие.ИмяИсточника = ИмяИсточника; Событие.Источник = Источник; Событие.Период = ТекущаяДата(); Событие.МоментРегистрации = ТекущаяДата(); Событие.Записать(Истина); КонецПроцедуры Процедура ОповеститьФормыПриЗаписиПриЗаписи(Источник, Отказ) Экспорт ЗаписатьСобытияДляОповещенияФорм("UpdateListsOfDocs", Источник.Метаданные().Имя, Источник); КонецПроцедуры Функция СформироватьМассивСобытийПроверкиОбновленийФормы() Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СобытияДляОповещенияФормСрезПоследних.ИмяСобытия, | СобытияДляОповещенияФормСрезПоследних.ИмяИсточника |ИЗ | РегистрСведений.СобытияДляОповещенияФорм.СрезПоследних(, МоментРегистрации > &ПоследнееЧтение) КАК СобытияДляОповещенияФормСрезПоследних"; Запрос.УстановитьПараметр("ПоследнееЧтение", ПараметрыСеанса.ПоследняяЗаписьСобытияДляОповещенияФорм); ТаблицаСобытий = Запрос.Выполнить().Выгрузить(); МассивСобытий = Новый Массив; Для каждого стр из ТаблицаСобытий Цикл МассивСобытий.Добавить(Новый Структура("ИмяСобытия, ИмяИсточника",стр.ИмяСобытия, стр.ИмяИсточника)); КонецЦикла; ПараметрыСеанса.ПоследняяЗаписьСобытияДляОповещенияФорм = ТекущаяДата(); Возврат МассивСобытий; КонецФункции Теперь можете помещать в регистр любые объекты, rms_УпрощенныйИнтерфейсВызовСервера.ОповеститьФормыПриЗаписиПриЗаписи(СтрокаРС.СсылкаДокумента, Ложь); документы ,справочники и по имени метеданных или по самому источнику, например, понимать надо ли обновлять список. |
|||
38
Вася Теркин
12.02.19
✎
11:41
|
В митоге все формы будут работать на автообновление всех активных форм, а те только самой себя, каждые 5 сек.
При этом они не будут долбить основные таблицы, а только наш РС. И при необходимости мгновенно обновляться по оповещению. |
|||
39
Вася Теркин
12.02.19
✎
11:43
|
ИмяИсточника - любая ссыль = Источник - любая ссылька.
Источник и момент регистрации - это ресурсы |
|||
40
тарам пам пам
12.02.19
✎
12:13
|
(37) Поздравляю, ты изобрел журнал регистрации. А теперь представь количество записей в этом регистре через пару месяцев, например. Да даже через пару дней, если у тебя реально 200 пользователей сидят и набивают данные.
И соответственно скорость получения среза последних и скорость записи в этот регистр. |
|||
41
Вася Теркин
12.02.19
✎
12:14
|
(40) Ну ежеутречно можно его резать. Представь...
|
|||
42
Вася Теркин
12.02.19
✎
12:14
|
Зачем мне история?
|
|||
43
Вася Теркин
12.02.19
✎
12:15
|
Я не изобрел, а украл идею. Но ЖР резать евридей нельзя. А то бы я его.....
|
|||
44
Вася Теркин
12.02.19
✎
12:16
|
Вообще если ЖР так активно теребить система наверняка загнется.
|
|||
45
Вафель
12.02.19
✎
12:19
|
(43) можно конечно же.
поставь старый формат и раздление по дням. и он сам будет резаться. только успевай файлы удалять |
|||
46
Вася Теркин
12.02.19
✎
12:21
|
(45) Я не про то, если в него читать раз двести в секунду, то серверу 1С это сильно может не понравиться...
|
|||
47
тарам пам пам
12.02.19
✎
12:22
|
(42) Ну так не я же регистр периодическим сделал. Он по твоему коду такой.
Я к тому, что тебе в регистре дата нужна в реквизите, а не в измерениях. Да и источник тоже. В итоге в регистре будет храниться время последнего изменения каждого из типов документов, а не вообще вся история. И чистить его не нужно будет, там от силы 100 записей будет. |
|||
48
Вася Теркин
12.02.19
✎
12:22
|
(45) См (30)
"Если с каждой открытой формы запускать,то: до 200 клиентов до 4-5 форм списков открытых, каждые 5 сек, не чаще. 200 запросов в сек. " |
|||
49
Вася Теркин
12.02.19
✎
12:25
|
(47) Нет, это прототип. Я ещё хочу формы отдельных документов (ну там не совсем формы документов, а произвольные, которые создают оригинальный интерфейс). Там надо будет оповещением конкретно отправлять какой источник (ГУИД).
Это я просто примерчик облегченный накидал. А настоящая болезнь проникала в организм глубже. |
|||
50
Вася Теркин
12.02.19
✎
12:28
|
При обновлении любой заявки рассылать как оповещение о том, что обновились списки такого типа, так и расслать другое оповещение что конкретно такой-то документ. Просто я не могу в документы юзеров пускать чтобы их не лочили. Мне с нескольких систем надо параллельно иметь возможность проводит-писать документ. Поэтому юзер видит только отображение документа, а не формуДокумента. Поэтому в форме списка объекты могут появляться исчезать и статусы менять даже пока их "тут" пытаются править.
|
|||
51
Вася Теркин
12.02.19
✎
12:31
|
Юзер правит документ, а в это время его с другой системы кто-то модифицирует через вебсервис. Сложная духовная жизнь.
|
|||
52
Вася Теркин
12.02.19
✎
12:34
|
Кто-нибудь знает - ОбработкаПроверкиЗаполнения у модуля набора записей РС срабатывает если вебсервисом в него писать?
|
|||
53
тарам пам пам
12.02.19
✎
12:43
|
(52)
Описание: Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи в форме, а также при выполнении метода ПроверитьЗаполнение. То есть нет, ОбработкаПроверкиЗаполнения из веб-сервиса не вызывается, нужно вручную ПроверитьЗаполнение вызывать. |
|||
54
Вася Теркин
12.02.19
✎
12:46
|
Ну это я читал. Но ведь и тайный смысл бывает, всякие недокументированные невероятности.
Просто я написал Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Для каждого стр из ЭтотОбъект Цикл МойИнтерфейсВызовСервера.ОповеститьФормыПриЗаписиПриЗаписи(стр.Заявка, Ложь); КонецЦикла; КонецПроцедуры и был счастлив. А теперь в вебсервис тоже придется строку вставлять МойИнтерфейсВызовСервера.ОповеститьФормыПриЗаписиПриЗаписи(Док.Ссылка, Ложь); А это же уже дополнительная работа. |
|||
55
Вася Теркин
12.02.19
✎
12:46
|
Не, лучше я напрямую вызову процедуру.
|
|||
56
Вася Теркин
12.02.19
✎
12:47
|
Хотя Рег.ПроверитьЗаполнение();
короче и красивше... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |