Непонятные ошибки в работе команды НайтиПоследнююПравкуВХранилище ИР адаптера

tormozit Открыто

Команда НайтиПоследнююПравкуВХранилище ИР адаптера.
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 и помещает нажатия клавиш в буфер. А потом в конце работы скрипта их отправляет и потому полезное окно в приложении ИР сразу закрывается

Комментарии

tormozit
#1, ред. 03 января 2025 09:19

Удалось решить проблему таким кодом для закрытия немодального окна сравнения текстов

	Окно = ТурбоКонф.ПолучитьАктивноеОкно();
	ТурбоКонф.Клавиша(Клавиши.Escape);
	ТурбоКонф.ЖдатьЗакрытияОкна(Окно,, 1000,, Ложь);

Нашел методом тыка, т.к. в понимании UIAutomation это не окно. Кажется это еще один аргумент в пользу наличия какого то окна в понимании UIAutomation в этот момент.


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