Ошибка "Индекс находился вне границ массива" вызова ТурбоКонф.ПолучитьRuntimeId()

tormozit Закрыто

ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 1137 / Внешнее исключение (System.IndexOutOfRangeException): Индекс находился вне границ массива.}
ИдентификаторПоля = ТурбоКонф.ПолучитьRuntimeId(); // 9мс
Ссылка скрыта

Комментарии

tormozit
#1, 23 сентября 2023 09:37

Ошибка происходит похоже при первом открытии COM приложения


bolsun
#2, ред. 23 сентября 2023 12:18

Метод вызывается не в окне конфигуратора, фокус уходит в COM окно

[23.09.23 09:10:24:911] -------------------------------------------UIAutomation Focus Changed = ИР - Srvr="cortex";Ref="ka1";
[23.09.23 09:10:24:938] GetCurrentElementRuntimeId()
[23.09.23 09:10:24:956] Не удалось выполнить скрипт ИРАдаптер->НайтиВызовыМетода


bolsun
#3, 23 сентября 2023 12:35

Возможно первый показ COM окна забирает фокус себе, похоже нужно его возвращать в конфигуратор, после первого открытия COM окна.


bolsun
#4, 23 сентября 2023 12:43

Проверить не могу, у меня этот скрипт всегда вызывает ошибку + последующее зависание COM окна

Значение не является значением объектного типа (ИмяОбщегоТипа)
{ИнструментыРазработчикаTormozit Обработка.ирПлатформа.МодульОбъекта(3416)}: ИмяОбщегоТипа = СтруктураТипа.ИмяОбщегоТипа;
{ИнструментыРазработчикаTormozit Обработка.ирКлсПолеТекстаПрограммы.Форма.МетодыМодулей.Форма(161)}: ИмяМодуля = мПлатформа.ИмяФайлаМодуляБезРасширения(СтруктураТипа, ТипМодуляКонфигурации);
{ИнструментыРазработчикаTormozit Обработка.ирКлсПолеТекстаПрограммы.Форма.МетодыМодулей.Форма(103)}: ДобавитьМетодыМодуля(ПараметрМодуль.СтруктураТипа,,, ФайлыРасширений);
{ИнструментыРазработчикаTormozit Обработка.ирКлсПолеТекстаПрограммы.Форма.МетодыМодулей.Форма(61)}: ПерезаполнитьТаблицуВсехМетодов();
{ИнструментыРазработчикаTormozit Обработка.ирКлсПолеТекстаПрограммы.МодульОбъекта(7373)}: ФормаВыбора.Открыть();
{ИнструментыРазработчикаTormozit ОбщийМодуль.ирКэш.Модуль(1659)}: ТекущийПроцесс = ПолучитьCOMОбъект("winmgmts:!\.\root\CIMV2:Win32_Process.Handle='" + XMLСтрока(ИдентификаторПроцессаОС) + "'");
{ИнструментыРазработчикаTormozit ОбщийМодуль.ирКэш.Модуль(1048)}: КоманднаяСтрокаПроцесса = ирКэш.КоманднаяСтрокаТекущегоПроцессаОСЛкс();
{ИнструментыРазработчикаTormozit ОбщийМодуль.ирОбщий.Модуль(4292)}: КлючБазыВСпискеПользователя = ирКэш.КлючБазыВСпискеПользователяИзКоманднойСтрокиЛкс();
{ИнструментыРазработчикаTormozit ОбщийМодуль.ирГлобальный.Модуль(399)}: Если ирОбщий.КлючБазыВСпискеПользователяЛкс() = Неопределено Тогда


tormozit
#5, 23 сентября 2023 12:51

Проверять не нужно. Варианты решения проблемы понятны.

  1. Сначала делать окно невидимым. Затем получить ID поля. Затем опять делать окно видимым. Пользователь получает немного неприятное моргание полноэкранное.
  2. Получать ID поля до запуска COM окна и держать его в глобальной переменной.


tormozit
#6, 23 сентября 2023 12:54

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


tormozit
#7, ред. 23 сентября 2023 12:56

Но текст ошибки в самом Турбоконфе надо бы облагородить. А то текущая формулировка многим непонятна будет. Или просто вернуть "Неопределено" когда этот массив пуст.


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