Вход | Регистрация


Можно ли изменить контекст у функции Вычислить()?

Можно ли изменить контекст у функции Вычислить()?
Я
   DTX 4th
 
08.08.18 - 12:38
Дано:
Стр = "СубконтоДт2.Подразделение";
Запись = ...;// У Запись есть реквизит СубконтоДт2, а там есть Подразделение

Хочу:
Знач = Вычислить(Стр, Запись);


Да, в начало Стр можно добавить "Запись.", но Стр может быть сложнее:
"Функ(СубконтоДт2.Подразделение)"
 
 
   Вафель
 
1 - 08.08.18 - 12:39
делай через выполнить. контекст пишай туда же
   DTX 4th
 
2 - 08.08.18 - 12:49
(1) А как в выполнить контекст подменить?
   catena
 
3 - 08.08.18 - 12:50
//Эта функция позволяет в любой момент выполнить любой код на языке 1С над любыми данными, переданными ей. 

//Примеры: 
//= Сообщает некий текст 

//Ду("Сообщить(1)")
//

//= Присваивает переменной Отказ  значение истина 
//Ду("П=истина", Отказ)

//
//= Закрывает форму 

//Ду("П.Закрыть()", ЭтаФорма)
//

//= В отладчике нельзя вызвать процедуру, но можно это сделать через ДУ: 
//Ду("ЗавершитьРаботуСистемы()");

Функция Ду(Код, П=Неопределено, П1=Неопределено,  П2=Неопределено, П3=Неопределено, П4=Неопределено)  Экспорт
    Перем Р;
    Выполнить(Код);
    Возврат Р;
КонецФункции
   Вафель
 
4 - 08.08.18 - 12:51
(2) текстом попределяешь все  свои переменные
А = Значение1
Б = Значение2
Результат = А + Б
   DTX 4th
 
5 - 08.08.18 - 13:05
(3) Немного не то. Потому что

(4) У меня эта строка задаётся в режиме предприятия ("СубконтоДт2.Подразделение")

На примете пока только регулярки. VBScript могёт в (?R)?
   Вафель
 
6 - 08.08.18 - 13:06
(5) ну так тебе просто нужно вычислить
Вычслить("Запись." + МояСтрока)

   DTX 4th
 
7 - 08.08.18 - 13:09
(6) В (0) же написал, почему так не прокатит. Строка может быть такой:
МояСтрока = "Функ(СубконтоДт2.Подразделение)";
МояСтрока = "Функ(123)+СубконтоДт2.Подразделение";

И т.д.
   Вафель
 
8 - 08.08.18 - 13:12
(7) тогда не понятно что же ты такое хочешь вычислить?
   Вафель
 
9 - 08.08.18 - 13:13
Ну или определи перед процедурой
СубконтоДт2 = Запись.СубконтоДт2

   DTX 4th
 
10 - 08.08.18 - 13:28
(8) Строку с контекстом переменной же :|

(9) Думал об этом, но в Выполнить() нельзя переменную объявить

В итоге во так вроде получается:
Процедура ОсновныеДействияФормыТест(Кнопка)
    Перем Рез;
    выполнить("А = 1;Сообщить(А);Рез = А;");
    Сообщить(Рез+1);
КонецПроцедуры

Ну и программно обойти все свой записи.

Спасибо (:
 
 Рекламное место пустует
   DTX 4th
 
11 - 08.08.18 - 13:28
свойства*
   catena
 
12 - 08.08.18 - 13:29
(7)ДУ("Функ(П.Подразделение)",Запись.СубконтоДт2)
   DTX 4th
 
13 - 08.08.18 - 13:30
(12) Там может быть всё что угодно, а не только СубконтоДт2
   Вафель
 
14 - 08.08.18 - 13:32
(13) ну все переменные контекста то заренее известны, а там (4)
   DTX 4th
 
15 - 08.08.18 - 13:37
(14) По большому счету, нет. В конфу могут добавить новый реквизит, например. Но из-за оптимизационный расчетов решил так и сделать.
   Вафель
 
16 - 08.08.18 - 13:40
(15) ну бери реквизиты из метаданных тогда
   DTX 4th
 
17 - 08.08.18 - 13:42
(16) Об этом, собственно, и шла речь в (10) (:

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует