|
v7: Создание таблиц значений в цикле. | ☑ | ||
---|---|---|---|---|
0
Zhuravlik
03.10.11
✎
01:50
|
Хочу динамически создать несколко тз в Цикле, так, чтобы переменная для ТЗ менялась в этом цикле, как-то так:
для сч = 1 по 5 Цикл ИмяТаблицы = СоздатьОбъект("ТаблицаЗначений"); //Как сделать так, чтобы // КонеЦикла |
|||
1
Zhuravlik
03.10.11
✎
01:51
|
ИмяТаблицы = СоздатьОбъект("ТаблицаЗначений");
//Как сделать так, чтобы //ИмяТаблицы формировалось из Строк "ТЗ"+Строка(сч) например? чтобы на выходе было пять таблиц - тз1, тз2, тз3, тз4, тз5? КонеЦикла |
|||
2
Sereja
03.10.11
✎
01:56
|
(0) Пиши 5 таблиц в строки другой ТЗ и получай их потом по индексу
|
|||
3
Zhuravlik
03.10.11
✎
02:10
|
(2) Нет, мне надо создать заранее неизвестное количество ТЗ, и так, чтобы можно было к ним потом обращаться по имени.
Про таблицы в таблице я тоже думал, но этот метод пройдет только через "ЗначениеВстрокуВнутр()", а это для меня долго. Я подумал, может через шаблоны можно сделать? Может я просто недопонимаю как они работают? Но повозившись, убрал и этот вариант. Теперь думаю может скрипт какой можно вставить, только как такой написать незнаю. |
|||
4
Ardi
03.10.11
✎
02:18
|
"ЗначениеВстрокуВнутр()" не нужно. Можно без этого.
А ещё бывают массивы. |
|||
5
Zhuravlik
03.10.11
✎
02:26
|
(4) Без этого будет храниться только ссылка на ТЗ. Т.е. ТЗ УЖЕ должна существовать. А если я создаю динамически, и делаю напр. так:
тз = СоздатьОбъект("ТаблицаЗначений"); для сч = 1 по 5 Цикл тз.новаяКолонка("тз"+Строка(сч), "ТаблицаЗначений"); КонецЦикла; тз.НоваяСтрока(); для сч = 1 по 5 Цикл времТЗ = СоздатьОбъект("ТаблицаЗначений"); //Заполняю времТЗ тз.УстановитьЗначение(1, сч, времТЗ); КонецЦикла; Так сохраняеться ссылка на времТЗ, а не сама таблица. И на выходе все ТЗ в результирующей будут одинаковы, равнятся последнему значению времТЗ. Надеюсь не коряво выразил, что хотел сказать) Т.е. чтобы получить таблицу таблиц, их надо сохранять в строки и получать из строк. |
|||
6
Zhuravlik
03.10.11
✎
02:28
|
+ Речь даже не о том, а о динамическом создании переменных. Можно перефразировать изначальный вопрос так "Как мне создать заранее неизвестное количество переменных, с именем равным текущему счетчику их количества?"
|
|||
7
Ardi
03.10.11
✎
02:28
|
ссылок на ТЗ не бывает.
|
|||
8
Ardi
03.10.11
✎
02:29
|
ну или бывают. но тут не ссылка
|
|||
9
Ardi
03.10.11
✎
02:30
|
или использовать "Выгрузить()" чтобы скопировать ТЗ с колонками
|
|||
10
Zhuravlik
03.10.11
✎
02:31
|
(8) Список значений в таблице значений - тут то же самое...
|
|||
11
Zhuravlik
03.10.11
✎
02:32
|
(9) мне уже больше интересно про динам. создание переменных... Выгрузить я тоже об этом дусал, но кажется все то же будет, даж не пробовал. Сейчас попробую...
|
|||
12
Ardi
03.10.11
✎
02:36
|
Процедура Сформировать()
Перем масс[100]; тз0=СоздатьОбъект("таблицаЗначений"); тз0.НоваяКолонка("Колонка1",,,,,,,); тз0.выгрузить(масс[1]); тз0.выгрузить(масс[2]); тз0.выгрузить(масс[3]); масс[1].НоваяСтрока(); масс[2].НоваяСтрока(); масс[2].НоваяСтрока(); масс[3].НоваяСтрока(); масс[3].НоваяСтрока(); масс[3].НоваяСтрока(); Сообщить(масс[1].КоличествоСтрок()); Сообщить(масс[2].КоличествоСтрок()); Сообщить(масс[3].КоличествоСтрок()); КонецПроцедуры |
|||
13
Aleksey
03.10.11
✎
02:42
|
СписокТЗ=СоздатьОбъект("СписокЗначений");
Для й=1 по 5 Цикл ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Кол1"); ТЗ.НоваяСтрока(); ТЗ.Кол1=й; СписокТЗ.ДобавитьЗначение(ТЗ); КонецЦикла; //Проверка Для й=1 по 5 Цикл ТекТЗ=СписокТЗ.ПолучитьЗначение(й); Сообщить(""+ТекТЗ.ПолучитьЗначение(1,1)); КонецЦикла; |
|||
14
Zhuravlik
03.10.11
✎
02:46
|
Группировка=СоздатьОбъект("ТаблицаЗначений");
спТаблицГруппировок = СоздатьОбъект("ТаблицаЗначений"); спТаблицГруппировок.НоваяКолонка("Группировка", "ТаблицаЗначений"); Для сч=1 По спГруппировок.РазмерСписка() Цикл Если спГруппировок.Пометка(сч) = 0 Тогда Продолжить; КонецЕсли; Переиндексирование(Группировка); спТаблицГруппировок.НоваяСтрока(); Группировка.Выгрузить(спТаблицГруппировок.Группировка); КонецЦикла; |
|||
15
Zhuravlik
03.10.11
✎
02:47
|
Все пустое... Через массив?..
|
|||
16
Aleksey
03.10.11
✎
02:49
|
(15) Загони Группировка=СоздатьОбъект("ТаблицаЗначений"); в цикл и сравни результат
|
|||
17
Ardi
03.10.11
✎
02:49
|
спГруппировок.РазмерСписка() - размер списка это метод СПИСКАзначений а не ТАБЛИЦЫ
|
|||
18
Ardi
03.10.11
✎
02:50
|
цикл не сработал
|
|||
19
Zhuravlik
03.10.11
✎
02:52
|
Цикл сработал, я не уточнил, извиняюсь. спГРУППИРОВОК - это список значений на форме.
|
|||
20
Aleksey
03.10.11
✎
02:52
|
Он вообще должен ругнуться на размер списка
да и спТаблицГруппировок.НоваяКолонка("Группировка", "ТаблицаЗначений"); - врядли 1С это поймет |
|||
21
Aleksey
03.10.11
✎
02:53
|
(19) А что тогда вот это такое?
спТаблицГруппировок = СоздатьОбъект("ТаблицаЗначений"); спТаблицГруппировок.НоваяКолонка("Группировка", "ТаблицаЗначений"); |
|||
22
Aleksey
03.10.11
✎
02:53
|
Туплю...
|
|||
23
Zhuravlik
03.10.11
✎
02:55
|
(17) нет, все пустое все равно...
(21) спТаблицГруппировок - это и есть таблица таблиц, я создаю в ней колонку Группировка, с типом "ТаблицаЗначений", это понятно для 1С. В цикле На ТипЗначенияСТР все норм... |
|||
24
Zhuravlik
03.10.11
✎
03:04
|
Группировка=СоздатьОбъект("ТаблицаЗначений");
спТаблицГруппировок = СоздатьОбъект("ТаблицаЗначений"); спТаблицГруппировок.НоваяКолонка("Группировка", "ТаблицаЗначений"); Для сч=1 По спГруппировок.РазмерСписка() Цикл Если спГруппировок.Пометка(сч) = 0 Тогда Продолжить; КонецЕсли; Переиндексирование(Группировка); спТаблицГруппировок.НоваяСтрока(); спТаблицГруппировок.Группировка = Группировка; КонецЦикла; Заработало)))) |
|||
25
GreyK
03.10.11
✎
05:11
|
(24) Так работать не будет, у ткбя во всех строках спТаблицГруппировок одна и та-же ТЗ.
|
|||
26
Песец
03.10.11
✎
06:07
|
(24)
... //спТаблицГруппировок.Группировка = Группировка; спТаблицГруппировок.Группировка.Загрузить(Группировка); ... Загрузить Скопировать структуру и значения таблицы значений. Синтаксис: Загрузить(<ТаблицаЗначений>) Англоязычный синоним: Load Параметры: <ТаблицаЗначений> Значение типа «Таблица значений». Структура и значения для загрузки. Описание: Метод Загрузить позволяет скопировать структуру и значения таблицы значений. Прежняя структура колонок таблицы значений при этом очищается. Пример: НовТабл = СоздатьОбъект("ТаблицаЗначений"); НовТабл.Загрузить(СтарТабл); (с) ЖКК // Присвоить значение переменной по ее имени. // в глоб.модуль: Функция Присвоить(Чему,Что) Экспорт Чему = Что; Возврат ""; КонецФункции // варианты вызова: // Шаблон("[Присвоить("+ИмяПеременной+",ПеременнаяСоЗначением)]"); // Шаблон("[Присвоить("+ИмяПеременной+","+ИмяПеременнойСоЗначением+")]"); // Пример: пусть у нас на форме есть 5 числовых реквизитов К1, К2, ... К5 Для н=1 по 5 Цикл Шаблон("[Присвоить("+("К"+н)+","+(н)+")]"); КонецЦикла; Если в качестве параметров ф-ии Присвоить() могут передаваться ТаблицаЗначений или СписокЗначений, то нужно её изменить на: Функция Присвоить(Чему,Что) Если Найти(ТипЗначенияСтр(Что),"Значений")>0 Тогда Чему=СоздатьОбъект(ТипЗначенияСтр(Что)); Что.Выгрузить(Чему); Иначе Чему = Что; КонецЕсли; Возврат ""; КонецФункции (с) Синор |
|||
27
GreyK
03.10.11
✎
06:41
|
(24) Вот так будет работать:
спТаблицГруппировок = СоздатьОбъект("ТаблицаЗначений"); спТаблицГруппировок.НоваяКолонка("Группировка", "ТаблицаЗначений"); Для сч=1 По спГруппировок.РазмерСписка() Цикл Если спГруппировок.Пометка(сч) = 0 Тогда Продолжить; КонецЕсли; спТаблицГруппировок.НоваяСтрока(); спТаблицГруппировок.Группировка = СоздатьОбъект("ТаблицаЗначений"); Переиндексирование(спТаблицГруппировок.Группировка);//Не знаю что делает эта функция. КонецЦикла; |
|||
28
Песец
03.10.11
✎
08:31
|
(1) Переменные должны быть (явно или неявно) объявлены. Если количество нужных переменных заранее неизвестно, используй сз или тз.
Процедура Проба() ТаблицаТаблиц=СоздатьОбъект("ТаблицаЗначений"); ТаблицаТаблиц.НоваяКолонка("тз");//для хранения заранее неизвестного количества таблиц значений Для н=1 по 5 Цикл тз=СоздатьОбъект("ТаблицаЗначений"); //создаем и заполняем таблицу тз.НоваяКолонка("колонка"); тз.НоваяСтрока(); тз.колонка = "строка "+н; ТаблицаТаблиц.НоваяСтрока(); ТаблицаТаблиц.тз=СоздатьОбъект("ТаблицаЗначений");//сюда сохраним очередную таблицу ТаблицаТаблиц.тз.Загрузить(тз); КонецЦикла; ТаблицаТаблиц.ВыбратьСтроки();//проверим что получилось Пока ТаблицаТаблиц.ПолучитьСтроку() = 1 Цикл Сообщить("строка "+ТаблицаТаблиц.НомерСтроки+" таблицы таблиц"); внутренняятз=создатьобъект("ТаблицаЗначений"); ТаблицаТаблиц.тз.Выгрузить(внутренняятз); внутренняятз.ВыбратьСтроки(); Пока внутренняятз.ПолучитьСтроку() = 1 Цикл сообщить("-содержимое строки "+ внутренняятз.НомерСтроки +" внутренней таблицы="+внутренняятз.колонка); КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
29
smaharbA
03.10.11
✎
08:42
|
баянище
|
|||
30
Ёпрст
03.10.11
✎
08:46
|
(29) пока виден только тупняк :)))
|
|||
31
Mikeware
03.10.11
✎
08:47
|
(30) Но, согласись, изысканный тупняк.... :-)
|
|||
32
smaharbA
03.10.11
✎
08:49
|
+ если надо заполнить одним и тем же, но не ссылкой, есть старый тупо-эффективный метод знаениев+значениеиз
а так (30) )) |
|||
33
VladZ
03.10.11
✎
08:58
|
(0) И в чем проблема?
|
|||
34
VladZ
03.10.11
✎
09:02
|
ТЗТаблиц = СоздатьОБъект("ТаблицаЗначений");
ТЗТаблиц.НоваяКолонка("ТЗ"); Для сч = 1 по КолвоНужныхТаблиц Цикл ТЗТаблиц.НоваяСтрока(); ТЗТаблиц.ТЗ = СоздатьОБЪект("ТаблицаЗначений"); ИнициализацияКолонок(ТЗТаблиц.ТЗ); ЗаполнитьТаблицу(ТЗТаблиц.ТЗ); КонецЦикла; (0) Открой тайну, что ваяешь? |
|||
35
Мимохожий Однако
03.10.11
✎
09:03
|
(0)Если ТЗ создавал в цикле, то и читать будешь в цикле. При этом имя ТЗ не имеет значения. Имеет значение только индекс строки первоначального цикла. А реализаций может быть огромное количество. Опиши задачу, в которой хочешь это использовать.ИМХО, надо обсуждать не выбранный механизм, а постановку задачи.
|
|||
36
Zhuravlik
04.10.11
✎
16:30
|
в (24) не тот код вставил. Пользуюсь этим:
спТаблицГруппировок = СоздатьОбъект("ТаблицаЗначений"); спТаблицГруппировок.НоваяКолонка("Группировка", "ТаблицаЗначений"); Для сч=1 По спГруппировок.РазмерСписка() Цикл Если спГруппировок.Пометка(сч) = 0 Тогда Продолжить; КонецЕсли; Группировка=СоздатьОбъект("ТаблицаЗначений"); Переиндексирование(Группировка); спТаблицГруппировок.НоваяСтрока(); спТаблицГруппировок.Группировка = Группировка; КонецЦикла; Все работает) (34) Спасибо, попробую. Пишу процедуру для вывода заранее неизвестного колмчества группировок в таблицу. Начальник на работе показал способ, как он это делает, а мне загорелось этот способ универсализировать. |
|||
37
Cthulhu
04.10.11
✎
16:34
|
СЗ из ТЗ.
|
|||
38
Zhuravlik
04.10.11
✎
16:35
|
(37) ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |