Скрыть строки со скрытыми колонками-ресурсами СКД

1. scarl1n 17.09.24 08:01 Сейчас в теме
На примере самого простого отчета:
Набор данных - запрос на регистр оборотов. Пытаемся получить количество прихода номенклатуры. По номенклатуре есть приход, но в настройках отчета колонку "Приход" мы скрыли, в итоге выводится просто номенклатура. Есть возможность как-то скрыть такую номенклатуру, по которой как будто бы нет ресурса?

На примере другого отчета, зачем это нужно:
Есть 2 набора с количеством прихода и расхода. По одной номенклатуре есть лишь расход, но колонку с расходом мы скрыли, чтобы увидеть лишь приход номенклатуры. В итоге в отчет попадает куча строк, где нет прихода.
Найденные решения
4. lone_mayson 54 17.09.24 09:54 Сейчас в теме
(3) Попробовал. Так-то работает вроде как. Разумеется, структура/настройки у отчёта могут быть совершенно разные.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	НастройкиКомпоновкиДанных = КомпоновщикНастроек.ПолучитьНастройки();
		
	ПоляКД = Новый Массив();
	Для Каждого ВыбранноеПолеКД Из НастройкиКомпоновкиДанных.Выбор.Элементы Цикл
		Если Не ВыбранноеПолеКД.Использование Тогда
			ПоляКД.Добавить(ВыбранноеПолеКД.Поле);
		КонецЕсли;
	КонецЦикла;
	
	ГруппировкаКомпоновкиДанных = НайтиГруппировку(НастройкиКомпоновкиДанных.Структура, Новый ПолеКомпоновкиДанных("Номенклатура"));
	Если ГруппировкаКомпоновкиДанных <> Неопределено Тогда
		Для Каждого ПолеКД Из ПоляКД Цикл
			Элемент = ГруппировкаКомпоновкиДанных.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
			Элемент.ЛевоеЗначение = ПолеКД;
			Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; 
			Элемент.ПравоеЗначение = 0;
		КонецЦикла;		
		ЗначениеПараметра = ГруппировкаКомпоновкиДанных.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьОтбор"));
		ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
		ЗначениеПараметра.Использование = Истина;
	КонецЕсли;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();    
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных, ДанныеРасшифровки,, Тип("ГенераторМакетаКомпоновкиДанных"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных();
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент();
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры

Функция НайтиГруппировку(Коллекция, ПолеКД)
	
	Для Каждого ГруппировкаКомпоновкиДанных Из Коллекция Цикл
		Для Каждого ПолеГруппировки Из ГруппировкаКомпоновкиДанных.ПоляГруппировки.Элементы Цикл
			Если ПолеГруппировки.Поле = ПолеКД Тогда
				Возврат ГруппировкаКомпоновкиДанных;
			КонецЕсли;
		КонецЦикла;
		ГруппировкаКомпоновкиДанных = НайтиГруппировку(ГруппировкаКомпоновкиДанных.Структура, ПолеКД);
		Если ГруппировкаКомпоновкиДанных <> Неопределено Тогда
			Возврат ГруппировкаКомпоновкиДанных;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Неопределено;
	
КонецФункции
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. lone_mayson 54 17.09.24 09:04 Сейчас в теме
Отбор для группировки приход > 0, в других настройках не выводить отбор?
3. scarl1n 17.09.24 09:11 Сейчас в теме
(2) Ну это условная ситуация, мы же не знаем, какие из колонок отключены, чтобы отбор вешать на остальные. Разве что, в событии "ПриКомпоновкеРезультата"?
4. lone_mayson 54 17.09.24 09:54 Сейчас в теме
(3) Попробовал. Так-то работает вроде как. Разумеется, структура/настройки у отчёта могут быть совершенно разные.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	НастройкиКомпоновкиДанных = КомпоновщикНастроек.ПолучитьНастройки();
		
	ПоляКД = Новый Массив();
	Для Каждого ВыбранноеПолеКД Из НастройкиКомпоновкиДанных.Выбор.Элементы Цикл
		Если Не ВыбранноеПолеКД.Использование Тогда
			ПоляКД.Добавить(ВыбранноеПолеКД.Поле);
		КонецЕсли;
	КонецЦикла;
	
	ГруппировкаКомпоновкиДанных = НайтиГруппировку(НастройкиКомпоновкиДанных.Структура, Новый ПолеКомпоновкиДанных("Номенклатура"));
	Если ГруппировкаКомпоновкиДанных <> Неопределено Тогда
		Для Каждого ПолеКД Из ПоляКД Цикл
			Элемент = ГруппировкаКомпоновкиДанных.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
			Элемент.ЛевоеЗначение = ПолеКД;
			Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше; 
			Элемент.ПравоеЗначение = 0;
		КонецЦикла;		
		ЗначениеПараметра = ГруппировкаКомпоновкиДанных.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВыводитьОтбор"));
		ЗначениеПараметра.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
		ЗначениеПараметра.Использование = Истина;
	КонецЕсли;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();    
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных, ДанныеРасшифровки,, Тип("ГенераторМакетаКомпоновкиДанных"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных();
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент();
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры

Функция НайтиГруппировку(Коллекция, ПолеКД)
	
	Для Каждого ГруппировкаКомпоновкиДанных Из Коллекция Цикл
		Для Каждого ПолеГруппировки Из ГруппировкаКомпоновкиДанных.ПоляГруппировки.Элементы Цикл
			Если ПолеГруппировки.Поле = ПолеКД Тогда
				Возврат ГруппировкаКомпоновкиДанных;
			КонецЕсли;
		КонецЦикла;
		ГруппировкаКомпоновкиДанных = НайтиГруппировку(ГруппировкаКомпоновкиДанных.Структура, ПолеКД);
		Если ГруппировкаКомпоновкиДанных <> Неопределено Тогда
			Возврат ГруппировкаКомпоновкиДанных;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Неопределено;
	
КонецФункции
Показать
Оставьте свое сообщение

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