Ошибка метода ПолучитьЭлементыСписка() в окне точек останова на 8.3.24

tormozit Закрыто Высокий

Ошибка возникла только один раз и больше не появлялась. Но в остальных случаях функция выполняется очень долго и возвращает пустой массив.

Не удалось выполнить скрипт ИРАдаптер->ПерейтиКОпределению
ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 495 / Внешнее исключение (System.ArgumentNullException): Значение не может быть неопределенным.}
ТекстыПолей = ТурбоКонф.ПолучитьЭлементыСписка(); // 200мс!
---> System.ArgumentNullException: Значение не может быть неопределенным.
в ScriptEngine.Machine.Values.StringValue..ctor(String value)
в ScriptEngine.Machine.Values.StringValue.Create(String value)
в TurboConf.HostApplication.Api.<>c.<GetListElements>b__180_0(String i)
в System.Linq.Enumerable.WhereSelectListIterator2.MoveNext() в System.Collections.Generic.List1..ctor(IEnumerable1 collection) в TurboConf.HostApplication.Api.GetListElements() в lambda_method(Closure , Api , IValue[] ) в ScriptEngine.Machine.Contexts.AutoContext1.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в ScriptEngine.Machine.MachineInstance.ResolveMethodFunc(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
--- Конец трассировки внутреннего стека исключений ---
в 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, IVariable[] parameters, ScriptOptions options)

Комментарии

tormozit
#1, 07 ноября 2023 08:15


bolsun
#2, 07 ноября 2023 19:36

Это таблица, а не список.
Нужно использовать ТурбоКонф.ПолучитьТекстТаблицы()


tormozit
#3, 07 ноября 2023 19:49

В 8.3.23 этот способ работает и причем уже давно. Смотри глубже. В 8.3.24 изменилось окно "Точки останова".


tormozit
#4, 12 декабря 2023 11:38

24-я платформа уже в релизе


bolsun
#5, ред. 12 декабря 2023 21:35

(4) tormozit, я посмотрел в чем отличие и почему метод может работать некорректно в 8.3.24

В предыдущих версиях платформы первый элемент таблицы получал фокус при открытии окна. В 8.3.24 фокус получает весь элемент "таблица". Это можно увидеть если нажать кнопку Вниз. Для 8.3.23 выделится вторая строка таблицы, а для 8.3.24 - первая.
Поэтому для 8.3.24 достаточно нажать кнопку Вниз и метод отрабатывает корректно.

Но еще раз этот метод и не предназначен для получения элементов таблиц, а предназначен для получения элементов списков, хотя в некоторых случаях он срабатывает и для таблиц.

Решение - для начала можно использовать хак выше.
Можно сделать отдельный метод ПолучитьЭлементыТаблицы, который уже будет учитывать версии платформы.


bolsun
#6, 13 декабря 2023 16:25

Нажатие Вниз для 8.3.24 помогло?
bolsun изменил статус на На выяснении


bolsun
#7, 14 декабря 2023 17:35

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


tormozit
#8, ред. 22 декабря 2023 18:01

(5) bolsun, не помогло

если нажать кнопку Вниз. Для 8.3.23 выделится вторая строка таблицы, а для 8.3.24 - первая.

Не подтверждаю. У меня в 8.3.24 тоже выделяется вторая строка при первом нажатии клавиши "Вниз".
QeQto8erah.mp4

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


tormozit
#9, ред. 22 декабря 2023 18:18

Еще заметил что при этом надолго парализуется ClipAngel (что то там с прокачкой очереди сообщений). Чего не происходит в 8.3.23 и ниже. Возможно это как то связано. Причем если из самого ClipAngel выполнять открытие той же ссылки, то проблемы нет. Если убрать ClipAngel, то поведение Турбоконфа в 8.3.24 не изменяется - такая же ошибка возникает.


bolsun
#10, 23 декабря 2023 15:52

На этой версии у меня работает ПолучитьЭлементыСписка() в окне точек останова в 8.3.24.1342

https://disk.yandex.ru/d/XKCz9ijzgtoO1w


tormozit
#11, ред. 23 декабря 2023 16:08

Проверил. Проблема осталась в точности такая же - секунд 30-40 Турбоконф что то делает и парализует CLipAngel, если он запущен. В конце выдает ту же ошибку.

Не удалось выполнить скрипт ИРАдаптер->ПерейтиКОпределению
ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Portable\TurboConf\user_scripts\RDT.os / Ошибка в строке: 696 / Внешнее исключение (System.ArgumentNullException): Значение не может быть неопределенным.}
ТекстыПолей = ТурбоКонф.ПолучитьЭлементыСписка(); // 200мс
---> System.ArgumentNullException: Значение не может быть неопределенным.
в ScriptEngine.Machine.Values.StringValue..ctor(String value)
в ScriptEngine.Machine.Values.StringValue.Create(String value)
в TurboConf.HostApplication.Api.<>c.<GetListElements>b__149_0(String i)
в System.Linq.Enumerable.WhereSelectListIterator2.MoveNext() в System.Collections.Generic.List1..ctor(IEnumerable1 collection) в TurboConf.HostApplication.Api.GetListElements() в lambda_method(Closure , Api , IValue[] ) в ScriptEngine.Machine.Contexts.AutoContext1.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
в ScriptEngine.Machine.MachineInstance.ResolveMethodFunc(Int32 arg)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
--- Конец трассировки внутреннего стека исключений ---
в 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)

Ссылка скрыта

RDT.os


bolsun
#12, 23 декабря 2023 16:07

Нужен лог без ClipAngel


tormozit
#13, ред. 23 декабря 2023 16:07

Там есть оба сценария: с CLipAngel и без него.


tormozit
#14, ред. 23 декабря 2023 16:10

Правда сейчас я тесты уже делаю в 8.3.25.1072, но там эти окна вроде бы не менялись. И поведение наблюдается точно то же что было в 8.3.24.


bolsun
#15, 23 декабря 2023 16:13

(14) tormozit, тесты делаешь на 8.3.25.1072, я пишу про 8.3.24.1342, а в логе 8.3.23.2040. Я уже запутался.
Плюс не ясно в каком месте там включен CLipAngel в каком нет.


bolsun
#16, 23 декабря 2023 16:13

Предлагаю сделать 2 лога на версии 8.3.24.1342. С CLipAngel и без.


tormozit
#17, ред. 23 декабря 2023 16:22

Тут последний лог без ClipAgel Ссылка скрыта


tormozit
#18, 23 декабря 2023 16:15

Еще при этом наблюдаются несколько раз достаточно долгие замирания перемещения указателя мыши.


bolsun
#19, 23 декабря 2023 16:15

Еще желательно проверить это не из скрипта RDT, а открыть окно точек останова вручную и вызвать.

Элементы = ТурбоКонф.ПолучитьЭлементыСписка();
Сообщить("Количество="+Элементы.Количество());


bolsun
#20, 23 декабря 2023 16:17

(18) tormozit, судя по логу метод срабатывает не в окне точек останова, а в главном окне конфигуратора. Со всеми вытекающими последствиями.


tormozit
#21, 23 декабря 2023 16:21

(15) bolsun, про "в логе 8.3.23.2040" - это конфигуратор, в котором я редактирую скрипт. В нем я НЕ выполнял тест, но редактировал скрипт.


bolsun
#22, 23 декабря 2023 16:24

(21) tormozit, в целом в чем проблема я уже написал в (20)


bolsun
#23, 23 декабря 2023 16:24

Чтобы убедиться, что метод работает нужен тест из (19) и лог если проблема сохранится.


tormozit
#24, 23 декабря 2023 16:27

(23) bolsun, этот тест выполняется корректно


tormozit
#25, ред. 23 декабря 2023 16:32

(2) bolsun, ТурбоКонф.ПолучитьТекстТаблицы() тут работает без ошибки. Но он медленнее. Хочется чтобы быстрый метод ПолучитьЭлементыСписка() тоже везде работал, т.к. он уже во многих местах моего скрипта используется и я еще пока не все их протестировал в 8.3.24+


bolsun
#26, ред. 23 декабря 2023 16:41

(25) tormozit, я же пишу про метод ПолучитьЭлементыСписка(), а не про ПолучитьТекстТаблицы(). Он у меня работает также на всех платформах.


bolsun
#27, 23 декабря 2023 16:45

(25) tormozit, если тест из (19) выполняется, значит метод ПолучитьЭлементыСписка() работает. В чем тогда проблема я не пойму.


tormozit
#28, 23 декабря 2023 16:46

(26) bolsun, Почитай сообщение (2) на которое я отвечал.


bolsun
#29, 23 декабря 2023 16:48

(28) tormozit, что должно прояснить это сообщение?
ПолучитьЭлементыСписка() и ПолучитьТекстТаблицы() оба работают как я понял из теста.
Почему возникает ошибка я объяснил выше.


tormozit
#30, 23 декабря 2023 16:48

(27) bolsun, Может быть тебе все таки повторить мой тест? Возможно ты сможешь отладчиком что то нащупать во время этой длительной операции.


bolsun
#31, 23 декабря 2023 16:49

(30) tormozit, я уже написал 2 раза в чем проблема. Метод вызывается раньше, чем окно получает фокус.


tormozit
#32, ред. 23 декабря 2023 16:50

  1. Скопируй ссылку на любую строку модуля командой "ИР Копировать ссылку".
  2. Активируй окно сообщений
  3. Выполни команду "ИР Перейти к определению".


tormozit
#33, ред. 23 декабря 2023 16:56

(31) bolsun, понял. Попробую поставить задержку побольше. Но все же прошу застраховать клиента API и не морозить Турбоконф и другие программы на столько длительное время в случае, если этот метод случайно позвали в главном окне.


tormozit
#34, 23 декабря 2023 17:07

Раскомментировал ожидание смены текущего элемента перед вызовом ПолучитьЭлементыСписка()
ТурбоКонф.ЖдатьСменуТекущегоЭлемента(СтарыйИД, 1000, Истина);
Ошибка и заморозка перестали возникать.


bolsun
#35, ред. 23 декабря 2023 17:33

(33) tormozit, добавлю для начала такое уведомление. Хотя бы будет видно, что что-то не так.


bolsun
#36, 23 декабря 2023 17:33

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


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