Разработка отчетов

11 1

Введение

В рамках серии статей, посвященных разработке на ISBL, нами ранее были рассмотрены следующие вопросы:

  1. Общие сведения о разработке на IS-Builder
  2. Язык ISBL
  3. Типовые варианты использования функций ISBL
  4. Основы работы с объектной моделью IS-Builder
  5. Разработка на ISBL. Постановка задачи
  6. Разработка справочников в Directum
  7. Работа с наборами данных справочников
  8. Разработка новых типов карточек электронных документов
  9. Поиски EDMS-объектов (документов, задач, заданий, папок, вариантов запуска)
  10. Разработка сценариев

В этой статье мы поговорим о механизме формирования отчетов в Directum: рассмотрим, какие отчеты бывают, и какие средства для их разработки имеются. В качестве практики мы, продолжая решать задачу, разработаем небольшой RTF-отчет.

Совсем немного теории

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

Отчеты являются объектами системы и объединяют в себе Расчет – вычисление на языке ISBL, предназначенное для получения и подготовки данных отчета, и Шаблон, описывающий структуру результирующей формы отчета. При формировании отчета первым выполняется расчет, формируя данные, которые затем используются при обработке шаблона. И, наконец, полученный текст отчета передается в приложение для просмотра, указанное при настройке отчета. Для подготовки шаблона можно использовать как встроенный редактор, так и внешнее приложение, например, Microsoft Excel, в зависимости от задачи. Формирование отчета может выполняться пользователем вручную (пользователь находит отчет в списке и нажимает кнопку Выполнить), либо программно (метод Execute() объекта IReport).

По составу данных отчеты делятся на интегрированные и аналитические. Интегрированные отчеты выполняются в контексте конкретного справочника и используют его данные. В частности, в текстах расчета и шаблона интегрированного отчета имеется возможность обратиться к текущей записи справочника через предопределенную переменную Object. Доступ к интегрированным отчетам для разработки осуществляется из компоненты Типы справочников, из формы списка соответствующего справочника через меню СервисОтчеты. В отличие от интегрированных аналитические отчеты предназначены для анализа информации по всей системе в целом, а их разработка ведется в компоненте разработчика Разработка отчетов.

При выводе отчетов в Microsoft Excel имеется возможность формирования сводных таблиц. Эта возможность предоставляется надстройкой directum.xla. Для формирования сводной таблицы выходные данные отчета должны содержать строку заголовков и строки данных формируемой сводной таблицы. Параметры настройки сводной таблицы при этом передаются через переменную СводТабл, либо полученная таблица настраивается вручную в Microsoft Excel. Если для получения данных отчета используется SQL-запрос, то системная функция SQL2XLSTAB() позволяет сформировать данные для сводной таблицы на основании текста запроса без промежуточных действий.

Разработка отчета

Чтобы "потрогать все своими глазами" и закрепить теорию на практике, создадим интегрированный отчет для справочника Права доступа работников на ПО. Отчет будет выводить список ПО и прав к нему из открытой карточки справочника в RTF-документ.

Откройте справочник Права доступа работников на ПО, в меню Сервис выберите пункт Отчеты. Открывшийся при этом список и есть список интегрированных отчетов нашего справочника. Создайте новый отчет и заполните поля на открывшейся карточке как показано на рисунке:
 

Теперь создадим текст расчета. Нажмите кнопку Расчет и введите следующий текст:

// Получить наименование работника
Worker = Object.Requisites('Работник').DisplayText

// Получить детальный набор с правами доступа работника к ПО
UserPermissions = Object.DetailDataSet(1)

// Получить количество записей детального набора
RecordCount = UserPermissions.RecordCount

// Заполнить список ПО и прав к нему для формирования отчета
Permissions = CreateList()
foreach UserPermission in UserPermissions

  Permissions.Add(
                  UserPermission.Requisites('SoftwareT').DisplayText;
                  UserPermission.Requisites('PermissionsTypeT').DisplayText
                 )

endforeach

Тут ничего сложного: из текущей записи справочника, доступ к которой мы получаем через предопределенную переменную Object, считываем значение реквизита Работник, количество записей детального набора сохраняем в переменной RecordCount, а данными детального набора заполняем список Permissions. На этом подготовка данных для нашего отчета завершена. Сохраните текст расчета и закройте окно редактора. Переходим к созданию текста шаблона. Нажмите кнопку Шаблон и в открывшемся редакторе введите следующий текст:

SEMICOLON = ';'

// Сформировать заголовок RTF-документа отчета
#[РТФЗагОтч()]

// Сформировать текстовый заголовок отчета
#{\b\qc\fs28 Права доступа к программному обеспечению\par}
#{\b\qc\fs22 работника [Worker]\par} \par

// Сформировать шапку табличной части отчета
#[РТФШапкаТабл('1;8;8'; '\qc\b №;Программное обеспечение;Права доступа')]

// Цикл по спискам исходных данных и формирование строк
// табличной части отчета
Index = 1
while Index <= RecordCount
  #[РТФСтрТабл('1;8;8';
               '\qc ' & Index & SEMICOLON &
               Permissions.Names(Index - 1) & SEMICOLON &
               Permissions.Values(Index - 1)
              )]
  Index = Index + 1
endwhile

// Сформировать конец RTF-документа отчета
#[РТФКонОтч()]

На тексте шаблона остановимся подробнее. Что тут где? В целом текст шаблона представляет собой обычное вычисление на ISBL, однако имеются две особенности. Во-первых, бросаются в глаза строки, начинающиеся с символа «#». Это строки будущего отчета. Текст этих строк, за исключением самого символа «#», в неизменном виде выводится в текст документа отчета, причем квадратные скобки «[» и «]» раскрываются, а их содержимое интерпретируется как выражения на ISBL. В нашем примере мы видим, что в этих строках происходит непосредственное создание тела RTF-документа с помощью тегов. Функции РТФЗагОтч(), РТФШапкаТабл(), РТФСтрокаТабл() и РТФКонОтч() являются прикладными и формируют соответствующие элементы RTF-документа также с помощью тегов. Второй особенностью текста шаблона является обращение к переменным, объявленным в тексте расчета. Иначе говоря, область видимости переменных расчета простирается и на шаблон, обеспечивая их связь. Вообще, в случае простых отчетов, когда алгоритм сбора и подготовки данных несложный, его можно разместить в тексте шаблона, совместив с выводом. Например, в нашем случае можно прямо в шаблоне получить все данные из карточки справочника, написав соответствующие выражения в квадратных скобках.

Сохраните и закройте текст шаблона. Наш отчет готов, можно сохранить и закрыть его карточку. Осталось дать пользователю удобный способ формирования отчета – кнопку в карточке справочника Права доступа работников на ПО. Для этого создайте в справочнике новое действие и связанную с ним кнопку на форме карточки. Если забыли, как это делается, вспоминаем тут. Вычисление действия в нашем случае будет простое:

// Найти в списке интегрированных отчетов справочника
// отчет 'PermissionsReport' и выполнить его
Object.Reports.ValueByName('PermissionsReport').Execute()

Убедитесь, что имя отчета в вычислении соответствует имени, указанному нами при создании отчета в его карточке. После сохранения всех изменений можно приступать к тестированию отчета. Перейдите в список справочника, найдите понравившуюся запись, откройте ее карточку и нажмите только что созданную кнопку формирования отчета. Если ничего не пропустили и все сделали правильно, то в результате работы отчета увидим сформированный RTF-документ, открытый в Microsoft Word:
 

Если откроем файл RTF-отчета как текстовый документ, то увидим его содержимое: текст, сформированный прикладными функциями, а также строки, указанные нами в шаблоне, без каких-либо изменений. Так что здесь нет никакого волшебства, все в наших руках, все под контролем. Аналогичным образом, используя теги, можно создавать отчеты в формате HTML и других подобных форматах.

Разработка аналитических отчетов ведется ровно таким же образом с той лишь разницей, что в случае аналитического отчета мы не работаем в контексте определенного справочника, и предопределенная переменная Object предоставляет доступ к объекту IReport выполняющегося отчета.

Заключение

В данной статье мы познакомились с механизмом формирования отчетов в Directum, его назначением и особенностями, выяснили отличие между интегрированными и аналитическими отчетами. На примере разработки несложного RTF-отчета мы рассмотрели инструменты и порядок создания отчетов в Directum.

11
Авторизуйтесь, чтобы оценить материал.
2
Андрей Орлов

А подскажите, как можно реализовать, чтобы сформированный отчёт Report выгружался в определённую папку пользователю?

Авторизуйтесь, чтобы написать комментарий