Business Studio предоставляет мощный инструмент для получения необходимой информации из модели бизнес-архитектуры - Мастер отчетов.
Мастер отчетов позволяет создавать пользователю отчеты без глубокого погружения в компьютерную область знаний и предоставляет больше времени на решение насущных задач. При этом время выполнения отчета может быть значительным и являться критичным в зависимости от поставленных задач к отчету и от объемов данных.
Ниже описаны основные рекомендации, которые помогут разрабатывать правильные отчеты с точки зрения ожидания их выполнения. Для решения задачи минимизации времени построения отчета необходимо знать и понимать:
Объекты, из которых состоит модель бизнес-архитектуры хранятся в реляционной СУБД. Классы объектов, их параметры и связи описаны в Объектной модели (см. главу Руководство пользователя → Взаимосвязи объектов в Объектной модели Business Studio).
Параметры (данные), которые использует пользователь в своей работе, делятся на:
Расчет нехранимых параметров означает, что в оперативную память компьютера загружаются все необходимые для их расчета хранимые параметры, а возможно, и другие расчетные (нехранимые) параметры.
Расчет некоторых параметров может быть ресурсоемким в зависимости от объема данных, мощности компьютера и других программных условий.
Например, для физического лица в базе данных хранятся отдельно параметры:
В то же время, в базе данных не хранятся следующие параметры физического лица:
Они рассчитываются каждый раз, когда необходимо их узнать.
Порядок в скорости получения данных следующий:
Очень часто построение отчетов связано с привязками, использующими фильтры (работа с фильтрами описана в главе Фильтры). Поэтому время формирования отчета во многом зависит от выбранных настроек фильтра и поэтому при рассмотрении вопросов времени построения отчетов так много внимания уделяется условиям фильтров.
Создание фильтра по справочнику представляется пользователю в виде задания условий на выборку данных из большого списка параметров этого справочника. На самом деле в таком фильтре собирается множество параметров разных связанных справочников. Это обеспечивает удобство и простоту работы по созданию фильтра для пользователя. Платой за это является неоптимальность получения данных, что в ряде случаев является критичным для времени построения отчетов.
Допустим, у фильтра заданы условия по хранимым и нехранимым параметрам. Процесс выборки данных из базы будет следующий:
Следствие из выше указанного алгоритма:
В случае, если в результатах необходимо показать значения нехранимых параметров, то для всех объектов из "Списка 1" производится необходимый расчет значений - в очередной раз в оперативную память компьютера будут загружаться все необходимые параметры для расчета.
На скорость выполнения фильтров может так же влиять то обстоятельство, что необходимые параметры или справочники могут уже находиться в оперативной памяти. Они могли быть загружены при выполнении каких-либо предыдущих операций. Поэтому один и тот же фильтр может иметь различное время выполнения для ситуаций:
Некоторые нехранимые параметры для своих расчетов требуют загрузки в оперативную память компьютера множества параметров (иногда более 90% данных всей базы). Например, параметр "Входы и выходы по функц. объектам" деятельности.
В случаях, когда необходимо вывести фильтрованные значения нехранимого списка, то рекомендуется вывести этот нехранимый список в привязке типа "Список" или "BAND" и наложить на него фильтр. В этом случае при фильтрации никаких запросов к базе данных происходить не будет.
Некоторые фильтры в своих условиях не содержат нехранимые параметры, которые можно видеть в Объектной модели (Главное меню → Отчеты → Объектная модель). Решение о выводе или не выводе таких параметров принимает разработчик. Например, параметр "Полный путь", который встречается во многих справочниках.
Исходя из выше изложенного, можно сказать, что минимальное время на построение отчета зависит от времени выборки данных фильтрами и привязками, на которое влияет:
В зависимости от решаемой задачи, предлагается придерживаться следующих рекомендаций.
Создавать фильтры следует по возможности по хранимым параметрам и спискам.
Если одни и те же данные можно получить фильтрацией по хранимому или нехранимому параметру, то необходимо создавать условия по хранимому параметру.
Пример. Необходимо увидеть все декомпозированные единицы деятельности.
Задача требует показать все единицы деятельности, ниже которых есть какие-либо единицы деятельности. Узнать это можно по одному из параметров:
Работа фильтра с условием по параметру "Количество дочерних элементов":
Работа фильтра с условием по параметру "Дочерние элементы":
Как видно из описанного выше, условия в фильтре следует задавать по хранимому параметру "Дочерние элементы".
При решении поставленной задачи также следует обратиться к Рекомендации 3 - сузить поиск, задав условия для хранимых параметров. А именно:
С точки зрения минимизации времени получения данных, на вкладке Условия в фильтре по деятельности следует выставить следующие условия:
Параметр | Тип | Оператор | Значение | Не | Потомки |
---|---|---|---|---|---|
Дочерние элементы | Подфильтр | = | |||
-Единица деятельности | Значение | = | + | ||
Тип | Список значений | = | Папка, Внешняя ссылка, Служебный, Действие, Решение | + |
Создавать фильтры следует по возможности по "Строкам списков" и справочникам связей, а не по параметрам типа "Список", где:
Как было указано ранее, параметры типа "Список" являются сами по себе фильтрами. Поэтому вывод списков у объектов в "Класс" или фильтр по таким спискам приводят к созданию подзапросов SQL, что приводит к дополнительным затратам времени на получение необходимой выборки данных. В то же время "Строки списков" являются просто справочниками, так же как и справочники в Самостоятельных объектах. Фильтрация по справочнику - чистый запрос SQL, он работает быстрей.
Эта рекомендация работает почти во всех случаях, когда нужно найти что-то по связям чего-то с чем-то. В случае, если надо найти отсутствие этих связей, то необходимо делать поиск через "Самостоятельные объекты".
Пример. Необходимо получить список единиц деятельности, у которых на вкладке Нормативно-справочные документы есть хотя бы один документ.
У задачи есть 2 решения:
С точки зрения минимизации времени получения данных правильным будет второй путь. "БизнесМодель.СписокНСДПроцессов" содержит только информацию о существующих связях единиц деятельности с документами - одна строка показывает связь одного документа с одной единицей деятельности. Поэтому условий у фильтра никаких не будет. Следует просто вывести на показ название единицы деятельности (параметр "Владелец"). При этом следует понимать, что за одной единицей деятельности может быть закреплено несколько документов. Поэтому может быть несколько строк, у которых единицы деятельности одинаковые. Это приведет к дублированию информации. Чтобы этого не происходило, необходимо на вкладке Группировка выставить группировку по параметру "Владелец".
Т.е. все что необходимо сделать в фильтре, это выставить группировку.
Во всех фильтрах следует как можно больше сужать область поиска по хранимым параметрам.
Следует учитывать, что:
Поэтому необходимо задавать условия по фильтрам так, чтобы в результаты фильтра попадало больше целевой информации, что сведет к минимуму количество операций для её последующей обработки: расчету нехранимых параметров, дополнительной фильтрации.
Пример. Необходимо найти все единицы деятельности первого уровня.
Ключевым условием в данном случае является поиск значения нехранимого параметра "Уровень". Это означает, что для всех единиц деятельности модели необходимо провести расчет этого параметра и выбрать подходящие по условию.
Количество таких расчетов можно сократить, если из списка сразу исключить те единицы деятельности, которые не могут иметь искомое значение уровня. Это единицы деятельности с типом: Действие, Решение, Внешняя ссылка, Служебный. Тип единицы деятельности является хранимым параметром, поэтому это подходит для задач сужения области поиска.
С точки зрения минимизации времени получения данных правильными будут вот условия поиска в фильтре по справочнику "Деятельность", приведенные в Таблице 2.
Параметр | Тип | Оператор | Значение | Не | Потомки |
---|---|---|---|---|---|
Тип | Список значений | = | Действие, Решение, Внешняя ссылка, Служебный | + | |
Уровень | Значение | = | 1 |
Если известно, что данные в сложной привязке не будут иметь дублирования или пустых строк, то не рекомендуется задавать опции:
Каждая такая опция означает дополнительное время на анализ данных. А если мы заранее знаем, что в списке нет дубликатов или пустых значений, то время будет потрачено зря.
Исходя из изложенного выше, следует следующая рекомендация.
По возможности следует настраивать фильтр так, чтобы полученные данные не содержали дублирования (группировка) или пустых значений (условия). Это позволит не делать исключение дубликатов и пустых строк в настройках привязок.
Скорость подобных операций при выполнении SQL-запроса выше, и будет меньше информации передаваться по сети между SQL-сервером и компьютером пользователя.
По возможности необходимо делать настройки фильтра таким образом, чтобы исключить дублирование в выводе информации. Например, делать не просто вывод параметров на показ, а выводить их с группировкой. Это позволит сократить время на последующую обработку полученных данных для избавления от дубликатов.
Как правило, группировка будет актуальна при работе со списками, потому как они содержат информацию по различным связям и именно там встречаются записи с одинаковыми параметрами. В то же время, повторяющихся объектов в справочниках ("Классы") обычно не бывает.
Пример. Получить список всех единиц деятельности, у которых есть исполнители.
Согласно рекомендации 2 решаем, что искать такие единицы деятельности правильно по справочнику "Связи оргединицы с единицей деятельности" (Самостоятельные объекты → Связи → БизнесМодель.СвязиПроцессов). Условия фильтра будут такие, как приведены в Таблице 3.
Параметр | Тип | Оператор | Значение | Не | Потомки |
---|---|---|---|---|---|
Тип связи | Подфильтр | = | |||
-Категория типа связи | Значение | = | Исполнитель |
Данный справочник содержит информацию по каждой связи единицы деятельности с оргединицей. Поэтому может быть дублирование информации. Т.е. одна строка содержит информацию только по одной единице деятельности и одной связанной с ней оргединицей. Это ситуация, когда у единицы деятельности более 1-го исполнителя.
Поэтому для отображения данных по результату выполнения фильтра необходимо на вкладке Группировка установить флажок напротив параметра "Единица деятельности".
Если бы группировки в фильтре не было, то в настройках сложной привязки типа "Фильтр" необходимо было бы устанавливать флажок Удалять повторяющиеся строки. А это привело бы к загрузке в оперативную память списка с дубликатами единиц деятельности.
В фильтре на вкладке Показ следует устанавливать флажки для тех хранимых параметров, которые нужны для расчета нехранимых. Это значительно сильно ускорит их расчет, ведь они будут загружены одним запросом, вместо того, чтобы загружаться каждый раз отдельно для каждого расчета.
Загруженные параметры в память могут использоваться для разных операций. Поэтому лучше необходимые данные загрузить в память один раз и из базы данных, чем обращаться к базе по чуть-чуть каждый раз. Поэтому, если знаем (или предполагаем), что какой-то нехранимый параметр, который имеет условие, для своего расчета требует данные хранимых параметров из справочника, то лучше установить флажки для этих параметров на вкладке Показ.
Таким же образом следует поступать, если фильтр в отчете должен показывать свои нехранимые параметры.
Пример. В отчете вывести физических лиц с именем "Александр" в виде "Фамилия И.О."
Задача решается путем создания фильтра по физическим лицам с условием, приведенным в Таблице 4.
Параметр | Тип | Оператор | Значение | Не | Потомки |
---|---|---|---|---|---|
Имя | Значение | ~ | Александр |
В отчете в настройках сложной привязки типа "Фильтр" выбирается на показ параметр "Фамилия И.О.", который является нехранимым. Поэтому для ускорения создания отчета в настройках фильтра на вкладке Показ необходимо установить флажок для параметров:
В условиях фильтра не рекомендуется использовать параметр "Потомки" для справочников с нестандартной иерархией ("Деятельность" и "Оргединицы"). Этот параметр можно использовать для справочников со стандартной иерархией (все остальные иерархические справочники).
Работа по признаку "Потомки" в справочниках "Деятельность" и "Оргединицы" ведется так же, как и работа с нехранимыми параметрами. Этот нехранимый параметр является высоко затратным для расчетов. У других справочников работа с "Потомки" аналогична работе с хранимыми параметрами.
Пример. От оргединицы получить список сотрудников (Фамилия) нижележащих оргединиц.
В отчете по оргединице эту задачу можно решить двумя путями:
Параметр | Тип | Оператор | Значение | Не | Потомки |
---|---|---|---|---|---|
Оргединица | Подфильтр | = | + |
Источник данных | Параметр | Параметр фильтра | Название условия фильтра |
---|---|---|---|
Объект отчета | Оргединица |
С точки зрения минимизации времени получения данных, правильным будет первый путь, так как второй путь предполагает работу с параметром "Потомки" справочника с нестандартной иерархией. Работа с нехранимым параметром "Все сотрудники" выполняется быстрее, так как этот параметр оптимизирован по быстродействию разработчиком.
В подобных ситуациях, если в справочниках уже есть параметры, предоставленные разработчиком, то рекомендуется использовать их, а не создавать свои условия. Они уже оптимизированы по времени выполнения.
Вставка полей RTF занимает больше времени, чем вставка обычных текстовых полей.
Для ускорения процесса формирования отчётов можно:
Пример. К единице деятельности нужно приложить документ, содержащий значительное количество информации
В данном случае рекомендуем сделать следующее:
В отчёте нужно создать следующую привязку:
Такой вариант отчёта будет формироваться быстрее, чем вариант с выводом содержимого полей RTF.