|
УФ. Как в серверном событии определить, что форма открыта | ☑ | ||
---|---|---|---|---|
0
SeiOkami
02.08.21
✎
12:20
|
Как можно на сервере проверить, что управляемая форма уже открыта ?
|
|||
1
Мультук
гуру
02.08.21
✎
12:21
|
(0) В каком-таком серверном событии ? Имя у события есть ?
|
|||
2
butterbean
02.08.21
✎
12:22
|
(0) в смысле форма какого-то конкретного объекта?
|
|||
3
SeiOkami
02.08.21
✎
12:27
|
На сервере есть форма. Нужно проверить открыта она или нет.
Но как я понимаю, это можно сделать только на клиенте. И приходится добавлять реквизит формы "ФормаОткрыта" типа Булево и заполнять его в ПриОткрытии() |
|||
4
acht
02.08.21
✎
12:30
|
(3) И очищать в ПриЗакрытии, тогад уж. Закрытые формы тоже существуют.
Но скорей всего у тебя косяк в сценариях и архитектуре, если требуется такой знатный костыль. |
|||
5
SeiOkami
02.08.21
✎
12:30
|
Например, мой конкретный кейс.
Нужно отключать пользовательские настройки при открытии формы списка. Просто снимать галочки с пользовательских отборов. Но только при открытии. Далее, если пользователь подгрузит свои настройки, то их обрабатывать не нужно. В обработчике динамического списка ПередЗагрузкойПользовательскихНастроекНаСервере() нужно определить, форма открыта или нет. Если открыта, то это пользователь нажал на кнопку загрузки настроек и не нужно ничего делать. Если же не открыта, то это моя ситуация. |
|||
6
SeiOkami
02.08.21
✎
12:32
|
(4), к сожалению, в 1С мало доступно событий в отношении динамических списков.
|
|||
7
Kassern
02.08.21
✎
12:33
|
(5) а при открытии самой формы разве нельзя привязаться к событию?
|
|||
8
SeiOkami
02.08.21
✎
12:34
|
(7), при открытии формы настройки уже загружены. Мне нужно это делать до загрузки в событии ПередЗагрузкойПользовательскихНастроекНаСервере()
|
|||
9
Kassern
02.08.21
✎
12:35
|
(7) вы не поняли видимо меня, или я вас. У вас есть форма, на ней динамический список. У списка есть какие то отборы пользовательские. Из вашего кейса вам нужно всегда, при открытии формы со списком очищать пользовательские настройки. Ну так привяжитесь к событию формы, а не к событию дин списка. При открытии очистили пользовательские отборы и ничего проверять не нужно.
|
|||
10
Вафель
02.08.21
✎
12:37
|
(8) почему именно до?
|
|||
11
Kassern
02.08.21
✎
12:38
|
(9) так же есть процедура при создании на сервере, она явно раньше отрабатывает и 1 раз при открытии.
|
|||
12
Kassern
02.08.21
✎
12:39
|
(10) в этом то вся проблема, человек увидел решение через этот обработчик и начал все под него подстраивать (лепить велосипед), ладно хоть глобальный параметр не замутил для этой формы или какой нить виндовый комобъект для отслеживания открытых форм)
|
|||
13
SeiOkami
02.08.21
✎
12:44
|
(9),
Во-первых, это не так оптимально. Во-вторых, при открытии мы имеем соединенные пользовательские настройки со стандартными (зашитыми в конфигурации). Для того, чтобы отличать стандартные настройки от пользовательских, есть свойство ИспользуютсяСтандартныеНастройки. Но оно доступно только в ПередЗагрузкойПользовательскихНастроекНаСервере В-третьих, если нужно отлавливать события в ПередЗагрузкойПользовательскихНастроекНаСервере() и часть действий выполнять при открытии, часть при нажатии кнопки, а часть и там и там, то легче уже использовать признак ФормаОткрыта |
|||
14
SeiOkami
02.08.21
✎
12:44
|
(11), в ПриСозданииНаСервере нет ещё пользовательских настроек. Они будут дальше в ПередЗагрузкойПользовательскихНастроекНаСервере()
|
|||
15
SeiOkami
02.08.21
✎
12:45
|
Я просто думал, что есть ещё какой-то способ на сервере определить, что форма была открыта. Но придется через реквизит
|
|||
16
acht
02.08.21
✎
12:45
|
(13) Вызови в конце своего обработчика УстановитьДействие(что-то там, Неопределено) и не парь людям мозг.
|
|||
17
SeiOkami
02.08.21
✎
12:46
|
(16), к чему это вообще и как это мне поможет?
|
|||
18
Kassern
02.08.21
✎
12:48
|
(13) вы хотите сказать, что при создании на сервере у вас нет возможности очистить пользовательские настройки динамического списка?
Почитайте эти темы: Удалить пользовательские отборы в динамическом списке https://infostart.ru/1c/articles/520593/ |
|||
19
SeiOkami
02.08.21
✎
12:51
|
(18),
Во-первых, мне не нужно очистить, а нужно снять флаги использования. То есть доработать настройки. Во-вторых, как раз то, что вы предлагаете - жуткий костыль. Оперировать хранилищами настроек вместо того, чтобы просто использовать штатные события. Не, лучше "ФормаОткрыта" =) |
|||
20
acht
02.08.21
✎
12:56
|
(17) Твой обработчик отработает ровно один раз - при первом выполнении. После этого отключится и при загрузке настроек пользвателем неичего не будет очищать.
Хотя да, если начальных настроек нет, то он не позовется и убъет первые настройки, загруженные пользователем. |
|||
21
TormozIT
гуру
02.08.21
✎
13:54
|
https://infostart.ru/1c/articles/1207330/
Функция ЭтоВызовПослеОткрытияФормы(ЭтаФорма) Экспорт Возврат Не ЭтаФорма.Параметры.Свойство("ТолькоПросмотр"); КонецФункции |
|||
22
SeiOkami
03.09.21
✎
14:51
|
(21), то есть, у любой формы в параметрах ПриСозданииНаСервере() обязательно будет свойство "ТолькоПросмотр", а потом обязательно оно пропадет (при открытии)?
|
|||
23
TormozIT
гуру
03.09.21
✎
18:57
|
(22) да
|
|||
24
polosov
03.09.21
✎
18:59
|
(23) Это документированная фича?
|
|||
25
acht
03.09.21
✎
19:45
|
(24) Все неключевые параметы формы видны только при ее создании. Остается выбрать из них тот, который будет существовать у формы любого типа.
|
|||
26
Ненавижу 1С
гуру
03.09.21
✎
19:57
|
(21) а если форму закрыть?
|
|||
27
acht
04.09.21
✎
10:32
|
(21) А вообще...
Вывод: Форма открыта Да результат Да Форма открыта Нет результат Да Что-то тут не так =) |
|||
28
acht
04.09.21
✎
10:56
|
А вывод сообщений я в неверном порядке скопировал, да...
Но это не отменят факт того, что результат вызова метода всегда Истина |
|||
29
acanta
04.09.21
✎
11:00
|
А какой результат вы ожидали? По умолчанию форма должна быть в режиме редактирования?
|
|||
30
acht
04.09.21
✎
11:48
|
(29) > форма должна быть в режиме редактирования
Это к чему? |
|||
31
TormozIT
гуру
04.09.21
✎
23:20
|
(27) Да. Строго говоря это - проверка, что форма создана, т.е. событие ПриСозданииНаСервере отработало. Конечно правильнее будет назвать эту функцию ЭтоВызовПослеСозданияНаСервере, но тогда ее назначение будет менее очевидным.
Например в обработчиках ПередЗагрузкойДанныхИзНастроекНаСервере() ПриЗагрузкеДанныхИзНастроекНаСервере() тоже уже не будет неключевых параметров как ты правильно заметил. |
|||
32
Ненавижу 1С
гуру
04.09.21
✎
23:29
|
В общем к сожалению есть только два сценария и надо выбрать подходящий:
1. Малый - просто передаем ЭтаФорма.Открыта() как параметр в серверный метод 2. Большой - создаем булев реквизит ФормаОткрыта и заполняем его в событиях ПриОткрытии/ПриЗакрытии |
|||
33
TormozIT
гуру
04.09.21
✎
23:32
|
(31) А нет. Зря я поддался вере в документацию. Проверил сейчас еще раз. Все таки неключевые параметры удаляются не сразу после события ПриСозданииНаСервере, а именно при первой передачи формы на клиент. Таким образом название функции в (21) корректное. И кстати функция чисто серверная. На клиенте она лишена смысла, т.к. там неключевых параметров не бывает.
|
|||
34
TormozIT
гуру
04.09.21
✎
23:35
|
(27) Ну на клиенте то проверить, что форма открыта, легко - Открыта(). Поэтому непонятно, зачем ты мою серверную функцию туда примерять стал.
|
|||
35
серый КТУЛХУ
05.09.21
✎
00:37
|
открыта она в этом же сеансе или открыта ли она в любом сеансе?
|
|||
36
Ненавижу 1С
гуру
05.09.21
✎
11:51
|
(35) это как? Форма она внутри сеанса живёт вроде
|
|||
37
SeiOkami
24.09.21
✎
10:53
|
Таааак...
Я сначала обрадовался и переделал свой код на Форма.Параметры.Свойство("ТолькоПросмотр"); А теперь ещё раз зашёл и прочитал новые сообщения 😅 Выходит, что такой код показывает не что форма уже открыта, а что она уже создана и передана на клиент? |
|||
38
TormozIT
гуру
24.09.21
✎
20:54
|
(37) Так точно. На клиент надо проверять через Открыта(), а на сервере через Форма.Параметры.Свойство("ТолькоПросмотр")
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |