|
как программно создать переменную? | ☑ | ||
---|---|---|---|---|
0
Stim
18.02.13
✎
09:58
|
Передаю в функцию текст выполняемого кода для выражения Вычислить(текстКода) И значения переменных для этого кода в структуре:
СтруктураЗначенийПолей = Новый Структура; СтруктураЗначенийПолей.Вставить("Ссылка",ССылка); функция ВычислитьКод(текстКода,СтруктураЗначенийПолей) //здесь нужно как-то объявить переменную Ссылка и присвоить ей значение из структуры. И так нужно сделать для каждой записи структуры вычислить(текстКода); |
|||
1
samozvanec
18.02.13
✎
09:59
|
в тексте кода обращаться СтруктураЗначенийПолей.Ссылка, не?
|
|||
2
Reset
18.02.13
✎
10:00
|
Никак. "Глобальную" сделай.
|
|||
3
ОбычныйЧеловек
18.02.13
✎
10:00
|
В "текстКода" используй свою "СтруктураЗначенийПолей" - в чем проблема то?
|
|||
4
samozvanec
18.02.13
✎
10:01
|
можно еще типатого:
Для Каждого КлючИЗначение Из СтруктураЗначенийПолей Цикл Вычислить("Перем " + КлючИЗначение.Ключ + ";"); КонецЦикла |
|||
5
Reset
18.02.13
✎
10:01
|
Если значения "переменных" нужны только в процессе "вычислить", присоединяюсь к (1)(3)
|
|||
6
Reset
18.02.13
✎
10:03
|
(4) не получится
|
|||
7
samozvanec
18.02.13
✎
10:03
|
+(4) если не сработает, можно скомпоновать текст сначала с объявлением переменных и к нему прилепить текстКода
|
|||
8
Reset
18.02.13
✎
10:04
|
Хотя вот так можно, без Перем:
Структура.Ключ+"="+Структура.Значение+";" ;) |
|||
9
samozvanec
18.02.13
✎
10:04
|
эх понедельник... не объявлять надо, а присваивать значения типа
Вычислить(КлючИЗначение.Ключ + " = " + КлючИЗначение.Значение + ";"); |
|||
10
Reset
18.02.13
✎
10:05
|
значение придется транслировать в литерал или выражение при этом (если ссылка к примеру)
|
|||
11
Stim
18.02.13
✎
10:06
|
(5) хм. походу никак не получится.
я делаю универс функцию для вычисляемых полей СКД. Чтобы можно было отправить текст кода, значения полей в структуре.. но поля можно указывать только непосредственно в параметрах функции, иначе они не передадутся. а в выражении нельзя использовать конструкции типа Новый Структура |
|||
12
Reset
18.02.13
✎
10:06
|
имхо, он того не стоит. Вполне удобно использовать что-то вроде
Параметры=СтруктураЗначенийПолей; Сообщить(Параметры.Имя); |
|||
13
Reset
18.02.13
✎
10:08
|
Тогда мояФ(Текст,П1=неопределено,П2=неопределено,...)
:) |
|||
14
НЕА123
18.02.13
✎
10:10
|
(0)
как вариант. если форма, то создавать реквизиты формы. |
|||
15
Stim
18.02.13
✎
10:12
|
(14) не форма, а вычисляемое поле СКД и общий модуль
|
|||
16
Reset
18.02.13
✎
10:13
|
(8)(9)(10) Вообще любое значение придется транслировать :-(
Определять тип и писать соответсвенно. Для Cтроки "="""+значение+""""; При этом заменять кавычки внутри значения на двойные, ПС на ПС+"|", и тп. Для коллекций вообще блок кода. Короче точно НЕ стоит оно того ;) |
|||
17
Stim
18.02.13
✎
10:23
|
мда.. вобщем сделал, совсем универсальной сделать не получилось, зато получилось сделать универсальную для вывода строк ТЧ в одну колонку СКД.
вычисляемое поле: МойМодуль.ПреобразоватьТабличнуюЧастьВСтроку(Ссылка,"Товары","номенклатура",", ") Модуль: Функция ПреобразоватьТабличнуюЧастьВСтроку(Ссылка,ТабличнаяЧасть,КолонкаТабличнойЧасти,РазделительСтрокиТабличнойЧасти) экспорт Разделитель = ""; Результат = ""; Для каждого строкаТабличнойЧасти Из Ссылка[ТабличнаяЧасть] цикл Результат = Результат +Разделитель+Строка(строкаТабличнойЧасти[КолонкаТабличнойЧасти]); Разделитель = РазделительСтрокиТабличнойЧасти; КонецЦикла; возврат Результат; КонецФункции |
|||
18
stonewolf
18.02.13
✎
10:32
|
Как-то так:
Выполнить(Ключ+"=Структура["""+Ключ+"""];"); |
|||
19
Aprobator
18.02.13
✎
10:42
|
(0) вот реально не вижу в чем проблема. Ну так объяви.
Главное чтоб потом имя переменной было использовано в текстКода. |
|||
20
Fragster
гуру
18.02.13
✎
10:52
|
у меня есть велосипед, в котором произвольные условия можно задавать через "отбор" СКД. там есть функция типа:
Функция ПолучитьЗначениеСКД(Значение, Регистр, Документ) Если ТипЗнч(Значение) = Тип("ПолеКомпоновкиДанных") Тогда Путь = Строка(Значение); Если Найти(Путь,"Константа")=1 Тогда Возврат Вычислить(Путь+".Получить()"); Иначе Возврат Вычислить(Путь); КонецЕсли; Иначе Возврат Значение; КонецЕсли; КонецФункции в Значение - в итоге передается строка вида "Документ.Контрагент", "Регистр.Сумма" и т.п. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |