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

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 Сейчас в теме
По кнопке на форме нельзя вызвать процедуру общего модуля. Надо вызывать процедуру на форме, а уже из нее вызывать процедуру общего модуля.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)