Имя: Пароль:
1C
 
[8.2] Динамическое меню в УФ
0 Адинэснег
 
13.05.11
09:15
Понятно, что нужно добавлять элементы в группу на форме. Действие - команда. Вот только если несколько кнопок в меню будет, а модуль я могу только одной команды предопределить, то вопрос - как в эту команду передать параметр, чтобы понять которая кнопка была нажата. Раньше (в ординари эпликэйшн) в обработчик (события элемента управления) передавался сам элемент управления (Кнопка), сейчас же обработчик - это обработчик команды, то есть даже имя кнопки мне получается не узнать?
Как реализовать сабж в общем? В типовых мэйби в каком-то месте реализовано?
1 Mitriy
 
13.05.11
09:19
можно создать реквизит формы таблицу, которую и будешь заполнять именами кнопок и параметрами и уже с ними работать в предопределенной процедуре... я как-то так делал...
2 Dem1urg
 
13.05.11
09:19
А что тебе мешает определить для формы нужное количество команд? В 8.2 так устроено, что у кнопки напрямую нет обработчика, есть только команда, а вот у команды уже есть модуль.
3 Адинэснег
 
13.05.11
09:49
>>А что тебе мешает определить для формы нужное количество команд?
ты серьезно?))
4 Stepa86
 
13.05.11
09:55
Динамическое меню в УФ никак не сделать, потому что программно добавлять команды нельзя и в команде узнать из какой кнопки они были вызваны так же нельзя
5 a_alenkin
 
13.05.11
09:57
(2) Где ты видел свой модуль у  команды ФОРМЫ?

(0)
- Создаешь команду, которая имеет уникальное имя - в противном случае будет ошибка указываешь обработчик
- создаешь там где тебе надо кнопку (в подменю), указываешь команду.
- При нажатии на одну из кнопок, хоть обработчик и один:

&НаКлиенте
Процедура ОбработчикТвоихКоманд(Команда)
   Команда.Имя - даст тебе строку, содержащую имя команды
6 a_alenkin
 
13.05.11
09:59
(4) Ты не поверишь - у меня получилось
7 Stepa86
 
13.05.11
10:00
(6) что именно, добавить команду программно или узнать имя кнопки?
8 a_alenkin
 
13.05.11
10:04
&НаСервере
Процедура ЗаполнитьВидыОпераций()
   МассивОпераций = Документы.ПоступлениеТоваровУслуг.ПолучитьВидыОпераций();
   Для Каждого ВидОперации Из МассивОпераций Цикл
       НоваяКоманда = Команды.Добавить(ВидОперации.Наименование);
       НоваяКоманда.Действие  = "ВыборВидаОперации";
       НоваяКнопка = Элементы.Добавить(ВидОперации.Наименование, Тип("КнопкаФормы"), Элементы.МенюОперация);
       НоваяКнопка.Заголовок = ВидОперации.Заголовок;
       НоваяКнопка.ИмяКоманды = ВидОперации.Наименование;
   КонецЦикла;
КонецПроцедуры



&НаКлиенте
Процедура ВыборВидаОперации(Команда)
   Если ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации." + Команда.Имя) = Объект.ХозяйственнаяОперация Тогда
       Возврат;
   КонецЕсли;
   Модифицированность = Истина;
   Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации." + Команда.Имя);
   ПриИзмененииВидаОперации()
КонецПроцедуры





В командной панели есть группа с видом "подменю" - МенюОперация

и не поверишь - все работает
9 Mitriy
 
13.05.11
10:04
(4) и кто тебе такую фигню сказал?
10 Mitriy
 
13.05.11
10:04
(7) и то, и другое...
11 Stepa86
 
13.05.11
10:08
(8),(9) не знал про коллекцию "команды"

(10) и как в обработчике команды узнать имя кнопки, если предварительно соответствие не сохранил?
12 a_alenkin
 
13.05.11
10:10
см (8)

Команда.Имя - у меня и у команды и у кнопки одинаковое имя в моем случае
13 a_alenkin
 
13.05.11
10:11
(11) Правда коллекция команды доступна почему то только на сервере - точнее добавить на клиенте у меня не получилось
14 Stepa86
 
13.05.11
10:12
(13) ну это то как раз логично, потому что форма на сервере лежит, а на клиент приходит тока представление. Да и обработка видимости и доступности происходит на сервере, так что уж лучше все делать там
15 Stepa86
 
13.05.11
10:14
(12) ну это же не означает, что в произвольном обработчике команды я смогу получить имя кнопки, а именно это я имел ввиду в (4)
16 Stepa86
 
13.05.11
10:16
+(15) так как оказывается командами можно управлять, то получить имя элемента из которого пришел вызов даже вредно... инкапсуляция и все такое...
17 a_alenkin
 
13.05.11
10:18
(15) ну если все создавать произвольно -
конечно могут быть варианты что две или несколько кнопок обрабатывают одну команду - я с таким не сталкивался - мне незачем было так усложнять
из кнопки ты сможешь найти команду
а из команды узнать кнопку нет
В моем же случае я знаю что у них одинаковое имя
18 Адинэснег
 
13.05.11
10:26
хммм... вроде то, что надо

КомандыФормы (FormCommands)
Добавить (Add)
Синтаксис:

Добавить(<ИмяКоманды>)
Параметры:

<ИмяКоманды> (необязательный)

Тип: Строка. Имя добавляемой команды.
Возвращаемое значение:

Тип: КомандаФормы.
Описание:

Добавляет команду в коллекцию.

Доступность:

Сервер.