Команда НайтиПоследнююПравкуВХранилище ИР адаптера.
RDT.os
Она последний раз точно работала летом. После этого я ее не дорабатывал и не использовал. Сейчас она вызывает ошибки. Вот основной цикл команды. В нем и возникает проблема.
Пока Истина Цикл
ТурбоКонф.КонтролШифтКлавиша(Клавиши.F10);
ТурбоКонф.КликнутьПоЭлементу("Сравнить выборочно с объектом конфигурации", "элемент меню", 0, Ложь);
ТурбоКонф.КликнутьПоЭлементу("Модуль", "элемент меню", 0, Ложь);
ТурбоКонф.КликнутьПоЭлементу("Модуль объекта", "элемент меню", 0, Ложь);
ТурбоКонф.КликнутьПоЭлементу("Форма (Модуль)", "элемент меню", 0, Ложь);
ТурбоКонф.Ждать(50);
ЗаголовокОкна = ТурбоКонф.ПолучитьЗаголовокТекущегоОкна();
Если ЗаголовокОкна = "Выборочное сравнение" Тогда
// Версии идентичны. Нажимаем ОК
СтарыйИД = ТурбоКонф.ПолучитьRuntimeIdСтрокой();
ТурбоКонф.Клавиша(Клавиши.Enter);
Иначе
ТурбоКонф.Клавиша(Клавиши.Tab);
РазобратьПозициюВТексте();
ПолеТекстаПрограммы = ПолеТекстаПрограммыИР(ПодключениеИР, ТекстМодуля, ПозицияВТексте, ВыделенныйТекст, Ложь,, Ложь);
СтрокаМетода = ПолеТекстаПрограммы.мМодульМетаданных.Методы.Найти(НРег(ИмяМетода), "НИмя");
ОпределениеИзВерсии = "";
Если СтрокаМетода <> Неопределено Тогда
ОпределениеИзВерсии = ПолеТекстаПрограммы.ТекстМетодаСОписанием(СтрокаМетода);
КонецЕсли;
СтарыйИД = ТурбоКонф.ПолучитьRuntimeIdСтрокой();
Если ОпределениеИзВерсии <> ОпределениеРабочее Тогда
НайтиСтрокуВОкне(СтрПолучитьСтроку(СокрЛ(ОпределениеРабочее), 1));
ВосстановитьОкноПриложения(ПодключениеИР);
МодулиИР.ирКлиент.Сравнить2ЗначенияВФормеЛкс(ОпределениеИзВерсии, ОпределениеРабочее,, "Старая", "Новая",,,,, "ВстроенныйЯзык", ИмяМетода);
Возврат;
КонецЕсли;
// Закрываем окно сравнения модулей
ТурбоКонф.Клавиша(Клавиши.Escape);
//ТурбоКонф.Клавиша(Клавиши.Escape); // Антибаг Трубоконфа
КонецЕсли;
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 1000, Ложь);
ТекстСтрокиИсторииНовый = ВыделенныйТекст(Ложь);
Если не ЗначениеЗаполнено(ТекстСтрокиИсторииНовый) Тогда
ВызватьИсключение "Не удалось получить текст элемента списка версий";
КонецЕсли;
Если ТекстСтрокиИсторииСтарый = ТекстСтрокиИсторииНовый Тогда
Прервать;
КонецЕсли;
ТекстСтрокиИсторииСтарый = ТекстСтрокиИсторииНовый;
ТурбоКонф.Клавиша(Клавиши.Up);
КонецЦикла;
Опорная строка цикла помечена единственным экземпляром комментария
// Антибаг Трубоконфа
При первом после запуска Турбоконфа вызове этой команды с раскомментированной опорной строкой возникает такая ошибка
ScriptEngine.Machine.TypeConvertionException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 3676 / Значение не является значением объектного типа}
ИДКонфигуратора = Конфигуратор.PID; в ScriptEngine.Machine.Values.GenericValue.AsObject()
в ScriptEngine.Machine.MachineInstance.ResolveProp(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()
в ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, Int32 methodIndex, IValue[] arguments)
в ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в TurboConf.HostApplication.HostApplicationForm.ExecuteScript(Script script, Keys ctrl, Keys alt, Keys shift, ScreenForm statusForm, String entryPoint, ScriptOptions options, IVariable[] parameters)
Ссылка скрыта
При непервом после запуска Турбоконфа вызове этой команды с раскомментированной опорной строкой возникает такая ошибка
Ссылка скрыта
Если сразу после появления этой ошибки кликнуть на крестик закрытия окна сравнения текстов, то оно не закроется. А вот со второго клика закроется.
Для борьбы с ней я добавил повторный вызов нажатия Esc, т.к. первый вызов нажатия почему то не срабатывает (оверлей?). И в этом случае (с закомментированной опорной строкой) ошибки не возникает, но повторное нажатие клавиши Esc почему то долетает аж до окна приложения 1С, где и закрывает результирующее окно сравнения методов.
Ссылка скрыта
Ощущение такое, как будто Турбоконф тут включает оверлей, запоминает нажатие Esc и помещает нажатия клавиш в буфер. А потом в конце работы скрипта их отправляет и потому полезное окно в приложении ИР сразу закрывается
#1, ред. 03 января 2025 09:19
Удалось решить проблему таким кодом для закрытия немодального окна сравнения текстов
Нашел методом тыка, т.к. в понимании UIAutomation это не окно. Кажется это еще один аргумент в пользу наличия какого то окна в понимании UIAutomation в этот момент.