В сегодняшней статье мы расскажем о важном изменении, касающемся принципа построения Master-Detail отчетов в продуктах Stimulsoft.

Что такое Master-Detail отчет?

Master-Detail – это тип отчета, в котором данные связаны между собой и организованы в несколько уровней: одной записи данных Master-бэнда соответствуют несколько записей Detail-бэнда данных. Другими словами, Master-Detail отчет – это документ с детализацией, например, отчет, где данные отображаются по категориям:


Выше мы видим стандартный пример: для каждой категории продуктов сначала выводится информация о категории, а затем список продуктов, которые относятся к этой категории.

Структура Master-Detail отчета

В нашем продукте есть два варианта взаимного расположения бэндов в Master-Detail отчёте.

Первый вариант – расположение detail-бэнда после master-бэнда:



Второй вариант – расположение detail-бэнда на master-бэнде, далее будем называть его вложенным detail-бэндом:

Detail band within the Master band Обратите внимание!

Компонент Панель используется в качестве контейнера для других элементов. На одной панели можно разместить один или несколько элементов. Только Кросс-бэнды можно размещать прямо на других бэндах, остальные бэнды можно размещать только в контейнерах.
Описанные выше два варианта расположения бэндов работают одинаково. Выбор варианта зависит только от того, какой внешний вид отчета надо получить. На практике второй вариант обычно используют при небольшом количестве данных для детализации.

Особенности построения Master-Detail отчетов

Пример отчета в начале статьи демонстрирует так называемую «идеальную ситуацию», когда во всех категориях присутствуют и, соответственно, отображаются данные по продуктам. Однако в реальных данных некоторые категории могут не содержать продуктов. Соответственно, в детализации категории нечего отображать.

На практике чаще всего пустые категории отображать не требуется. Поэтому по умолчанию наш движок их скрывает. Но пользователь может сам выбирать, отображать или не отображать пустые категории. Для этого он может использовать свойство мастер-бэнда Печатать если нет детальных данных (Print if Detail Empty). Если установить значение этого свойства в true, то все записи master-бэнда будут напечатаны независимо от того, есть ли для них detail-данные.

Изменения работы свойства Печатать если нет детальных данных

Переходим к основному вопросу статьи. Начиная с версии 2023.2 была доработана логика работы свойства Печатать если нет детальных данных. Ранее свойство работало только с Detail-бэндами, расположенными после Master-бэнда. Теперь свойство также работает и для Detail-бэндов, которые расположены на Master-бэнде. Обратите внимание!

Ранее вложенные detail-бэнды отображались в любом случае, независимо от значения свойства PrintIfDetailEmpty у мастер-бэнда. Поэтому если для master-бэнда свойство уже установлено в true, то ничего не изменится, detail-бэнд будет выводиться, как и раньше.
Технически вложенные бэнды всегда считались detail-бэндами, независимо от того, установлено ли у них свойство MasterComponent. Но так как свойство PrintIfDetailEmpty раньше не влияло на них, то пользователи и не догадывались об этом.

Таким образом, эта доработка может затронуть некоторые отчёты со вложенными бэндами, которые изначально создавались не как Master-Detail отчеты. Если у вложенного бэнда не будет данных, то основной бэнд тоже не будет отображаться.

Решение проблемы

Если в вашем отчёте возникла описанная выше проблема, её можно решить одним из способов:

  • для бэнда, который содержит другие вложенные бэнды, установить значение свойства Печатать если нет детальных данных в true;

  • из кода приложения установить значение статического свойства.
    StiOptions.Engine.CheckForEmptyNestedDetail=false

Если проблема затронула большое количество ваших отчётов, или у вас нет времени и желания изменять ваши отчёты – можно воспользоваться вторым вариантом. Но он влияет сразу на все отчёты, и, если вам когда-нибудь потребуется убирать мастер бэнд в случае отсутствия его детализации в каком-нибудь отчёте, вам всё-таки придётся использовать первый вариант, который потребует изменения в отчётах.

Также обращаем внимание, что некоторые свойства из StiOptions вводятся только для обеспечения обратной совместимости со старыми версиями. И когда-нибудь при проведении очередного крупного рефакторинга эти свойства могут быть помечены Obsolete и спустя несколько лет удалены.
Используя этот сайт, вы соглашаетесь на использование файлов Cookie для аналитики и персонализированного контента. Файлы Cookie хранят полезную информацию на вашем компьютере, чтобы помочь нам повысить эффективность и удобство использования. Для получения дополнительной информации, пожалуйста, прочтите Конфиденциальность и Использование Cookie.