Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Оповестить() все формы, открытые под разными сеансами.

Оповестить() все формы, открытые под разными сеансами.
Я
   Sargez
 
26.07.19 - 14:13
Всем привет.

Собственно открыто 2 сеанса. в 1 из сеансов открыта форма элемента справочника. 2 сеанс делает действия, которые изменяют данные элемента справочника. как оповестить 1 сеанс об изменении? использую метод Оповестить(), но он почему-то оповещает только в рамках текущего сеанса. А как оповестить все активные сеансы?

Заранее благодарен за помощь.
 
 
   palsergeich
 
1 - 26.07.19 - 14:14
(0) никак.
Клиентский контекст в разных сеансах разный.
Нужен очень резной костыль, но тебе это не нужно.
   Admin_Net_1C
 
2 - 26.07.19 - 14:15
Какой хитрый, захотел сервер взаимодействия через Оповестить, бесплатно ))
   palsergeich
 
3 - 26.07.19 - 14:16
Ну или да сервер взаимодействия, если релиз позволяет.
   МаксимНижегородец
 
4 - 26.07.19 - 15:04
(0) В большинстве систем реализуется через постоянный опрос (по таймеру) неких данных, которые сообщают о неких изменениях. Такие данные обязательно располагаются на сервере.
   Жан Пердежон
 
5 - 26.07.19 - 15:05
   Fragster
 
6 - 26.07.19 - 15:08
Правильнее не дать сеансу 2 делать такие действия. Это решается через метод Заблокировать() у СправочникОбъект
   palsergeich
 
7 - 26.07.19 - 15:12
(4) так лучше не делать.
(6) тоже спорное решение делать именно через справочник.объект.
А чем не угодил флаг модифицированность, он по факту (6) и делает.
   palsergeich
 
8 - 26.07.19 - 15:12
Или вместо ошибки данные уже изменены нужно делать что то?
   МаксимНижегородец
 
9 - 26.07.19 - 15:12
(6) 1С сама не дает менять объект, если он уже был изменен в другом сеансе, раньше тебя.
(5) А это просто называется ЧАТИТЬСЯ на рабочем месте. 1С последнее время славится на разработки не нужные бизнесу совсем (слабо улучшающие работу в 1С).
   palsergeich
 
10 - 26.07.19 - 15:17
(9) у этого механизма чатится есть одна мегавещь - вызов клиентского контекста с сервера.
   Fragster
 
11 - 26.07.19 - 15:19
(7).2 нет, если перед программным изменением в сеансе 2 вызвать СправочникОбъект.Заблокировать(), то там будет ошибка. А если не вызывать, то ошибки при спрвочникОбъект.Записать() не будет , даже если в сеансе 1 модифицированность.
   GROOVY
 
12 - 26.07.19 - 15:19
   Fragster
 
13 - 26.07.19 - 15:20
(9).2 программно менять в другом сеансе можно без проблем.
   palsergeich
 
14 - 26.07.19 - 15:21
(10) что позволяет убрать лапшу из ОбработчиковОжидания, которые в 99+ процентах просто дают холостую нагрузку ( цифра не с потолка я в одном месте реально замерил) (11) согласен.
   palsergeich
 
15 - 26.07.19 - 15:22
(14) но речь идёт про интерактивное взаимодействие, а не програмное
   Fragster
 
16 - 26.07.19 - 15:23
(14) только это требует либо доступа в интернет, либо корп функциональности. В любом случае предварительной настройки конфигурации. И интересные глюки при копировании базы. И невозможность, вроде, как раз с "оповестить все актиивные сеансы".
   Fragster
 
17 - 26.07.19 - 15:24
(15) >2 сеанс делает действия, которые изменяют данные элемента справочника
интерактивно это невозможно, будет ошибка, только программно.
   palsergeich
 
18 - 26.07.19 - 15:26
(17) в 1 сеансе форма открыта, про то что там произведены какие либо действия - не описано, так что это возможно.
   Fragster
 
19 - 26.07.19 - 15:27
(18) тогда в сеансе 1 при попытке изменения будет ошибка и можно нажать на кнопку "перечитать", в любом случае ни в одном из сеансов при целиком интерактивной работе изменения не будут потеряны.
   palsergeich
 
20 - 26.07.19 - 15:28
(19) абсолютно согласен.
   Fragster
 
21 - 26.07.19 - 15:28
в отличии от программного изменения, когда человек мог пол часа набивать табличную часть, и потом потерять результат работы при программной модификации в другом сеансе (да даже и в том же, что самое обидно :) )
   palsergeich
 
22 - 26.07.19 - 15:34
(16) Можно оповестить все сеансы.
А там уже на клиенте принимать решение будет обрабатываться это сообщение или нет. Да это не совсем все активные, но все же.
(21) О да, этот запах горелых оп, когда это случается...
   palsergeich
 
23 - 26.07.19 - 15:35
(22) а по факту если база маленькая то доступ в интернет как правило есть.
Если база в закрытом контуре - то скорее всего просто из-за настроек кластера придется перейти на корп лицензии.
   Fragster
 
24 - 26.07.19 - 15:38
(22) не сеансы, а пользователи же. а может быть несколько сеансов под одним пользователем, например.
   palsergeich
 
25 - 26.07.19 - 15:39
(24) я может путаю, а разве сообщение приходит не во все сеансы этого пользователя системы взаимодействия?
   Cyberhawk
 
26 - 26.07.19 - 15:41
(25) Во все. Открыт тонкий и веб-клиенты, приходит сразу в оба.
   МаксимНижегородец
 
27 - 26.07.19 - 15:46
Механизм блокировок ни кто не отменял. Если я захватил объект, то больше его ни кто не сможет править.
   МаксимНижегородец
 
28 - 26.07.19 - 15:51
Блокировка происходи на уровне SQL базы банных.
   palsergeich
 
29 - 26.07.19 - 15:51
(27) Слишком много возможностей допустить ошибку ©
   palsergeich
 
30 - 26.07.19 - 15:53
(28) простите как при открытии формы я повешу блокировку в СУБД? Что бы 2ой сенанс не мог сделать то что не нужно?
И как себя будут чувствовать другие участки кода при долгой блокировке?
 
 Рекламное место пустует
   Fragster
 
32 - 26.07.19 - 16:01
(18) тогда можно при открытии формы в сеансе 1 вызвать метод управляемой формы ЗаблокироватьДанныеФормыДляРедактирования и тогда в сеансе 2 при вызове Заблокировать Будет ошибка, даже если в сеансе 1 не начинали редактировать данные.
   Cyberhawk
 
33 - 26.07.19 - 18:02
(32) Недружелюбно по отношению к сеансу 2 - зачем ему ждать, пока сеанс 1 только открыл форму и телится весь остальной день?
Ведь при начале редактирования данных в форме в первом сеансе пользователь и так получит отлуп, если со времени открытия объект успелся измениться.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.