Открыть в отладчике окно "Выражение". Выполнить команду "Редактировать текст" ИР адаптера. Откроется окно ИР через НачатьВызовВнешнегоОкнаАсинх(). Кликнуть на окне конфигуратора. Окно ИР пропадет и Турбоконф остается отключен.
0 0
ред. 19 декабря 2024 15:16
Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.
Комментарии
tormozit #1, ред. 14 декабря 2024 17:24
Вот код ТурбоКонф.НачатьВызовВнешнегоОкнаАсинх("^Текст.*", 2000, Конфигуратор.ГлавноеОкно, РежимОткрытияВнешнегоОкна.Диалог, Истина, ИдентификаторПроцессаИР);
Он работает корректно, если вызывается при фокусе в главном окне конфигуратора. Но если зову его из любого модального окна конфигуратора, то возникает эта проблема.
0
tormozit #2, 14 декабря 2024 17:30
Еще попробовал ТурбоКонф.НачатьВызовВнешнегоОкнаАсинх("^Текст.*", 2000, Конфигуратор.ОкноВызоваСкрипта, РежимОткрытияВнешнегоОкна.Диалог, Истина, ИдентификаторПроцессаИР);
Поведение не изменилось
Найди в актуальном ИР адаптере строку //@_button {'Name': 'РедактироватьТекст'
И удали из нее символ _ .
Далее в точке останова вызови окна "Выражение" и вычисли там любую строку. Далее повторяй по ролику.
0
bolsun #5, 18 декабря 2024 16:37
(4) tormozit, не воспроизводится.
0
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
0
bolsun #7, 18 декабря 2024 16:47
И я так полагаю это уже другая проблема, проблема с пропаданием окна из названия темы исправлена?
0
tormozit #8, 18 декабря 2024 20:55
Вот код, который там выполняется
ТурбоКонф.УстановитьФокусНаЭлемент("Рассчитать", "кнопка");
ТурбоКонф.ШифтКлавиша(Клавиши.Tab);
ТурбоКонф.Клавиша(Клавиши.F2);
Окно = ТурбоКонф.ЖдатьОкно("Просмотр значения выражения", 500, Ложь);
Если Окно = 0 Тогда
Возврат;
КонецЕсли;
Текст = ТурбоКонф.ПолучитьЗначение();
ТурбоКонф.Клавиша(Клавиши.Escape);
ОповеститьПользователяОПриостановке();
ТурбоКонф.НачатьВызовВнешнегоОкнаАсинх("^Текст.*", 2000, Конфигуратор.ОкноВызоваСкрипта, РежимОткрытияВнешнегоОкна.Диалог, Истина, ИдентификаторПроцессаИР);
//ПодключениеИР.Visible = Истина;
Текст = МодулиИР.ирКлиент.ОткрытьТекстЛкс(Текст, "", "", Ложь, Неопределено, Неопределено, Ложь, Истина);
ОповеститьПользователяОВозобновлении();
ЗавершитьВызовВнешнегоОкнаАсинх(Истина, ИдентификаторПроцессаИР);
ПодключениеИР.Visible = Ложь;
Если Текст = Неопределено Тогда
Возврат;
КонецЕсли;
ТурбоКонф.КликнутьПоЭлементу("Установить новое значение в виде выражения", "кнопка", 0, Ложь);
ТурбоКонф.ВставитьТекст(МодулиИР.ирОбщий.ТекстВВыражениеВстроенногоЯзыкаЛкс(Текст));
ТурбоКонф.КонтролКлавиша(Клавиши.Enter);
ТурбоКонф.Клавиша(Клавиши.Escape);
0
bolsun #9, 18 декабря 2024 21:10
(8) tormozit, тогда нужно использовать активное окно (ПолучитьАктивноеОкно), а не ОкноВызоваСкрипта ("Выражение"), где расположена кнопка
0
bolsun #10, ред. 18 декабря 2024 21:35
(9) но как по мне, реализовано некорректно и нужно переделать логику. Нужно начинать вызов окна приложения с окна Выражение, раз там появляется диалог.
0
tormozit #11, 18 декабря 2024 22:56
(9) bolsun, с ПолучитьАктивноеОкно() такая же проблема
Окно = ТурбоКонф.ПолучитьАктивноеОкно();
ТурбоКонф.НачатьВызовВнешнегоОкнаАсинх("^Текст.*", 2000, Окно, РежимОткрытияВнешнегоОкна.Диалог, Истина, ИдентификаторПроцессаИР);
//ПодключениеИР.Visible = Истина;
Текст = МодулиИР.ирКлиент.ОткрытьТекстЛкс(Текст, "", "", Ложь, Неопределено, Неопределено, Ложь, Истина);
ОповеститьПользователяОВозобновлении();
ТурбоКонф.ЗавершитьВызовВнешнегоОкнаАсинх(Окно,, ИдентификаторПроцессаИР); // Вроде бы избыточная передача идентификатора
ПодключениеИР.Visible = Ложь;
Если Текст = Неопределено Тогда
Возврат;
КонецЕсли;
ТурбоКонф.КликнутьПоЭлементу("Установить новое значение в виде выражения", "кнопка", 0, Ложь);
ТурбоКонф.ВставитьТекст(МодулиИР.ирОбщий.ТекстВВыражениеВстроенногоЯзыкаЛкс(Текст));
0
tormozit #12, 18 декабря 2024 23:00
(10) bolsun, так и делаю. В момент открытия окна ИР фокус находится в окне "Выражение". Думаю это видно в логе. А вот после закрытия окна ИР фокус возвращается в окно "Выражение". Затем я отправляю нажатие кнопки в это окно и тогда уже открывается модальное окно "Установить новое значение в виде выражения", в котором и блокируется ввод. Похоже что ТурбоКонф.ЗавершитьВызовВнешнегоОкнаАсинх() некорректно срабатывает и по факту не отключает блокировку окна.
0
tormozit #13, 18 декабря 2024 23:45
Вот обновленный скрипт с учетом твоих последних рекомендаций. Проблема актуальна. RDT.os
Причем раньше (2 дня назад) команда точно эта работала - много ее тестировал. Сейчас откатил назад скрипт и Турбоконф, но новая проблема осталась.
0
tormozit #14, ред. 18 декабря 2024 23:54
Разобрался. Причина была в том что я не указал ожидание появления последнего модального окна "Ввод выражения"
ТурбоКонф.КликнутьПоЭлементу("Установить новое значение в виде выражения", "кнопка", 0, Ложь);
ТурбоКонф.ЖдатьОкно("Ввод выражения", 1000, Истина); // Добавил
ТурбоКонф.ВставитьТекст(МодулиИР.ирОбщий.ТекстВВыражениеВстроенногоЯзыкаЛкс(Текст));
Раньше видимо оно быстрее открывалось и потому вставка не успевала начаться до его активации.
#1, ред. 14 декабря 2024 17:24
Вот код
ТурбоКонф.НачатьВызовВнешнегоОкнаАсинх("^Текст.*", 2000, Конфигуратор.ГлавноеОкно, РежимОткрытияВнешнегоОкна.Диалог, Истина, ИдентификаторПроцессаИР);
Он работает корректно, если вызывается при фокусе в главном окне конфигуратора. Но если зову его из любого модального окна конфигуратора, то возникает эта проблема.
#2, 14 декабря 2024 17:30
Еще попробовал
ТурбоКонф.НачатьВызовВнешнегоОкнаАсинх("^Текст.*", 2000, Конфигуратор.ОкноВызоваСкрипта, РежимОткрытияВнешнегоОкна.Диалог, Истина, ИдентификаторПроцессаИР);
Поведение не изменилось
#3, 18 декабря 2024 13:45
(1) tormozit, исправлено
6.3.9118.28188
https://disk.yandex.ru/d/ay0Wg6IBTsxSxg
Передавать нужно Конфигуратор.ОкноВызоваСкрипта
#4, 18 декабря 2024 15:31
Проверил. Пока окно ИР открыто, все нормально. Но после его закрытия случается зависание на 20 секунд примерно.
Ссылка скрыта
xAZYTyx2iD.mp4
Найди в актуальном ИР адаптере строку
//@_button {'Name': 'РедактироватьТекст'
И удали из нее символ _ .
Далее в точке останова вызови окна "Выражение" и вычисли там любую строку. Далее повторяй по ролику.
#5, 18 декабря 2024 16:37
(4) tormozit, не воспроизводится.
#6, ред. 18 декабря 2024 16:40
В логе вижу, что происходит попытка вставки, но в это время меняется активное окно с "Выражение", на "Ввод выражения" и платформа не может выполнить запрос UIAutomation.
#7, 18 декабря 2024 16:47
И я так полагаю это уже другая проблема, проблема с пропаданием окна из названия темы исправлена?
#8, 18 декабря 2024 20:55
Вот код, который там выполняется
#9, 18 декабря 2024 21:10
(8) tormozit, тогда нужно использовать активное окно (ПолучитьАктивноеОкно), а не ОкноВызоваСкрипта ("Выражение"), где расположена кнопка
#10, ред. 18 декабря 2024 21:35
(9) но как по мне, реализовано некорректно и нужно переделать логику. Нужно начинать вызов окна приложения с окна Выражение, раз там появляется диалог.
#11, 18 декабря 2024 22:56
(9) bolsun, с ПолучитьАктивноеОкно() такая же проблема
#12, 18 декабря 2024 23:00
(10) bolsun, так и делаю. В момент открытия окна ИР фокус находится в окне "Выражение". Думаю это видно в логе. А вот после закрытия окна ИР фокус возвращается в окно "Выражение". Затем я отправляю нажатие кнопки в это окно и тогда уже открывается модальное окно "Установить новое значение в виде выражения", в котором и блокируется ввод. Похоже что ТурбоКонф.ЗавершитьВызовВнешнегоОкнаАсинх() некорректно срабатывает и по факту не отключает блокировку окна.
#13, 18 декабря 2024 23:45
Вот обновленный скрипт с учетом твоих последних рекомендаций. Проблема актуальна.
RDT.os
Причем раньше (2 дня назад) команда точно эта работала - много ее тестировал. Сейчас откатил назад скрипт и Турбоконф, но новая проблема осталась.
#14, ред. 18 декабря 2024 23:54
Разобрался. Причина была в том что я не указал ожидание появления последнего модального окна "Ввод выражения"
Раньше видимо оно быстрее открывалось и потому вставка не успевала начаться до его активации.
#15, 19 декабря 2024 15:16
tormozit изменил статус на Закрыто