Имя: Пароль:
1C
1С v8
Как корректно программно вызвать обработчик события другой формы?
0 napagokc
 
01.08.12
12:34
В модуле формы, событие в которой хочу вызвать, добавил процедуру:

Процедура ВыполнитьИзвне(пВыражение) Экспорт
   Выполнить(пВыражение);
КонецПроцедуры // ВыполнитьИзвне()

Вызвать хочу событие "ПриВыбореТовара(Элемент)"
В модуле совершенно другого объекта пишу:

ДокФорма = Док.ПолучитьФорму();
//...
пВыражение = "ПриВыбореТовара(" + ТутЧтоТоДолжноБыть + ")";
ДокФорма.ВыполнитьИзвне(пВыражение);

Вот что должно быть, вместо "ТутЧтоТоДолжноБыть", поделитесь опытом? По отладчику там должно быть Поле ввода формы, событие которой я пытаюсь вызвать. Какой параметр я должен передать, чтобы все корректно работало? Сейчас пишет:
Переменная не определена (ТутЧтоТоДолжноБыть)
ПриВыбореТовара(<<?>>ТутЧтоТоДолжноБыть)

Я так понимаю, что если это поле ввода в самом обработчике нигде не используется, то можно вообще левое поле ввода туда передать. Только не понял, как это сделать? Ну, и это, конечно, читерство, попытка выкрутиться из ситуации. Мне бы хотелось сделать грамотно, если уж задаю тут вопрос. Мистяне ведь знают ВСЁ. Даже 1С )))
1 napagokc
 
01.08.12
12:35
(0) Ах, да. 1С8.2
2 alextom81
 
01.08.12
12:39
Никак. (Если я правильно понял задачу) - На старте долго пытался программно добавить кнопки в формы - и уткнулся в то, что обработчик элемента формы должен быть прописан в самом модуле формы. Либо в модуле формы вызываться экспортная процедура из других модулей. Но обработчик - только в форме. Из модуля формы тебе будут доступны только экспортные процедуры и функции, насколько я понимаю
3 napagokc
 
01.08.12
12:45
(2) Так у меня все так и сделано.
Попробую пояснить более подробно на примере...

Есть форма какого-то документа (условно: ДокФорма), там есть уже реализованные обработчики событий, в том числе и "ПриВыбореТовара(Элемент)".
Я из модуля объекта совершенно другого объекта (простите за тавтологию) пытаюсь вызвать этот обработчик события. Для этих целей в модуле формы ДокФорма я создал экспортную процедуру "ВыполнитьИзвне(пВыражение)", которая, согласно справке, "Позволяет выполнить фрагмент кода, который передается ему в качестве строкового значения" (это описание к методу "Выполнить"). И все хорошо, но ругается на передаваемый параметр... Проблемы только с ним.
4 napagokc
 
01.08.12
12:51
Я, как и написал в (0), считерил и подставил вместо параметра события "ПриВыбореТовара" просто левое поле ввода той же формы. Все отработало корректно, т.к. этот параметр внутри обработчика события нигде не использовался. Но все равно я понимаю, что я что-то не так сделал. Если кто-то все же знает как достучаться до нужного параметра, напишите, плз. Спасибо.
5 anddro
 
01.08.12
13:00
Оповестить() ?
6 TormozIT
 
гуру
01.08.12
13:02
Попробуй это http://infostart.ru/public/16985/
7 Rovan
 
модератор
01.08.12
13:07
(3) если у тебя в "ПриВыбореТовара(Элемент)".
сам Элемент роли не играет, то ТутЧтоТоДолжноБыть пусть = 0
8 anddro
 
01.08.12
13:10
(6) а вот это лишнее. В принципе путь, когда одна форма меняет непосредственно данные другой формы, это порочно, т.к. это потенциальный источник ошибок. Взаимодействие между формами реализуется через Оповестить() и ОбработкаОповещения.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.