Нажатие кнопки в обработке программно

1. boks 1 07.12.10 10:08 Сейчас в теме
Добрый день!

Из Обработки1 открываю Обработку2

ФормаВыгрузки=глТорговоеОборудование.ПолучитьФорму("ЗагрузкаОборудования", ЭтаФорма);
ФормаВыгрузки.РежимЗагрузки=1;
ФормаВыгрузки.ОбъектЗагрузки=ВыбГруппаТО;
ФормаВыгрузки.Открыть();

открывается нормально.

Вопрос: Как программно из Обработки1 нажать кнопку на форме Обработки2 ?
Или выполнить процедуру из модуля формы Обработки2?

Заранее спасибо!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. user623969_dusa 16.01.18 19:46 Сейчас в теме
(1) как в 1 описано может и будет нажиматься из формы только это форма будет обработки объекта созданного локально а не формы запущенной где-то.. то есть смысла нажимать кнопки в пользовательских формах нет да и не надо это практически
2. пользователь 07.12.10 13:26
Выполнить можно любую функцию и процедуру извне, если объявить ее как экспортную
Функция Выполнить() Экспорт
   ...
КонецФункции;


Программно такие функции вызываются обычно:

ФормаВыгрузки=глТорговоеОборудование.ПолучитьФорму("ЗагрузкаОборудования", ЭтаФорма);
ФормаВыгрузки.РежимЗагрузки=1;
ФормаВыгрузки.ОбъектЗагрузки=ВыбГруппаТО;
ФормаВыгрузки.Выполнить();


Можно так же программно "нажать на кнопку", но так же процедура события кнопки должна быть экспортной:

Форма_1 имеет кнопку "Выполнить" и задан обработчик кВыполнитьНажатие, добавляем Экспорт к процедуре:
Процедура кВыполнитьНажатие(Элемент) Экспорт
	...
КонецПроцедуры


Из Формы_2 выполняем обработчик кнопки "Выполнить в Форме_1:
Форма_1 = ЭтотОбъект.ПолучитьФорму("Форма_1");
ВрмЭлемент = Форма_1.ЭлементыФормы.кВыполнить;
ВрмДействие = ВрмЭлемент.ПолучитьДействие("Нажатие");
Выполнить("Форма_1." + Строка(ВрмДействие) + "(ВрмЭлемент"));
Михаська; user591389_aska_rabota; user859511; user705522_constantin_h; корум; Tiger86; RodinMax; +7 Ответить
4. Allexe8.1 10.06.14 17:04 Сейчас в теме
(2) bomba, еще вариант - через обработку оповещения.
3. tarasenkov 340 10.06.14 13:12 Сейчас в теме
// Программное нажатие на кнопку (обычную или на командной панели) на *чужой* форме с вызовом связанного события
// через переопределение действия формы ПриПовторномОткрытии
// увы, без передачи элемента кнопки в качестве параметра
// для режима запуска "обычное приложение"
Процедура ИнтерактивноНажатьКнопку(Кнопка, ФормаКнопки) Экспорт
	// Удостоверимся что есть права на нажатие
	// Кнопка
	стрОшибка = "";
	Попытка
		Если Кнопка.Видимость = Ложь Тогда
			стрОшибка = стрОшибка + ", Невидима";
		КонецЕсли;	
	Исключение
	КонецПопытки;	
	Попытка
		Если Кнопка.Доступность = Ложь Тогда
			стрОшибка = стрОшибка + ", Недоступна";
		КонецЕсли;	
	Исключение
	КонецПопытки;	
	Если стрОшибка <> "" Тогда
		стрОшибка = Сред(стрОшибка, 3)+" кнопка, которую требуется нажать";
		ВызватьИсключение(стрОшибка);
	КонецЕсли;	
	
	Если ТипЗнч(Кнопка) = Тип("КнопкаКоманднойПанели") Тогда
		Действие = Кнопка.Действие;
	ИначеЕсли ТипЗнч(Кнопка) = Тип("Кнопка") Тогда	
		Действие = Кнопка.ПолучитьДействие("Нажатие");
	КонецЕсли;	
	буфДействие = ФормаКнопки.ПолучитьДействие("ПриПовторномОткрытии");
	ФормаКнопки.УстановитьДействие("ПриПовторномОткрытии", Действие);
	Попытка
		// собственно вызов нажатия кнопки
		ФормаКнопки.Открыть();
		ФормаКнопки.УстановитьДействие("ПриПовторномОткрытии", буфДействие);
	Исключение	
		ФормаКнопки.УстановитьДействие("ПриПовторномОткрытии", буфДействие);
		ВызватьИсключение;
	КонецПопытки;	
КонецПроцедуры
Показать


Пример вызова.
*Подразумевается что форма, на которой расположена кнопка должна быть открытой.

ИнтерактивноНажатьКнопку(ФормаКнопки.ЭлементыФормы.КнопкаОК, ФормаКнопки);

ИнтерактивноНажатьКнопку(ФормаКнопки.ЭлементыФормы.КоманднаяПанель1.Кнопки.ОК, ФормаКнопки);
DesertPunk; user591389_aska_rabota; user705522_constantin_h; корум; Neco; yudakov; perena; adva; vladir; +9 Ответить
5. vladir 114 08.10.14 13:51 Сейчас в теме
(3) tarasenkov, Спасибо! Отличная процедура. Как раз то, что надо, отрабатывает на Ура.
10. Pirat-37 5 20.02.20 16:43 Сейчас в теме
11. FOI1977 1 13.10.20 14:13 Сейчас в теме
(3)
ИнтерактивноНажатьКнопку(ФормаКнопки.ЭлементыФормы.КнопкаОК, ФормаКнопки);


Спасибо за процедурку.
6. adhocprog 1140 16.01.18 15:09 Сейчас в теме
Можно ли как-нибудь нажать кнопку, если вызываемая процедура без слова Экспорт?
7. bad_wag 50 16.01.18 19:37 Сейчас в теме
(6)да, если это серверная процедурв
9. roman77 333 06.05.19 15:37 Сейчас в теме
Как вариант. Подключаем обработчик изменения данных, соответствующий нужной кнопке (в примере "ЗаполнитьПоИНННажатие") и изменяем. Измененные данные (в примере "наименование") потом можно обратно вернуть.

Контрагент = Справочники.Контрагенты.СоздатьЭлемент();
Контрагент.ИНН = "7704217370";
ФК = Контрагент.ПолучитьФорму();
Контрагент.Наименование = "OZON.RU";
ФК.ПодключитьОбработчикИзмененияДанных("Наименование", "ЗаполнитьПоИНННажатие", Ложь);
ФК.Открыть();
Контрагент.Наименование = "";
Показать
12. jan-pechka 419 30.03.23 15:48 Сейчас в теме
здесь просто все: https://1c-bz.ru/programming/238/

			Форма = ПолучитьФорму("Обработка.РаботаСДиаграммами.Форма");     
			Форма.Открыть(); 
			Форма.Элементы.Группа1.ТекущаяСтраница = Форма.Элементы.Гистограмма_;
			Форма.ПостроитьГистограмм(Неопределено); // специально сделала ее Экспорт на Команду кнопки!!!! чтобы нажималась кнопка программно)


главное - это на команде кнопки должен стоять ЭКСПОРТ
13. user1880116 30.03.23 16:55 Сейчас в теме
(12) Четыре года выжидания и на тебе ссылку. Сильно.
ZOMI; jan-pechka; +2 Ответить
14. jan-pechka 419 30.03.23 17:13 Сейчас в теме
(13)
почему 4 года?...автор же 13 лет назад спросил.....ну вот...значит-актуально!))))
ZOMI; Farhat95; +2 Ответить
15. Farhat95 30.03.23 17:51 Сейчас в теме
(14) Подумаешь подождал немного )))
jan-pechka; +1 Ответить
Оставьте свое сообщение

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