ИР Адаптер. Ошибка в обработчике уведомления

bolsun Открыто

Похоже причина все та же, отсутствие обязательных параметров в обработчике.

Ошибка при вызове обработчика. System.IndexOutOfRangeException: Индекс находился вне границ массива.
в ScriptEngine.Machine.MachineInstance.SetCurrentFrameLocals(IValue[] argValues, ParameterDefinition[] parameters, VariablesFrame variables)
в ScriptEngine.Machine.MachineInstance.ExecuteMethod(IRunnable sdo, Int32 methodIndex, IValue[] arguments)
в ScriptEngine.Machine.Contexts.ScriptDrivenObject.CallAsProcedure(Int32 methodNumber, IValue[] arguments)
в TurboConf.HostApplication.NotificationContext.<>c__DisplayClass0_0.<CreateAction>b__0() в D:\Projects\TurboConf\TurboConf.HostApplication\NotificationContext.cs:строка 66

Комментарии

tormozit
#1, ред. 02 мая 2024 13:38

И этой ошибки тоже раньше не было и код этот опять же давно не менял. Значит в ОСкрипт 1.9 параметр стал обязательным и нет обработки такой нештатной ситуации.
Я не знаю как Турбоконф технически зовет эти обработчики. Поэтому не могу создать заявку по этой проблеме в проекте ОСкрипт.
В своем скрипте в этом обработчике тоже добавлю бесполезный параметр.

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


bolsun
#2, ред. 03 мая 2024 00:38

(1) tormozit, вроде в языке 1С, параметры обработчика обязательно указывать.


bolsun
#3, 03 мая 2024 00:36

(1) tormozit, еще раз, не параметр стал обязательным, а у тебя в обработчике не описан параметр.


bolsun
#4, ред. 03 мая 2024 00:51

Вообще сейчас не уверен, что описание параметров обязательно в 1С, проверка не выдает ошибок, будет ли работать корректно обработчик в этом случае не знаю.


bolsun
#5, 03 мая 2024 00:47

В целом почему возникает проблема понятно. Я вызываю обработчик сам, и не знаю описаны ли параметры обработчика в коде. Если там предусмотрен Отказ - я передам Отказ. Если его там нет OneScript правильно ругается.
Т.к. я делаю вызов через движок то и ошибка соответствующая, что Индекс находился вне границ массива.

Так что это даже не баг OneScript.


tormozit
#6, ред. 30 мая 2024 08:40

(5) bolsun, Не согласен. Мне очевидно, что выброс технического (непонятного клиенту) исключения в часто возникающей ситуации - как минимум жесткое обращение с клиентом. Позови любого разработчика скрипта и покажи ему эту ошибку и спроси "Тебе понятно почему она возникла и что нужно сделать?". Уверен он ответит "Нет".
(2) bolsun, А ты попробуй и укажи обработчик с неверным числом параметров в платформе 1С. И посмотри как отреагирует платформа. Ее реакция будет понятной любому клиенту. Поэтому я считаю, что ОСкрипт должен делать так же.


bolsun
#7, ред. 03 мая 2024 18:50

(6) tormozit,

А ты попробуй и укажи обработчик с неверным числом параметров в платформе 1С

Платформа никак не отреагировала, выполнила обработчик без параметра.


tormozit
#8, 03 мая 2024 18:55

(7) bolsun, можешь показать тест? Я имел ввиду обработчик оповещения в методе

Глобальный контекст.ПоказатьОповещениеПользователя
Параметры:
Текст оповещения.
<ДействиеПриНажатии> (необязательный)
Тип: Строка, ОписаниеОповещения.
Если тип ОписаниеОповещения, то содержит описание процедуры, которая будет вызвана при нажатии на окно оповещения c параметрами:
<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.


tormozit
#9, 03 мая 2024 18:57

(7) bolsun, и даже "выполнила обработчик без параметра" тоже соответствует моему утверждению "Ее реакция будет понятной любому клиенту"


bolsun
#10, 03 мая 2024 18:59

(9) tormozit, платформа далеко не идеальна по описанию ошибок.
"Ошибка формата потока" и т.д. чего стоят. Что там понятно клиенту?


bolsun
#11, ред. 03 мая 2024 19:01

(8) tormozit, как по мне абсолютно непрозрачное поведение в этом случае, если заявлены параметры (для которых не указано что они необязательны, во всяком случае я не нашел.)


bolsun
#12, 03 мая 2024 19:03

Еще лучше


tormozit
#13, ред. 03 мая 2024 19:06

Сделал правильный тест аналогичного поведения платформы. Получил ошибку

В методе Тест количество параметров 0. Ожидаемое количество - 1.

Программный код теста

&НаКлиенте
Процедура Команда1(Команда)
	ПоказатьОповещениеПользователя("я", Новый ОписаниеОповещения("Тест", ЭтаФорма), "я");
КонецПроцедуры

&НаКлиенте
Процедура Тест() Экспорт
	Сообщить("Тест");
КонецПроцедуры

ОтважныйБобр.epf


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