Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Средство конечного пользователя
для генерации документов по базам данных
, ,
Аннотация. Статья посвящена разработке такого Генератора отчетов, который предоставляет конечному пользователю возможность самому описать и сгенерировать отчет. Генератор может быть включен как один из компонентов в любую прикладную систему, при этом созданное конечным пользователем описание выходного документа транслируется автоматически непосредственно перед выводом документа без выхода из приложения. В отличие от других Генераторов (Crystal Report, RPG и др.) спецификации отчета упрощены и расчитаны на конечного пользователя, а не на прикладного программиста.
Введение.
Для создания отчета необходимо решить много технических вопросов и соответственно указать много (более ста) спецификаций. Поэтому создание отчета трудно передать конечному пользователю, который занят своими задачами и не может отвлекаться на решение, вообще говоря, посторонних вопросов. Те программные продукты, которые традиционно называются Генераторами отчетов (Crystal Report [1, 2], RPG[3] и др.) рассчитаны на прикладных программистов, а не на конечных пользователей. На практике же часто возникает потребность предоставить конечному пользователю возможность самому описать и сгенерировать отчет, при чем стандартные генераторы отчетов требуют, как правило, некоторой трансляции описаний, практика же требует обеспечения выдачи разнообразных справок и отчетов, не покидая прикладной системы. Статья посвящена разработке такого Генератора отчетов, который может быть включен как один из компонентов в любую прикладную систему. При этом подходе созданное конечным пользователем описание выходного документа транслируется автоматически непосредственно перед выводом документа.
Спецификации, описывающие любой отчет, можно разбить на четыре группы:
- описание реквизитов, участвующих в отчете,
- указание форматирования данных,
- расчет по формулам,
- задание условий отбора данных,
- определение сортировки данных, представленных в отчете.
Соответственно в статье после определения основных понятий (раздел 1) описание генератора отчетов состоит из пяти разделов.
Второй раздел посвящен определению информационного базиса (БД, файлы), из которых можно выбирать реквизиты для заполнения полей формы (окон макета) отчета, и сам процесс создания и заполнения полей. Информационный базис может состоять из любых компонент, имеющих ODBC интерфейс.
В третьем разделе описываются спецификации определяющие форму создаваемого документа: постоянные тексты (наименования документа, его реквизитов, разграфка и др.), положение и размеры полей (окон), в которые будет заноситься при выводе переменная информация (содержание документа), гарнитура, кегль и другие спецификации набора текстов.
В четвертом разделе возможности создания вычисляемых переменных.
В пятом разделе описываются спецификации задания условий отбора нужных экземпляров записей из информационного базиса.
В шестом разделе определяются правила упорядочивания данных при помощи указания управляющих переменных.
В седьмом разделе приводятся примеры создания отчетов разнообразных видов таблиц (с заголовками строк и столбцов, с промежуточными заголовками, с итоговыми частями по разделам и всему документу и др.).
В разделах обсуждаются вопросы реализации Генератора отчетов.
1. Основные понятия.
Документ – структурированный текст, представленный на экране дисплея или напечатанный на бумаге.
Часть документа – семантически выделенный наборы строк документа (в документации Crystal Report принят термин Section, мы используем в описании уже устоявшийся в русской литературе со времен RPG и Cobol термин Part – Часть).
Макет части документа – постоянные тексты и символы, а также поля и их спецификации для занесения переменной информации.
Поля макета части – компонента части документа - набор подряд идущих символов или прямоугольник символов, предназначенный для представления некоторого семантического блока информации (отдельного данного, конкатенации данных, вычисляемой переменной, изображения и т. п.).
Макет документа – совокупность макетов частей документа.
Тип части – спецификация, определяющая место вхождения части в документ. Типы частей: Заголовок документа, Заголовки промежуточные разных уровней (заголовки разделом, подразделов и т. д.), Периодическая часть, Итоги промежуточные разных уровней (итоги разделов, подразделов и т. д.), Заголовок страницы, Конец страницы, Итог документа.
Информационный базис – набор имеющих ODBC – интерфейс баз данных и/или файлов, реквизиты которых используются при заполнении полей макетов частей документов [4].
Системные переменные – поддерживаемые системой переменные (дата, время, номер страницы, количество страниц, номер записи и др.), значения которых можно заносить в поля макетов.
Вычисляемые переменные – переменные, алгоритмы вычисления которых задает конечный пользователь.
Управляющие переменные (поля сортировки) – поля, по значениям которых будут отсортированы периодические части документа. Документ будет разбит на разделы, подразделы и т. д., если будут описаны соответствующие промежуточные заголовки и/или итоги.
2. Указание реквизитов, входящих в отчет.
Каждый документ представляет из себя набор данных, которые образуют содержание документа. Эти данные для удобства их прочтения оформляются в виде разнообразных таблиц или списков, снабженных дополнительными постоянными наименованиями данных, всего документа и его частей, разграфкой столбцов и строк и т. п.
2.1. Определение информационного базиса.
Информационным базисом, из которого можно извлекать данные для заполнения полей форм документов, могут служить базы данных, в среде любой СУБД, имеющей ODBC интерфейс. А так же текстовые файлы и другая информация.
Описание соответствующего информационного ресурса, к которому может обращаться данный пользователь через ODBC в Windows, осуществляется средствами Data Source Administrator (см. Settings, Panel, Data Source Administrator, закладка UserDSN). В результате регистрации информационного ресурса сведения о нем записываются в системный реестр [4].
Генератор отчетов показывает в окне «Базы данных» (см. рис. 1) список зарегистрированных информационных ресурсов – информационный базис пользователя при генерации отчетов.
Пользователь, просматривая информационные ресурсы, выбирает двойным щелчком мыши нужные для генерации конкретного отчета. Базы данных в окне разворачиваются как набор составляющих их таблиц. Нужно выбрать необходимые таблицы. После выбора таблицы и двойного щелчка, имя таблицы появляется в окне «Таблицы, используемые в отчете. Системные и вычисляемые переменные», расположенном под окном «Базы данных». Имя таблицы можно также перетащить мышью. В окне «Таблицы, используемые в отчете. Системные и вычисляемые переменные», кроме выделенных таблиц, расположены системные переменные «Текущая дата», «Время», «Номер страницы», «Номер периода» и др., а также вычисляемые переменные (см. раздел 1.4). Связи (join) между таблицами, нужно задать при помощи диалогового окна (см. рис. 2), вызываемого по кнопке "Связь таблиц" на панели инструментов (рис. 1).
В окне «Таблицы, используемые в отчете. Системные и вычисляемые переменные», если встать курсором на нужную таблицу, будут показаны все ее реквизиты. Любой реквизит из таблицы, любую системную или вычисляемую переменную можно перетащить в поле макета части в окне «Макет документа» (см. рис. 1).

Рис. 1.

Рис. 2.
2.2. Части документа.
Документы могут иметь постоянный или переменный формат. Документ постоянного формата всегда имеет (независимо от содержания) одно и то же число окон для занесения переменной информации. Например, Справка с места работы, где есть окна для занесения ФИО, должности, оклада и наименование организации, в которую предоставлена справка.
Документы переменного формата могут иметь разное число окон (строк, страниц), в зависимости от содержания документа. Например, Выписка по лицевому счету, которая в зависимости от числа операций, совершенной по счету в отчетный период, может содержать разное число окон, строк и страниц.
Для описания заполнения документов постоянного формата достаточно указать в пустографке документа для каждого окна имя переменной.
Для описания заполнения документов переменного формата необходимо документ разбить на части, из которых будет набираться этот документ при любом его наполнении переменной информацией. Эти части суть: Заголовок документа, Заголовки промежуточные разных уровней (заголовки разделом, подразделов и т. д.), Периодическая часть, Итоги промежуточные разных уровней (итоги разделов, подразделов и т. д.), Заголовок страницы, Конец страницы, Итог документа. Части Заголовок документа и Итог документа печатаются только в начале и конце документа. Заголовки и итоги промежуточные печатаются в конце одного раздела (подраздела и т. д.) и начале следующего раздела. Появление разделов (подразделов, подподразделов и т. д.) определяется изменением значений Полей сортировки отчета. Например, если иерархия разделов связана с полями Область, Район, Город, то при изменении их значений соответственно будут выводиться новые разделы, описывающие области, подразделы – районы и подподразделы – города.
Таким образом, любой документ переменного формата разбивается на части с постоянным форматом, из которых он собирается.
Части документа разделены зелеными штриховыми линиями в окне макет документа (см. рис 1).
В начале работы автоматически создаются части: Заголовок документа, Заголовки промежуточные разных уровней (заголовки разделом, подразделов и т. д.), Периодическая часть, Заголовок страницы, Конец страницы, Итог документа. Все они «пустые» – состоят из одной строки пробелов и не содержат ни окон, ни постоянных текстов, символов разграфки и т. п. Если какая-либо из частей не нужна в данном документе (например, при печати документа фиксированного формата достаточно иметь только одну часть Заголовок документа), то нужно установить свойство части «Скрыть при печати». Для этого нужно курсор подвести к этой части и нажать правую кнопку мыши. Будут показаны свойства части, установить нужную спецификацию. После этого часть будет показываться в окне «Макет документа» в сером цвете.
2.3. Создание и заполнение полей.
Для описания полей отчета и переменных, значения которых будут заноситься в эти поля, в главном меню выбирается первая (стандартная для MS Windows) кнопка «Новый отчет» (см. рис. 1). Если отчет уже создан, по следующей кнопке «Открыть отчет», открывается отчет для корректировки описания полей.
Главное окно «Генератор отчетов» (см. рис.) разбито на окна:
- Макет документа (окно справа),
- Базы данных,
- Таблицы, используемые в отчете. Системные и вычисляемые переменные (ниже, для краткости, будем называть это окно Таблицы и переменные),
- Шрифт,
- Размер шрифта.
В окне “Макет документа” представлены макеты частей документа, разделенные зелеными штриховыми линиями. Если подвести курсор к какой-либо части, то рядом с курсором появляется тип части.
В окне “Базы данных” высвечиваются все БД и все файлы, к которым имеется ODBC интерфейс. Если подвести курсор к одной из БД, то будут представлены в этом окне входящие в нее таблицы. Если подвести курсор к одной из таблиц и дважды нажать клавишу мыши, то имя таблицы будет перенесено в ниже стоящее окно Таблицы и переменные.
В окне «Таблицы и переменные» представлены все таблицы, перенесенные из окна Базы данных, системные переменные, а также все вычисляемые переменные. Если подвести курсор к имени таблицы, то она будет развернута в виде списка ее реквизитов.
В окне «Поля сортировки отчета» указываются переменные, которые определяют иерархию разделов и подразделов в отчете. Поля переносятся в это окно из окна Таблицы и переменные двойным щелчком или перетаскиванием (drag-n-drop). С каждым новым полем сортировки образуются в окне «Макет документа» две новые «пустые» части Заголовок и Итог соответствующего раздела.
Для размещения какого-либо реквизита БД или переменной из окна «Таблицы и переменные» в одну из частей макета документа. Нужно взять реквизит или переменную и перетащить в соответствующий макет части документа. Появится поле в макете части с именем реквизита.
3. Форматирование данных
Как было отмечено выше, части документа сначала создаются «пустыми» наполнение их переменными осуществляется перенесением их из окна «Таблицы и переменные» в нужные места соответствующих частей (см. рис.1).
3.1. Оформление постоянных полей документа.
Задание постоянных текстов и разграфки в частях документа осуществляется непосредственным набором их в нужных местах. При этом гарнитура и размер символов определяется в окнах «Шрифт» и «Размер шрифта»; жирность шрифта, курсив и подчеркивание кнопками Ж, К, Ч ; выравнивание текста – кнопками панели инструментов (рис. 1): по левому краю, по центру, по правому краю, по ширине. Кроме того, по правой клавише мыши можно вызвать стандартное окно задания дополнительных параметров поля постоянного текста (см. рис 3).

Рис. 3.
3.2. Оформление переменных полей.
Создание переменных полей в макетах частей осуществляется перетаскиванием (drag-n-drop) переменной в соответствующее место макета части документа. Аналогично постоянным текстам, гарнитура и размер символов определяются в окнах «Шрифт» и «Размер шрифта»; жирность шрифта, курсив и подчеркивание кнопками Ж, К, Ч ; выравнивание заносимого в поле значения переменной – кнопками панели инструментов: по левому краю, по центру, по правому краю, по ширине.
Кроме того, по правой кнопке мыши можно увидеть дополнительные спецификации поля: число знаков после запятой, формат даты, и др. Смотри рис. 4 – 6, на которых представлены окна для задания дополнительных параметров полей типа строка (до 254 символов), число, дата/время. Значения, указанные в окнах принимаются по умолчанию. Все диалоги вызываются по правой клавише мыши, нажатой в выделенном поле отчета.

Рис. 4.

Рис. 5.

Рис. 6.
4. Вычисляемые переменные.
Рассмотренные выше средства заполнения полей макетов частей документов представляют разнообразные возможности занесения единичных данных в поля макетов. На практике часто возникает необходимость занесения в окна, кроме отдельных данных, также конкатенации (объединения) нескольких данных в одном окне, а также результата вычисления, произведенного по некоторой формуле над группой данных. При этом обычно выделяются два класса вычислений: суммирование по столбу в таблице документа и вычисления с данными одной строки документа.
4.1. Конкатенация переменных.
Конкатенация – объединение полей данных одной строки отчета в одно поле через разделитель или без него. В качестве полей данных могут выступать поля таблиц отчета, системные и вычисляемые переменные любого типа. Поля данных перетаскиваются (drag-n-drop) из окна "Таблицы и поля отчета" в окно "Поля конкатенации/сумма по столбцу" (см. рис. 7). В окне "Разделитель полей при конкатенации" заносится разделитель данных в результирующей строке (по умолчанию – это запятая).

Рис. 7.
4.2. Суммирование по столбцу.
Суммирование данных по столбцу производится как для всех данных отчета, так и внутри конкретной группы данных (см. рис. 8). Столбец данных, по которому будет производиться суммирование перетаскиваются (drag-n-drop) из окна "Таблицы и поля отчета" в окно "Поля конкатенации/сумма по столбцу" (см. рис. 8). В окне "Группы суммирования" из окна "Поля сортировки отчета" перетаскивается имя группы, по которой будет производится вычисление данных.

Рис. 8.
4.3. Вычисления над данными одной строки документа.
Над любыми двумя данными: системными и вычисляемыми переменными, а также полями текущих строк таблиц можно произвести арифметическое вычисление (сложение, вычитание, умножение, деление, процентное соотношение). Поля данных перетаскиваются из окна "Таблицы и поля отчета" в окна "Левый операнд" и "Правый операнд", арифметическая операция выбирается из набора операций окна "Действие" (см. рис. 9).

Рис. 9.
5. Отбор нужных записей.
В генераторе отчетов можно управлять выборкой данных, задавая условия их отбора. Определять правила выборки можно, связывая поля таблиц, вычисляемые переменные и параметры отчета между собой по предложенным в окне "Тип связи" связкам полей данных (больше, меньше, равно, больше либо равно, меньше либо равно, входит в массив констант, не входит в массив констант, содержит подстроку) – см. рис. 10. Параметры отчета создаются по кнопке "Параметры отчета" панели инструментов – кнопка с вопросительным знаком (рис. 1). Диалог создания параметров представлен на рис. 11. Механизм параметров позволяет менять условия отбора, не изменяя описания отчета. Значения параметров автоматически запрашиваются системой при генерации отчета (см. рис. 12 и 13).

Рис. 10.

Рис. 11.

Рис. 12.

Рис. 13.
6. Сортировка данных в отчете
Сортировка данных в отчете производится путем создания полей сортировки. В качестве таких полей могут выступать поля таблиц отчета, системные и вычисляемые переменные. Создание полей сортировки происходит путем перетаскивания соответствующего поля данных из окна "Таблицы, используемые в отчете …" в окно "Поля сортировки отчета" (рис. 1). Выделив любое сортировочное поле в этом окне, можно отсортировать отчет в порядке возрастания или убывания этого поля с помощью соответствующих кнопок панели инструментов (рис. 1).
7. Основные типы документов
· Простая таблица
- Данные из одной таблицы БД
- Данные из нескольких таблиц БД
- Сортировка по значениям в столбце
- Условие отбора строк (условия принимаются с экрана или заданы в описании отчета)

Рис. 14.
Пример простой таблицы представлен на рис. 13 в режиме предварительного просмотра.
· Многостраничная таблица с итоговыми данными
- Оформление заголовка и итоговой части таблицы
- Вычисление по формулам внутри строки
- Расчет сумм по столбцам
- Конкатенация по столбцам
· Документ с разделами и подразделами
- Управляющие переменные
- Оформление заголовков и итогов по разделам документа
Из-за ограничения места мы опускаем описание возможностей использования подотчетов, которые позволяют создать единый документ из разделов, оформленных разным образом, также обеспечить конкатенацию данных по подчиненным таблицам, печать итогов в заголовке отчета и др.
8. Корректировка ранее созданных отчетов
При эксплуатации систем часто возникает необходимость слегка откорректировать ранее созданный отчет, например, увеличить или уменьшить размеры колонок, добавить новый показатель, подсчитать дополнительно к данным проценты и т. д. Такие изменения особенно актуальны для пользователей системы. Кроме того, если вновь создаваемый отчет близок к одному из ранее описанных отчетов по составу используемых таблиц, полей, формул и т. п., то его, как правило, проще всего описать, откорректировав исходный и записав его под новым именем.
9. Некоторые вопросы реализации
Версии Crystal Report 8.0 Developer Edition и Crystal Report 8.0 Full Product появились в начале 2000 года, в состав этих систем включены компоненты, позволяющие создавать и редактировать макеты отчетов Crystal Report из пользовательских программ. Это позволило создать ориентированный на конечного пользователя генератор отчетов.
Ограничением предлагаемого подхода является ориентация Crystal Report на интерфейс ODBC. Но, всегда можно создать диалоговую систему аналогичную описанной выше (см. рис. 1), которая обеспечивает отображение данных в таблицы с ODBC интерфейсом. Так, например, нами был реализован вывод отчетов из хранилищ, построенных на основе MAPI (Messaging Application Program Interface) [5, 6].
В предлагаемой реализации генератора отчетов, доступ к данным БД осуществляется с помощью OLE DB провайдеров, т. к. этот способ оказался наиболее надежным.
В предлагаемой реализации генератора отчетов не используются сортировочные переменные Crystal, так как при одновременном использовании их с групповыми переменными они всегда отрабатываются в конце списка. Если же использовать только групповые переменные, то приходится дополнительно указывать признак скрытия печати Заголовка и Итога соответствующей группы. Нам представляется такой подход более застрахованным от ошибок.
10. Заключение.
Система Crystal Report 8.0 представляет собой мощный генератор отчетов, включающий в себя свой язык создания формульных полей в отчете на основе более 200 функций и операторов, возможность исправления вручную SQL-запросов отчета, включение в отчет подотчетов, создание полей суммирования и др.
Столь мощный инструмент может быть тяжел для пользователя, т. к. освоение его требует много времени. Но на его основе стало возможным создавать простые в освоении и использовании генераторы бизнес-отчетов. Рассмотренный в статье Генераторов отчетов достаточно выразителен. Наш опыт показывает, что более 95% выходных документов описываются средствами этого генератора. Он позволяет описать все документы табличного типа [7], в то же время весьма компактен, так как многие спецификации выбираются по умолчанию. Конечные пользователи легко овладевают его возможностями. Совсем просто выводятся всевозможные справки – таблицы средствами Вывода простых таблиц (см. рис. 13, 14).
Предложенный в статье подход позволяет легко вписать генератор отчетов в любое приложение, откорректировав соответственно стиль интерфейса.
Литература
1. Julie Woods McNamera. Crystal Reports Professional 6.0. // DBMS Magazine. — Vol. 11. — №1. — 1998. — P. 27–30.
2. Seagate Crystal Report 8. User’s Guide // Seagate Software Inc. USA, California. – 2000. – 742 p.
3. ILE RPG for AS/400 Programmer's Guide // http://publib. boulder. :80/ cgi-bin/bookmgr/BOOKS/QB3AGY03/CCONTENTS.
4. Ресурсы Windows NTTM: пер. с англ. // СПб.: BHV – Санкт-Петербург, 1995. – 720 с, ил.
5. , , . Применение новых информационных технологий в делопроизводстве. // Развитие безбумажной технологии в информационных системах. Сборник трудов Института системного анализа РАН/Под ред. д. т.н., проф. и д. т.н., проф. Емельянова Н. Е. — М.: Эдиториал УРСС, — 1999. — С. 17—27.
6. Ирвинг де ла Круз, Лес Талер. Основы MAPI // Microsoft Press. М.: – 1997. – 532 с.
7. N. E. Emelyanov, A. V. Solovyev, I. V. Schelkacheva. Classification of Structured Data Representations/Proceedings of the Third International Workshop on Advances in Databases and Information Systems // MEPhI Publishing. — 1996 — Vol. 2. — P. 4–8.


