Имя: Пароль:
1C
 
Как получить ПутьКДанным элемента в ОбщемМодуле?
,
0 Mr-FReSH
 
22.08.23
09:10
Доброго времени суток, господа!
Есть задача по централизованной инициализации форм документов.
Если простыми словами при открытии формы документа вызывается процедура инициализации из общего модуля.
В чем проблема. Есть клиентская глобальная переменная, которая хранит в себе данные по всем путям к данным на формах документов.
Заполняется эта переменная 1 раз при первом входе в документ, чтобы делать меньше серверных вызовов.

Вопрос. Как централизованно (в общем модуле) можно получить пути к данным элементов форм?
1 RomanYS
 
22.08.23
09:22
Для Каждого Элемент Из Форма.Элементы Цикл...
...Элемент.ПутьКДанным...
2 Mr-FReSH
 
22.08.23
09:26
(1) Я уточню.

С клиента проверяется заполненность клиентской глобальной переменной, если она не заполнена требуется вызов процедуры заполнения.
С клиента на сервер централизованно. Я вижу решение в вызове серверной процедуры с контекстом, которая обращается в общий серверный модуль и передает туда форму, а там уже все как вы описали. Вопрос в другом. Могу ли я обойтись без этой процедуры и с клиента сразу вызывать серверную процедуру, в которой будут доступны пути к  данным элементов?
3 Mr-FReSH
 
22.08.23
09:28
речь идет о вызове процедуры из общего модуля через серверную процедуру с формы документа
4 Мультук
 
гуру
22.08.23
09:31
(3)

вы про это ?

&НаКлиенте
Процедура ОбновитьВсякое()
     ОбновитьВсякое_КотораяНеНужна()
КонецПроцедуры

&НаСервере
Процедура ОбновитьВсякое_КотораяКакБыНеНужна()
    МойОбщийМодуль.ОбновитьВсякое(ЭтаФорма);
КонецПроцедуры
5 Mr-FReSH
 
22.08.23
09:32
(4) Да, могу ли я в этой схеме  избавиться от процедуры ОбновитьВсякое_КотораяКакБыНеНужна() ?
6 Мультук
 
гуру
22.08.23
09:40
(5)


&НаКлиенте
Процедура ОбновитьВсякое()
     ОбщийМодульКлиент.ОбновитьВсякое(ЭтаФорма);
КонецПроцедуры


В "ОбщийМодульКлиент" стоит флажок Клиент. Весь разбор формы и ее элементов делается "НаКлиенте".

Если вы можете всё это сделать "НаКлиенте", то делайте.

Сорри, включать мозг и думать "а можно ли, и какие там еще есть внезапные проблемы" я в настоящий момент не хочу / не могу.
7 RomanYS
 
22.08.23
09:46
(6) на клиенте не доступен ПутьКДанным, поэтому так не получится
8 RomanYS
 
22.08.23
09:49
(0) что ты пытаешься сэкономить непонятно, для применения всех настроек достаточно одно серверного вызова. Точнее даже дополнительных вызовов не требуется, если сделать все в ПриСоздании
9 Mr-FReSH
 
22.08.23
09:56
(8) Как ты поместишь данные в клиентскую переменную, если все получишь при создании на сервере?
10 Mr-FReSH
 
22.08.23
09:56
(7) в этом и вопрос
11 Mr-FReSH
 
22.08.23
09:56
(6) на клиенте недоступно свойство элемента "ПутьКДанным"
12 RomanYS
 
22.08.23
10:01
(9) Не очень понятно зачем тебе это на клиенте. А решение возможно: на сервере можно добавить реквизиты <формы> и засунуть туда структуру (или даже ТЗ) с описаниями элементов
13 Mr-FReSH
 
22.08.23
10:04
(12) я пытаюсь делать больше вещей на клиенте и меньше на сервере, потому что он занят более нужными вещами.
А то что ты предлагаешь не получится, потому что с сервера ты  не сможешь понять, заполнена ли клиентская константа, для того чтобы лишний раз не формировать данные с описанием элементов, потому что в рамках одного сеанса они не меняются.

Условно я хочу сделать кэш путей элементов формы на время сеанса.
14 RomanYS
 
22.08.23
10:07
(13) вот в (12) ровно это и описано "сделать кэш путей элементов формы на время сеанса". И делается это при создании без дополнительных вызовов сервера.
Только что ты будешь делать с этим кэшем на клиенте непонятно
15 Mr-FReSH
 
22.08.23
10:15
(14) ну тогда остается только идти по пути (4)

У меня на форме очень много строковых полей, от документа к документу они повторяются, и я делаю механизм готовых фраз.
на форме есть отслеживание текущего элемента и в правой части все возможные варианты заполнения (или части варианта),
при выборе текста из таблицы в реквизит формы нужно вставить содержимое, для этого нужны пути к данным. Чтобы каждый выбор не делать серверный вызов, я делаю кэш...
16 Mr-FReSH
 
22.08.23
10:17
Как вы понимаете готовые фразы заполняют сами пользователи, и их может быть много, а также нужна возможность комбинировать разные фразы.
17 Mr-FReSH
 
22.08.23
10:18
Потому использовать список выбора невозможно
18 RomanYS
 
22.08.23
10:20
(15) и где создается/заполняется твоя таблица? ... на сервере, и что мешает при её заполнении подменить пути на имена элементов?
19 Mr-FReSH
 
22.08.23
10:22
(18) Фразы должны иметь возможность быть использованы как в конкретном поле, так и в любом поле.
20 RomanYS
 
22.08.23
10:26
(19) для этого ПутьКДанным не нужен
21 Mr-FReSH
 
22.08.23
10:30
(20) Тебе в любом случае нужен путь к данным, для того чтобы заполнять выбранные значения. Имя элемента формы  может отличаться от имени реквизита.
22 RomanYS
 
22.08.23
10:36
(21) в (12) описано как можно получить и хранить на время сеанса связи Имя-ПутьКДанным
23 Mr-FReSH
 
22.08.23
10:40
(22) Дак тогда я буду вынужден это делать каждый раз, при открытии формы, что не является кэшем на время сеанса.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс