1. ne_en 59 29.06.20 22:26 Сейчас в теме

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

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

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


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

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

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

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

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

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


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

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

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

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

Вакансии

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

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

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

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

Ведущий программист 1С (УТ 11)
Москва
зарплата до 200 000 руб.
Полный день