Программно добавить кнопку с вызовом процедуры из общего модуля

1. ne_en 81 29.06.20 22:26 Сейчас в теме
Можно ли программно добавить на форму кнопку, которая вызывает процедуру и общего модуля?
В расширение добавил процедуру из общего модуля, которая вызывается из каждого документа. Добавил в неё вызов моей процедуры в моём общем модуле (тоже в расширении). В этой процедуре добавляю команду и кнопку на форме в командную панель. Кнопка добавляется. Команда добавляется. В действие прописываю ИмяОбщегоМодуля.ИмяЭкспортнойПроцедурыВМодуле. Но она не срабатывает (отладчик не входит/не останавливается). ЧЯДНТ?

Просьба не налегать с вопросами зачем именно так. Дописывать в каждый из двухсот документов (в расширение) свою процедуру вапще не вариант.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DENSKR 15 29.06.20 22:38 Сейчас в теме
(1) В экспортной процедуре из общего модуля необходимо явно указать ссылку на объект.
3. ne_en 81 29.06.20 22:43 Сейчас в теме
(2)Можно поподробнее. Я в неё форму передал. Кнопка на форме нарисовалась. И действие (отладчиком) написано. Но вот само действие не исполняется Отладчиком его в ней тормазнуть пытаюсь. Не тормозится ((
4. DENSKR 15 29.06.20 22:51 Сейчас в теме
(3)
Необходимо глянуть на то, что у вас есть.
5. ne_en 81 29.06.20 23:04 Сейчас в теме
(4) В расширении в процедуру, что в каждом документе вызывается при чтении добавил
	//#Вставка
	Если Форма.ТолькоПросмотр Тогда
		ИмяОбщегоМодуля.ИмяЭкспортнойПроцедурыВМодуле(Форма);
	КонецЕсли;
	//#КонецВставки


В модуле ИмяОбщегоМодуля (добвлен в расширении) добавил процедуру

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

&НаКлиенте
Процедура ДействиеПоКнопке(Команда) Экспорт
	Ааааа=1;
КонецПроцедуры
Показать
6. ne_en 81 29.06.20 23:10 Сейчас в теме
(5) Так тоже пробовал
Команда.Действие="ИмяОбщегоМодуля.ДействиеПоКнопке";
7. DENSKR 15 29.06.20 23:13 Сейчас в теме
(5)
при чтении добавил
Это будет отрабатывать с ранее созданными и записанными доками.
На УФ в модуле документа:
//#Вставка
Если Форма.ТолькоПросмотр Тогда
ИмяОбщегоМодуля.ИмяЭкспортнойПроцедурыВМодуле(Форма);
КонецЕсли;
//#КонецВставки

"Если Форма.ТолькоПросмотр Тогда" Тут Что отладчик говорит???
8. ne_en 81 29.06.20 23:19 Сейчас в теме
(7)Эта часть норм отрабатывает. Даже кнопочку на форму отрисовывает. Даже если через отладчик смотреть, то в кнопке и действие прописано. Но оно не работает.
9. DENSKR 15 29.06.20 23:34 Сейчас в теме
(5)
&НаКлиенте
Процедура ИмяЭкспортнойПроцедурыВМодуле(Форма) Экспорт
    Команда            =Форма.Команды.Добавить("МояКоманда");
//+++
    Команда.Действие="ИмяОбщегоМодуля.ДействиеПоКнопке";
//+++    
    Кнопка                =Форма.Элементы.Добавить("МояКнопка", Тип("КнопкаФормы"), Форма.Элементы.ФормаКоманднаяПанель);
    Кнопка.Заголовок    ="Моя кнопка";
    Кнопка.ИмяКоманды    ="МояКоманда";
//+++
//Тут раз уж необходимо вызвать действие команды из модуля программно и раз уж кнопка добавляется 
    Форма.ДействиеПоКнопке(Неопределено);
//+++
КонецПроцедуры
Показать
10. DENSKR 15 29.06.20 23:46 Сейчас в теме
(9)
Команда.Действие="ИмяОбщегоМодуля.ДействиеПоКнопке";

Хотя здесь должно работать и
Команда.Действие="ДействиеПоКнопке";
12. ne_en 81 30.06.20 00:02 Сейчас в теме
(10)
Не работает не так, не так.

Команда.Действие="ДействиеПоКнопке";
Так наверняка будет работать, но если прописать процедуру ДействиеПоКнопке в модуле формы. Но это не приемлемо.
11. ne_en 81 30.06.20 00:00 Сейчас в теме
(9)Ну нужно же чтоб действие по кнопке срабатывало при нажатии, а не при чтении документа.
22. pm74 199 02.07.20 13:16 Сейчас в теме
(1)
В расширение добавил процедуру из общего модуля, которая вызывается из каждого документа. Добавил в неё вызов моей процедуры в моём общем модуле (тоже в расширении). В этой процедуре добавляю команду и кнопку на форме в командную панель. Кнопка добавляется. Команда добавляется. В действие прописываю ИмяОбщегоМодуля.ИмяЭкспортнойПроцедурыВМодуле.


подключаемые команды чем не угодили
13. DENSKR 15 30.06.20 00:40 Сейчас в теме
&НаСервере  //ЭТО РАБОТАТЬ БУДЕТ НА СЕРВЕРЕ
Процедура ИмяЭкспортнойПроцедурыВМодуле(Форма) Экспорт
    Команда            =Форма.Команды.Добавить("МояКоманда");
    Команда.Действие="ДействиеПоКнопке";
    
    Кнопка                =Форма.Элементы.Добавить("МояКнопка", Тип("КнопкаФормы"), Форма.Элементы.ФормаКоманднаяПанель);
    Кнопка.Заголовок    ="Моя кнопка";
    Кнопка.ИмяКоманды    ="МояКоманда";
    
КонецПроцедуры

//СЮДА С СЕРВЕРА НИКАК НЕ ОБРАТИТЬСЯ 
&НаКлиенте
Процедура ДействиеПоКнопке(Команда) Экспорт
    Ааааа=1;
КонецПроцедуры
ПОЭТОМУ ЭТО НУЖНО ПРОПИСАТЬ ТАМ ГДЕ И 
//#Вставка
    Если Форма.ТолькоПросмотр Тогда
        ИмяОбщегоМодуля.ИмяЭкспортнойПроцедурыВМодуле(Форма);
    КонецЕсли;
    //#КонецВставки

Показать
14. shmalevoz 304 30.06.20 00:58 Сейчас в теме
Никак. По крайней мере обходных путей кажется не найдено. При нажатии на кнопку происходит вызов метода именно текущего контекста, что-то вроде ЭтаФорма.МетодДействия(Элемент). Управление не передается даже на глобальные общие модули.
15. ne_en 81 30.06.20 09:48 Сейчас в теме
(14) Обидно... Чё-то придётся колхозить, чтоб в ~200 доков не вписывать процедуру в расширение. Подозревал, что так и есть, но надеялся, что я просто чего-то не знаю. )))
16. shmalevoz 304 30.06.20 09:56 Сейчас в теме
(15) Если решение типовое, то в большинстве случаев формы уже содержат однотипные методы с вызовом какого-то общего модуля. Что-то вроде
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
	УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры

и для выполняемой команды достаточно передать управление на подобный метод. а в расширении дополнить общий методом с префиксом &Вместо с анализом переданного элемента. типа если подменяется, то своя логика, если нет, то передаем управление на стандарт
17. EVKash 14 30.06.20 10:03 Сейчас в теме
(16) Тогда уж лучше
// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
20. ne_en 81 30.06.20 14:01 Сейчас в теме
(17) А вот тут, думаю, стоит порыться. ))
21. ne_en 81 30.06.20 16:24 Сейчас в теме
(17)
Это решение. Я могу расширить эту процедуру и добавить туда описание действий для моей команды.
Однако, как я понимаю, можно ничего не менять, а добавлять обработчики команд в систему. Однако я пока не понял как это делать. Если знаете как, подскажите пожалуйста.
19. ne_en 81 30.06.20 14:01 Сейчас в теме
(16) Ну этим то я и воспользовался, чтоб по определённым критериям вывести кнопку расширив такую процедуру (ДатаЗапретаИзменения.ОбъектПриЧтенииНаСервере).
Теперь вот нужно, чтоб кнопка выполнила определённые действия, абсолютно одинаковые для всех документов.
18. oleg-x 26 30.06.20 10:12 Сейчас в теме
По кнопке на форме нельзя вызвать процедуру общего модуля. Надо вызывать процедуру на форме, а уже из нее вызывать процедуру общего модуля.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот