|   |   | 
| 
 | Как подпиской ПриЗаписи Оповестить клиента? | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Хотя     Рег.ПроверитьЗаполнение();
 короче и красивше... | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |