Отключение колонки отчета при отсутствии данных в строках

1. DENSKR 15 29.04.22 18:06 Сейчас в теме
Как программно отключить поле(Колонку) при отсутствии данных по ней в строках.
То есть имеется отчет в нем есть группировка детальных записей:
"Контрагент" | "Номенклатура" | "Размер" | "Количество"

Так вот в большинстве случаев во всех строках колонки "Размер" отсутствуют данные.

Необходимо при отсутствии данных по этой колонке отключать ее использование.
Поле.Использование = Ложь;
Иначе Поле.Использование = Истина;


Пытался в запросе создать параметр типа булево с подсчетом количества но не могу понять как этот параметр установить из запроса.
ВЫБОР
		КОГДА КОЛИЧЕСТВО(ВТ_ВсеОбъекты.Размер) > 0
			ТОГДА &ДаНет = ИСТИНА
		ИНАЧЕ &ДаНет = Истина
	КОНЕЦ КАК ДаНет

Отчет на СКД.
Просьба условное оформление по группировке не предлагать тк не умеет СКД нулевую ширину устанавливать.
Может у кого была такая задача, тема живая и нужная давайте погутарим!
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
4. spacecraft 29.04.22 20:28 Сейчас в теме +1 $m
(1) параметры нельзя устанавливать из запроса. Они работают наоборот. На момент запроса параметры должны быть установлены (вместо них подставляются их значения).
Первое, что пришло в голову, это получать программно в ТЗ. Анализировать полученный ТЗ. И уже по итогу, если необходимо, скрывать колонку отчета и формировать отчет уже в табличный документ. Из минусов: двойное выполнение отчета.
Пример:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	// 1
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	ТЗ = Новый ТаблицаЗначений;
	ПроцессорВывода.УстановитьОбъект(ТЗ);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	Если ТЗ.Итог("ПолеКотороеНужноСкрыть") = 0 Тогда
		ОтключаемаяКолонка = Новый ПолеКомпоновкиДанных("ПолеКотороеНужноСкрыть");
		Для Каждого Колонка Из Настройки.Выбор.Элементы Цикл
			Если Колонка.Поле = ОтключаемаяКолонка Тогда
				Колонка.Использование = Ложь;
				Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки);
    
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Prikum 3 29.04.22 18:11 Сейчас в теме
3. DENSKR 15 29.04.22 18:12 Сейчас в теме
(2) Да, сейчас описание поправлю.
4. spacecraft 29.04.22 20:28 Сейчас в теме +1 $m
(1) параметры нельзя устанавливать из запроса. Они работают наоборот. На момент запроса параметры должны быть установлены (вместо них подставляются их значения).
Первое, что пришло в голову, это получать программно в ТЗ. Анализировать полученный ТЗ. И уже по итогу, если необходимо, скрывать колонку отчета и формировать отчет уже в табличный документ. Из минусов: двойное выполнение отчета.
Пример:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	// 1
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	ТЗ = Новый ТаблицаЗначений;
	ПроцессорВывода.УстановитьОбъект(ТЗ);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	Если ТЗ.Итог("ПолеКотороеНужноСкрыть") = 0 Тогда
		ОтключаемаяКолонка = Новый ПолеКомпоновкиДанных("ПолеКотороеНужноСкрыть");
		Для Каждого Колонка Из Настройки.Выбор.Элементы Цикл
			Если Колонка.Поле = ОтключаемаяКолонка Тогда
				Колонка.Использование = Ложь;
				Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки);
    
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры
Показать
5. DENSKR 15 02.05.22 09:25 Сейчас в теме
(4) Не могу понять почему. ТЗ.Итог("Размер") = Неопределено, может быть что нужно еще как то задействовать компоновщик пользовательских настроек?
8. DENSKR 15 02.05.22 10:30 Сейчас в теме
(4) Не мог посчитать ТЗ.Итог потому что у колонки несколько типов значений. Сейчас все считает корректно! Классное решение спасибо!
6. triviumfan 93 02.05.22 09:34 Сейчас в теме
(1)
Может у кого была такая задача, тема живая и нужная давайте погутарим!

Нет, т.к. задача практически является бредом.
Пользователь сам должен решать, какие поля выводить, а какие нет - он задает структуру отчета. Ну, а если так сильно хочется, то решается она с помощью программного вывода. Есть куча примеров.
7. DENSKR 15 02.05.22 09:39 Сейчас в теме
(6) При отсутствии данных колонки быть не должно при наличии данных колонка должна выводиться. В чем бред?
Есть куча примеров
Как раз таки просьба привести пример...
9. PiotrLoginov 05.05.22 07:57 Сейчас в теме
(6) Вот не соглашусь. Часто встает задача выводить или не выводить какие-то колонки в зависимости от определенных условий.
10. DENSKR 15 05.05.22 08:15 Сейчас в теме
(9) Правильно, и если условия находятся в самом запросе, то здесь подходит только решение выбранное в теме.
Оставьте свое сообщение

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