Конструктор не найден (ТурбоКонф)

tormozit Закрыто

6.4.9328.28227
Один раз за несколько часов работы увидел такую новую ошибку
ScriptEngine.Machine.RuntimeException: {Модуль C:\turboconf\user_scripts\RDT.os / Ошибка в строке: 10140 / Конструктор не найден (ТурбоКонф)}
ТурбоКонф = Новый ("ТурбоКонф");
---> ScriptEngine.Machine.RuntimeException: {Модуль / Ошибка в строке: -1 / Тип не зарегистрирован (ТурбоКонф)}

в ScriptEngine.Machine.StandartTypeManager.GetTypeByName(String name)
в ScriptEngine.Machine.TypeManager.GetFactoryFor(String typeName)
--- Конец трассировки внутреннего стека исключений ---
в ScriptEngine.Machine.TypeManager.GetFactoryFor(String typeName)
в ScriptEngine.Machine.MachineInstance.NewFunc(Int32 argCount)
в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
в ScriptEngine.Machine.MachineInstance.ExecuteCode()
в ScriptEngine.Machine.MachineInstance.ExecuteModuleBody(IRunnable sdo)
в ScriptEngine.Machine.Contexts.UserScriptContextInstance.OnInstanceCreation()
в TurboConf.HostApplication.HostApplicationForm.ExecuteScript(Script script, Keys ctrl, Keys alt, Keys shift, ScreenForm statusForm, String entryPoint, ScriptOptions options, IVariable[] parameters)

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

Подозреваю что связано с возросшей многопоточностью выполнения обработчиков ПриАктивизацииСтрокиТ9 https://turboconf.ru/Tasks/10372

Комментарии

bolsun
#1, 16 июля 2025 17:38

OneScript не поддерживает корректную работу в нескольких потоках, скорее всего отмена одной фоновой задачи приводит к уничтожению контекста, который был создан для другой задачи.


bolsun
#2, 16 июля 2025 17:39

Можно попробовать убрать из этой реализации отмену текущих фоновых задач ПриАктивизацииСтроки.


tormozit
#3, ред. 16 июля 2025 17:46

(2) bolsun, Да, я могу их сам прервать изнутри в коде 1С через проверку файла-флага. Выброшу исключение и они досрочно корректно завершатся на твоем уровне.


tormozit
#4, 16 июля 2025 19:23

В 6.4.9328.35463 тоже сумел вызывать такую ошибку.
Ссылка скрыта


bolsun
#5, 16 июля 2025 20:05

(4) tormozit, значит постановка обработчиков в очередь через lock() необходима.


bolsun
#6, ред. 16 июля 2025 20:08

возможно тогда наоборот поможет отмена накопленных фоновых задач ПриАктивизацииСтроки


bolsun
#7, ред. 16 июля 2025 20:57

6.4.9328.40426
При вставке значения T9 отменяются накопленные в очереди задачи. Но теоретически какая-то задержка возможна при вставке, если в данный момент обработчик ПриАктивизацииСтроки уже выполняется.
https://disk.yandex.ru/d/XRPUNWQtrbwBUw


bolsun
#8, 16 июля 2025 21:29

В предыдущей версии накопленные задачи не отменялись при вставке. Другая реализация

6.4.9328.42197
https://disk.yandex.ru/d/RKeh9wtdT5zNMQ


tormozit
#9, 16 июля 2025 21:42

Если все обработчики теперь снова вызываются строго последовательно, тогда снова возникает ожидание при нажатии ENTER в случае, если текущая строка вызвала долгое вычисление. Поэтому прошу в параметрах обработчика ПриАктивизацииСтроки добавить передачу имени файла-флага, наличие которого будет означать сигнал досрочного завершения вычислений. В начальной схеме этот файл создавал мой обработчик ПриВыбореЗначения. Но с учетом того что этот обработчик снова будет стоять в очереди, у меня нет возможности устанавливать такой флаг.


bolsun
#10, 16 июля 2025 21:55

(9) tormozit, как будут удаляться эти файлы-флаги, если адаптер не установлен?


tormozit
#11, ред. 16 июля 2025 21:59

(10) bolsun, При добавлении задачи вызова обработчика ПриВыбореЗначения в очередь (при нажатии ENTER) создавай файл-флаг. А уже в коде этой задачи непосредственно перед вызовом из скрипта метода ПриВыбореЗначения удаляй этот файл.


bolsun
#12, ред. 16 июля 2025 22:09

(11) tormozit, пользователь может не вставлять значение, а закрыть подсказку отменой. Тогда уж при закрытии окна подсказки удалять. И имя файла флага можно сделать константой и не передавать в обработчик, т.к. при закрытии подсказки он будет всегда удаляться.
Файл будет создаваться в папке данных ТК, путь к которой можно получить через настройки.


tormozit
#13, ред. 16 июля 2025 23:04

(12) bolsun, файл-флаг должен создаваться сразу при выборе пользователем элемента списка, т.е. нажатии ENTER или клика в списке. Как пользователь может при этом закрыть окно списка Т9 без выполнения задачи обработки выбора значения? Кажется, что такое невозможно, даже если в этот момент выполняется обработчик ПриАктивизацииСтроки, т.к. после него (даже если он выбросит исключение) обязательно выполнится задача вызова обработчика ПриВыбореЗначения, в которой первым делом будет удален файл-флаг. Но для подстраховки можно конечно удалять этот файла и при закрытии окна.


bolsun
#14, ред. 16 июля 2025 23:12

(13) tormozit, файл-флаг будет создаваться в момент показа подсказки и удаляться при ее закрытии. Он обозначает, что подсказка еще открыта. Если файла нет - прекращаешь выполнение обработчиков ПриАктивизацииСтроки.


tormozit
#15, ред. 16 июля 2025 23:22

(14) bolsun, Такой файл не поможет моему коду понять, что ему надо досрочно прерваться, т.к. от нажатия пользователем ENTER и до вызова обработчика ПриВыбореЗначения в скрипте файл будет существовать. Возможно я туманно объяснил в (9), но вся суть флага - токен отмены, т.е. сигнал срочного завершения текущих операций для ускорения перехода твоей очереди задач к выполнению задачи вызова обработчика ПриВыбореЗначения. И только после завершения этой задачи ты уже закрываешь окно.


bolsun
#16, ред. 16 июля 2025 23:24

(15) tormozit, аналогично, отсутвие такого файла - причина срочно прерваться. Но таким образом я могу точно гарантировать, подсказка видима или нет. Выполнять дальнейшую обработку ПриАктивизацииСтроки смысла нет, если подсказку уже закрыли тем или иным способом.


bolsun
#17, 16 июля 2025 23:30

Тема задвоилась, закрываю, продолжение в исходной теме https://turboconf.ru/Tasks/10372
bolsun изменил статус на Закрыто


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