Всем доброго вечера! Может кто подскажет, как заполнить динамически созданные колонки в таблице значений?
Более подробно: есть ТЗ с данными, есть заполненная колонка "Статьи финансирования" и есть колонка "Сумма". Согласно кол-ва статей финансирования нужно динамически добавить соответствующее кол-во колонок с таким же Именем и из колонки "Сумма" разбросать сумму в соответствующие (уже динамически созданные) колонки. Создать колонки у меня получилось, а вот "разложить" по ним соответствующие суммы - не хватает мозгов. Платформа 8.3.18.1208
Заранее Спасибо!
Для Каждого Стр из ТаблицаЗначений Цикл
Если СокрЛП(Стр.СтатьяФинансирования) = "ФОМС" Тогда
Стр.ФОМС = Стр.Сумма;
ИначеЕсли СокрЛП(Стр.СтатьяФинансирования) = "Бюджет: ВМП" Тогда
Стр.БюджетВМП= Стр.Сумма;
ИначеЕсли СокрЛП(Стр.СтатьяФинансирования) = "Расходы за" Тогда
Стр.РасходыЗа= Стр.Сумма;
КонецЕсли;
КонецЦикла;
(3) Просто и красиво, но это жесткая привязка к имени колонок. У меня 8 Статей, колонки создаются динамически и Имена колонок тоже, при этом Имя колонки = название статьи. В данном примере три таких статьи, в другом примере их может быть больше/меньше и другие статьи. Тут бы строке Стр.ИмяКолонки = Стр.Сумма; использовать Переменную "ИмяКолонки", но тут возникает ошибка типа "Поле ИмяКолонки не обнаружено.
(9) Более подробно работа с универсальными коллекциями описана в учебниках и на прочих курсах. Это базовый инструментарий.
Процесс таков:
1. Инициализируем новое пустое соответствие.
2. Организуем цикл по строкам таблицы.
3. Получаем из соответствия имя колонки по статье расходов текущей строки.
4. Если ИмяКолонки = Неопределено, тогда добавляем новую колонку в таблицу, и добавляем её имя в соответствие.
5. Заполняем найденную/созданную колонку суммой.
6. Конец цикла
Если не работали с соответствиями, то можно обойтись традиционным списком значений: при динамическом создании колонок заполнять его номерами создаваемых колонок, а в качестве представления использовать их имена. Потом, при обработке суммы, по представлению (имя статьи) находить в списке значений его номер и устанавливать значение в ТЗ по номеру колонки, а не по имени.
Обычно ТЗ с подобными данными получают выгрузкой из запроса, а в запросе можно разделить по колонкам с помощью конструкции "ВЫБОР КОГДА <Условие> ТОГДА ... ИНАЧЕ ... КОНЕЦ"
В этом случае совсем не нужно загружать систему беганьем по ТЗ...
(11) Конечное количество статей и новых колонок неизвестно (это все-таки справочник), а пустые колонки без данных не нужны.
Предложите конечный текст запроса с учетом этих условий. Сможете без динамического формирования текста и предварительного анализа статей в ТЗ?
(12) Для чего такое размножение делается? Итоговая ТЗ потом как табличный документ выводится?
Если да, то на СКД есть возможность вывода измерения "Статья Финансирования" в заголовки колонок.
&НаСервере
Функция ПреобразоватьВИдентификаторКолонки(знач Наименование)
Наименование=СтрЗаменить(Наименование," ","_");
Наименование=СтрЗаменить(Наименование,"(","");
Наименование=СтрЗаменить(Наименование,")","");
Возврат Наименование
КонецФункции
&НаСервере
Процедура ПреобразованиеТЗНаСервере()
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НачисленияУдержанияПоСотрудникамОбороты.Организация КАК Организация,
| НачисленияУдержанияПоСотрудникамОбороты.СуммаОборот КАК СуммаОборот,
| НачисленияУдержанияПоСотрудникамОбороты.СтатьяФинансирования КАК СтатьяФинансирования,
| НачисленияУдержанияПоСотрудникамОбороты.Сотрудник КАК Сотрудник
|ИЗ
| РегистрНакопления.НачисленияУдержанияПоСотрудникам.Обороты(&ДатаНачала, &ДатаОкончания, Период, Организация = &Организация) КАК НачисленияУдержанияПоСотрудникамОбороты";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Запрос.УстановитьПараметр("Организация", Организация);
//Получаем исходную таблицу значений
ТЗ = Запрос.Выполнить().Выгрузить();
//Получаем ТЗ с полным перечнем добавляемых колонок
ТЗ_ВсеСтатьиФинансирования=ТЗ.Скопировать();
ТЗ_ВсеСтатьиФинансирования.Свернуть("СтатьяФинансирования","");
Для Каждого Строка_ТЗ_ВсеСтатьиФинансирования из ТЗ_ВсеСтатьиФинансирования Цикл
//Получаем в исходную таблицу значений нужные колонки
ИмяНовойКолонки=ПреобразоватьВИдентификаторКолонки(Строка_ТЗ_ВсеСтатьиФинансирования.Наименование);
ТЗ.Колонки.Добавить(ИмяНовойКолонки,Новый ОписаниеТипов("СправочникСсылка.СтатьиФинансированияЗарплата"));
КонецЦикла;
Для Каждого СтрокаТЗ Из ТЗ Цикл
ИмяКолонки=ПреобразоватьВИдентификаторКолонки(СтрокаТЗ.Наименование);
СтрокаТЗ[ИмяКолонки]= СтрокаТЗ.СуммаОборот;
КонецЦикла;
КонецПроцедуры
Боже, я даже не понимаю, что здесь обсуждается. Кто-то СКД сюда приплел. Кто-то команду Выполнить.У автора задача простая. Как с точки зрения реализации, так и с точки зрения понимая зачем это надо (если конечно автор верно в принципе озвучил свою проблему). Выше я дал ссылку, где сам лично сделал конкретный пример того, как происходит программное создание колонок и их последующее заполнение. Заметьте в моем примере можно найти полезное не только конкретно в этом вопросе. Также и программное создание реквизитов формы и элементы в УФ. Автор, вопрос к вам. В Вашей теме уже много сообщений и людей уже тянет просто поболтать. Вы вообще смотрели мой пример? Если смотрели, то скажите конкретно, что вам в нем не понятно и почему он не решает вашего вопроса?
(24)Я вижу, что Вы не до конца понимаете как это все работает. Может озвучите задачу целиком и полностью в одном сообщении. Что, откуда и куда вы хотите сделать? Версию конфигурации и платформы. И самое главное, что хотите получить в итоге?
(26) Меня попросили сделать мультифункциональную справку о расчете среднего заработка с раскладкой по статьям финансирования (и эти колонки должны формироваться по горизонтали!!!): для возможности делать выборку из нескольких разных документов!!! Печатная форма там тоже с соответствующими выкрутасами. (У них была обработка для ЗГУ-1.0 и они хотят тоже самое для ЗКГУ-3.1). Вот я и решил сделать универсальную ТЗ для всех вариантов и в зависимости от выбранного Документа формировать печатные формы.
(28) К сожалению с СКД я до сих пор не подружился. Во-первых: я самоучка (ни на каких курсах не учился), во-вторых - уже пенсионер (тыква еще работает, но иногда "тормозит" на какой-нибудь мелочи).
(29)Я тоже самоучка. Ничего, работаю. По тому описанию проблемы, что Вы дали, Вам как раз таки подойдет обычный отчет на СКД. Причем, если источник данных можно собрать обычным запросом, то и сам отчет можно сделать конструктором, без использования кода вообще. Попробуйте, вам понравится. :) Щас сделаю примерчик простой, как такой отчет строится.
(29)Вот вам простой пример использования таблицы в СКД. Кода нет вообще. Отчет можете сформировать на УНФ 1.6. Ну и выглядит как на картинке. Итоги тоже есть. В колонках типы номенклатуры.