|
Вычислить() с программно созданными реквизитами |
☑ |
0
Efimoff
31.08.23
✎
08:54
|
Раньше на форме был заведен реквизит S.
Расчет функции проходил нормально Результат = Вычислить("S*1.5")
Решил создать на форме реквизит S программно. Старый удалил
Пытаюсь рассчитать строку Вычислить("S*1.5").
Программа ругается {<Неизвестный модуль>(1,2)}: Переменная не определена (S)
Если в Вычислить указать Вычислить("ЭтаФорма.S*1.5"), то считает нормально.
Это баг или фича?
Платформа 1С:Предприятие 8.3 (8.3.23.1865)
|
|
1
НафНаф
31.08.23
✎
09:14
|
(0) багофича, прими как должное
|
|
2
Chai Nic
31.08.23
✎
09:23
|
Что-нибудь наоптимизировали, в результате функции Вычислить передается не реальный контекст, а какой-то его кэш
|
|
3
RomanYS
31.08.23
✎
09:28
|
(2) проблема не в вычислить(). Просто в коде вероятно получишь туже ошибку и скорее всего еще во время компиляции формы.
(1) +1
|
|
4
Efimoff
31.08.23
✎
09:30
|
(3) В коде рассчитывает правильно.
Если бы была ошибка, то конструкция Вычислить("ЭтаФорма.S*1.5") тоже бы падала. А она работает зараза!
|
|
5
Donkey_hot
31.08.23
✎
09:32
|
(0) Всегда использую для программно созданных ЭтаФорма[ИмяРеквизита]
|
|
6
НафНаф
31.08.23
✎
09:35
|
Почему через ЭтыФорма? Логика простая, допустим это необязательно
Ну смотри, вот ты пишешь:
А = 42;
и теперь выходит как? Если программно создали реквизит А , то это обращение к нему, а если не создали - то это локальная переменная. А узнать это мы можем только в ран-тайм. Поэтому решили не заморачиваться с таким. И поэтому же нельзя удалить реквизиты, созданные "интерактивно на форме"
|
|
7
RomanYS
31.08.23
✎
09:39
|
(4) проверил в коде, как и ожидал ошибка:
Ошибка инициализации модуля: ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма
по причине:
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(7,11)}: Переменная не определена (S)
Рез = ""+<<?>>S;
[ОшибкаКомпиляцииВстроенногоЯзыка]
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Мас = Новый Массив;
Мас.Добавить(Новый РеквизитФормы("S", Новый ОписаниеТипов("Строка")));
ИзменитьРеквизиты(Мас);
Рез = ""+S;
КонецПроцедуры
|
|
8
Efimoff
31.08.23
✎
09:48
|
Всем спасибо. Это фича.
Будем менять на Этаформа[Реквизит]
|
|