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


1С:Предприятие :: 1С:Предприятие 8 общая

Как сделать динамические переменные? Возможно ли это?

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

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

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

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

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


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

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

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

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


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

x = y["x1"];

   AndrewMuzik
 
25 - 10.01.13 - 09:58
(7) (24) Огромное спасибо за помощь!
Такой вариант действительно лучше подходит
   kosts
 
26 - 10.01.13 - 10:02
ЗначенияСтроки = Структура;
ЗначенияСтроки.Вставить("Цена", 100);
ЗначенияСтроки.Вставить("Сумма", 20);
количество = ЗначенияСтроки.Сумма/ЗначенияСтроки.Цена;

   Serg_1960
 
27 - 10.01.13 - 10:17
Топикстартер, глобальным поиском посмотри в конфе "Новый Структура" или "Новый Соответствие" - там примеров масса. На любой вкус и цвет.


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


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