Окно, открытое через НачатьВызовВнешнегоОкнаАсинх, пропадает при клике в окне конфигуратора

tormozit Закрыто Высокий

Открыть в отладчике окно "Выражение". Выполнить команду "Редактировать текст" ИР адаптера. Откроется окно ИР через НачатьВызовВнешнегоОкнаАсинх(). Кликнуть на окне конфигуратора. Окно ИР пропадет и Турбоконф остается отключен.

Комментарии

tormozit
#1, ред. 14 декабря 2024 17:24

Вот код
ТурбоКонф.НачатьВызовВнешнегоОкнаАсинх("^Текст.*", 2000, Конфигуратор.ГлавноеОкно, РежимОткрытияВнешнегоОкна.Диалог, Истина, ИдентификаторПроцессаИР);
Он работает корректно, если вызывается при фокусе в главном окне конфигуратора. Но если зову его из любого модального окна конфигуратора, то возникает эта проблема.


tormozit
#2, 14 декабря 2024 17:30

Еще попробовал
ТурбоКонф.НачатьВызовВнешнегоОкнаАсинх("^Текст.*", 2000, Конфигуратор.ОкноВызоваСкрипта, РежимОткрытияВнешнегоОкна.Диалог, Истина, ИдентификаторПроцессаИР);
Поведение не изменилось


bolsun
#3, 18 декабря 2024 13:45

(1) tormozit, исправлено

6.3.9118.28188
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg

Передавать нужно Конфигуратор.ОкноВызоваСкрипта


tormozit
#4, 18 декабря 2024 15:31

Проверил. Пока окно ИР открыто, все нормально. Но после его закрытия случается зависание на 20 секунд примерно.
Ссылка скрыта

xAZYTyx2iD.mp4

Найди в актуальном ИР адаптере строку
//@_button {'Name': 'РедактироватьТекст'
И удали из нее символ _ .
Далее в точке останова вызови окна "Выражение" и вычисли там любую строку. Далее повторяй по ролику.


bolsun
#5, 18 декабря 2024 16:37

(4) tormozit, не воспроизводится.


bolsun
#6, ред. 18 декабря 2024 16:40

В логе вижу, что происходит попытка вставки, но в это время меняется активное окно с "Выражение", на "Ввод выражения" и платформа не может выполнить запрос UIAutomation.

[18.12.24 15:27:39:919] [PasteText6]
[18.12.24 15:27:39:922] SetClipboard time = 2ms
[18.12.24 15:27:39:922] Set clipboard data time: 2ms
[18.12.24 15:27:39:923] GetUIAutomationInfo()... title=Выражение,curFg=600716792,fg=600716792
[18.12.24 15:27:39:924] GetUIAutomationCachedInfo()... title=Выражение,curFg=600716792,fg=600716792
[18.12.24 15:27:39:925] CurrentDocumentRuntimeId=
[18.12.24 15:27:39:929] OnFocusChange()
[18.12.24 15:27:39:929] OnFocusChange() title=Ввод выражения, fg=6496158
[18.12.24 15:27:39:931] IsProcess is true, выходим...
[18.12.24 15:27:39:935] curFg=Ввод выражения, curFg=6496158
[18.12.24 15:27:39:935] controlType: документ
[18.12.24 15:27:39:936] name: 
[18.12.24 15:28:00:059] System.Runtime.InteropServices.COMException (0x80131505): Время ожидания операции истекло. (Исключение из HRESULT: 0x80131505)
   в UIAutomationClient.IUIAutomationTextRange.GetText(Int32 maxLength)
   в TurboConf.Core.TurboAPI.TurboApi.‏‭​‌‭‌​‪‏‫‪‎‎‍‭‭‏‎‏​​‬‌‬‏‮(IUIAutomationTextPattern , UIAutoFlags , UIAutomationInfo )
   в TurboConf.Core.TurboAPI.TurboApi.GetUIAutomationCachedInfo(IntPtr fg, IUIAutomationElement elem, UIAutoFlags flags)
[18.12.24 15:28:00:059] GetUIAutomationCachedInfo() 20133ms, total calls 30


bolsun
#7, 18 декабря 2024 16:47

И я так полагаю это уже другая проблема, проблема с пропаданием окна из названия темы исправлена?


tormozit
#8, 18 декабря 2024 20:55

Вот код, который там выполняется

ТурбоКонф.УстановитьФокусНаЭлемент("Рассчитать", "кнопка");
ТурбоКонф.ШифтКлавиша(Клавиши.Tab);
ТурбоКонф.Клавиша(Клавиши.F2);
Окно = ТурбоКонф.ЖдатьОкно("Просмотр значения выражения", 500, Ложь);
Если Окно = 0 Тогда
	Возврат;
КонецЕсли;
Текст = ТурбоКонф.ПолучитьЗначение();
ТурбоКонф.Клавиша(Клавиши.Escape); 

ОповеститьПользователяОПриостановке();
ТурбоКонф.НачатьВызовВнешнегоОкнаАсинх("^Текст.*", 2000, Конфигуратор.ОкноВызоваСкрипта, РежимОткрытияВнешнегоОкна.Диалог, Истина, ИдентификаторПроцессаИР);
//ПодключениеИР.Visible = Истина;
Текст = МодулиИР.ирКлиент.ОткрытьТекстЛкс(Текст, "", "", Ложь, Неопределено, Неопределено, Ложь, Истина);
ОповеститьПользователяОВозобновлении();
ЗавершитьВызовВнешнегоОкнаАсинх(Истина, ИдентификаторПроцессаИР);
ПодключениеИР.Visible = Ложь;

Если Текст = Неопределено Тогда
	Возврат;
КонецЕсли;
ТурбоКонф.КликнутьПоЭлементу("Установить новое значение в виде выражения", "кнопка", 0, Ложь);
ТурбоКонф.ВставитьТекст(МодулиИР.ирОбщий.ТекстВВыражениеВстроенногоЯзыкаЛкс(Текст));
ТурбоКонф.КонтролКлавиша(Клавиши.Enter);
ТурбоКонф.Клавиша(Клавиши.Escape);


bolsun
#9, 18 декабря 2024 21:10

(8) tormozit, тогда нужно использовать активное окно (ПолучитьАктивноеОкно), а не ОкноВызоваСкрипта ("Выражение"), где расположена кнопка


bolsun
#10, ред. 18 декабря 2024 21:35

(9) но как по мне, реализовано некорректно и нужно переделать логику. Нужно начинать вызов окна приложения с окна Выражение, раз там появляется диалог.


tormozit
#11, 18 декабря 2024 22:56

(9) bolsun, с ПолучитьАктивноеОкно() такая же проблема

		Окно = ТурбоКонф.ПолучитьАктивноеОкно();
		ТурбоКонф.НачатьВызовВнешнегоОкнаАсинх("^Текст.*", 2000, Окно, РежимОткрытияВнешнегоОкна.Диалог, Истина, ИдентификаторПроцессаИР);
		//ПодключениеИР.Visible = Истина;
		Текст = МодулиИР.ирКлиент.ОткрытьТекстЛкс(Текст, "", "", Ложь, Неопределено, Неопределено, Ложь, Истина);
		ОповеститьПользователяОВозобновлении();
ТурбоКонф.ЗавершитьВызовВнешнегоОкнаАсинх(Окно,, ИдентификаторПроцессаИР); // Вроде бы избыточная передача идентификатора
		ПодключениеИР.Visible = Ложь;
		
		Если Текст = Неопределено Тогда
			Возврат;
		КонецЕсли;
		ТурбоКонф.КликнутьПоЭлементу("Установить новое значение в виде выражения", "кнопка", 0, Ложь);
		ТурбоКонф.ВставитьТекст(МодулиИР.ирОбщий.ТекстВВыражениеВстроенногоЯзыкаЛкс(Текст));


tormozit
#12, 18 декабря 2024 23:00

(10) bolsun, так и делаю. В момент открытия окна ИР фокус находится в окне "Выражение". Думаю это видно в логе. А вот после закрытия окна ИР фокус возвращается в окно "Выражение". Затем я отправляю нажатие кнопки в это окно и тогда уже открывается модальное окно "Установить новое значение в виде выражения", в котором и блокируется ввод. Похоже что ТурбоКонф.ЗавершитьВызовВнешнегоОкнаАсинх() некорректно срабатывает и по факту не отключает блокировку окна.


tormozit
#13, 18 декабря 2024 23:45

Вот обновленный скрипт с учетом твоих последних рекомендаций. Проблема актуальна.
RDT.os
Причем раньше (2 дня назад) команда точно эта работала - много ее тестировал. Сейчас откатил назад скрипт и Турбоконф, но новая проблема осталась.


tormozit
#14, ред. 18 декабря 2024 23:54

Разобрался. Причина была в том что я не указал ожидание появления последнего модального окна "Ввод выражения"

		ТурбоКонф.КликнутьПоЭлементу("Установить новое значение в виде выражения", "кнопка", 0, Ложь);
		ТурбоКонф.ЖдатьОкно("Ввод выражения", 1000, Истина); // Добавил
		ТурбоКонф.ВставитьТекст(МодулиИР.ирОбщий.ТекстВВыражениеВстроенногоЯзыкаЛкс(Текст));

Раньше видимо оно быстрее открывалось и потому вставка не успевала начаться до его активации.


tormozit
#15, 19 декабря 2024 15:16

tormozit изменил статус на Закрыто


Для вставки изображения или файла, перетащите его в поле редактора или вставьте файл из буфера