Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Загрузка таблицы значений в колонку таблицы значений (http://forums.kuban.ru/f1040/zagruzka_tablicy_znachenij_v_kolonku_tablicy_znachenij-8938016.html)

Pusto 14.08.2019 07:01

Загрузка таблицы значений в колонку таблицы значений
 
Дана таблица значения. Есть фиксированное количество и есть изменяемое число колонок, в зависимости от размера списка значений.
Например Имеется таблица Значений ТЗ.
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Клиент", "Справочник.Контрагенты");
ТЗ.НоваяКолонка("Адрес", "Строка", 60);

Есть список значений размером 5.

Как прописать такую структуру

ТЗ.Поле1=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Поле1.Загрузить(СтруктураТаблицы);

ТЗ.Поле2=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Поле2.Загрузить(СтруктураТаблицы);

ТЗ.Поле3=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Поле3.Загрузить(СтруктураТаблицы);

ТЗ.Поле4=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Поле4.Загрузить(СтруктураТаблицы);

ТЗ.Поле5=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Поле5.Загрузить(СтруктураТаблицы);

хочется чтобы все делалось в цикле.
как через Шаблон это сделать.

чтобы потом можно было также и вносить строки в эти таблицы

US1C 14.08.2019 09:31

Для ххх=1 По СЗ.РазмерСписка() Цикл
ТЗ.НоваяКолонка("Поле"+ххх);
КонецЦикла;

US1C 14.08.2019 09:36

Ну а дальше добавляешь строки в ТЗ и присваиваешь значения по каждой колонке.
ТЗ.НоваяСтрока();
Для ххх=1 По СЗ.РазмерСписка() Цикл
ТЗ.УстановитьЗначение(ТЗ.КоличествоСтрок(),"Поле"+ххх,КакаяТоТаблицаЗначений);
КонецЦикла;

Pusto 14.08.2019 09:47

А как потом в такую таблицу внести строки с данными.
Типа ТЗ.Поле1.Новая Строка();
ТЗ.Сумма = 2000;

Как их заполнять в зависимости от размера списка

user1C 14.08.2019 09:53

(0)
зачем все это?

Pusto 14.08.2019 10:07

Так нужно. Каждая колонка это есть документы с суммы по ним. Так была задача поставлена...

Теперь как можно внести строку в такую таблицу и получить количество строк по данной таблице

US1C 14.08.2019 10:08

(3) Формируете/заполняете таблицы значений, а потом присваиваете значение для каждого поля (колонки ТЗ) в новой строке ТЗ (в (2) написал как).
По-любому как предлагаете в (3) не получится.
Надо будет сначала получить значение из нужной строки, колонки, а потом обработать это значение и установить обратно.
Т.е.
ОбрабатываемаяТЗ = ТЗ.ПолучитьЗначение(НомерСтроки,Поле1);
ОбрабатываемаяТЗ.НоваяСтрока();
ОбрабатываемаяТЗ.Сумма=2000;
ТЗ.УстановитьЗначение(НомерСтроки,Поле1,ОбрабатываемаяТЗ);

US1C 14.08.2019 10:17

(5) Правильно я понял, что если с Контрагентом А было 50 документов, Вам надо создать 50 колонок в этой ТЗ?
И в каждом значении поля собрать инфу из табличной части этих документов?

Pusto 14.08.2019 10:25

Спасибо

Pusto 15.08.2019 06:04

Получаются три дополнительные колонки

Но почему-то

При таком раскладе
Найден = СписСкл.НайтиЗначение(Склад);

Переменная Найден меняется как и положено, но вот здесь
получается интересное...
ОбрабатываемаяТЗ = ТЗ.ПолучитьЗначение(Стр,"Поле"+СокрЛП(Строка(Найден)));

ОбрабатываемаяТЗ.НоваяСтрока();
ОбрабатываемаяТЗ.Отпуски=Докум.ТекущийДокумент();
ОбрабатываемаяТЗ.Сумма=ТзДокумента.Сумма;
ОбрабатываемаяТЗ.ТорговыйАгент=ВыбАгент;
ТЗ.УстановитьЗначение(Стр,"Поле"+СокрЛП(Строка(Найден)), ОбрабатываемаяТЗ);

заполняются сразу все три колонки...

US1C 15.08.2019 09:51

Какие значения принимает переменная "Найден"?
Наименование склада может состоять из нескольких слов, а вот имя колонки ТЗ может быть только однословным.
Во-вторых, как изначально присваивал значение полям ТЗ?
Если одну и ту же таблицу значений, то у тебя во всех полях сводной ТЗ ссылка на одно и то же. Т.е. надо создавать новую ТЗ для каждого поля. С другой стороны, зачем это делать заранее? Получай таблицу значения из документа и присваивай ее полю сводной ТЗ.
Вот как-то так:

ТЗ.НоваяКолонка("Контрагент","Справочник.Контрагенты");
Пока Запрос.Группировка(1) = 1 Цикл
ТЗ.НоваяСтрока();
ТЗ.Контрагент = Запрос.Контрагент;
ххх=1;
Пока Запрос.Группировка(2) = 1 Цикл
Если ТЗ.КоличествоКолонок()-1<ххх Тогда
ТЗ.НоваяКолонка("Докум"+ххх);
КонецЕсли;
ТЗ_Врем = СоздатьОбъект("ТаблицаЗначений");
Запрос.РасходнаяНакладная.ВыгрузитьТабличнуюЧасть(ТЗ_Врем);
ТЗ.УстановитьЗначение(ТЗ.КоличествоСтрок(),"Докум"+ххх,ТЗ_Врем);
ххх=ххх+1;
КонецЦикла;
КонецЦикла;


Текущее время: 14:17. Часовой пояс GMT +3.