![]() |
Загрузка таблицы значений в колонку таблицы значений Дана таблица значения. Есть фиксированное количество и есть изменяемое число колонок, в зависимости от размера списка значений. Например Имеется таблица Значений ТЗ. ТЗ=СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Клиент", "Справочник.Контрагенты"); ТЗ.НоваяКолонка("Адрес", "Строка", 60); Есть список значений размером 5. Как прописать такую структуру ТЗ.Поле1=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Поле1.Загрузить(СтруктураТаблицы); ТЗ.Поле2=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Поле2.Загрузить(СтруктураТаблицы); ТЗ.Поле3=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Поле3.Загрузить(СтруктураТаблицы); ТЗ.Поле4=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Поле4.Загрузить(СтруктураТаблицы); ТЗ.Поле5=СоздатьОбъект("ТаблицаЗначений"); ТЗ.Поле5.Загрузить(СтруктураТаблицы); хочется чтобы все делалось в цикле. как через Шаблон это сделать. чтобы потом можно было также и вносить строки в эти таблицы |
Для ххх=1 По СЗ.РазмерСписка() Цикл ТЗ.НоваяКолонка("Поле"+ххх); КонецЦикла; |
Ну а дальше добавляешь строки в ТЗ и присваиваешь значения по каждой колонке. ТЗ.НоваяСтрока(); Для ххх=1 По СЗ.РазмерСписка() Цикл ТЗ.УстановитьЗначение(ТЗ.КоличествоСтрок(),"Поле"+ххх,КакаяТоТаблицаЗначений); КонецЦикла; |
А как потом в такую таблицу внести строки с данными. Типа ТЗ.Поле1.Новая Строка(); ТЗ.Сумма = 2000; Как их заполнять в зависимости от размера списка |
(0) зачем все это? |
Так нужно. Каждая колонка это есть документы с суммы по ним. Так была задача поставлена... Теперь как можно внести строку в такую таблицу и получить количество строк по данной таблице |
(3) Формируете/заполняете таблицы значений, а потом присваиваете значение для каждого поля (колонки ТЗ) в новой строке ТЗ (в (2) написал как). По-любому как предлагаете в (3) не получится. Надо будет сначала получить значение из нужной строки, колонки, а потом обработать это значение и установить обратно. Т.е. ОбрабатываемаяТЗ = ТЗ.ПолучитьЗначение(НомерСтроки,Поле1); ОбрабатываемаяТЗ.НоваяСтрока(); ОбрабатываемаяТЗ.Сумма=2000; ТЗ.УстановитьЗначение(НомерСтроки,Поле1,ОбрабатываемаяТЗ); |
(5) Правильно я понял, что если с Контрагентом А было 50 документов, Вам надо создать 50 колонок в этой ТЗ? И в каждом значении поля собрать инфу из табличной части этих документов? |
Спасибо |
Получаются три дополнительные колонки Но почему-то При таком раскладе Найден = СписСкл.НайтиЗначение(Склад); Переменная Найден меняется как и положено, но вот здесь получается интересное... ОбрабатываемаяТЗ = ТЗ.ПолучитьЗначение(Стр,"Поле"+СокрЛП(Строка(Найден))); ОбрабатываемаяТЗ.НоваяСтрока(); ОбрабатываемаяТЗ.Отпуски=Докум.ТекущийДокумент(); ОбрабатываемаяТЗ.Сумма=ТзДокумента.Сумма; ОбрабатываемаяТЗ.ТорговыйАгент=ВыбАгент; ТЗ.УстановитьЗначение(Стр,"Поле"+СокрЛП(Строка(Найден)), ОбрабатываемаяТЗ); заполняются сразу все три колонки... |
Какие значения принимает переменная "Найден"? Наименование склада может состоять из нескольких слов, а вот имя колонки ТЗ может быть только однословным. Во-вторых, как изначально присваивал значение полям ТЗ? Если одну и ту же таблицу значений, то у тебя во всех полях сводной ТЗ ссылка на одно и то же. Т.е. надо создавать новую ТЗ для каждого поля. С другой стороны, зачем это делать заранее? Получай таблицу значения из документа и присваивай ее полю сводной ТЗ. Вот как-то так: ТЗ.НоваяКолонка("Контрагент","Справочник.Контрагенты"); Пока Запрос.Группировка(1) = 1 Цикл ТЗ.НоваяСтрока(); ТЗ.Контрагент = Запрос.Контрагент; ххх=1; Пока Запрос.Группировка(2) = 1 Цикл Если ТЗ.КоличествоКолонок()-1<ххх Тогда ТЗ.НоваяКолонка("Докум"+ххх); КонецЕсли; ТЗ_Врем = СоздатьОбъект("ТаблицаЗначений"); Запрос.РасходнаяНакладная.ВыгрузитьТабличнуюЧасть(ТЗ_Врем); ТЗ.УстановитьЗначение(ТЗ.КоличествоСтрок(),"Докум"+ххх,ТЗ_Врем); ххх=ххх+1; КонецЦикла; КонецЦикла; |
Текущее время: 14:17. Часовой пояс GMT +3. |