Структура отчетов, форм, реестров

Ключевым отличием отчетов (и форм) от реестров является то, что в отчете в каждой клетке может быть свой объект ситемы (в том числе вычисленный в процессе построения отчета), а в реестре каждая строка - это один, реально существующий объект.

Принцип построения отчетов и форм

В отчетах и формах есть заголовки строк, заголовки столбцов и внешние фильтры. Заголовки столбцов/строк могут быть трех типов:

  • Источники: показатель, значение которого выводится в ячейке отчета.
  • Фильтры: некоторые условия на объект, например - условие равенства показателя определенному значению.
  • Оформительские: отображаются в заголовках отчета, но не влияют на содержимое соответствующих ячеек.

Заголовки строк (или заголовки столбцов) могут образовывать древовидную структуру. В этом случае, каждая ветка дерева будет порождать отдельную строку (или столбец) в отчете.

В простейшем случае в каждой ячейке отчета будет выводиться значение, полученное следующим образом: все объекты системы отсеиваются согласно фильтрам и условию определенности источника, после этого должен остаться один объект, у которого определен источник, значение источника как раз будет выведено в ячейку отчета. Если в результате отбора объектов по фильтрам получилось более одного подходящего объекта в одну ячейку, то получается расслоение отчета в этой ячейке (она подкрашивается оранжевым, при клике по ней левой кнопкой мыши можно узнать подробную информацию).

_images/16.png

У каждой ячейки должен быть один и только один источник значений, таким образом источники для отчета могут располагаться либо только в заголовках строк, либо только в заголовках столбцов. Пользователь может выбрать «Значение из показателя» (в конструкторе может быть настроен один источник на весь отчет, расположенный ни в столбцах и ни строках).

Если у источника, соответствующего конкретной ячейке, заданы некоторые параметры агрегации или формулы вычисления, система параллельно с поиском подходящего объекта, описанным в простейшем случае, производит вычисления по формуле и признакам агрегации. В результате этих вычислений мы получаем виртуальный объект (не хранящийся в базе), с соответствующим набором признаков, который может удовлетворять всем условиям, установленным заголовками столбцов, строк и внешними фильтрами.

Исключением из расслоения является ситуация, когда в ячейку попадает ровно два объекта - виртуальный и реальный (в таком случае это воспринимается как корректировка вычисленного значения). Отображается значение источника в реальном объекте, ячейка подкрашивается желтым, а вычисленное значение можно увидеть во всплывающей подсказке.

_images/17.png

При построении отчета (или формы) нужно помнить о возможности возникновения расслоений в ячейках, если структура отчета (формы) недостаточно хорошо продумана. Описание способов устранения расслоений см. в подразделе Расслоения.

Динамические отчеты

В системе существует так же возможность построения динамических отчетов (отчетов, кол-во строк в которых зависит от существующих в системе данных). Такие отчеты нужны, например, если не известно, для каких конкретно значений аналитических признаков нужно построить таблицу, и нужно показать все те, для которых есть значения.

Для построения динамического отчета необходимо оставить заголовки строк пустыми, а все источники и фильтры разместить только в заголовках столбцов (или во внешних фильтрах отчетах). При этом из фильтров нельзя образовывать иерархическую структуру, если в ней нет источника. Далее, логику рассчета динамического отчета можно предствавить следующим образом:

  1. Берутся все заголовки столбцов в которых нет источника (то есть просто столбцы-фильтры)
  2. Для них строятся все возможные сочетания значений.
  3. Для каждого сочетания вычисляются значения заголовков с источниками.
  4. Если ни для одного из заголовков с источником нет значений для такого набора фильтров (либо если у источника включено «Не учитывать при пропуске пустых»), то такой набор признаков не отображается.
  5. Если значение хотя бы одного заголовка с источником посчиталось - в отчете появляется строка с таким набором признаков и соответствующими значениями источников.

Кроме того, в динамических отчетах можно сделать группировку строк, отметив «группировочный» в заголовке-фильтре. Например, если есть два показателя (два столбца-фильтра в отчете) - «Бренд» и «Модель», по которым перечисляются все товары в магазине (Apple iPhone 5, Apple iPhone SE, Apple iPhone 10 и Samsung Galaxy S, Galaxy Fold, Galaxy Note), то, для того чтобы не повторять название бренда при каждом товаре, можно сделать источник «Бренд» группировочным, и под него свернутся все принадлежащие этому бренду модели.

_images/282.png

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

Настройки находятся в левом верхнем углу окошка показателя, которое вызывается нажатием на шестеренку около его названия в заголовках. Нажимаем и проставляем галочку «Не учитывать при пропуске пустых строк».

_images/62.png

Принцип построения реестра

В реестрах предусмотрены только заголовки столбцов и внешние фильтры. Заголовки столбцов могут быть двух типов:

  • Источники: показатель, значение которого выводится в ячейке отчета.
  • Оформительские (только в конструкторе, не АП): отображаются в заголовках отчета, но не влияют на содержимое соответствующих ячеек.

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

Реестр определяется набором заголовков столбцов (все являются «источниками» в нашей терминологии) и внешних фильтров. При построении реестра формируется запрос в базу, вида «выбрать все объекты, для которых определены указанные показатели - источники и соблюдаются условия, указанные во внешних фильтрах». При построении реестра показываются все данные, которые есть в базе по данному запросу. В реестре, как и в отчете, действует условие единственности источника для каждой ячейки. Фильтров в столбцах реестров быть не может. Иерархическая структура заголовков столбцов в реестре может быть образована с помощью заголовков-источников и оформительских заголовков, при условии, что в каждом столбце присутствует один и только один источник. Источники в реестрах могут быть обязательными и необязательными.

По умолчанию, все источники - обязательны для заполнения. Это значит, что если у какого-то объекта не определен один из обязательных показателей-источников, он не будет выведен в реестре. А при вводе данных через реестр, строка не будет сохраняться, если не будут заполнены все обязательные ячейки. При просмотре реестра все обязательные для заполнения столбцы отмечены красной звездочкой рядом с названием заголовка столбца.

Чтобы поле стало необязательным для заполнения, можно в настройках источника отметить галочкой «Может быть пустым» (тогда при просмотре реестра не появится красная звездочка «Обязательно для заполнения» рядом с названием заголовка столбца).

_images/214.png

Реестр из справочника

Для построения такого реестра необходимо в конструкторе реестров нажать «Значение из справочника» или в Аналитической панели в настройках (в верхнем меню страницы) поставить галочку в чек-боксе «реестр из справочника» (в верхнем меню страницы), а потом в выпадающем списке рядом выбрать справочник, по которому строится реестр. Тогда в реестре будут видны только объекты, принадлежащие указанному справочнику.

_images/67.png

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

Все созданные через реестр элементы справочника будут отображаться при просмотре справочника по клику по его названию в списке всех справочников (Меню => «Справочники»).