ОСНОВНЫЕ ПОНЯТИЯ

Для получения отчетов используется генератор отчетов ElitReport !!!. Генератор формирует отчеты в виде файла Excel на основании шаблона. Шаблон представляет собой также файл в формате Excel 97 содержащий элементы оформления будущего отчета, константы, формулы которые будут перенесены в отчет без изменения, а также управляющие элементы.

Минимальным элементом конструкции шаблона отчета является ячейка. Здесь и далее под ячейками, строками и столбцами шаблона отчета будем понимать соответствующие элементы таблицы Excel. Несколько находящихся рядом в строке и/или столбце ячеек средствами Excel можно объединить в одну. Такая ячейка называется объединенной.

Принцип построения отчета сводится к настройке отображения информации из БД в ячейках и организации циклического повторения вывода строк, содержащих однотипные данные, например, для записей из таблицы БД.

Информация из БД может быть получена из SQL запросов, которые определяются либо непосредственно в шаблоне либо передаются в генератор отчета при вызове. Запрос, текст которого передается в генератор отчета, называется внешним и соответствует в контексте генератора отчетов переменной QMain (регистр символов не важен).

Создание шаблона отчета состоит из следующих этапов:

·         задание общих настроек отчета;

·         определение выводимой информации из БД;

·         создание макета (элементов оформления) отчета;

·         определение параметров для выводимой информации.

Кроме того, чтобы получить отчет, необходимо чтобы соответствующий шаблон был зарегистрирован в БД.

Управляющие элементы, которые используются при формировании шаблона, могут быть следующих типов:

·         тэг;

·         шаблон полей данных.

Тэг – управляющий элемент, которые используется для логического форматирования отчета. Тэг указывается в шаблоне отчета в следующем формате.

|::имя_тэга

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

|::имя_тэга=значение_тэга{;дополнительный_параметр=значение_параметра}

Дополнительные параметры тэга разделяются “;” без пробелов.

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

Рекомендуется в шаблоне помещать теги в столбец A.

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

~имя_запроса.имя_поля или
~номер_запроса.имя_поля

Примеры задания шаблонов полей ввода описываются ниже.

Порядок обработки управляющих элементов генератором отчета определяется последовательностью их появления в шаблоне отчете. Причем генератор отчетов обрабатывает шаблон последовательно по ячейкам начиная c А1 слева направо и по всем строкам сверху вниз.

ОСНОВНЫЕ НАСТРОЙКИ ОТЧЕТА

Основные настройки отчетов определяют общие характеристики отчета. Эти настройки отчета задают следующие параметры:

·         количество столбцов в шаблоне;

·         верхний и нижний колонтитул.

●● количество столбцов в шаблоне

Количество столбцов в шаблоне определяется тегом |::COLUMNS.

!  Тэг |::COLUMNS обязательно должен присутствовать в шаблоне.

Этот тэг задает число фактически обрабатываемых генератором столбцов шаблона отчета. Размер обрабатываемого шаблона окончательно определяется после создания макета отчета. В обрабатываемые должны войти все столбцы, начиная с 1 и заканчивая тем, в котором хотя бы в одной ячейке имеется какие-либо данные.

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

Пример. Тэг COLUMN.

Как правило, для небольших отчетов, содержащих 4-5 столбцов, достаточно при их создании задать использование 10 столбцов.

|::COLUMNS=10

!  В строке шаблона отчета, где определяется тег COLUMNS, объединенные ячейки не должны перекрывать границу шаблона.

●● верхний и нижний колонтитул

Верхний и нижний колонтитул отчета определяются соответственно тэгами |::PRINTHEADER и |::PRINTFOOTER. Эти тэги определяют текст, который будет выводиться соответственно в верхнем и нижнем колонтитуле каждой странице отчета.

Пример.

|::PRINTHEADER=Верхний колонтитул моего отчета

|::PRINTFOOTER= Нижний колонтитул

Использование этих тэгов обусловлено необходимостью, помещать некоторую временную отладочную информацию, например, слово «ПРОЕКТ», на видном месте во время создания и тестирования отчета.

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

!  Для создания колонтитулов рекомендуется использовать именно средства Excel, как более гибкий инструмент.

Все перечисленные в данном разделе тэги, заданные в шаблоне, следует помещать в одну ячейку A1, в приведенной последовательности (рис. 1):

Рис. 1.

Основные параметры в макете отчета

ФОРМИРОВАНИЕ ЗАПРОСА К БД

Для отображения в отчете информации из БД нужно определить правила, по которым интересующие сведения будут выбираться из нее. Эти правила определяются в запросах к БД. В шаблоне отчета можно определить несколько запросов к БД. Чтобы создать запрос к пользователю предъявляются следующие требования:

·         знания языка SQL;

·         знания структуры БД, в части приложения, для которого создается отчет;

·         наличия прав доступа к таблицам БД, информация из которых будет помещена в отчет.

Запрос к БД определяется с помощью тэга |::QUERY=SQL_выражение; NAME=имя_запроса;MASTER=имя_главного_запроса;DATABASE=DB. Этот тег задает источник данных для отчета и содержит следующие параметры.

QUERY – текст запроса на языке SQL заключенный в фигурные скобки «{» и «}». В тексте можно указать значения, которые должны быть подставлены из другого запроса, и строковые подстановки. Параметр обязательный.

NAME – определяет уникальный идентификатор запроса к БД, в значении параметра имя_запроса используются только латинские буквы, причем строчные и прописные буквы не различаются. Этот идентификатор будет использоваться в шаблонах полей данных. Данный идентификатор не может совпадать с идентификатором внешнего запроса QMain. Параметр обязательный.

MASTER – определяет запрос, значения полей которого используются в качестве параметров для определяемого запроса. Эта возможность требуется, чтобы отобрать данные, относящиеся к некоторой записи в указанном запросе, и/или для вывода данных отобранных в приложении (естественно, в этом случае для формирования отчета нужно вызвать генератор отчетов из данного приложения). При работе с данными из приложения, значение параметра тэга может иметь только значение QMain. Какой запрос в передается в отчет, определяется разработчиком приложения. Причем, внешний запрос может быть только один. Параметр необязательный.

! Отчеты, в шаблоны которых не передается внешний запрос, могут быть получены без запуска приложения БД.

DATABASE – определяет название сессии БД в приложении. Параметр обязательный и может иметь только значение DB. Этот параметр используется для совместимости с предыдущими версиями генератора отчетов.

●● особенности использования sql при создании запроса

Запрос создается в соответствии с правилами диалекта SQL который поддерживается сервером, где размещаются данные. Для более подробной информации нужно обратиться к документации по соответствующему серверу.

Генератор отчетов вносит следующие дополнительные требования к созданию запроса на языке SQL.

Перед именем любой таблицы в секции FROM должен обязательно находится символ «~» (тильда). Исключение составляют системные вспомогательные таблицы. В случае использования Oracle это таблица dual.

Символы «:» и «^» используются генератором отчетов для формирования динамических запросов (см. ниже) и не могут быть использованы для других целей в тексте запроса.

Пример. SQL запрос

Запрос для отображения всех номеров документов, к которым имеет доступ пользователь БД.

|::QUERY={SELECT LC104_R100701 FROM ~LC104 LC104};NAME=QDocList; DATABASE=DB

Внешний вид макета с запросом для отображения всех номеров документов, который помещен в ячейку A2, следующий (рис. 2):

Рис. 2.

Запрос для отображения всех номеров документов

●● статические и динамические запросы

В зависимости от способа формирования условий для отбора данных запросы к БД могут быть статическими или динамическими.

Текст статического запроса при обработке генератором отчетов остается таким же каким он был определен при разработке шаблона отчета.

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

Если правило выбора данных из БД зависит от значений в другом отчете и/или определяется только при создании отчета оно может быть сформировано  динамически.

В динамических запросах текст формируется с использованием следующих возможностей генератора отчетов:

·         подстановка значений из другого запроса;

·         строковые подстановки.

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

Пример. SQL запрос с подстановкой значений из другого запроса.

Запрос для отображения всех номеров документов отобранных в данный момент в интерфейсе приложения БД.

|::QUERY={SELECT LC104_R100701 FROM ~LC104 LC104 WHERE LC104_CODE=:CODE};NAME=QDocList;MASTER=QMain;DATABASE=DB

Внешний вид макета с указанным запросом, который помещен в ячейку A2, следующий (рис. 3):

Рис. 3.

Запрос для отображения всех номеров отобранных в приложении документов

Более подробно определение подстановки значений из другого запроса рассматривается ниже см. стр. !!!.

Изменить правила отбора данных можно, определив как переменную, подстроку определяющую условие в тексте SQL запроса. В тексте запроса в этом случае нужно будет указать идентификатор переменной, перед которой следует поместить символ «^» («крышка»). Такая переменная может принимать разные значения в зависимости от пути выполнения алгоритма формировании отчета, и в свою очередь может содержать указание на подстановку значения из другого запроса или на другую переменную.

Пример. Использование в запросе строковой переменной.

Определение переменной

A2 – |::SET@MYCONDITION=LC104_CODE=:CODE

A3 – |::QUERY={SELECT LC104_R100701 FROM ~LC104 LC104 WHERE ^MYCONDITION};NAME=QDocList;MASTER=QMain;DATABASE=DB

Внешний вид макета с переменной в ячейке A2 и указанным запросом в ячейке A3, следующий (рис. 4):

Рис. 4.

Запрос для отображения всех номеров отобранных в приложении документов

Подобным образом можно динамически формировать не только условие отбора значений, но и любую часть или даже весь текст запроса.

Кроме того, имеется системная переменная QMain, которая содержит текст SQL-запроса передаваемого в генератор отчета из приложения. Эта переменная может быть, например, подставлена в секцию FROM формируемого запроса в виде ( ^QMain ), чтобы в отчете задать дополнительные условия отбора к заданным в приложении. Следует обратить внимание, что эта переменная указывается в скобках которые отделены пробелами от идентификатора ^QMain.

Пример

|::QUERY={SELECT LC109_R103103 || ' ' || LC109_R103104 || ' ' || LC109_R103105 LC109_R10310345, LC590_R104101, LC591_R103219 , LC590_R100201 FROM ~LC591, ~LC592, ~LC590, ( ^QMain )  WHERE LC590_CODE = LC591_R59001 AND LC592_R59101 = LC591_CODE  AND LC109_CODE=LC592_R10901 ORDER BY ^OP };NAME=Qdet;Database=DB

Более подробно правила определения переменных и организации условных переходов рассматриваются ниже см. стр. !!!

●● размещение запроса в шаблоне отчета

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

Если SQL запрос большой, то можно для удобства разбить его на две и более ячеек, так чтобы с каждой частью было удобно работать в Excel. Для этого следует в тексте тега поместить символы «>>», и весь текст, следующий за ними перенести в следующую справа ячейку. Таким образом, можно разбить текст в следующей ячейке. Следует обратить внимание что за «>>» не должно быть никаких других символов.

Пример. Запрос в двух ячейках

Запрос для отображения всех номеров документов отобранных в данный момент в интерфейсе приложения БД размещенный в двух ячейках A2 и B2 соответственно.

A2 – |::QUERY={SELECT LC104_R100701 FROM ~LC104 LC104 WHERE >>

B2 – LC104_CODE=:CODE};NAME=QDocList;MASTER=QMain;DATABASE=DB

Внешний вид макета с указанным запросом следующий (рис. 4):

Рис. 4.

Запрос, размещенный в двух ячейках

●● вспомогательные запросы

В отчете может потребоваться вывести некоторую служебную информацию из БД – дата формирования отчета, имя пользователя БД получившего отчет и т.п. Примером служебной информации является. Для определения даты формирования данных для отчета в формате ДД.ММ.ГГГГ на сервере Oracle нужно задать следующий тег.

|::QUERY={SELECT TO_CHAR(SYSDATE,'DD.MM.YYYY') DateCalculate FROM dual};NAME=QTitle;DATABASE=DB

! Таблица dual используется только на SQL сервере Oracle.

Определение даты на сервере Oracle может понадобиться, чтобы зафиксировать дату, по состоянию, на которую сформирован отчет (именно сформирован, а не распечатан). Дату печати отчета можно определить, используя возможности Excel, например, определив соответствующее поле в колонтитуле.

Вспомогательные запросы часто используются при проверке значения переменных для организации условных переходов в шаблоне отчета. Это их назначение рассматривается в описании переменных см. стр. !!!.

СОЗДАНИЕ МАКЕТА ОТЧЕТА

При создании макета отчета следует выполнить следующие действия:

·         определить элементы оформления выводимого отчета;

·         настроить вывод в ячейках данных из БД;

·         отметить последнюю строку шаблона;

·         скрыть столбцы и строки со служебной информацией.

●● элементы оформления выводимого отчета

Макет выводимого отчета создается с использованием возможностей Excel – оформление границ ячеек, их объединение и др. Рекомендуется размещать макет правее столбцов, в которых находится служебная информация.

! В соответствии с ограничением Excel количество различных форматов ячеек в файле не должно превышать 4000.

Пример. Простейшее оформление

Макет отчета для вывода данных о номерах документов имеет следующий вид (рис. 5):

Рис. 5.

Макет отчета для вывода данных

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

Пример. Оформление шапки отчета

Внешний вид сложного заголовка, использующего вертикальное объединение ячеек C4 и C5 и горизонтальное – D4, E4 и F4 следующий (рис. 6):

Рис. 6.

Макет отчета со сложным заголовком

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

Рис. 7.

Пример макет отчета созданного на «листе в клеточку»

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

●● отображаемые поля

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

Пример. Шаблон выводимого в отчете поля из запроса

~QDocList.LC104_R100701

Размещение в ячейке С4 шаблона полей следующее (рис. 8):

Рис. 8.

Макет отчета с шаблонами полей

В одной ячейке может быть размещено несколько шаблонов полей данных, например, для вывода фамилии, имени и отчества. Шаблоны полей должны разделяться пробелами. Причем, пробелы или другие разделители между шаблонами полей будут выведены в отчете. Так же в ячейке с шаблонами полей можно использовать строковые константы.

Пример. Образцы использования шаблонов

Шаблоны выводимых полей в отчете размещенных в одной ячейке.

Номер документа ~QDocList.LC104_R100701 (внутренний код ~QDocList.LC104_CODE)

Размещение в ячейке С4 шаблона полей следующее (рис. 9):

Рис. 9.

Макет отчета с циклом по всем строкам запроса

Определение в ячейке отображаемой информации из БД, позволит вывести значения только из первой записи запроса к БД. Если нужно вывести информацию из более чем одной записи полученной в результате выполнения запроса, то требуется определить цикл по всем записям в запроса.

Для этого в строке предшествующей строке, где впервые встречается шаблон поля данных из запроса следует разместить тэг |::LOOP=имя_запроса. А в строке следующей за строкой, на которой находится последнее указание на шаблон поля данных – тэг |::NEXT=имя запроса. В качестве значения этих тэгов указывается имя, заданное при определении запроса к БД, по результату которого формируется цикл. Если в результате выполнения запроса, для которого был определен данный цикл не будет получено ни одной записи, в отчет тем не менее будут выведены все строки шаблона находящиеся между указанными тэгами. Рекомендуется помещать эти тэги на отдельные строки в шаблоне, даже если для этого их придется добавить.

Нельзя использовать в шаблоне только один тэг из пары |::LOOP и |::NEXT.

!  Если формируется цикл по записям запроса определенного в приложении БД, следует указать в качестве имени запроса QMain.

Пример.

Определение цикла по всем строкам запроса к БД, определяется помещением в шаблон дополнительных тэгов. Причем, будут ли для этого добавлены строки в шаблон отчета, с точки зрения функциональности не имеет никакого значения. Внешний вид шаблона отчета как с дополнительной строкой (ячейки А4 и А6) так и без нее (ячейки А3 и А5) (рис. 9):

Рис. 9.

Макет отчета с циклом по всем строкам запроса

Если бы цикл будет организован не по QMain, а по QDocList, будет выведено не количество записей отобранных в данный момент в приложении БД, а только записи запроса QDocList соответствующие первой записи в запросе QMain.

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

Можно также непосредственно размещать данные из набора данных, определенного как основной запрос в приложении. Для этого нужно использовать шаблон полей вида ~QMain.имя_поля, где имя_поля – название возвращаемого в запросе поля. Причем, префикс ~QMain использовать в этом случае необязательно, но рекомендуется для удобства чтения шаблона.

Пример.

Отображение служебной информации о системном коде записи о документе, взятом из запроса в приложении БД, в ячейке D4 (рис. 10).

Рис. 10.

Макет отчета с шаблоном поля, использующем запрос из приложения

С той же целью можно использовать теги |::BGROUP=имя_запроса и |::EGROUP=имя_запроса. Они эквивалентны соответственно |::LOOP и |::NEXT. В качестве значения этих тэгов также указывается имя, заданное при определении запроса к БД.

Отличие между этими парами тэгов следующее |::LOOP и |::NEXT гарантированно выводят одну строку в отчет, даже если соответствующий им запрос не содержит ни одной записи. С другой стороны |::BGROUP и |::EGROUP выводят в отчете столько записей, сколько имеется в соответствующем им запросе. Поэтому хотя эти пары тэгов практически эквивалентны, как правило, тэги |::LOOP и |::NEXT используются для вывода данных в отчете из основного запроса, а |::BGROUP и |::EGROUP из дополнительного составляющего подотчет.

Размещение выводимых полей и формирование макета на практике операции очень взаимосвязанные и требующие корректировки макета и перекомпоновки выводимых данных.

●● последняя строка шаблона

После формирования макета следует разместить на следующей строке, после созданного макета отчета, тэг |::END.

!  Тэг |::END обязательно должен присутствовать в шаблоне.

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

Пример.

Завершение шаблона отчета указывается после строки содержащей последний тэг в ячейке A6 (рис. 11):

Рис. 11.

Макет отчета с завершающей строкой

●● окончательный внешний вид макета

После завершения создания внешнего вида шаблона отчета, и после проверки его работоспособности следует скрыть все столбцы и строки, в которых находится служебная для отчета информация. Хотя служебная информация не отображается генератором отчетов в сформированном отчете пустые строки и столбцы, в которых она находится в шаблоне выводятся.

Строки и столбцы в шаблоне можно скрыть средствами Excel, в частности, уменьшив соответственно их высоту и ширину до нуля. Естественно, при этом в шаблоне эти строки и столбцы также не отображаются. Однако, имеется возможность указать для отображаемой в шаблоне строки, необходимость скрывать ее только при создании отчета. Для этого используется тэг |::HIDE. Этот тэг должен находится в первой ячейке строки, которая не будет отображаться при выводе отчета.

На практике для придания лучшего внешнего вида добавляется еще одна строку и/или столбец перед таблицей.

Пример

Окончательный вид макета и пример результата отчета (рис. 12):

Рис. 12.

Макет и окончательный вид отчета без служебной информации

Не следует злоупотреблять использованием разных шрифтов, цветов и границ ячеек в отчете. При большом количестве выводимых строк Excel не сможет сформировать такой «пестрый» отчет и выдать сообщение об ошибке. Для ее исправления следует уменьшить разнообразия в оформлении ячеек. Следует иметь в виду, что даже использование в ячейках одного шрифта, но различного размера и начертания является разным оформлением.

СВЯЗАННЫЕ ЗАПРОСЫ

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

·         вывод дополнительных значений;

·         определение подотчета.

 

●● вывод дополнительных значения

В отчете может потребоваться вывести некоторое дополнительное значение, которое в силу ряда причин не определяется в основном для шаблона отчета запросе. Это значение может относиться к сведениям, отображенным в отчете, либо содержать некоторую служебную информацию из БД.

На практике, чаще требуется определять в БД информацию, относящуюся к выводимым в отчете значениям, нежели что-то не связанное с БД. Поэтому дополнительный запрос, как правило, оказывается связанным

?Другим назначением дополнительного запроса является вычисление некоторого обобщающего результата для данных определенных в основном запросе для отчета– количества записей, суммы, максимального значения и т.п.

Поэтому, как правило, в дополнительном запросе требуется указывать основной для него запрос в параметре MASTER тега |::QUERY.

Пример.

Запрос, определяющий количество дополнительных реквизитов у документа.

|::QUERY={SELECT COUNT(*) AdditionalRecvisits FROM ~LC802 LC802 WHERE LC802_R10401=:LC104_CODE};NAME=QAddRecv;MASTER=QDocList;DATABASE=DB

Текст этого запроса должен быть помещен за основным для него запросом QDocList в ячейку A3. Не обязательно помещать запрос, который определяет вспомогательное значение в цикл вывода данных, т.е. между тэгами |::LOOP и |::NEXT, но обязательно за основным для него запросом.

Значение количества дополнительных реквизитов ~QAddRecv.AdditionalRecvisits будет выведено в ячейку D5.

Основной запрос QDocList (ячейка A2) имеет следующий вид.

|::QUERY={SELECT LC104_CODE, LC104_R100701 FROM ~LC104 LC104 WHERE LC104_R12201 IN (9,146,151,153)};NAME=QDocList;DATABASE=DB

Шаблон отчета имеет следующий внешний вид (рис. 13).

Рис. 13.

Макет отчета с дополнительным запросом

При добавлении нового запроса в шаблон целесообразно добавлять в шаблон для него новую строку за уже существующими запросами и помещать текст запроса на ней в первую ячейку.

●● создание подотчета

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

Для этого, как правило, используются тэги |::BGROUP и |::EGROUP, хотя можно использовать и тэги |::LOOP и |::NEXT (об этих тегах см. !!!).

Пример

Запрос, отображающий имена всех неформализованных параметров у документа.

|::QUERY={SELECT LC801_R100101 NameAdditionalRecvisits FROM ~LC801 LC801, ~LC802 LC802 WHERE LC802_R10401=:LC104_CODE AND LC801_CODE= LC802_R80101};NAME=QListAddRecv;MASTER=QDocList;DATABASE=DB

Шаблон отчета, в котором определен подотчет, имеет следующий внешний вид (рис. 14).

Рис. 14.

Макет отчета с подотчетом

ПАРАМЕТРЫ ЗАПРОСА

В тексте запроса к БД в условии отбора информации могут использоваться параметры, значения которых определяются непосредственно перед формированием отчета. Для этого в запросе на параметр помещается указание следующего вида.

:имя_параметра

!  Параметр должен обязательно быть определен раньше его использования в тексте SQL запроса.

●● определение параметров

Пользователь определяет параметры перед выполнением запроса в автоматически формируемом диалоговом окне. Для каждого параметра при настройке этого диалога используется тэг |::PARAM=имя_параметра;возможные_значения;метка; {SQL_WHERE};визуализатор;сортировка.

имя_параметра – название параметра, которое подставляется в текст SQL запроса. Это название должно быть уникальным. Обязательное значение.

возможные_значения – определяется множество значений, которое может принимать определяемый параметр. При определении возможных значений указывается либо код элемента данных, либо список вида {метка=значение; метка=значение; …}, где метка, отображаемая в списке выбора величина, значение – передаваемое в отчет значение параметра. В первом случае множество значений определяется на основе информации хранящейся в БД (в том числе и не перечисляемые значения дат, чисел и др.), а во втором формируется указанный список констант. Обязательное значение.

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

метка – надпись у управляющего элемента в диалоговом окне. Обязательное значение.

SQL_WHERE – условие на языке SQL для отбора значений указанного элемента данных заключенное в фигурные скобки «{» и «}».. В условие можно использовать другие ранее определенные параметры. Необязательное значение.

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

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

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

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

Использование параметров позволяет создать шаблон, в котором можно определить условия отбора данных без запуска приложения БД. Например, можно при запуске отчета самостоятельно выбрать номер договора из списка. Чтобы отобразить диалоговое окно, в котором можно определить значение заданного параметра нужно использовать тэг |::ASK. Этот тэг обязателен, если в шаблоне используется тэг |::PARAM.

Пример.

Текст запроса к БД с параметром размещенный в ячейке A3 следующий:

|::QUERY={SELECT  LC104_CODE,LC104_R100701 FROM ~LC104 LC104 WHERE LC104_CODE= :DOCNUMBER};NAME=QDocList;DATABASE=DB

В этом зпросе используется параметр :DOC_NUMBER определение которого находится в ячейке A2:

|::PARAM=DOCNUMBER;10401;Номер документа;{LC104_CODE IN (select lc104_code from lc104 where lc104_r12201 in (9,146,151,153))};LC104_R100701; LC104_R100701|::ASK

Шаблон отчета, в котором определен запрос с параметром и диалоговое окно отображающееся на основе настроек параметра, имеет следующий вид (рис. 15).

Рис. 15.

Макет отчета и диалоговое окно для настройки параметра

Тэг |::ASK рекомендуется помещать в ту же ячейку, где определяются параметры, выводимые в диалоговом окне.

В шаблоне может существовать несколько групп логически связанных параметров. После каждой группа должен быть тэг |::ASK, чтобы все они выводились в одном диалоговом окне. Кроме того, если при определении параметра используется другой параметр, например список подразделений, выбирается для указанной компании, эти параметры должны находится в разных группах.

●● условное определение параметра

Параметр должен быть обязательно определен в отчете. Поэтому если требуется предусмотреть возможность оставить его пустым, следует определить условный вызов параметра.

Для этого следует выполнить следующее

ПЕРЕМЕННЫЕ В ОТЧЕТЕ

В шаблоне можно определить переменные, которые затем могут быть использованы в шаблоне для решения следующих задач:

·         отображение строковой константы из приложения БД;

·         определение переменной в формуле;

·         определение подстроки в запросе.

●● инициализация переменной

Любая переменная перед использованием должна быть определена в шаблоне. Для этого используется следующий тэг |::DEFINE_STR@имя_переменной= значение_переменной.

имя_переменной – определяет название переменной, используемое в шаблоне. Это название должно быть уникальным.

значение_переменной – определяет значение переменной по умолчанию. Это значение является строкой и его не нужно обрамлять никакими символами. Указывать значение переменной при ее инициализации необязательно.

Любая переменная имеет только строковый тип, что накладывает правила работы со строками на ее дальнейшее использование.

Обратиться к переменной в шаблоне, после ее определения, можно следующим образом:

~VAR.имя_переменной

●● определение значения переменной

Возможны следующие способы определения значения переменных в шаблоне.

·         определение значения в шаблоне;

·         получение значения из приложения БД.

●●● использование переменной в шаблоне

Значение переменной в шаблоне может быть либо задано явным образом, либо вычислено. В обоих случаях используется следующий тэг |::SET@имя_переменной= значение_переменной.

имя_переменной – указывается название переменной определенное при ее инициализации в тэге |::DEFINE_STR.

значение_переменной – определяет значение указанной переменной. В качестве значения можно задать константу или функцию. В функции могут использоваться в свою очередь константы, ссылки на ячейки и переменные, причем, можно использовать и переменную значение которой определяется.

При вычислении значения переменной определяется не результат, а строковое значение, например, если переменная MyParam имеет первоначальное значение «0», то после использования тэга |::SET@MyParam= ~VAR.MyParam + 1 ее значение будет «0+1».

Чтобы вычислить результат выражения следует использовать тэг |::EVAL@имя_переменной=выражение.

имя_переменной – указывается название переменной определенное при ее инициализации в тэге |::DEFINE_STR. Если значение переменной представляет собой выражение, подлежащее вычислению, подобно приведенному выше примеру, когда переменная имеет значение «0+1», достаточно использовать тэг в виде |::EVAL@имя_переменной. В результате переменная получит значение 1.

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

В отличие от тега |::SET при использовании тега |::EVAL переменной присваивается рассчитанное значение выражения, а не строковая константа.

Пример.

С помощью переменной в отчете можно рассчитать промежуточные суммы. В частности можно определить количество записей выводимых в отчете.

Для этого выполняются следующие операции.

·         в ячейку A2 шаблона отчета следует поместить определение переменной ;

·         в ячейку !!! нужно поместить значение 1 – оно будет выводиться для каждой записи отчета;

·         в ячейку !!! помещается тэг вычисляющий накопительную сумму !!!;

·         для вычисления результирующего значение в ячейку !!! помещается тэг !!!;

·         для отображения результата в отчете следует поместить в ячейку !!! значение !!!.

Внешний вид шаблона и отображение значения данной переменной в отчете следующее (рис. 16).

 

Рис. 16.

Макет и окончательный вид отчета с отображением условия фильтра

●●● получение значения из приложения бд

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

При получении значения переменной из приложения БД так же обязательно нужно определить эту переменную тэгом |::DEFINE_STR. В этом тэге объявляется используемый параметр.

Пример.

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

~VAR.Filter

Внешний вид шаблона и отображение значения данной переменной в отчете следующее (рис. 17).

Рис. 17.

Макет и окончательный вид отчета с отображением условия фильтра

! Параметр Filter определяется не во всех приложениях.

! Ячейки, в которых отображаются значения переменных, рекомендуется по вертикали выравнивать по верхнему краю.

Чтобы использовать полученное из приложения БД значение в запросах, определяемых в отчете, следует обязательно использовать тэг |::SET.

Пример.

|::DEFINE_STR@CODECOMP=~VAR.CODECOMP

|::SET@CODECOMP=~VAR.CODECOMP

|::QUERY={

SELECT COMP.LC102_R100201 LC102_R100201C, LC107_R104001, LC107_R103241, BOSS.LC109_R103103 || ' ' || SUBSTR(BOSS.LC109_R103104,1,1) || '.' || SUBSTR(BOSS.LC109_R103105,1,1) || '.' LC102_R100101B

FROM ~LC102 COMP, ~LC107, ~LC109 BOSS

WHERE

LC107_CODE=COMP.LC102_CODE

AND COMP.LC102_CODE = ^CODECOMP

AND LC107_R10903=BOSS.LC109_CODE

}

;NAME=QCOMP;MASTER=QMAIN;DATABASE=DB

 

●● определение подстроки в запросе

В любой текст SQL запроса, определенного в шаблоне, можно подставить как подстроку значение определенное в переменной. Таким образом, можно динамически сформировать даже полностью весь SQL-запрос.

Для этого в тексте запроса нужно обратиться к переменной следующим образом:

^имя_переменной

Переменная подставляемая в запрос обязательно должна быть определена раньше самого текста запроса.

Пример.

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

·         в ячейку !!! шаблона отчета следует поместить определение переменной;

·         в ячейку !!! шаблона отчета следует поместить текст запроса с указанием на подстановку подстроки.

Внешний вид шаблона и отображение значения данной переменной в отчете следующее (рис. 18).

 

Рис. 18.

Макет и окончательный вид отчета с отображением условия фильтра

ИСПОЛЬЗОВАНИЕ ФОРМУЛ

В отчете можно использовать некоторые формулы Excel. При этом можно использовать ссылки на ячейки, переменные определенные в отчете и шаблоны полей.

●● обращение к ячейкам шаблона

В формулах при определении обращения к ячейкам следует учитывать следующее.

Символ «=», который должен следовать перед любой формулой заменяется на символ «&».

Формат ячейки где находится формула должен быть «Общий».

Пример.

Ссылка на значение в ячейке D1 в шаблоне выглядит следующим образом.

&D1

Если в формуле используется & то в шаблоне он должен быть заменен на &&

Следует отметить, что оформление специальных полей Excel, например, номера страницы помещаемого в колонтитул отчета, не требует переоформления отчета.

Пример.

Чтобы в Excel, поместить номер страницы отчета в колонтитул, нужно выполнить следующие действия. Сначала следует выполнить команду основного меню «Файл|Параметры страницы» и в появившемся диалоговом окне выбрать страницу«Колонтитулы». Затем на этой странице следует определить соответствующий колонтитул, в частности с помощью мастера (рис. 19).

Рис. 19.

Настройка номера страницы в колонтитуле шаблона отчета

Одной из возможных формул является расчет суммы (SUM). Способов получения итога вышестоящей колонки существует несколько. Один из них связан с использованием тэга |::SUM=имя запроса. Этот тэг формирует формулу рассчитывающую сумму значений во вышестоящего столбца для указанного подзапроса.

●● специальные функции

В шаблоне можно использовать специальные функции генератора отчетов

&ROW – номер текущей строки.

&ROWP – номер предыдущей строки.

Они могут быть использованы для определения относительных ссылок на ячейки

Пример.

Ссылка на значение в ячейке D1 в шаблоне в ячейке F2 выглядит следующим образом.

&D&ROWP

●● номер строки

Специальные функции используются для определения номера строки.

При создании нумерации строк возможны следующие решения.

●●● сквозная нумерация

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

В ячейку заголовка столбца с номерами следует ввести 0 и задать формат «0;0;№пп». В ячейку под заголовком следует поместить значение &стобец&ROWP+1, где столбец буква или буквы столбца, в котором помещается нумерация (рис. 20).

Рис. 20.

Макет и окончательный вид отчета со сквозной нумерацией

●●● сквозная нумерация по выборочным строкам.

При организации сквозной нумерации по отчету, в котором нумеруются не все строки, используется следующий алгоритм. В отчет, кроме столбца для порядковых номеров, помещается еще один столбец справа от созданного макета, в строках, которые нужно нумеровать помещается значение 1. В ячейку столбца, в котором должны размещаться  с порядковыми номерами помещается значение &SUM(столбец1:столбец&ROW), где столбец буква или буквы столбца, в котором помещаются номера (рис. 21).

Рис. 21.

Сквозная нумерация по выборочным строкам

В частном случае с помощью подобного алгоритма можно реализовать и сквозную нумерацию по всем строкам.

ИСПОЛЬЗОВАНИЕ ССЫЛОК НА INTERNET РЕСУРСЫ

Вызов и отображение отчета тесно связаны с использованием web-технологий. Поэтому, в данном случае, естественной возможностью является переход из отчета на другие ресурсы Internet/Intrenet. В частности переход на определенный URL, может привести к отображению другого отчета. Для определения ссылки на какой-либо ресурс используется следующий тэг |::HLINK=URL;размещение;метка_горизонтально; метка_вертикально;диапазон_горизонтально;диапазон_вертикально.

URL – ссылка на ресурс. Вид ссылки – абсолютный или относительный определяется параметром размещение. Обязательное значение.

размещение – определяет местонахождение ресурса относительно текущего отображенного отчета. Возможные значения: abs – ресурс определяется абсолютным путем к нему (www.rbc.ru); rel – путь к ресурсу указывается относительно текущего ресурса (../TestReport.html). Обязательное значение.

метка_горизонтально, метка_вертикально – ячейка содержащая метку (строку), которая оформляется как переход н аресурс указанный параметром URL. метка_горизонтально определяет абсолютный номер соответствующего столбца шаблона отчета, столбец А соответствует 0. метка_вертикально – относительный номер строки шаблона отчета, -1 – соответствует предыдущей строке, 1 – следующей и т.д. Если метка не указана в данной ячейке ссылка выводится, как она определена в параметре URL. метка_горизонтально – обязательное значение, метка_вертикально – значение необязательное, по умолчанию 0. Кроме того при определении строки можно использовать специальные функции генератора отчетов ROW, ROWP.

диапазон_горизонтально, диапазон_вертикально – размеры в ячейках по вертикали и горизонтали области в которой нажатие левой кнопки мыши приведет к переходу на указанный ресурс. Левой верхней ячейкой этого диапазона является ячейка определенная параметрами – метка_горизонтально, метка_вертикально. диапазон_горизонтально, диапазон_вертикально – необязательные параметры, по умолчанию 0.

Внешний вид шаблона и отображение значения данной ссылки в отчете следующее (рис. 18).

РЕГИСТРАЦИЯ ОТЧЕТА

Чтобы созданный шаблон отчета можно было использовать, он должен быть зарегистрирован в БД. Зарегистрировать отчет в приложении БД может только администратор или пользователь, наделенный особыми правами. Для этого нужно запустить приложение БД и ввести соответствующее такому пользователю имя и пароль. Далее после отображения основного окна приложения нажать кнопку Shift и, не отпуская ее, перейти в режим печати отчетов. В результате отобразится следующее окно (рис. 22).

Рис. 22.

Окно для регистрации отчета

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

Если такого узла нет, то следует создать его с помощью команды всплывающего меню «Новый отчет» в основном поле окна. В результате внутри выбранного в данный момент узла будет создан узел с названием <Новый>. С помощью мыши его нужно переместить на верхний уровень в иерархической структуре и задать ему имя в соответствии с названием приложения. Чтобы переименовать узел в структуре нужно его выбрать и, затем, один раз нажать на его названии левой кнопкой мыши – в результате название будет доступно для изменения. Чтобы сохранить изменения нужно нажать левой кнопкой мыши на любом месте в окна, кроме названия.

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

Рис. 23.

Окно настройки свойств отчета

Шаблон отчета – путь до файла, в котором находится шаблон отчета. Для удобства следует нажать кнопку в правой части строки ввода и в стандартном окне выбора файла указть шаблон отчета.

Роль – число, определяющее код роли прав доступа лица запускающего отчет. Значения этих кодов определяются администратором БД. Возможные значения следующие.

Код роли

Описание

101

тест

102

отчеты корпоративного управления

103

отчеты отдела кадров

104

отчеты по векселям

105

отчеты для отдела администраторов

Если в приведенной таблице отсутствует информация по роли подразделения, для которого создается отчет, следует обратиться к администратору БД.

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

Символ

Приложение

P

Кадры, Штатное расписание

V

Компании

X

Векселя

D

Архив документов

K

Контракты

А

Администрирование

F???

Платежи, Взаимозачеты

Если в приведенной таблице отсутствует информация по требуемому приложению, для которого создается отчет, следует обратиться к разработчику.

!  В настоящее время зарегистрировать отчет можно, только непосредственно в таблице LC900.

Пример.

Настройки тестового отчета могут быть следующими (рис. 24).

Рис. 24.

Окно настройки свойств отчета

Чтобы удалить элемент в структуре отчетов следует выбрать его и выполнить команду всплывающего меню «Удалить отчет».


ПРИЛОЖЕНИЕ 1 СПИСОК ТЭГОВ

Название тэга

Категория

Назначение

Страница
с описанием

|::ASK

Источник данных

Вызывает диалоговое окно определения параметров у пользователя.

16

|::BGROUP=имя_запроса

Вывод данных

Инициирует цикл по всем записям подчиненной группы, определяемой указанным запросом.

11

|::BSTATIC

Управление

Определяет строку начиная с которой данные в шаблоне в точности отображаются в отчете без разбора генератором отчетов.

7

|::COLUMNS

Управление

Определяет количество столбцов отчета начиная с А обрабатывать генератору отчетов.

2

|::DEFINE_STR@имя_переменной= значение_переменной

Источник данных

Определяет переменную в шаблоне.

17

|::EGROUP=имя_запроса

Вывод данных

Переход к следующей записи подчиненной группы, определяемой указным запросом.

11

|::END

Управление

Определяет последнюю ячейку шаблона, обрабатываемую генератором отчетов.

11

|::ESTATIC

Управление

Определяет строку начиная с которой генератор отчетов продолжает анализировать шаблон

7

|::EVAL@имя_переменной= выражение

Вывод данных

Вычисляет значение формулы содержащейся в переменной и присваивает значение переменной.

18

|::HIDE

Управление

Скрывает строку, в которой находится.

12

|::LOOP=имя_запроса

Вывод данных

Инициирует цикл по всем записям указанного запроса.

9

|::NEXT=имя_запроса

Вывод данных

Переход к следующей записи указного запроса.

9

|::PARAM=имя_параметра; возможные_значения;
метка;
SQL_WHERE;
визуализатор;
сортировка

Источник данных

Определяет параметры, запрашиваемые у пользователя при формировании отчета.

15

|::PRINTFOOTER=текст

Управление

Определяет текст, выводимый в нижнем колонтитуле страницы отчета.

2

|::PRINTHEADER=текст

Управление

Определяет текст, выводимый в верхнем колонтитуле страницы отчета.

2

|::QUERY={SQL_выражение}; NAME=имя_запроса; MASTER=имя_главного_запроса; DATABESE=DB

Источник данных

Определяет SQL запросы к БД необходимые для построения отчета.

3

|::SET@имя_переменной= значение_переменной

Источник данных

Определяет значение переменной.

17

|::SUM=имя запроса

Вывод данных

Формирует формулу, рассчитывающую итог вышестоящей колонки для указанного запроса.

21

|::TITLE=текст

Управление

Для совместимости с предыдущей версией.

 

 


ПРИЛОЖЕНИЕ 2 ПРИМЕР РАЗМЕТКИ ШАБЛОНА ОТЧЕТА

Курсивом выделены значения, которые расположены на строках скрываемых в окончательном отчете.

 


Ограничения Microsoft Excel

При формировании отчета нужно учитывать следующие ограничения Microsoft Excel

Количество различных форматов ячеек в файле не должно превышать 4000.

 

 


СОДЕРЖАНИЕ

Основные понятия............................................................................................................. 1

Основные настройки отчета............................................................................................... 2

     Количество столбцов в шаблоне................................................................................... 2

          Верхний и нижний колонтитул....................................................................................... 2

Формирование запроса к БД............................................................................................. 3

Создание макета отчета..................................................................................................... 7

          Элементы оформления выводимого отчета.................................................................... 7

          Отображаемые поля..................................................................................................... 8

          Последняя строка шаблона......................................................................................... 11

          Окончательный внешний вид макета........................................................................... 12

Дополнительные запросы................................................................................................. 13

          Определение вспомогательного значения................................................................... 13

          Создание подотчета.................................................................................................... 14

Определение параметров................................................................................................ 15

Переменные в отчете....................................................................................................... 17

          Инициализация переменной........................................................................................ 17

          Определение значения переменной............................................................................ 17

                   Использование переменной в шаблоне................................................................... 17

                   Получение значения из приложения БД.................................................................. 18

          Определение подстроки в запросе.............................................................................. 19

Использование формул.................................................................................................... 20

     Обращение к ячейкам шаблона.................................................................................. 20

          Специальные функции................................................................................................. 21

          Номер строки.............................................................................................................. 21

                   Сквозная нумерация.............................................................................................. 21

                   Сквозная нумерация по выборочным строкам......................................................... 22

Регистрация Отчета......................................................................................................... 22

Приложение 1 Список тэгов............................................................................................. 26

Приложение 2 Пример разметки шаблона отчета.............................................................. 27

 

 

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

|::QUERY={SELECT LC109_R103103 || ' ' || LC109_R103104 || ' ' || LC109_R103105 LC109_R10310345, LC590_R104101, LC591_R103219 , LC590_R100201 FROM ~LC591, ~LC592, ~LC590, ( ^QMain )  WHERE LC590_CODE = LC591_R59001 AND LC592_R59101 = LC591_CODE  AND LC109_CODE=LC592_R10901 ORDER BY ^OP };NAME=Qdet;Database=DB

Хостинг от uCoz