|
Как сделать динамические переменные? Возможно ли это? | ☑ | ||
---|---|---|---|---|
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.МодульОбъекта(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) Можно
Тогда обращение потом будет
|
|||
25
AndrewMuzik
10.01.13
✎
09:58
|
(7) (24) Огромное спасибо за помощь!
Такой вариант действительно лучше подходит |
|||
26
kosts
10.01.13
✎
10:02
|
|
|||
27
Serg_1960
10.01.13
✎
10:17
|
Топикстартер, глобальным поиском посмотри в конфе "Новый Структура" или "Новый Соответствие" - там примеров масса. На любой вкус и цвет.
PS: на всякий случай, если чукча не читатель :) ДинамическиеПеременные = Новый Структура(); Для х=1 По 10 Цикл ДинамическиеПеременные.Вставить("y"+х,х); КонецЦикла; Сообщить(ДинамическиеПеременные.y1); Сообщить(ДинамическиеПеременные.y2); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |