Имя: Пароль:
1C
1С v8
как программно создать переменную?
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 Тогда
           Возврат Вычислить(Путь+".Получить()");
       Иначе
           Возврат Вычислить(Путь);
       КонецЕсли;
   Иначе
       Возврат Значение;
   КонецЕсли;
КонецФункции

в Значение - в итоге передается строка вида "Документ.Контрагент", "Регистр.Сумма" и т.п.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший