Необычное поведение Выполнить()
Столкнулся с необычным поведением метода Выполнить() в OneScript.Web. Когда использую его внутри объекта (из папки Classes), то если в коде выполнения используется вызов общего модуля, контекст выполнения кода перемещается из объекта куда-то в другое место. Т.е. после вызова обращение к переменным объекта приводит к ошибке. При этом, если вызвать любой метод заранее сохраненного в переменной объекта, контекст возвращается обратно.
Например, такой код в модуле объекта:
ПолеОбъекта = 1;
Сообщить(ТипЗнч(ЭтотОбъект));
ОбщийМодуль.КакойтоМетод();
Сообщить(ТипЗнч(ЭтотОбъект));
ПолеОбъекта = 2;
Первое сообщение выводит тип объекта, как положено, второе - "Сценарий", а на последней строке вылетает ошибка (System.IndexOutOfRangeException): Index was outside the bounds of the array.
При этом, если сделать вот так, то код работает:
ПеременнаяСОбъектом = ЭтотОбъект;
ПолеОбъекта = 1;
Сообщить(ТипЗнч(ЭтотОбъект));
ОбщийМодуль.КакойтоМетод();
ПеременнаяСОбъектом.ЛюбойМетод();
Сообщить(ТипЗнч(ЭтотОбъект));
ПолеОбъекта = 2;
Рабочий пример для OneScript.Web 0.9.1 разместил здесь, добавил два контроллера, с ошибкой и без.
Эти фрагменты кода выполняются через Выполнить? Не вижу, где тут Выполнить
Вот модуль объекта из примера
Перем ПолеОбъекта;
Процедура ВыполнитьСОшибкой() Экспорт
КодВыполнения = "ПолеОбъекта = 1;
|Сообщить(ТипЗнч(ЭтотОбъект));
|ПростоМодуль.Тест();
|Сообщить(ТипЗнч(ЭтотОбъект));
|ПолеОбъекта = 2;";
Выполнить(КодВыполнения);
КонецПроцедуры
Процедура ВыполнитьБезОшибки() Экспорт
КодВыполнения = "ПолеОбъекта = 1;
|О = ЭтотОбъект;
|Сообщить(ТипЗнч(ЭтотОбъект));
|ПростоМодуль.Тест();
|О.ПростоМетод();
|Сообщить(ТипЗнч(ЭтотОбъект));
|ПолеОбъекта = 2;";
Выполнить(КодВыполнения);
КонецПроцедуры
Процедура ПростоМетод() Экспорт
КонецПроцедуры