Имя: Пароль:
1C
1С v8
УФ Команды сгенерированного меню
,
0 QbeeQ
 
27.10.12
23:40
Дано: Управляемая форма с табличкой, в табличке документики. Кроме того есть справочник сотрудников
Задача: Сгенерировать контекстное меню из справочника и назначить элементам списка вызов процедуры с параметром, в который передать сотрудника для дальнейшей обработки
1 QbeeQ
 
27.10.12
23:47
Упрощу задачу. С генерацией меню проблем нет. Как передать параметр?
2 QbeeQ
 
27.10.12
23:50
В обычной форме я формировал соответствие и пункты меню называл ключами этого соответствия. Но в управляемой форме в модуль передается вместо реквизита диалога команда по которой я не могу определить какой пункт меню выбран
3 Stim
 
28.10.12
00:23
слишком сложно написано)
4 Stim
 
28.10.12
00:23
зы. используйте команду справочника с множественным выбором, если я правильно понял
5 QbeeQ
 
28.10.12
00:42
Мда, с формулировкой у сеня не вышло. Попробуем на примере:
Перед пользователем табличка с заявками на ремонт и исполнителями. На одной из заявок хочется нажать правой клавишей мыши для вызова контекстного меню, в котором присутствуют все возможные исполнители. После выбора пункта меню нужно программно поменять исполнителя в документе.
6 QbeeQ
 
28.10.12
00:43
*у сеня = у меня
7 Живой Ископаемый
 
28.10.12
00:45
ДокументОбъект = ДокументССылка.ПолучитьОбъект();
ДокументОбъект.Ответственный = ВыбранныйИсполнитель;
ДокументОбъект.ОбменДанными.Загрузка = истина;
ДокументОбъект.Записать();
8 QbeeQ
 
28.10.12
00:54
(7) Великолепно, а как определить ВыбранныйИсполнитель когда он выбирается контекстным меню по правой клавише в списке документов?
9 QbeeQ
 
28.10.12
00:55
+(8) Точнее как его правильно выбирать, чтобы визуально это было похоже на контекстное меню списка дкоументов
10 Живой Ископаемый
 
28.10.12
00:56
а как вы строите это меню?
11 romale
 
28.10.12
01:02
(5) делай через списокзначений выбрать() и вешай на одну команду в меню
12 Stim
 
28.10.12
01:03
в форме списка справа добавь СправочникСписок своих исполнителей, прим 20% экранной формы. кнопку показать/скрыть.
и заполняй текущий док текущим исполнителем и все
13 QbeeQ
 
28.10.12
01:06
(10)Меню создаю так:


&НаСервере
Функция ПолучитьИсполнителей()
   Запрос = Новый Запрос();
   Запрос.Текст =
   "ВЫБРАТЬ
   |    Сотрудники.Ссылка КАК Ссылка,
   |    Сотрудники.Код КАК Код,
   |    Сотрудники.Представление КАК Имя
   |ИЗ
   |    Справочник.Сотрудники КАК Сотрудники
   |ГДЕ
   |    Сотрудники.СервисныйИнженер
   |    И НЕ Сотрудники.ПометкаУдаления";
   
   Результат = Новый Соответствие();
   Выборка = Запрос.Выполнить().Выбрать();
   Н=0;
   Пока Выборка.Следующий() Цикл
       Результат.Вставить("кн"+Н,Выборка.Ссылка);
       Н=Н+1;
   КонецЦикла;
   Возврат Результат;
КонецФункции

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   Исполнители = Новый ФиксированноеСоответствие(ПолучитьИсполнителей());
   Для каждого Исполнитель Из Исполнители Цикл
       Кнопка = Элементы.Добавить(Исполнитель.Ключ,Тип("КнопкаФормы"),Элементы.ПодменюСменитьИсполнителя);
       Кнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
       Кнопка.ИмяКоманды = "СменитьИсполнителя";
       Кнопка.Заголовок = Исполнитель.Значение.Наименование;
   КонецЦикла;
   
КонецПроцедуры
14 QbeeQ
 
28.10.12
01:08
(11) Как выполнить выбор из списка нажатием правой кнопки мыши?
15 romale
 
28.10.12
01:11
(14) У тебя на правой кнопке будет одна команда "Выбрать из документа" - например. И она откроект у тебя список, который ты заполнишь по текущей строке таблицы документов. Далее стадартыная обработка выбора списка значений
16 QbeeQ
 
28.10.12
01:13
(15) Да, может получиться. А как сделать чтобы кнопка сама нажалась после того как на ней мышку на некоторое время задержать? Ну как в настоящем меню :)
17 romale
 
28.10.12
01:14
(14) Или динамически созавай сами команды. А после выбора их все удаляй.
18 QbeeQ
 
28.10.12
01:28
(17) Спасибо, получилось:


   Исполнители = Новый ФиксированноеСоответствие(ПолучитьИсполнителей());
   Для каждого Исполнитель Из Исполнители Цикл
       Команда = Команды.Добавить(Исполнитель.Ключ);
       Команда.Действие = "СменитьИсполнителя";
       
       Кнопка = Элементы.Добавить(Исполнитель.Ключ,Тип("КнопкаФормы"),Элементы.ПодменюСменитьИсполнителя);
       Кнопка.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
       Кнопка.ИмяКоманды = Исполнитель.Ключ;
       Кнопка.Заголовок = Исполнитель.Значение.Наименование;
   КонецЦикла;

Удалять не буду, пусть живут пока живет форма