|
Вычислить() с программно созданными реквизитами | ☑ | ||
|---|---|---|---|---|
|
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
|
Всем спасибо. Это фича.
Будем менять на Этаформа[Реквизит] |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |