Имя: Пароль:
1C
1С v8
Как сделать динамические переменные? Возможно ли это?
,
0 AndrewMuzik
 
10.01.13
09:15
Возможно ли сделать динамические переменные?
Таким способом пользовался в AutoIT. Хотелось бы найти похожее решение и в 1С 8.2

Как было в AutoIT
x=0
Do
x=x+1
y&x = x
until [условие выхода]

на выходе получаем:
y1=1
y2=2
и т.д.
То есть динамически формируемые переменные.
Естественно конструкция вида: "Переменная+х=Значение;" в 1С не работает. Хочется думать, что я просто не в том направлении думаю.
Подскажите пожалуйста!
1 mikecool
 
10.01.13
09:15
массив, список
2 mikecool
 
10.01.13
09:16
структура, соответствие
3 mikecool
 
10.01.13
09:16
Естественно конструкция вида: "Переменная+х=Значение;" в 1С не работает.
зато есть Выполнить
4 AndrewMuzik
 
10.01.13
09:18
А можно немного развернутее?
5 DrShad
 
10.01.13
09:21
МассивПеременных = Новый Массив;
Для н = 1 по 10 Цикл
МассивПеременных.Добавить(н);
КонецЦикла;

на выходе получаем
МассивПеременных[0] = 1
МассивПеременных[1] = 2
МассивПеременных[2] = 3
....
МассивПеременных[9] = 10
6 Serg_1960
 
10.01.13
09:22
ДинамическиеПеременные.х1, ДинамическиеПеременные[х2]...
7 dmpl
 
10.01.13
09:22
(4) Для таких целей используются коллекции с элементами типа КлючИЗначение. Вот ключ можно сделать строкой, и обращаться по этому ключу. Пример такого объекта - Соответствие и Структура.
8 RomaH
 
naïve
10.01.13
09:24
(4) Выполнить("Переменная" + Формат(х,"ЧГ=0") + " = х");
на выходе получишь Переменная1 = 1;
9 Александр_
Тверь
 
10.01.13
09:27
(8) не надо советовать человеку это.
в его случае ответ содержится в (7)
10 AndrewMuzik
 
10.01.13
09:29
(5) За вариант спасибо!
(8) Очень даже похоже на то, что нужно. Но я так понимаю, что бы потом использовать "Переменная1" я должен знать её, и не смогу собрать так же динамически?
11 MrStomak
 
10.01.13
09:33
(10) Это жуткий костыль, его использовать можно только в исключительных случаях, в твоём случае нужна любая из упомянутых универсальных коллекций.
12 Александр_
Тверь
 
10.01.13
09:33
(10) команда "Выполнить" позволяет собирать код.
НО! это ОЧЕНЬ плохой путь. После, когда возникнет какая-либо ошибка, будет очень сложно ее отловить.
Самое правильное и простое решение указано в (7). Послушай.
13 AndrewMuzik
 
10.01.13
09:35
(12) Уже читаю в этом направлении. Но не отказался бы и от простого примера :)
А так в целом спасибо за подсказанные направления, всем!
14 MrStomak
 
10.01.13
09:36
x=0
Do
x=x+1
y&x = x
until [условие выхода]

В интерпретации 1с:

х=0;
у=Новый Соответствие;
Пока [условие выхода] Цикл
х=х+1;
y.Вставить(х,х);
КонецЦикла;

последующее обращение:
Для Сч=1 по х цикл
Сообщить(y[x]);
КонецЦикла;
15 RomaH
 
naïve
10.01.13
09:36
(9) я не советую, я рассказываю
(10) что мешает собрать строку для "Выполнить"?
16 kosts
 
10.01.13
09:41

Выполнить("х1=1");
х = х1;


{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(2,5)}: Переменная не определена (х1)
х = <<?>>х1; (Проверка: Толстый клиент (обычное приложение))
17 MrStomak
 
10.01.13
09:43
да, синтаксический контроль так не пройдёт...
18 MrStomak
 
10.01.13
09:43
Выполнить("х1=1");
Выполнить("х = х1");
19 НЕА123
 
10.01.13
09:46
(18)
работает?
20 Web00001
 
10.01.13
09:48
(19)Конечно нет.
21 AndrewMuzik
 
10.01.13
09:49
(14)
х=0;
у=Новый Соответствие;
Пока [условие выхода] Цикл
х=х+1;
y.Вставить(х,х);
КонецЦикла;

последующее обращение:
Для Сч=1 по х цикл
Сообщить(y[x]);
КонецЦикла;

Если правильно понимаю, то тут будут переменные типа y[ЧИСЛО]. Т.е. Сделать переменную из двух Букв(Слов) не получится?
22 Chai Nic
 
10.01.13
09:51
(17) Еще в семерке была у меня такая идея, сделать универсальную функцию по переносу в переменные текущего контекста значений колонок строки таблицы значений.. Через Шаблон получилось переменным значение присвоить, а вот обращаться в коде к ним дальше не получилось - ругался на неопределенную переменную. Так и не сбылась мечта)
23 MrStomak
 
10.01.13
09:53
(21) неправильно понимаешь, ключом соответствия может быть что угодно
24 dmpl
 
10.01.13
09:56
(21) Можно


y.Вставить("х" + СокрЛП(x),х);


Тогда обращение потом будет


x = y["x1"];
25 AndrewMuzik
 
10.01.13
09:58
(7) (24) Огромное спасибо за помощь!
Такой вариант действительно лучше подходит
26 kosts
 
10.01.13
10:02

ЗначенияСтроки = Структура;
ЗначенияСтроки.Вставить("Цена", 100);
ЗначенияСтроки.Вставить("Сумма", 20);
количество = ЗначенияСтроки.Сумма/ЗначенияСтроки.Цена;
27 Serg_1960
 
10.01.13
10:17
Топикстартер, глобальным поиском посмотри в конфе "Новый Структура" или "Новый Соответствие" - там примеров масса. На любой вкус и цвет.


PS: на всякий случай, если чукча не читатель :)

ДинамическиеПеременные = Новый Структура();
Для х=1 По 10 Цикл
  ДинамическиеПеременные.Вставить("y"+х,х);
КонецЦикла;
Сообщить(ДинамическиеПеременные.y1);
Сообщить(ДинамическиеПеременные.y2);