Как программно закрывать окна диалогов управляемых форм

Меня, конечно, мягко говоря, удивляет, что 1С не озаботилась об инструментах программного нажатия на кнопки, учитывая, что она декларирует некоторые методы автоматического тестирования.

Однако, в ходе одной из задач мне понадобилось закрывать многочисленные диалоги.

Писать расширение не хотелось, тем более, что по традиции 1С модули были длинными и вмешаться можно было только в режиме «Вместо с контролем изменений», а это плохой тон.

Пришла в голову идея попробовать закрыть окно диалога с нужным кодом возврата. И она сработала! Всё гениальное — просто.

ОкнаПриложения = ПолучитьОкна();
Для каждого ОкноПриложения Из ОкнаПриложения Цикл               
	Если ИмяФормыОкна(ОкноПриложения) = "MessageBox" Тогда    
		ТекФорма = ОкноПриложения.Содержимое[0];
		Сообщение = ТекФорма.Элементы.Message.Заголовок;
		Если Найти(Сообщение, "Будут изменены записи в КУДиР") <> 0 Тогда
			//Отвечаем ДА
			ТекФорма.Закрыть(КодВозвратаДиалога.Да);
			Возврат;
		КонецЕсли;
	КонецЕсли;
КонецЦикла;        

В отладчике видно, что окно диалога в 1С является обычной формой и ее можно закрыть с нужным кодом возврата.

Уточню, что сам цикл обработки окон работает асинхронно (в обработчике ожидания раз в секунду).

Успешных Вам автоматизаций, Господа!

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *