Имя: Пароль:
1C
1С v8
Как к програмно добавленному пункту меню добавить обработчик вне формы?
0 Cerera
 
17.06.13
12:17
В УТ при открытии формы каждого документа, вызывается обработка
Процедура УстановитьДоступностьПоляВводаНомера(МетаданныеОбъекта, ФормаОбъекта, ПодменюДействия, ПолеВводаНомера) Экспорт

получающая на вход информацию о контексте формы документа.
Далее, мы добавляем меню на панель основных действий документа.
Как бы нам ещё добавить обработчик на каждый пункт меню так, чтобы это была одна и та же функция,находящаяся в глобальном модуле, чтобы её можно было вызывать из любого документа при выборе любого пункта меню, который мы создали и внутри неё, по идентификатору выбранного пункта, уже выполнять те или иные действия?

Вот код добавления пунктов меню:


   КнопкиКоманднойПанели = _ФормаОбъекта.ЭлементыФормы.ДействияФормы.Кнопки;
   //// Проверить, нет ли уже на командной панели кнопки "Сформировать".
   //// Если есть - удалить.
   Индекс = КнопкиКоманднойПанели.Индекс(КнопкиКоманднойПанели.Найти("Задачи"));
   //
   Если Индекс = -1 Тогда
       Индекс = 0;
   Иначе
       КнопкиКоманднойПанели.Удалить(Индекс);
   КонецЕсли;
   //
   //// Создать подменю "Сформировать".
   ПодменюСформировать = КнопкиКоманднойПанели.Добавить("Задачи", ТипКнопкиКоманднойПанели.Подменю, "Задачи");
   //// Добавить картинку.
   ПодменюСформировать.Картинка = БиблиотекаКартинок.Задача;
   ПодменюСформировать.Отображение = ОтображениеКнопкиКоманднойПанели.НадписьКартинка;
   
   Запрос = Новый Запрос;
   Запрос.Текст="ВЫБРАТЬ
   |    ШаблоныЗадач.Ссылка
   |ИЗ
   |    Справочник.ШаблоныЗадач КАК ШаблоныЗадач";
   Выборка = Запрос.Выполнить().Выбрать();
   //Добавить кнопки к подменю.
   Обработчик = Новый Действие("КнопкаОбработчикЗадач");
   Пока Выборка.Следующий() Цикл
       ШаблонЗадачи = Выборка.Ссылка;
       ПодменюСформировать.Кнопки.Добавить("кн" + ШаблонЗадачи , ТипКнопкиКоманднойПанели.Действие, " " + ШаблонЗадачи.ПолнНаименование, Обработчик);
   КонецЦикла;
1 Cerera
 
17.06.13
12:23
при том если в форму вызываемого документа, я вставляю обработчик

Процедура КнопкаОбработчикЗадач()
   Сообщить("Процедура КнопкаОбработчикЗадач");
КонецПроцедуры

то он вызывается. А как сделать чтоб он не вызывался? не хочу я во все документы прописывать обработчик.
2 mikecool
 
17.06.13
12:24
обработчик по любому должен быть в форме
а вот куда он дальше пошлет - вопрос другой
3 Галахад
 
гуру
17.06.13
12:29
Как вариант. Не очень, правда красивый - внешняя печатная форма.
Подключенная ко всем документам.
4 Cerera
 
17.06.13
12:35
(3)а как же ей воспользоваться?
(2)а как сделать чтобы он принял идентификатор пункта меню?
5 Галахад
 
гуру
17.06.13
12:39
(4) Ключевые слова. форма (одна) ко всем документам.
6 Cerera
 
17.06.13
12:43
наверняка в УТ есть уже обработчик который вызывается при выборе любого пункта меню.
7 Cerera
 
17.06.13
13:03
эх. найти бы куда зацепиться из стандартных функций.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.