Система компоновки данных. Убрать самый верхний уровень группировки.
Здравствуйте! Как убрать из отчета ненужную строку?
Более подробно, в схеме есть группировка - таблица, строки таблицы это элементы справочника с иерархией. Т.е. все выводится как надо, но есть нюанс выводится самый верхний элемент из иерархического справочника и всё правильно ведь группировка строк с иерархией. Но в данном случае этот элемент не нужен в отчете так как смысловая нагрузка на этот элемент справочника только с технической стороны, а вот для пользователя он не нужен тем более ещё и итоговые суммы по этому элементу. Через отбор не получается. Как сделать подскажите? Если только программно, то как?
Платформа 8.2.13.205
Отчет вшит в конфигурацию форма управляемая. Основной режим запуска базы обычное приложение.
Более подробно, в схеме есть группировка - таблица, строки таблицы это элементы справочника с иерархией. Т.е. все выводится как надо, но есть нюанс выводится самый верхний элемент из иерархического справочника и всё правильно ведь группировка строк с иерархией. Но в данном случае этот элемент не нужен в отчете так как смысловая нагрузка на этот элемент справочника только с технической стороны, а вот для пользователя он не нужен тем более ещё и итоговые суммы по этому элементу. Через отбор не получается. Как сделать подскажите? Если только программно, то как?
Платформа 8.2.13.205
Отчет вшит в конфигурацию форма управляемая. Основной режим запуска базы обычное приложение.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Я победил, хоть и не совсем красиво:
Процедура ПринятьНастройки()
Если КомпоновщикНастроек.Настройки.Структура.Количество() > 0 Тогда
Для каждого текГруппировка из КомпоновщикНастроек.Настройки.Структура[0].Строки Цикл
ПроверитьГруппировкуНастройки(текГруппировка,мУровень);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьГруппировкуНастройки(текПолеГруппировки,мУровень)
Для каждого ЭлементГруппировки из текПолеГруппировки.ПоляГруппировки.Элементы Цикл
Если ЭлементГруппировки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Иерархия ИЛИ
ЭлементГруппировки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.ТолькоИерархия Тогда
Если Строка(ЭлементГруппировки.Поле) = "Контрагент" Тогда
мУсловноеОформление = текПолеГруппировки.УсловноеОформление;
мУсловноеОформление.Элементы.Очистить();
Если мУровень > 0 Тогда
ЭлементУсловногоОформления = мУсловноеОформление.Элементы.Добавить();
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СистемныеПоля.УровеньВГруппировке");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
ЭлементОтбора.ПравоеЗначение = мУровень;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("МаксимальнаяВысота", 1);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если текПолеГруппировки.Структура.Количество() > 0 Тогда
ПроверитьГруппировкуНастройки(текПолеГруппировки.Структура[0],мУровень);
КонецЕсли;
КонецПроцедуры
Показать
мУровень - Нужный уровень по какой обрезаем
У меня это для группировки контрагента, но Вы можете сделать для любой
Процедура ПринятьНастройки()
Если КомпоновщикНастроек.Настройки.Структура.Количество() > 0 Тогда
Для каждого текГруппировка из КомпоновщикНастроек.Настройки.Структура[0].Строки Цикл
ПроверитьГруппировкуНастройки(текГруппировка,мУровень);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьГруппировкуНастройки(текПолеГруппировки,мУровень)
Для каждого ЭлементГруппировки из текПолеГруппировки.ПоляГруппировки.Элементы Цикл
Если ЭлементГруппировки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Иерархия ИЛИ
ЭлементГруппировки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.ТолькоИерархия Тогда
Если Строка(ЭлементГруппировки.Поле) = "Контрагент" Тогда
мУсловноеОформление = текПолеГруппировки.УсловноеОформление;
мУсловноеОформление.Элементы.Очистить();
Если мУровень > 0 Тогда
ЭлементУсловногоОформления = мУсловноеОформление.Элементы.Добавить();
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СистемныеПоля.УровеньВГруппировке");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
ЭлементОтбора.ПравоеЗначение = мУровень;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("МаксимальнаяВысота", 1);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если текПолеГруппировки.Структура.Количество() > 0 Тогда
ПроверитьГруппировкуНастройки(текПолеГруппировки.Структура[0],мУровень);
КонецЕсли;
КонецПроцедуры
мУровень - Нужный уровень по какой обрезаем
У меня это для группировки контрагента, но Вы можете сделать для любой
Найдено следующее решение.
Алгоритм:
- Результат выполнения СКД схемы выведен в Табличный Документ;
- Определяем Область группировки верхнего уровня (с начала и до конца отчета - то что охвачено "+");
- Снимаем группировку на области в отчете, применяем метод
ОбластьЯчеекТабличногоДокумента.Разгруппировать (SpreadsheetDocumentRange.Ungroup)
Разгруппировать (Ungroup)
Доступен, начиная с версии 8.0.
Область.Разгруппировать();
- Удаляем ненужную строку, берем область по одной строке с наименованием нам не нужной группировки и применяем следующий метод
ТабличныйДокумент.УдалитьОбласть (SpreadsheetDocument.DeleteArea)
УдалитьОбласть (DeleteArea)
Доступен, начиная с версии 8.0.
Синтаксис:
УдалитьОбласть(<ИсходнаяОбласть>, <Сдвиг>)
Алгоритм:
- Результат выполнения СКД схемы выведен в Табличный Документ;
- Определяем Область группировки верхнего уровня (с начала и до конца отчета - то что охвачено "+");
- Снимаем группировку на области в отчете, применяем метод
ОбластьЯчеекТабличногоДокумента.Разгруппировать (SpreadsheetDocumentRange.Ungroup)
Разгруппировать (Ungroup)
Доступен, начиная с версии 8.0.
Область.Разгруппировать();
- Удаляем ненужную строку, берем область по одной строке с наименованием нам не нужной группировки и применяем следующий метод
ТабличныйДокумент.УдалитьОбласть (SpreadsheetDocument.DeleteArea)
УдалитьОбласть (DeleteArea)
Доступен, начиная с версии 8.0.
Синтаксис:
УдалитьОбласть(<ИсходнаяОбласть>, <Сдвиг>)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот