Задание значение переменной, наименование которой вычислялось бы. Как сделать?

1. Dimka74 26.01.17 11:08 Сейчас в теме
Сам недоумеваю как по другому ещё можно было озаглавить тему.
Вот код:
Перем ТабЗнач1,ТабЗнач2,ТабЗнач3,ТабЗнач4,ТабЗнач5;
	Для ПНомер=1 По 5 Цикл
		ТабЗнач[ПНомер]=Новый ТаблицаЗначений;
		ТабЗнач[ПНомер].Колонки.Добавить("Номенклатура");
		ТабЗнач[ПНомер].Колонки.Добавить("Количество");
	КонецЦикла;


Нужно в цикле создать Таблицы значений, наименование которых менялось бы при каждой итерации. Так вообще можно делать, а то у меня конфигуратор ругается, что переменная ТабЗнач[ПНомер] - не определена!
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kuzev 47 26.01.17 11:13 Сейчас в теме
(1) используйте Вычислить()
8. Dimka74 26.01.17 12:11 Сейчас в теме
(2)Не совсем понял как использовать эту функцию в моем случае.
9. kuzev 47 26.01.17 12:27 Сейчас в теме
(8)
Перем ТабЗнач1,ТабЗнач2,ТабЗнач3,ТабЗнач4,ТабЗнач5;
    Для ПНомер=1 По 5 Цикл
        Вычислить("ТабЗнач["+ПНомер+"]=Новый ТаблицаЗначений;");
        Вычислить("ТабЗнач["+ПНомер+"].Колонки.Добавить(""Номенклатура"");");
        Вычислить("ТабЗнач["+ПНомер+"].Колонки.Добавить(""Количество"");");
    КонецЦикла;

PS. Вопрос с "говнокодом" выношу за скобки.
23. Alex_E 2355 26.01.17 14:26 Сейчас в теме
(9) ИМХО, увадратные скобки лишние - получится та же строка с ошибкой, а вот без них вполне себе отработает....[ ]
kuzev; Dimka74; +2 Ответить
5. alexx2510 38 26.01.17 11:35 Сейчас в теме
(1) в вашем случае с такими именами переменных создайте массив таблиц значений и обращайтесь по индексу к нужной таблице.
только надо помнить, что индексы в массиве начинаются с 0.

типа такого код:
	МассивТЗ = Новый Массив;
	Для пНомер = 1 По 5 Цикл
		ТЗ = Новый ТаблицаЗначений;
		ТЗ.Колонки.Добавить("Номенклатура");
        ТЗ.Колонки.Добавить("Количество");
		МассивТЗ.Добавить(ТЗ);
	КонецЦикла;
	
	ТЗ_1 = МассивТЗ[0];
Показать
11. Prince_1 4 26.01.17 12:35 Сейчас в теме
(1)А в чем изначальная суть задачи? Может её можно как-то по-другому решить будет
14. Dimka74 26.01.17 13:04 Сейчас в теме
(11)Да задача гораздо сложнее чем сам пример, если позволите:
Задача перераспределить товар около 10тыс наименований между 5ю складами, из-за природной лени хочется собрать маленькую конструкцию, которая в цикле проверяла бы кучу условий и формировала Таблицы значений с необходимыми перемещениями между складами.
По другому, как в цикле перебирать Переменные в наименовании которых встречался бы некий идентификатор, без такого механизма не соображу сделать как.
Поэтому и был Вопрос как реализовать такой код:
Переменная[НомерПеременной]=НовоеЗначение;

Если делать так, то конфигуратор говорит, что ошибка, мол Переменная[НомерПеременной] - не определена.
15. sssss_aaaaa_2011 26.01.17 13:08 Сейчас в теме
(14) М-да... А почему именно переменная/ые? Вы другими средствами пользоваться не умеете? Которые специально предназначены для работы с изменяющимися данными? И которые не требуют динамического кода программы? Например таблицы, массивы?...
17. Dimka74 26.01.17 13:22 Сейчас в теме
(15)
(16)
Пользоваться умею и знаю как. Хотел без глубоких погружений решить эту задачу так, но видимо по другому никак.

Кстати, вопрос остается открытым, уже не привязываясь к конкретной задаче, возможно реализовать такую идею или нет?
Переменная[НомерПеременной]=НовоеЗначение;

Лучший ответ в данном случае будет односложным "Нет" или "Да", но если "Да" то с примером )
19. comptr 31 26.01.17 13:42 Сейчас в теме
(17) в (4), (5) и (7) уже дали ответы, даже с примерами, как такое реализовать. Для повышения быстродействия можно сделать это в запросе, по-моему ildarovich статью на эту тему выкладывал и ещё кто-то.
20. tailer2 26.01.17 14:04 Сейчас в теме
(17) +(7)

соо = новый соответствие;
соо.Вставить(4, "тырбырбыр")

16. alexx2510 38 26.01.17 13:09 Сейчас в теме
(14)
По другому, как в цикле перебирать Переменные в наименовании которых встречался бы некий идентификатор

выше показывал код примера. т.е. можно использовать цикл по элементам массива, где индекс массива и есть по сути этот самый "некий идентификатор"
18. tailer2 26.01.17 13:33 Сейчас в теме
(14) ужосна

порой здесь, было годное решение задачи распределения одного по другому в запросе
3. minimajack 80 26.01.17 11:19 Сейчас в теме
Больше говнокода, богу говнокода
herfis; NECHISTb; collider; +3 Ответить
6. Dimka74 26.01.17 11:47 Сейчас в теме
(3)Да Вы философ, может поясните свою емкую фразу смертным?
10. minimajack 80 26.01.17 12:29 Сейчас в теме
(6)Имена переменных должны включать суть объекта. Табличные части ТЧ1, ТЧ2, ТЧ3 - никто не называет.
12. Dimka74 26.01.17 12:47 Сейчас в теме
(10) Такие названия использую чтобы было поменьше буков, есть риск, что увидев КрасивыеРазвернутыеСодежащиеСутьПредметовОкружающегоМира просто не прочтут до конца мое сообщение =)

Я уж подумал, что ввиду моих скромных знаний в программировании я какую-то глупость сморозил, которую неприлично показывать на приличных форумах, а оно вона че?
13. minimajack 80 26.01.17 12:50 Сейчас в теме
(12)

Я уж подумал, что ввиду моих скромных знаний в программировании я какую-то глупость сморозил, которую неприлично показывать на приличных форум


как насчет метода "СкопироватьКолонки"? Должен работать быстрее....

з.ы. чую дух пэхапэ
4. antz 26.01.17 11:23 Сейчас в теме
пихайте их в структуру.
7. tailer2 26.01.17 12:06 Сейчас в теме
соо = новый соответствие;
для а=1 по 5 Цикл
тз = новый таблицазначений;
// добавить колонок

соо.вставить("тырбырбыр"+а, тз)

конецЦикла

// получить таблицу № 4
таб = соо["тырбырбыр"+4]
Показать

21. tailer2 26.01.17 14:12 Сейчас в теме
если аффтурь скажет, что 20 - не "да", то пусть присмотрит где-нибудь недалеко от себя стенку по-крепче

недалеко потому, что забудет, пока идет, зачем шел
22. Dimka74 26.01.17 14:22 Сейчас в теме
(21)Напрасно Вы ерничаете, ответ я Ваш видел в 7 посте, благодарю. Но все ж, то, что хочу я умещается в 1 строку и легко читается краем глаза, то, что предлагаете вы несколько сложнее и больше в объеме.

Позвольте подвести итог:

так делать в 1с нельзя:
Переменная[НомерПеременной]=НовоеЗначение;
24. Dimka74 26.01.17 14:32 Сейчас в теме
Правильный ответ такой
Вычислить("Переменная"+НомерПеременной+"=НовоеЗначение;");
25. tailer2 26.01.17 15:38 Сейчас в теме
Перем соо; // соответствие новое в теле модуля или при открытии


Функция ИмяПеременной(нн, текущееЗначение)
     Возврат соо.Вставить(нн, текущееЗначние)
КонецФункции

ИмяПеременной(нн, текущееЗначение)


без 'вставить'
но как извратиться, если "краю глаза" надо '=' ?



26. tailer2 26.01.17 15:50 Сейчас в теме
Перем масс; // определяем массив в теле модуля или при открытии формы

Функция ИмяПеременной(нн)
     
     Пока масс.Количество() < нн + 1 Цикл
          масс.Добавить()
     КонецЦикла;

     Возврат масс
КонецФункции

ИмяПеременной[нн] = текущееЗначение
Показать
27. tailer2 26.01.17 15:56 Сейчас в теме
вот идиотизьма то, прости автор
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот