Имя: Пароль:
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) Дак тогда я буду вынужден это делать каждый раз, при открытии формы, что не является кэшем на время сеанса.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn