Удаление пустых группировок в СКД

Отчет имеет структуру группировок:
Показатель
— Группа статей
—- Статья

Иногда показатель идет без статьи и получаются пустые строки. Нужно их удалять.

Отчет в СКД формируется из таблицы значений. Поэтому я просто заменяю в таблице значений пустые статьи и группы статей неким уникальным GUID:

ПометитьПустыеСтрокиТаблицыОтчета(ТЗРез);


Процедура ПометитьПустыеСтрокиТаблицыОтчета(ТЗРез)
	ПустаяГруппировка = ПустаяГруппировка();
	Для Каждого Строка ИЗ ТЗРез Цикл
		Если НЕ ЗначениеЗаполнено(Строка.Статья) Тогда
			Строка.Статья = ПустаяГруппировка;
		Конецесли;
		Если НЕ ЗначениеЗаполнено(Строка.РодительСтатьи) Тогда
			Строка.РодительСтатьи = ПустаяГруппировка;
		Конецесли;
	КонецЦикла;
КонецПроцедуры

Функция ПустаяГруппировка()
	Возврат "2dd35862-c6a9-471d-b31e-1db461e21a23";	
КонецФункции

Отчет после этого выглядит так:

После чего специальным кодом обрабатываю готовый отчет и вырезаю строки, содержащие этот GUID:

ОчиститьСтрокиТабличногоДокументаСодержащиеМаркер(ДокументРезультат, ПустаяГруппировка());

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

Мало того, ненужные мне строки в заголовке я тоже удаляю этим же методом, указывая для полей Статья и Группа статей синонимы в виде этого GUID:

Отчет получается компактным и не мозолит глаза ненужными строками. Рекомендую способ!

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 13

  1. rzd:

    А где итоговый результат табличного документа?

  2. rzd:

    Все это делается отборами. В пользовательском режиме даже можно

    • не делается отборами.
      Вот пример:
      Показатель, Статья, Сумма
      Выручка, , 1000
      Оборот,Пиво,300
      Оборот,Водка,200
      Выведет так:
      Выручка 1000
      — 1000
      Оборот 500
      — Пиво,300
      — Водка,200

      Если отключить отбором пустую статью, выведет так:

      Оборот 500
      — Пиво,300
      — Водка,200

    • swolf:

      Нет, если включить отборы, то данные не будут учтены в таблице. Они будут полностью исключены, как будто их убрали на уровне запроса. Если вы не можете придумать задачу, где это необходимо, то просто еще не сталкивались.

      • да. на практике есть более сложные случаи, о которых я и рассказываю. К сожалению, иерархия в СКД не особо управляема. По крайней мере, вырезанием ненужного проще ею управлять чем предлагаемыми в СКД инструментами.

  3. Сергей:

    Доброго дня! Спасибо за пример. Тоже долго мучился, перебирал отборы, в итоге сработал отбор «Группа НЕ»

  1. 05.11.2023

    […] того, как я разработал технологию удаления строк в отчетах, я включил ее в форму типового отчета следующим […]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *