Всем доброго вечера! Может кто подскажет, как заполнить динамически созданные колонки в таблице значений?
Более подробно: есть ТЗ с данными, есть заполненная колонка "Статьи финансирования" и есть колонка "Сумма". Согласно кол-ва статей финансирования нужно динамически добавить соответствующее кол-во колонок с таким же Именем и из колонки "Сумма" разбросать сумму в соответствующие (уже динамически созданные) колонки. Создать колонки у меня получилось, а вот "разложить" по ним соответствующие суммы - не хватает мозгов. Платформа 8.3.18.1208
Заранее Спасибо!
---
http://forum.infostart.ru/forum9/topic254743/message2577689/#message2577689

Наглядный пример того, что вам надо.
---
http://forum.infostart.ru/forum9/topic254743/message2577689/#message2577689

Наглядный пример того, что вам надо.
---
Отлично, туже задавался этим вопросом и все получилось.
---
```1c
    СтрокаТЗ.ФОМС = СтрокаТЗ.Сумма
```
---
//Названия колонок не видны, но примерно так:

```1c
    Для Каждого Стр из ТаблицаЗначений Цикл
    Если СокрЛП(Стр.СтатьяФинансирования) = "ФОМС" Тогда
    Стр.ФОМС = Стр.Сумма;
    ИначеЕсли СокрЛП(Стр.СтатьяФинансирования) = "Бюджет: ВМП" Тогда
    Стр.БюджетВМП= Стр.Сумма;
    ИначеЕсли СокрЛП(Стр.СтатьяФинансирования) = "Расходы за" Тогда
    Стр.РасходыЗа= Стр.Сумма;
    КонецЕсли;
    КонецЦикла;
```
---
Просто и красиво, но это жесткая привязка к имени колонок. У меня 8 Статей, колонки создаются динамически и Имена колонок тоже, при этом Имя колонки = название статьи. В данном примере три таких статьи, в другом примере их может быть больше/меньше и другие статьи. Тут бы строке Стр.ИмяКолонки = Стр.Сумма; использовать Переменную "ИмяКолонки", но тут возникает ошибка типа "Поле ИмяКолонки не обнаружено.
---
А чем мой пример не устраивает?
---
Я не говорил, что не устраивает, я его пока тестирую....
---
Соответствие... Статья-Колонка.

```1c
    ИмяКолонки = СоответствиеСтатейИКолонок.Получить(Стр.СтатьяФинансирования);
    Стр[ИмяКолонки] = Стр.Сумма;
```
---
А вот это уже более серьезно и интересно. Более подробно можно? Я с Соответствиями пока не сталкивался.
---
Более подробно работа с универсальными коллекциями описана в учебниках и на прочих курсах. Это базовый инструментарий.

Процесс таков:
1. Инициализируем новое пустое соответствие.
2. Организуем цикл по строкам таблицы.
    3. Получаем из соответствия имя колонки по статье расходов текущей строки.
    4. Если ИмяКолонки = Неопределено, тогда добавляем новую колонку в таблицу, и добавляем её имя в соответствие.
    5. Заполняем найденную/созданную колонку суммой.
6. Конец цикла
---
Я с Соответствиями пока не сталкивался. Если не работали с соответствиями, то можно обойтись традиционным списком значений: при динамическом создании колонок заполнять его номерами создаваемых колонок, а в качестве представления использовать их имена. Потом, при обработке суммы, по представлению (имя статьи) находить в списке значений его номер и устанавливать значение в ТЗ по номеру колонки, а не по имени.
---
Обычно ТЗ с подобными данными получают выгрузкой из запроса, а в запросе можно разделить по колонкам с помощью конструкции "ВЫБОР КОГДА <Условие> ТОГДА ... ИНАЧЕ ... КОНЕЦ"
В этом случае совсем не нужно загружать систему беганьем по ТЗ...
---
Конечное количество статей и новых колонок неизвестно (это все-таки справочник), а пустые колонки без данных не нужны.
Предложите конечный текст запроса с учетом этих условий. Сможете без динамического формирования текста и предварительного анализа статей в ТЗ?
---
Для чего такое размножение делается? Итоговая ТЗ потом как табличный документ выводится?
Если да, то на СКД есть возможность вывода измерения "Статья Финансирования" в заголовки колонок.
---
Вот пример на СКД по РегистрНакопления.НачисленияУдержанияПоСотрудникам

По СтатьямФинансирования у меня в базе не ведется, поэтому вместо СтатейФинансирования развернул по полю "НачислениеУдержание"
---
Причем тут СКД? Нам не отчет нужен, а таблица значений с вменяемыми наименованиями колонок для дальнейшей работы.
---
Вот так попробуй

```1c
    &НаСервере
    Функция ПреобразоватьВИдентификаторКолонки(знач Наименование)
    Наименование=СтрЗаменить(Наименование," ","_");
    Наименование=СтрЗаменить(Наименование,"(",");
    Наименование=СтрЗаменить(Наименование,")",");
    Возврат Наименование
    КонецФункции

    &НаСервере
    Процедура ПреобразованиеТЗНаСервере()
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | НачисленияУдержанияПоСотрудникамОбороты.Организация КАК Организация,
    | НачисленияУдержанияПоСотрудникамОбороты.СуммаОборот КАК СуммаОборот,
    | НачисленияУдержанияПоСотрудникамОбороты.СтатьяФинансирования КАК СтатьяФинансирования,
    | НачисленияУдержанияПоСотрудникамОбороты.Сотрудник КАК Сотрудник
    |ИЗ
    | РегистрНакопления.НачисленияУдержанияПоСотрудникам.Обороты(&ДатаНачала, &ДатаОкончания, Период, Организация = &Организация) КАК НачисленияУдержанияПоСотрудникамОбороты";

    Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
    Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
    Запрос.УстановитьПараметр("Организация", Организация);

    //Получаем исходную таблицу значений
    ТЗ = Запрос.Выполнить().Выгрузить();

    //Получаем ТЗ с полным перечнем добавляемых колонок
    ТЗ_ВсеСтатьиФинансирования=ТЗ.Скопировать();
    ТЗ_ВсеСтатьиФинансирования.Свернуть("СтатьяФинансирования",");

    Для Каждого Строка_ТЗ_ВсеСтатьиФинансирования из ТЗ_ВсеСтатьиФинансирования Цикл
    //Получаем в исходную таблицу значений нужные колонки
    ИмяНовойКолонки=ПреобразоватьВИдентификаторКолонки(Строка_ТЗ_ВсеСтатьиФинансирования.Наименование);
    ТЗ.Колонки.Добавить(ИмяНовойКолонки,Новый ОписаниеТипов("СправочникСсылка.СтатьиФинансированияЗарплата"));

    КонецЦикла;

    Для Каждого СтрокаТЗ Из ТЗ Цикл
    ИмяКолонки=ПреобразоватьВИдентификаторКолонки(СтрокаТЗ.Наименование);
    СтрокаТЗ[ИмяКолонки]= СтрокаТЗ.СуммаОборот;
    КонецЦикла;

    КонецПроцедуры
```
---
Есть команда Выполнить (). Она выполняет тестовую строку.

Будет примерно так

ИмяКолонки = текстрокатз. Статьяфинансирования;
Выполнить("текстрокатз." + имяКолонки + "= текстрокатз. Сумма") ;
---
Боже, я даже не понимаю, что здесь обсуждается. Кто-то СКД сюда приплел. Кто-то команду Выполнить.У автора задача простая. Как с точки зрения реализации, так и с точки зрения понимая зачем это надо (если конечно автор верно в принципе озвучил свою проблему). Выше я дал ссылку, где сам лично сделал конкретный пример того, как происходит программное создание колонок и их последующее заполнение. Заметьте в моем примере можно найти полезное не только конкретно в этом вопросе. Также и программное создание реквизитов формы и элементы в УФ. Автор, вопрос к вам. В Вашей теме уже много сообщений и людей уже тянет просто поболтать. Вы вообще смотрели мой пример? Если смотрели, то скажите конкретно, что вам в нем не понятно и почему он не решает вашего вопроса?
---
Хороший пример! Только не пойму, как получить Итоги по колонкам в Табличном документе и вывести это на печать?
---
Зависит от ваших данных. Таблицу значений можно использовать как источник данных для запроса.

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ТаблицаДанных.Колонка_1,
    | ТаблицаДанных.Колонка_2
    |ПОМЕСТИТЬ ВТ_ТаблицаДанных
    |ИЗ
    | &ТаблицаДанных КАК ТаблицаДанных
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | ВТ_ТаблицаДанных.Колонка_1,
    | СУММА(ВТ_ТаблицаДанных.Колонка_2) КАК Колонка_2
    |ИЗ
    | ВТ_ТаблицаДанных КАК ВТ_ТаблицаДанных
    |
    |СГРУППИРОВАТЬ ПО
    | ВТ_ТаблицаДанных.Колонка_1";
    Запрос.УстановитьПараметр("ТаблицаДанных", ВашаТаблицаЗначений);
    РезультатЗапроса = Запрос.Выполнить();
    Если НЕ РезультатЗапроса.Пустой() Тогда
    ВыборкаЗапроса = РезультатЗапроса.Выбрать();
    Пока ВыборкаЗапроса.Следующий() Цикл

    КонецЦикла;
    КонецЕсли;
```

Один из вариантов. Дальше на что уже ваша фантазия способна.
---
А что за Колонка_1, Колонка_2 ? У меня динамический список колонок...
---
Это просто пример. Нужно тогда динамически составлять текст запроса.
---
Я вижу, что Вы не до конца понимаете как это все работает. Может озвучите задачу целиком и полностью в одном сообщении. Что, откуда и куда вы хотите сделать? Версию конфигурации и платформы. И самое главное, что хотите получить в итоге?
---
Меня попросили сделать мультифункциональную справку о расчете среднего заработка с раскладкой по статьям финансирования (и эти колонки должны формироваться по горизонтали!!!): для возможности делать выборку из нескольких разных документов!!! Печатная форма там тоже с соответствующими выкрутасами. (У них была обработка для ЗГУ-1.0 и они хотят тоже самое для ЗКГУ-3.1). Вот я и решил сделать универсальную ТЗ для всех вариантов и в зависимости от выбранного Документа формировать печатные формы.
---
Почему не используете обычный отчет на СКД? Там и печатная форма сразу будет и справка, как вы ее называете...
---
К сожалению с СКД я до сих пор не подружился. Во-первых: я самоучка (ни на каких курсах не учился), во-вторых - уже пенсионер (тыква еще работает, но иногда "тормозит" на какой-нибудь мелочи).
---
Я тоже самоучка. Ничего, работаю. По тому описанию проблемы, что Вы дали, Вам как раз таки подойдет обычный отчет на СКД. Причем, если источник данных можно собрать обычным запросом, то и сам отчет можно сделать конструктором, без использования кода вообще. Попробуйте, вам понравится. :) Щас сделаю примерчик простой, как такой отчет строится.
---
Сообщение было скрыто модератором.
---
Вот вам простой пример использования таблицы в СКД. Кода нет вообще. Отчет можете сформировать на УНФ 1.6. Ну и выглядит как на картинке. Итоги тоже есть. В колонках типы номенклатуры.
---
У меня нет УНФ 1.6, а на ЗКГУ-3.1 он будет работать?
---
Вряд-ли. Но в конфигураторе можете его открыть. С ошибкой, но ничего страшного. И сделать по аналогии себе.
---
Открывается с ошибкой.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.
---
Хотя не совсем понятно, причем тут табличный документ...Ну если вам потом это надо вывести в табличный документ, то можно примером выше.
---
Сообщение было скрыто модератором.