Имя: Пароль:
1C
1С v8
Оповестить() все формы, открытые под разными сеансами.
0 Sargez
 
26.07.19
14:13
Всем привет.

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

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