|
Как в управляемой форме отследить, что был хотя бы один серверный вызов | ☑ | ||
---|---|---|---|---|
0
TormozIT
гуру
14.10.21
✎
16:41
|
Есть в модуле упр. формы процедура, которая зовется много раз. Нужно внутри нее универсально определить, был ли хотя бы один контекстный серверный вызов с прошлого выполнения этой процедуры.
Можно добавлять переменные модуля и реквизиты формы. Как решить такую задачу? |
|||
1
Ненавижу 1С
гуру
14.10.21
✎
16:47
|
(0) то есть вызов с клиента? потому что я не понимаю, как с клиента можно одну и туже процедуру вызвать и контекстно и внеконтекстно
|
|||
2
TormozIT
гуру
14.10.21
✎
16:48
|
Процедура клиентская конечно.
|
|||
3
Kassern
14.10.21
✎
16:49
|
(1) вручную тыкая на кнопочку)
|
|||
4
RomanYS
14.10.21
✎
16:50
|
(0) вроде работает
&НаСервере Процедура Команда1НаСервере() КонецПроцедуры &НаКлиенте Процедура Команда1ВЫзов(Команда) Команда1НаСервере(); КонецПроцедуры &НаСервереБезКонтекста Процедура КомандаБезКонеткстаНаСервере() КонецПроцедуры &НаКлиенте Процедура КомандаБезКонеткста(Команда) КомандаБезКонеткстаНаСервере(); КонецПроцедуры &НаКлиенте Процедура Команда2Вызова(Команда) Команда1НаСервере(); Команда1НаСервере(); КонецПроцедуры #Если Сервер Тогда СчетчикСервер = СчетчикСервер + 1; #КонецЕсли #Если Клиент Тогда СчетчикКлиент = СчетчикКлиент + 1; #КонецЕсли |
|||
5
Garykom
гуру
14.10.21
✎
16:55
|
(0) долго объяснять но то что ты хочешь изврат
и тему в которой спрашивал не могу найти |
|||
6
mikecool
14.10.21
✎
16:56
|
(4) счетчики срабатывают при выполнении команд? оО
|
|||
7
RomanYS
14.10.21
✎
16:57
|
(6) Да, только на контекстные вызовы
|
|||
8
RomanYS
14.10.21
✎
16:57
|
+(7) клиентский только при создании
|
|||
9
TormozIT
гуру
14.10.21
✎
16:59
|
Платформа счетчик серверных вызовов в управляемой форме внутри ведет. Но доступа к нему в объектной модели нет.
ФОрма у меня большая и кода много. Все серверные вызовы в ней искать долго, если идти в строну везде явно какой то флаг/счетчик менять, и главное потом кто то вставит новый серверный вызов без такого сервисного кода. |
|||
10
RomanYS
14.10.21
✎
17:02
|
(9) смотри тест в (4)
Тебе нужно только реквизит формы и #Если Сервер Тогда СчетчикСервер = СчетчикСервер + 1; #КонецЕсли |
|||
11
TormozIT
гуру
14.10.21
✎
17:03
|
(4) Попробую.
|
|||
12
acht
14.10.21
✎
17:05
|
(4) Интересно. А неявные вызовы ловятся, через изменение какого-нибудь заголовка элемента формы, не пробовал?
|
|||
13
mikecool
14.10.21
✎
17:07
|
(7) не понятно, почему так отрабатывает
|
|||
14
pechkin
14.10.21
✎
17:08
|
(13) форма создается каждый раз
|
|||
15
mikecool
14.10.21
✎
17:10
|
(14) а реквизиты формы не очищаются?
|
|||
16
TormozIT
гуру
14.10.21
✎
17:10
|
(14) Не форма, а модуль инициируется при каждом контекстном вызове
|
|||
17
Ненавижу 1С
гуру
14.10.21
✎
17:10
|
+(14) фактически это два разных типа: "ФормаНаКлиенте" и "ФормаНаСервере"
|
|||
18
RomanYS
14.10.21
✎
17:11
|
(12) А как их гарантировано получить. Такой код счетчик не изменил
&НаКлиенте Процедура КомандаНеЯвно(Команда) Заголовок = "Тест" + СчетчикСервер; Элементы.Команда1.Заголовок = ""+СчетчикСервер КонецПроцедуры |
|||
19
pechkin
14.10.21
✎
17:11
|
(16) ну так он инициируется потому что форма создается. иначе зачем?
|
|||
20
TormozIT
гуру
14.10.21
✎
17:12
|
(4) Подтверждаю. Способ решает задачу. Спасибо.
|
|||
21
pechkin
14.10.21
✎
17:12
|
получается из-за этого все эти формы и тормозят
|
|||
22
H A D G E H O G s
14.10.21
✎
17:13
|
(21) Да ладно! :-)
|
|||
23
H A D G E H O G s
14.10.21
✎
17:13
|
(20) Сам хочешь на сервер часть контекста передавать?
|
|||
24
H A D G E H O G s
14.10.21
✎
17:14
|
(20) Через внеконтекстные
|
|||
25
pechkin
14.10.21
✎
17:15
|
(22) ну так вроде 1с обещали что оптимизировали там что-то.
я думал что создание каждый раз это первый пункт на оптимизацию. и давно уже сделано |
|||
26
Ненавижу 1С
гуру
14.10.21
✎
17:16
|
(18) например такое:
ТаблицаФормы (FormTable) ВысотаПодвала (FooterHeight) Использование: Чтение и запись. Описание: Тип: Число. Содержит высоту подвала таблицы в строках. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер. >>>>>>>>>>>>>>>>>>>>>>>>Изменение свойства на клиенте требует обращения к серверу. |
|||
27
Ненавижу 1С
гуру
14.10.21
✎
17:17
|
(25) а что там оптимизировать можно, если серверный контекст не сохраняется между вызовами?
|
|||
28
TormozIT
гуру
14.10.21
✎
17:17
|
Задача (0) родилась как средство борьбы с аварийным завершением приложения при обращении к переменной, куда помещено окно веббраузера Браузер=Форма.Элементы.ПолеHTML.Документ.defaultView.
После серверного вызова даже проверка "Браузер = 0" вызывает аварийное завершение (8.3.17). С помощью проверки "был ли серверный вызов", я без чтения значения проблемной переменной (испорченного объекта браузера) сразу понимаю, что его надо заменить ссылкой на живой объект браузера. А само кэширование этого объекта потребовалось для ускорения работы кода, который часто обращается к функциям Javascript. |
|||
29
pechkin
14.10.21
✎
17:18
|
(27) ну данные то где-то лежат
|
|||
30
Ненавижу 1С
гуру
14.10.21
✎
17:20
|
(29) на клиенте они лежат, вызвали сервер - отправили данные формы на сервер, потом обратно
|
|||
31
pechkin
14.10.21
✎
17:23
|
(30) не все так просто. а как же табличные документы, которые отображаются по мере прокрутки?
|
|||
32
Garykom
гуру
14.10.21
✎
17:23
|
(28) как и предполагал это изврат
|
|||
33
pechkin
14.10.21
✎
17:23
|
или табличные части документов?
|
|||
34
Ненавижу 1С
гуру
14.10.21
✎
17:24
|
(33) табличные части документов ВСЕ отправляются на клиента полностью, имхо
|
|||
35
Garykom
гуру
14.10.21
✎
17:25
|
(34) неа, только те поля в списке для формы
|
|||
36
RomanYS
14.10.21
✎
17:26
|
(26) (12) Ага, работает
&НаКлиенте Процедура КомандаНеЯвно(Команда) Элементы.ТЗ.ВысотаПодвала = СчетчикСервер; КонецПроцедуры |
|||
37
pechkin
14.10.21
✎
17:26
|
(34) H A D G E H O G s не даст соврать, что это не так
|
|||
38
Ненавижу 1С
гуру
14.10.21
✎
17:26
|
(35) про поля надо подумать, но строки же точно все?
|
|||
39
Ненавижу 1С
гуру
14.10.21
✎
17:26
|
(37) надо доказательства
|
|||
40
Garykom
гуру
14.10.21
✎
17:27
|
(28) >переменной, куда помещено окно веббраузера Браузер=Форма.Элементы.ПолеHTML.Документ.defaultView.
Можно объяснить в чем смысл "кэширования"? И за счет чего происходит "ускорения работы кода, который часто обращается к функциям Javascript"? |
|||
41
pechkin
14.10.21
✎
17:27
|
(34) и даже 1с рекомендует обрабатывать большие тч на сервере, а не на клиенте.
даже если там серверного кода нет |
|||
42
Ненавижу 1С
гуру
14.10.21
✎
17:28
|
(41) что-то в прошлый раз я на этои же форуме читал обратное, о слишком увлекающихся на сервере
|
|||
43
pechkin
14.10.21
✎
17:31
|
||||
44
Garykom
гуру
14.10.21
✎
17:35
|
(43) что еще хуже он может базу в случае реально много строк в ТЧ дергать несколько раз
|
|||
45
Garykom
гуру
14.10.21
✎
17:36
|
(44)+ самый оптимальный вариант это ТЧ в ТЗ не сервере, обработать и обратно целиком в ТЧ походу
|
|||
46
Garykom
гуру
14.10.21
✎
17:36
|
(45) *на сервере
|
|||
47
Fragster
гуру
14.10.21
✎
17:38
|
может быть можно как-то использовать сайд эффект ПоместитьВоВременноеХранилище в сочетании с (4) Если параметр не указан, помещенное значение будет удалено после очередного запроса сервера из общего модуля, при контекстном и неконтекстном серверном вызове из формы, при серверном вызове из модуля команды или при получении формы. а хранить УИ можно в параметре сеанса, например.
|
|||
48
Fragster
гуру
14.10.21
✎
17:38
|
(34) нет
|
|||
49
Fragster
гуру
14.10.21
✎
17:39
|
(47) хранить УИ = передавать адрес в серверный контекст
|
|||
50
Fragster
гуру
14.10.21
✎
17:40
|
хотя блин, это и так требует серверного вызова )
|
|||
51
TormozIT
гуру
14.10.21
✎
18:46
|
(40) Смысл кэширования - сохранять результат долгой операции в разрезе входных параметров. В данном случае долгой была операция ".defaultView".
|
|||
52
Garykom
гуру
14.10.21
✎
20:53
|
(51) долгая это в смысле в цикле что ли дергаешь?
может просто переписать без цикла, сразу все данные отправлять? |
|||
53
volfy
14.10.21
✎
21:07
|
Спасибо (4), реально не знал что так сработает.
|
|||
54
TormozIT
гуру
14.10.21
✎
22:37
|
(52) Предлагаешь переписать 5000 строк кода, чтобы было все "красиво и правильно" вместо 3-х? Это выглядит несколько нерационально.
|
|||
55
ДедМорроз
14.10.21
✎
23:30
|
Так с клиента можно вызвать общий модуль на сервере,с галочкой вызов сервера - на сервер будет переход,и даже передача параметров сеанса,но отследить это очень проблематично.
|
|||
56
TormozIT
гуру
15.10.21
✎
00:24
|
(55) Не понял, кому ты отвечаешь. Но если мне, то ты пропустил слово "контекстный".
|
|||
57
Garykom
гуру
15.10.21
✎
00:30
|
(54) Угу вместо того чтобы надеяться на незадокументированные возможности
Запросы в цикле тоже можно делать а потом удивляться что тормозит да |
|||
58
ДедМорроз
16.10.21
✎
14:21
|
Контекстный вызов и вызов с передачей контекста (при обновлении формы) это немного разные вещи.
И отловить контекстный вызов без выхова функции модуля все равно,что ловить безконтекстный. |
|||
59
pechkin
16.10.21
✎
14:44
|
(58) в чем разница?
|
|||
60
TormozIT
гуру
16.10.21
✎
19:00
|
В любом случае модуль формы инициируется на сервере, если она туда приехала.
|
|||
61
Kesim
19.10.21
✎
14:18
|
(0) Стек вызовов и замер производительности не предлагать?
|
|||
62
polosov
19.10.21
✎
14:21
|
(61) Речь про рантайм, наверное.
|
|||
63
pechkin
19.10.21
✎
14:34
|
только вот интересно почему клиентская переменная умирает при вызове сервера?
|
|||
64
dmpl
19.10.21
✎
14:41
|
(16) Это в любой следующей версии платформы может поломаться.
|
|||
65
polosov
19.10.21
✎
14:45
|
(63) Ты про что?
Если ты в модуле объявил клиентскую переменную, и присвоил ей значений в событии, то при переходе на сервер и обратно она не меняется. Проблема может возникнуть, если ты инициализируешь переменную в модуле (вне событий). |
|||
66
pechkin
19.10.21
✎
14:46
|
(65) ну у тс же умирает. правда умирает как то по странному
|
|||
67
dmpl
19.10.21
✎
14:49
|
+(64) Логичнее очищать на сервере испорченный объект. Тогда не будет вылета платформы.
|
|||
68
polosov
19.10.21
✎
14:51
|
(66) Возможно при возвращении с сервера ПолеHTML переинициализируется и данные в переменной протухают.
|
|||
69
TormozIT
гуру
19.10.21
✎
14:52
|
(66) Это же webKit, огромный объект с кучей еще не выловленных багов. Вот один из его дочерних объектов по прямой ссылке портится после возврата из контекстного вызова, но он же по динамической (долгой) ссылке работает корректно.
|
|||
70
dmpl
19.10.21
✎
14:53
|
(68) Возможно проблема в сериализации/десериализации мутабельного значения.
|
|||
71
polosov
19.10.21
✎
14:54
|
(70) Оно бы поругалось. Скорее всего сам WebKit режет данные, а платформа об этом не знает (не генерируется исключений)
|
|||
72
dmpl
19.10.21
✎
14:58
|
(71) А вот не факт. Тогда придется вообще поле HTML запретить. Ведь есть же скрипты, которые могут его поменять, в т.ч. пока идет вызов на сервере.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |