Имя: Пароль:
1C
 
Команда. Назначить действие из общего модуля
0 егаис
 
03.06.25
13:46
Баян конечно, но все же, может есть возможность назначения действия из общего модуля, не перенося формы в расширение?
Повесил для массива списка форм через ПодключаемыеКоманды
Процедура ДобавитьКонтекстноеМеню(ФормаСписка, ЭлементыСписок)

    ИмяКоманды = "МоеДействие";

    Команда = ФормаСписка.Команды.Добавить(ИмяКоманды);
    Команда.Заголовок = "Мое действие";
    Команда.Действие  = "ВыполнитьМоеДействие";

    КнопкаКоманды = ФормаСписка.Элементы.Добавить("КнопкаКоманды" + ИмяКоманды, Тип("КнопкаФормы"),ЭлементыСписок.КонтекстноеМеню);
    КнопкаКоманды.ИмяКоманды = ИмяКоманды;

КонецПроцедуры

Хочется красиво обработать с использованием одного модуля и одной общей формы.
1 Волшебник
 
03.06.25
13:46
ЭлментыСписок - опечатка в имени

а тут кавычка пропущена:
Команда.Заголовок = "Мое действие;
2 егаис
 
03.06.25
13:46
(1) Исправил, не помогло.
3 Волшебник
 
03.06.25
13:58
(2) Попробуйте ещё заменить "МоеДействие" на что-то осмысленное
4 Галахад
 
гуру
03.06.25
14:05
Можно еще в бубен постучать. 🧐
5 Мультук
 
гуру
03.06.25
14:11
(0)

1) А где код процедуры "ВыполнитьМоеДействие" ?
2) Абстрактный код - абстрактные ответы

3) А что, 1С уже умеет вот так?

Команда.Действие  = "МойОбщийМодуль.МояПроцедураОбработки";
6 arsik
 
гуру
03.06.25
14:23
(0) Вот есть вариант - https://forum.infostart.ru/forum9/topic187447/
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Кнопка = Элементы.Добавить("КнопкаКарточкаДоговора", Тип("ДекорацияФормы"), ЭтотОбъект);
Кнопка.Заголовок = Новый ФорматированнаяСтрока(НСтр("ru = 'Карточка Договор'"),,,,

"/e1cib/command/Обработка.ДО_КарточкаДоговора.Команда.КарточкаДоговора?cmdprm=СправочникСсылка.ВнутренниеДокументы:"+Прав(ПолучитьНавигационнуюСсылку(Объект.Ссылка),32)); 

КонецПроцедуры
7 Fedor-1971
 
03.06.25
14:24
(0) По логике:
1. добавляем команду
2. в модуле формы делаем процедуру (в вашем случае, ВыполнитьМоеДействие, но для стандартного функционала она уже добавлена)
3. в общем модуле отправляем в нужный обработчик

наверно, самый наглядный пример: добавление команд печати

КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ПФ_MXL_Т7";
КомандаПечати.Представление = НСтр("ru = 'График отпусков'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.МенеджерПечати = ....ОбщийМодуль....
8 егаис
 
03.06.25
14:38
(5)
а) для чего Вам код из формы? Тема как раз о том, чтобы это обойти
б) что абстрактного? Имя команды написать , как оно звучит? Что это изменит?
в) вот про это и речь

(6) Тоже про ссылку подумал, попробую. Спасибо.
Но только в рамках контекстного меню скорее всего не получится реализовать.
9 Шурик71
 
03.06.25
21:11
(0) Программное добавление из общего модуля?
В большинстве случаев решаемо..
Если в типовой форме есть Подключаемый_ВыполнитьПереопределяемуюКоманду, то:
(на примере ут11)

1) в ОМ на сервере (МодификацияКонфигурацииПереопределяемый, &После("ПриСозданииНаСервере")) при создании:

л_Команда=Команды.Добавить("МоеИмяКоманды");
л_Команда.Действие="Подключаемый_ВыполнитьПереопределяемуюКоманду";


2) Общий модуль МодификацияКонфигурацииКлиентПереопределяемый

&После("ВыполнитьПереопределяемуюКоманду")
Процедура Расш1_ВыполнитьПереопределяемуюКоманду(Форма, 
 Команда, ДополнительныеПараметры)

  Если Команда.Имя = "МоеИмяКоманды" Тогда
	МоиДоработкиКлиент.МояПроцедура(Форма, Команда);
	Возврат;
  КонецЕсли;

КонецПроцедуры
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший