Имя: Пароль:
1C
 
Можно ли событию элемента формы назначить обработчик из внешнего модуля?
0 Гений 1С
 
гуру
12.11.07
17:39
В РТФМе сказано, что вроде можно...
А как.
Элемент.УстановитьДействие(<Событие>, Новый Действие("ОбщийМодуль1.Функция1") ) не прокатывает - пишет недопустимый символ (точка)? Как быть?


Действие (Action)
Действие (Action)
Конструкторы:
Основной

Описание:
Предназначен для получения действия, которое можно назначить в качестве обработчика события элемента управления или команды пользовательского интерфейса.
Для обработки события может быть вызвана процедура или функция модуля формы, модуля приложения или общего модуля, имя которой задано в конструкторе.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения. Сериализуется.
Пример:
// В модуле описана процедура Сформировать(), выполнение которой
// назначим кнопке "Сформировать" в качестве действия при нажатии
ОбработкаНажатия = Новый Действие("Сформировать");
КнопкаСформировать = ЭлементыФормы.КнопкаСформировать;
КнопкаСформировать.УстановитьДействие("Нажатие", ОбработкаНажатия);
См. также:
КнопкаКоманднойПанели, свойство Действие
Расширение элементов управления, расположенных в форме, метод ПолучитьДействие
Форма, метод ПолучитьДействие
Форма, метод УстановитьДействие
КнопкиКоманднойПанели, метод Добавить
КнопкиКоманднойПанели, метод Вставить
Расширение элементов управления, расположенных в форме, метод УстановитьДействие
Форма, метод УстановитьДействие
Расширение элементов управления, расположенных в табличном поле, метод ПолучитьДействие
Расширение элементов управления принадлежащих табличному документу, метод ПолучитьДействие
Расширение элементов управления, расположенных в табличном поле, метод УстановитьДействие
Расширение элементов управления принадлежащих табличному документу, метод УстановитьДействие
1 ТелепатБот
 
гуру
12.11.07
17:39
2 перцептрон
 
12.11.07
17:42
(0) значит убери точку и добавь к функции экспорт
3 Гений 1С
 
гуру
12.11.07
17:45
(2) точку убрал - пишет нет такой функции. Экспорт стоит, я же гений, а не чайник...
4 TormozIT
 
гуру
12.11.07
17:51
Гений, уже сто раз обсуждалось, не меньше)
НЕЛЬЗЯ
5 перцептрон
 
12.11.07
17:54
(3) Попробуй ПолучитьДействие() нужной тебе формы
6 TormozIT
 
гуру
12.11.07
17:55
Выход один - полностью динамические формы, свой редактор форм.
Редактор сохраняет декларативное описание формы и обработчиков в служебный справочник. Движок форм - одна форму-болванка, где прописаны все возможные обработчики событий и из которой обработка событий будет следовать по настраиваемому пути. Идею я почти продумал, но времени на реализацию много уйдет.
7 TormozIT
 
гуру
12.11.07
17:57
Но через год уже будет управляемое приложение и, если даже нельзя будет назначать внешние обработчики событий, то на порядок легче будет написать (6). Так что нечего рыпаться. Будем ждать...
8 Гений 1С
 
гуру
12.11.07
17:57
(6) Не, выходы есть и другие...
(4) я тоже думал нельзя, но ведь в РТФМ написано? или это только для интерфейсов можно?
(5) Где бы взять такую форму?
9 TormozIT
 
гуру
12.11.07
18:04
Логически мысля, -

У события ПриОткрытии формы нет параметров.
Если такому событию назначить обработчик извне, то невозможно будет обратиться к контексту той формы, в которой возникло событие. Смысла нет в таком обработчике.
10 Гений 1С
 
гуру
12.11.07
18:09
(9) Гыгыгы, а если первый параметр - контекст формы? Логика не прокатывает...
11 Гений 1С
 
гуру
12.11.07
18:10
надо бы на партнерском спросить... а то пишут РТФМы сам Нуралиев ногу сломит...
12 TormozIT
 
гуру
12.11.07
18:11
(10) Мы же ведем речь о текущей версии платформы.

Форма.ПриОткрытии (Form.OnOpen)
Форма (Form)
ПриОткрытии (OnOpen)
Синтаксис:
ПриОткрытии()
Описание:
Возникает при открытии формы, до показа окна пользователю.
Примечание:
В обработчике события отказаться от открытия формы нельзя.


Здесь нет такого параметра
13 Гений 1С
 
гуру
12.11.07
18:12
(12) Но это не значит, что его не может быть в обработчике, который в общем модуле. В общем понимаешь, меня смутило то что в РТФМ описано, что процедура может быть и в общем модуле, но думается, это касается только интерфейсов...
14 TormozIT
 
гуру
12.11.07
18:14
(13) Да, старая "фича" справки. Неоднозначность, которую приходится разрешать опытным путем.
15 Гений 1С
 
гуру
12.11.07
18:17
(14) Ну в данном случае фиг поймеш, как опытом проверить...
16 Гений 1С
 
гуру
12.11.07
18:17
разве что взять действие из пункта меню интерфейса...
17 перцептрон
 
12.11.07
18:20
(8) ОбщиеФормы?
Или тебе нельзя менять конфу?
18 Гений 1С
 
гуру
12.11.07
18:22
(17) конфу менять то можно, я же хочу обработчик в общий модуль вставить, пофиг общая или не общая - не дает создать действие, как его создать то? По идее было бы логично, если бы действие можно было бы создать, Но нельзя было бы его назначить форме, а так я не могу его даже создать, во!
19 Гений 1С
 
гуру
12.11.07
18:26
Вот пишу:
Д=Новый Действие("ГУИД.обГУИДМаркерКартинокВHTML");
ГУИД.обГУИДМаркерКартинокВHTML - у меня есть такая функция без параметров, экспорт
пишет:
неверное имя процедуры! Имя процедуры должно состоять из одного слова, начинаться с буквы и не одержать специальных символов, кроме _
20 Гений 1С
 
гуру
12.11.07
18:31
Все, фишку просек.

Пишу:
Д=Новый Действие("обГУИДМаркерКартинокВHTML");

Работает.

Далее пишу:

ЭтаФорма.УстановитьДействие("ПриЗакрытии", Д);

Пишет: Недопустимое значение параметра 2 (в модуле формы отсутствует процедура с таким именем).

Отсюда мораль - сабж невозможен, мдя....
21 перцептрон
 
12.11.07
18:39
(18) я думаю Действие() можно создать только из набора процедур текущего контекста (того в котором пытаешься создать)
22 Валерыч
 
13.11.07
02:33
судя по точкам в ссылках на процедуры:
а) платформыа 8.1
б) общий модуль не является глобальным
Я еще не телепат но учусь :)))
а не пробовал объявить общий модуль глобальным?
23 Гений 1С
 
гуру
13.11.07
10:09
(21) Нет, как видишь, действие можно создать и со ссылкой на глобальную процедуру.

(22) А что это меняет? Я могу создать любое действие, но при попытке его назначить форме мне выдается ошибка - в форме нет процедуры с таким именем, что явно намекает на то, что обработчик событий должен быть в форме (8.1)
24 перцептрон
 
13.11.07
13:11
(23) да, но назначить его другому контексту не получилось
25 asady
 
13.11.07
13:39
(6) +1 полностью согласен.
будущее за динамическим интерфейсом.

у меня даже заготовочка есть - пытался создать конфу с полностью динамическими формами - но блин времени на эту самодеятельность нет катастрофически - а на работе такое не приветствуют им результат подавай.
26 Гений 1С
 
гуру
13.11.07
13:46
(25) А у меня по крайней мере вложенные формы УЖЕ работают. ;-)