Имя: Пароль:
1C
1С v8
Можно ли получить доступ к команде формы из общего модуля?
0 ChAlex
 
05.06.12
14:45
Можно ли организовать доступ к командам или элементам формы в общем модуле на сервере? То бишь доступен ли контекст управляемой формы в общем серверном модуле с установленным признаком вызов сервера? Хотелось бы ряд функций организовать на сервере, что бы не тиражировать их для каждой формы. Например изменение заголовка кнопки команды.
1 Stepa86
 
05.06.12
14:50
дык с сервера передай ЭтаФорма параметром
2 ChAlex
 
05.06.12
15:28
Ну дык вооще-то на сервер надо передать, только на сервер ЭтоФорма - нельзя передать
3 Stepa86
 
05.06.12
16:16
(2) что тебе мешает с сервера на сервер передать?
4 ChAlex
 
05.06.12
16:21
С какого сервера? Речь про модули и управляемые формы. Мне нужно получить на сервере доступ к контексту формы. То бишь есть директивы &НаСервере и &НаСервереБезКонтекста. Если процедуры с директивой &НаСервере находится в модуле формы - то в нее передается контекст формы и как результат в ней доступны все объекты формы. Я что-то нигде в документации не нашел про вызов функция, расположенных на сервере. На сервере вроде тоже процедуры компилируются с директивой &НаСервере. Но вопрос, контекст при этом передается или нет?
5 Stepa86
 
05.06.12
16:28
(4) вот теперь вообще запутался... включаю телепата-

Обработчики команд и событий элементов формы могут вызывать только методына клиенте ( &Наклиенте )

Клиентские методы могут вызывать клиентские, клиентские без контекста, серверные и серверные без контекста

Серверные методы могут вызывать серверные и серверные без контекста

Безконтекстные могут вызывать только другие безконтекстные

В методе &НАСервере контекст формы доступен полностью (который доступен на сервере).
6 ChAlex
 
05.06.12
16:45
(5) -  ну типа и так считал, вернее иного явно не нашел. И так команда вызывается на клиенте (естественно). Далее хочу вызвать серверный метод, написанный в общем модуле, и в этом методе обратиться к команде формы (вернее к свойству команды "Подсказка") поскольку через это свойство, доступное на сервере можно поменять подсказку текста кнопки этой команды, расположенной на форме. Например кнопка (и команда) "Утвердить" - которя располагается во многих формах документов, вот и не хочется в каждом модуле документа писать одно и то же. Казалось все просто - взять и разместить процедуру в общем модуле. Но вот тут и возник то вопрос: а доступен ли контекст формы там? ибо как-то обратиться типа Этаформа. - и т.п. не получается. Передать туда объект "Форма" - тоже. Н
7 Stepa86
 
05.06.12
17:03
&НаКлиенте
Процедура Команда1(Команда)

...

ОбновитьПодсказки();

КонецПроцедуры

&НаСервере
Процедура ОбновитьПодсказки()

некоторыйМодуль.ОбновитьПодсказку( ЭтаФорма );

или

некоторыйМодуль.ОбновитьПодсказку( Команды.МояКоманда );

или

некоторыйМодуль.ОбновитьПодсказку( Элементы.МояКнопка );

или

Элементы.МояКнопка.Подсказка = некоторыйМодуль.ПолучитьПодсказку();

КонецПроцедуры
8 ChAlex
 
05.06.12
17:08
(7) - оп, но тут есть лишний вызов серверной процедуры модуля формы! А как раз ее хотелось и избежать. А напрямую я так понимаю не получится?
9 Stepa86
 
05.06.12
17:09
(8) изменение свойств элементов формы по любому приведет к вызову сервера
10 ChAlex
 
05.06.12
17:12
(9) - Дело не в том. Дело в том что вызов идет по такой схеме: команды на клиенте -> серверная процедура модуля формы - > серверная процедура общего модуля. А возможна ли схема: команды на клиенте -> серверная процедура общего модуля (с доступом к контексту формы)?
11 Stepa86
 
05.06.12
17:14
(10) нет, контекст формы можно передать только клиент-клиент или сервер-сервер
12 ChAlex
 
05.06.12
17:15
(11) :) а как же клиент-сервер модуля формы (контекстный вызов сервера)?
13 ChAlex
 
05.06.12
17:17
Тут 1С опять поставила заборы на ровном месте. Чем такой вызов с точки зрения идеологии и производительности отличается от вызова в модуле формы?
14 Stepa86
 
05.06.12
17:18
(12) когда мы переходим из клиента на сервер в рамках формы, то мы не передаем контекст, он там уже есть. Фактически форма существует только на сервере, и когда в ней чо нить происходит, то она обновляет свое представление на клиенте, а не передает контекст полностью
15 ChAlex
 
05.06.12
17:31
(14) - ну а зачем тогда &НаСервереБезКонтекста? Все-таки что-то да передается,и это что-то и есть контекст (согласен не данные), хотя ко-что объяснимое в этом есть. Ладно, собственно от этого ни легче и не проще. :) Спасибо за дискуссию!
16 Stepa86
 
05.06.12
17:45
(15) &НаСервереБезКонтекста не содержит контекста формы, из него не получится вызвать контекстный метод или написать чтото вроде Элементы.Команда.Заголовок = "Не трогай эту кнопку!!!", это как обращение к методу общего модуля, только расположен он тут же. Вызов таких методов быстрее, потому что не нужно передавать контекст
17 ChAlex
 
05.06.12
18:16
(16) - ну так я о чем :) ваша цитата (14) - ...когда мы переходим из клиента на сервер в рамках формы, то мы не передаем контекст... - это для контекстного вызова, и опять же ваша цитата (16) "...Вызов таких методов быстрее, потому что не нужно передавать контекст.." - для внеконтекстного вызова. :) и там и там вы не хотите передавать контекст, но работают вызовы по-разному. Вы сами себе противоречите :))
18 Stepa86
 
05.06.12
20:53
(17) харош придираться =)

Когда вызываем контекстный сервер с клиента, то форма не передается с клиентской машины на сервер, а уже есть на сервере и метод забирает ее оттуда, при вызове безконтекстного метода этого забирательства не происходит