Выделил в модуле маленький фрагмент. Вызывал команду ЗапомнитьДляСравнения .
Выделил второй фрагмент. Вызывал команду ЗапомнитьДляСравнения.
Открылось окно приложения ИР и в нем сравнение фрагментов. Первые 2 секунды клики не доходят в это окно и появляется уведомление Турбконфа о блокировке ввода.
Насколько я понял из лога, ожидание возникает в Турбоконф.ЖдатьСменуАктивногоОкна().
[13.11.25 18:30:21:899] --Время ожидания смены активного окна = 2007ms. Result: False
Ссылка скрыта
//&ЗапроситьИнформациюОДокументе
Процедура ЗапомнитьДляСравнения()
ПодключениеИР = ПодключениеИР(,, Ложь);
Если ПодключениеИР = Неопределено Тогда
Возврат;
КонецЕсли;
Текст = ВыделенныйТекст;
Если Не ЗначениеЗаполнено(Текст) Тогда
Текст = ТекстМодуля;
КонецЕсли;
ПолеТекстаПрограммы = ПолеТекстаПрограммыИР(ПодключениеИР, ТекстМодуля, ПозицияВТексте, ВыделенныйТекст,,,,,,,,,,,,, Истина);
Если ПолеТекстаПрограммы = Неопределено Тогда
Возврат;
КонецЕсли;
ЗапомнитьТекстДляСравнения(ПодключениеИР, ПолеТекстаПрограммы, Текст);
КонецПроцедуры
Процедура ЗапомнитьТекстДляСравнения(Знач ПодключениеИР, Знач ПолеТекстаПрограммы, Знач Текст) Экспорт
МассивСравнения = ТурбоКонф.ВосстановитьЗначениеСеанса("МассивСравнения"); //Массив
Попытка
МассивСравнения.Количество();
Исключение
МассивСравнения = Неопределено;
КонецПопытки;
Сообщение = "";
МассивСравнения = ПолеТекстаПрограммы.ЗапомнитьДляСравнения(Ложь, Текст, МассивСравнения, Сообщение);
ТурбоКонф.СохранитьЗначениеСеанса("МассивСравнения", МассивСравнения);
Если ЗначениеЗаполнено(Сообщение) Тогда
ПоказатьВсплывающееУведомление(Сообщение);
Иначе
ВосстановитьОкноПриложения(ПодключениеИР);
КонецЕсли;
КонецПроцедуры
Процедура ВосстановитьОкноПриложения(ПодключениеИР)
// ПодключениеИР нельзя из кэша брать, т.к. там активное окно конфигуратора заново получается
СтароеАктивноеОкно = ТурбоКонф.ПолучитьАктивноеОкно();
ПодключениеИР.Visible = Истина;
МодулиИР = МодулиИР(ПодключениеИР);
ИдентификаторПроцессаИР = МодулиИР.ирКэш.ИдентификаторПроцессаОСЛкс();
// В 8.3.9- заголовок окна будет с добавкой слева
ФиктивноеОкно = 1;
Если Не ЗначениеЗаполнено(Конфигуратор) Тогда
ОкноКонфигуратора = ФиктивноеОкно;
Иначе
ОкноКонфигуратора = Конфигуратор.ГлавноеОкно;
КонецЕсли;
//Если ЗначениеЗаполнено(ЗаголовокПриложенияИР) Тогда
// ШаблонЗаголовка = МодулиИР.ирОбщий.ТекстДляРегВыраженияЛкс(ЗаголовокПриложенияИР);
//КонецЕсли;
ШаблонЗаголовка = "";
ТурбоКонф.НачатьВызовВнешнегоОкнаАсинх(ШаблонЗаголовка, 2000, ОкноКонфигуратора, РежимОткрытияВнешнегоОкна.ГлавноеОкно, Истина, ИдентификаторПроцессаИР);
ЗавершитьВызовВнешнегоОкнаАсинх(ФиктивноеОкно, ИдентификаторПроцессаИР);
// Подождем получения фокуса окном приложения ИР, что иногда не сразу происходит https://turboconf.ru/Tasks/8912
ЖдатьПотерюАктивностиОкна(СтароеАктивноеОкно);
КонецПроцедуры
// Ненадежно. Вместо этого метода лучше вызывать ТипТекущегоЭлементаИнтерфейса(),
//
// Параметры:
// СтароеАктивноеОкно - Число -
// ЧислоСекунд - Число -
//
// Возвращаемое значение:
// Булево - Истина если окно потеряло фокус
//
Функция ЖдатьПотерюАктивностиОкна(Знач СтароеАктивноеОкно = Неопределено, Знач ЧислоСекунд = 2, Знач НадежныйРежим = Ложь) Экспорт
Если СтароеАктивноеОкно = Неопределено Тогда
СтароеАктивноеОкно = ТурбоКонф.ПолучитьАктивноеОкно();
КонецЕсли;
Если ТурбоКонф.ПолучитьВерсиюAPI() < 6 Или НадежныйРежим Тогда
МоментНачала = ТекущаяДата();
Пока Истина
И ТурбоКонф.ПолучитьАктивноеОкно() = СтароеАктивноеОкно
И ТекущаяДата() <= МоментНачала + ЧислоСекунд - 1 // Не больше ЧислоСекунд секунд ждем
Цикл
ТурбоКонф.Ждать(100);
КонецЦикла;
Результат = ТурбоКонф.ПолучитьАктивноеОкно() <> СтароеАктивноеОкно;
Иначе
Результат = ТурбоКонф.ЖдатьСменуАктивногоОкна(СтароеАктивноеОкно, ЧислоСекунд * 1000, Ложь); // Не надеждно https://turboconf.ru/Tasks/9997
//Сообщить("Резу="+ Результат);
//Сообщить("СтароеАктивноеОкно="+ СтароеАктивноеОкно);
КонецЕсли;
Возврат Результат;
КонецФункции
#1, 13 ноября 2025 19:33
Сначала показалось что в версии 6.5.9420.31777 проблема не воспроизводится. Но после тщательной проверки и там воспроизвелось. Тогда возможно проблема в скрипте.
#2, 13 ноября 2025 19:38
Проблема возникает только если окно ИР было скрыто до вызова команды.
#3, ред. 13 ноября 2025 19:46
Обошел проблему отказом от ожидания активации окна (ЖдатьПотерюАктивностиОкна) там, где это допустимо. Но в скрипте не удалось найти причину проблемы.