Как заполнить колонки в ТЗ

1. ivnik 617 28.01.21 20:51 Сейчас в теме
Всем доброго вечера! Может кто подскажет, как заполнить динамически созданные колонки в таблице значений?
Более подробно: есть ТЗ с данными, есть заполненная колонка "Статьи финансирования" и есть колонка "Сумма". Согласно кол-ва статей финансирования нужно динамически добавить соответствующее кол-во колонок с таким же Именем и из колонки "Сумма" разбросать сумму в соответствующие (уже динамически созданные) колонки. Создать колонки у меня получилось, а вот "разложить" по ним соответствующие суммы - не хватает мозгов. Платформа 8.3.18.1208
Заранее Спасибо!
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
4. pyrkin_vanya 498 28.01.21 21:21 Сейчас в теме +3 $m
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. pyrkin_vanya 498 28.01.21 21:21 Сейчас в теме +3 $m
16. Dmitry888 43 29.01.21 11:21 Сейчас в теме
(4)Отлично, туже задавался этим вопросом и все получилось.
2. FatPanzer 28.01.21 21:05 Сейчас в теме
СтрокаТЗ.ФОМС = СтрокаТЗ.Сумма
3. Sholl 109 28.01.21 21:13 Сейчас в теме
//Названия колонок не видны, но примерно так:

Для Каждого Стр из ТаблицаЗначений Цикл
    Если СокрЛП(Стр.СтатьяФинансирования) = "ФОМС" Тогда
        Стр.ФОМС = Стр.Сумма;
    ИначеЕсли СокрЛП(Стр.СтатьяФинансирования) = "Бюджет: ВМП" Тогда
        Стр.БюджетВМП= Стр.Сумма;
    ИначеЕсли СокрЛП(Стр.СтатьяФинансирования) = "Расходы за" Тогда
        Стр.РасходыЗа= Стр.Сумма;
    КонецЕсли;
КонецЦикла;
Показать
5. ivnik 617 28.01.21 21:59 Сейчас в теме
(3) Просто и красиво, но это жесткая привязка к имени колонок. У меня 8 Статей, колонки создаются динамически и Имена колонок тоже, при этом Имя колонки = название статьи. В данном примере три таких статьи, в другом примере их может быть больше/меньше и другие статьи. Тут бы строке Стр.ИмяКолонки = Стр.Сумма; использовать Переменную "ИмяКолонки", но тут возникает ошибка типа "Поле ИмяКолонки не обнаружено.
6. pyrkin_vanya 498 28.01.21 22:15 Сейчас в теме
(5)А чем мой пример не устраивает?
7. ivnik 617 28.01.21 22:32 Сейчас в теме
(6) Я не говорил, что не устраивает, я его пока тестирую....
8. FatPanzer 28.01.21 22:33 Сейчас в теме
(5) Соответствие... Статья-Колонка.
ИмяКолонки = СоответствиеСтатейИКолонок.Получить(Стр.СтатьяФинансирования);
Стр[ИмяКолонки] = Стр.Сумма;
9. ivnik 617 28.01.21 22:35 Сейчас в теме
(8) А вот это уже более серьезно и интересно. Более подробно можно? Я с Соответствиями пока не сталкивался.
10. FatPanzer 28.01.21 23:03 Сейчас в теме
(9) Более подробно работа с универсальными коллекциями описана в учебниках и на прочих курсах. Это базовый инструментарий.

Процесс таков:
1. Инициализируем новое пустое соответствие.
2. Организуем цикл по строкам таблицы.
3. Получаем из соответствия имя колонки по статье расходов текущей строки.
4. Если ИмяКолонки = Неопределено, тогда добавляем новую колонку в таблицу, и добавляем её имя в соответствие.
5. Заполняем найденную/созданную колонку суммой.
6. Конец цикла
ivnik; pyrkin_vanya; +2 Ответить
20. user856012 14 29.01.21 14:05 Сейчас в теме
(9)
Я с Соответствиями пока не сталкивался.
Если не работали с соответствиями, то можно обойтись традиционным списком значений: при динамическом создании колонок заполнять его номерами создаваемых колонок, а в качестве представления использовать их имена. Потом, при обработке суммы, по представлению (имя статьи) находить в списке значений его номер и устанавливать значение в ТЗ по номеру колонки, а не по имени.
11. AlexeyIsip 26 29.01.21 08:08 Сейчас в теме
Обычно ТЗ с подобными данными получают выгрузкой из запроса, а в запросе можно разделить по колонкам с помощью конструкции "ВЫБОР КОГДА <Условие> ТОГДА ... ИНАЧЕ ... КОНЕЦ"
В этом случае совсем не нужно загружать систему беганьем по ТЗ...
12. FatPanzer 29.01.21 08:14 Сейчас в теме
(11) Конечное количество статей и новых колонок неизвестно (это все-таки справочник), а пустые колонки без данных не нужны.
Предложите конечный текст запроса с учетом этих условий. Сможете без динамического формирования текста и предварительного анализа статей в ТЗ?
13. AlexeyIsip 26 29.01.21 09:30 Сейчас в теме
(12) Для чего такое размножение делается? Итоговая ТЗ потом как табличный документ выводится?
Если да, то на СКД есть возможность вывода измерения "Статья Финансирования" в заголовки колонок.
14. AlexeyIsip 26 29.01.21 11:13 Сейчас в теме
Вот пример на СКД по РегистрНакопления.НачисленияУдержанияПоСотрудникам

По СтатьямФинансирования у меня в базе не ведется, поэтому вместо СтатейФинансирования развернул по полю "НачислениеУдержание"
Прикрепленные файлы:
НачисленияЗП.erf
15. FatPanzer 29.01.21 11:15 Сейчас в теме
(14) Причем тут СКД? Нам не отчет нужен, а таблица значений с вменяемыми наименованиями колонок для дальнейшей работы.
17. AlexeyIsip 26 29.01.21 11:58 Сейчас в теме
Вот так попробуй
&НаСервере  
Функция ПреобразоватьВИдентификаторКолонки(знач Наименование)	
	Наименование=СтрЗаменить(Наименование," ","_");
	Наименование=СтрЗаменить(Наименование,"(","");
	Наименование=СтрЗаменить(Наименование,")","");
	Возврат	Наименование
КонецФункции

&НаСервере
Процедура ПреобразованиеТЗНаСервере()
		//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	НачисленияУдержанияПоСотрудникамОбороты.Организация КАК Организация,
		|	НачисленияУдержанияПоСотрудникамОбороты.СуммаОборот КАК СуммаОборот,
		|	НачисленияУдержанияПоСотрудникамОбороты.СтатьяФинансирования КАК СтатьяФинансирования,
		|	НачисленияУдержанияПоСотрудникамОбороты.Сотрудник КАК Сотрудник
		|ИЗ
		|	РегистрНакопления.НачисленияУдержанияПоСотрудникам.Обороты(&ДатаНачала, &ДатаОкончания, Период, Организация = &Организация) КАК НачисленияУдержанияПоСотрудникамОбороты";
	
	Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
	Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
	Запрос.УстановитьПараметр("Организация", Организация);
	
	//Получаем исходную таблицу значений
	ТЗ = Запрос.Выполнить().Выгрузить();
	
	//Получаем ТЗ с полным перечнем добавляемых колонок
	ТЗ_ВсеСтатьиФинансирования=ТЗ.Скопировать();
	ТЗ_ВсеСтатьиФинансирования.Свернуть("СтатьяФинансирования","");  	
	
	Для Каждого Строка_ТЗ_ВсеСтатьиФинансирования из ТЗ_ВсеСтатьиФинансирования Цикл
		//Получаем в исходную таблицу значений нужные колонки
		ИмяНовойКолонки=ПреобразоватьВИдентификаторКолонки(Строка_ТЗ_ВсеСтатьиФинансирования.Наименование);
		ТЗ.Колонки.Добавить(ИмяНовойКолонки,Новый ОписаниеТипов("СправочникСсылка.СтатьиФинансированияЗарплата"));    
		
	КонецЦикла;
	
	Для Каждого СтрокаТЗ Из ТЗ Цикл
		ИмяКолонки=ПреобразоватьВИдентификаторКолонки(СтрокаТЗ.Наименование);
		СтрокаТЗ[ИмяКолонки]= СтрокаТЗ.СуммаОборот;
	КонецЦикла;  	
	
КонецПроцедуры
Показать
18. Dmitry77 83 29.01.21 12:14 Сейчас в теме
Есть команда Выполнить (). Она выполняет тестовую строку.

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

ИмяКолонки = текстрокатз. Статьяфинансирования;
Выполнить("текстрокатз." + имяКолонки + "= текстрокатз. Сумма") ;
19. pyrkin_vanya 498 29.01.21 13:49 Сейчас в теме
Боже, я даже не понимаю, что здесь обсуждается. Кто-то СКД сюда приплел. Кто-то команду Выполнить.У автора задача простая. Как с точки зрения реализации, так и с точки зрения понимая зачем это надо (если конечно автор верно в принципе озвучил свою проблему). Выше я дал ссылку, где сам лично сделал конкретный пример того, как происходит программное создание колонок и их последующее заполнение. Заметьте в моем примере можно найти полезное не только конкретно в этом вопросе. Также и программное создание реквизитов формы и элементы в УФ. Автор, вопрос к вам. В Вашей теме уже много сообщений и людей уже тянет просто поболтать. Вы вообще смотрели мой пример? Если смотрели, то скажите конкретно, что вам в нем не понятно и почему он не решает вашего вопроса?
21. ivnik 617 29.01.21 21:24 Сейчас в теме
(19) Хороший пример! Только не пойму, как получить Итоги по колонкам в Табличном документе и вывести это на печать?
22. pyrkin_vanya 498 29.01.21 21:53 Сейчас в теме
(21)Зависит от ваших данных. Таблицу значений можно использовать как источник данных для запроса.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	ТаблицаДанных.Колонка_1,
|	ТаблицаДанных.Колонка_2
|ПОМЕСТИТЬ ВТ_ТаблицаДанных
|ИЗ
|	&ТаблицаДанных КАК ТаблицаДанных
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	ВТ_ТаблицаДанных.Колонка_1,
|	СУММА(ВТ_ТаблицаДанных.Колонка_2) КАК Колонка_2
|ИЗ
|	ВТ_ТаблицаДанных КАК ВТ_ТаблицаДанных
|
|СГРУППИРОВАТЬ ПО
|	ВТ_ТаблицаДанных.Колонка_1";
Запрос.УстановитьПараметр("ТаблицаДанных", ВашаТаблицаЗначений);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
	ВыборкаЗапроса = РезультатЗапроса.Выбрать();
	Пока ВыборкаЗапроса.Следующий() Цикл
		
		
		
	КонецЦикла;
КонецЕсли;

Показать


Один из вариантов. Дальше на что уже ваша фантазия способна.
24. ivnik 617 29.01.21 22:07 Сейчас в теме
(22) А что за Колонка_1, Колонка_2 ? У меня динамический список колонок...
25. pyrkin_vanya 498 29.01.21 22:08 Сейчас в теме
(24)Это просто пример. Нужно тогда динамически составлять текст запроса.
26. pyrkin_vanya 498 29.01.21 22:10 Сейчас в теме
(24)Я вижу, что Вы не до конца понимаете как это все работает. Может озвучите задачу целиком и полностью в одном сообщении. Что, откуда и куда вы хотите сделать? Версию конфигурации и платформы. И самое главное, что хотите получить в итоге?
27. ivnik 617 29.01.21 22:22 Сейчас в теме
(26) Меня попросили сделать мультифункциональную справку о расчете среднего заработка с раскладкой по статьям финансирования (и эти колонки должны формироваться по горизонтали!!!): для возможности делать выборку из нескольких разных документов!!! Печатная форма там тоже с соответствующими выкрутасами. (У них была обработка для ЗГУ-1.0 и они хотят тоже самое для ЗКГУ-3.1). Вот я и решил сделать универсальную ТЗ для всех вариантов и в зависимости от выбранного Документа формировать печатные формы.
28. pyrkin_vanya 498 29.01.21 22:25 Сейчас в теме
(27)Почему не используете обычный отчет на СКД? Там и печатная форма сразу будет и справка, как вы ее называете...
29. ivnik 617 29.01.21 22:28 Сейчас в теме
(28) К сожалению с СКД я до сих пор не подружился. Во-первых: я самоучка (ни на каких курсах не учился), во-вторых - уже пенсионер (тыква еще работает, но иногда "тормозит" на какой-нибудь мелочи).
30. pyrkin_vanya 498 29.01.21 22:31 Сейчас в теме
(29)Я тоже самоучка. Ничего, работаю. По тому описанию проблемы, что Вы дали, Вам как раз таки подойдет обычный отчет на СКД. Причем, если источник данных можно собрать обычным запросом, то и сам отчет можно сделать конструктором, без использования кода вообще. Попробуйте, вам понравится. :) Щас сделаю примерчик простой, как такой отчет строится.
32. пользователь 29.01.21 22:46
Сообщение было скрыто модератором.
...
31. pyrkin_vanya 498 29.01.21 22:39 Сейчас в теме
(29)Вот вам простой пример использования таблицы в СКД. Кода нет вообще. Отчет можете сформировать на УНФ 1.6. Ну и выглядит как на картинке. Итоги тоже есть. В колонках типы номенклатуры.
Прикрепленные файлы:
aspect_ПримерРаботыСТаблицейВСКД.erf
33. ivnik 617 29.01.21 22:48 Сейчас в теме
(31) У меня нет УНФ 1.6, а на ЗКГУ-3.1 он будет работать?
38. pyrkin_vanya 498 29.01.21 23:31 Сейчас в теме
(33)Вряд-ли. Но в конфигураторе можете его открыть. С ошибкой, но ничего страшного. И сделать по аналогии себе.
39. ivnik 617 29.01.21 23:34 Сейчас в теме
(38) Открывается с ошибкой.
Прикрепленные файлы:
34. пользователь 29.01.21 22:52
Сообщение было скрыто модератором.
...
35. пользователь 29.01.21 22:56
Сообщение было скрыто модератором.
...
36. пользователь 29.01.21 22:58
Сообщение было скрыто модератором.
...
23. pyrkin_vanya 498 29.01.21 22:06 Сейчас в теме
(21)Хотя не совсем понятно, причем тут табличный документ...Ну если вам потом это надо вывести в табличный документ, то можно примером выше.
37. пользователь 29.01.21 23:01
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот