EW1SQL*REPORTW0
W1РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯW0
( SQL*REPORT USER'S GUIDE )F
3 июля, 1986
E ORACLEF Часть No.3603 - V1.0
ПРЕДИСЛОВИЕF
Даннное руководство описывает как пользоваться SQL*Report,гибкой
программой генерации отчетов, котороа включает в себя 2 утилиты
ORACLE :
RPF ORACLE Report Text Formatter (форматор текстов), позволя-
ющий вам контролировать внешний вид отчетов.
RPT ORACLE Report Generator (Генератор отчетов), позволяющий
вам включать информацию из БД ORACLE в вашу доку-
ментацию и отчеты.
Это руководство имеет своей задачей 2 цели.Как руководство поль-
зователя оно объясняет как работают RPF и RPT и демонстрирует их
использование.Как детальное руководство, оно дает описание синтак-
сиса и команд RPF и RPT.Приводятся примеры создания и использова-
ния файлов, а также диаграммы демонстрирующие происходящие процессы.
EНАЗНАЧЕНИЕF
Это руководство предназначено для пользователей Системы управления
Относительной БД ORACLE,которым необходим простой форма-
тор текстов,а для тех, кто хотел бы включить в свою документацию
информацию из БД ORACLE.
Для использования ORACLE Text Formatter (RPF)практически не требует-
ся предварительной подготовки.Вам только необходимо уметь пользова-
ться редактором в вашей ОС.ORACLE Report Generator
требует знакомства с SQL и Базой Данных ORACLE.Хотя умения програм-
мировать не требуется, оно может оказаться полезным для
полного использования этого продукта.
EКАК ПОЛЬЗОВАТЬСЯ ДАННЫМ РУКОВОДСТВОМF
Если вы незнакомы с SQL*Report,то вам лучше изучать это
руководство по изложенному порядку, чтобы сначала освоить
RPF до того как переходить к RPT. Пользователи, знакомые
с этим продуктом могут найти в оглавлении определенный опе-
ратор или команду и перейти прямо к нужному разделу.
Отличия версии 5.1 приведены в главах "Обзор RPF" и "Обзор
RPT".
СОГЛАШЕНИЯ, ИСПОЛЬЗУЕМЫЕ В ДАННОМ РУКОВОДСТВЕ
В данном материале приняты следущие соглашения:
EИмена файловF
Имена файлов приводятся в заглавных буквах, как
например INIT.ORA.Те части имени файла, которые
могут меняться,приводятся в строчных буквах,как
SGAREFx.ORA.
EЗарезервированные и ключевые словаF
Эти слова так же в тексте и примерах пишутся в
прописных буквах, чтобы указать, что их следует
вводить так, как написано и что они имеют заре-
зервированное значение внутри ORACLE.
EИмена клавишF
Имена клавиш приводятся в прописных буквах и за-
ключены в квадратные скобки, как [RETURN].
EСИНТАКСИС КОМАНДF
EКомандыF
Чтобы указать какой текст следует вводить непос-
редственно,используется следущий шрифт:
SELECT * FROM
EПеременныеF
Переменные приводятся в угловых скобках,как:
,
или приводятся вE курсивеF, подставьте
соответствующее значение.
Earg1F
EВыборF:
альтернативные возможности всегда разделяются
вертикальной чертой. Их набор заключается в
фигурные скобки, если требуется одно значение
или в квадратные скобки, если выбор не обяза-
телен. (Смотри ниже о соглашении для требуемых
или опционных объектов)
EТребуемые объекты:F
требуемые объекты заключаются в фигурные
скобки. Пользователь должен выбрать один из
нескольких.
.DEFINE {Emacro1 | macro2F }
EОпционные объекты:F
опционные объекты заключаются в квадратные скобки.
.FPRINT [ интервал ] <переменная>
EПовторяющиеся обекты:F
Многоточие сообщает о переменном количестве
одинаковых объектов.
E.FPRINT [интервал]<переменная>[[интервал]<переменная>]...
EНовые или исправленные документыF
Новые или исправленные материалы выделяются шриф-
том на полях, как в этом параграфе.
Следующие символы всегда нужно вводить так,
как они появляются в командном формате:
точка .
запятая ,
тире -
точка с запятой ;
двоеточие :
знак равенства =
обратная косая \
одиночная кавычка '
двойная кавычка "
скобки ()
СОДЕРЖАНИЕ
ЧАСТЬ 1: ВВЕДЕНИЕ В SQL*REPORT..............................
ГЛАВА 1. ВВЕДЕНИЕ...........................................
Добро пожаловать в SQL*REPORT...............................
КРАТКИЙ ОБЗОР...............................................
ЧАСТЬ II: ФОРМИРОВАТЕЛЬ ТЕКСТА ОТЧЕТОВ......................
ГЛАВА 2. Обзор RPF..........................................
Введение....................................................
Обработка RPF..............................................
Синтаксис..................................................
Принципы RPF ..............................................
Версия 5.1 RPF.............................................
ГЛАВА 3. ИСПОЛЬЗОВАНИЕ ТЕКСТОВОГО ФОРМАТОРА................
ПРИМЕР 1: Простое письмо..................................
Использование RPF: основные стадии.......................
Описание таблицы.......................................
Ввод таблицы...........................................
Ввод текста и других форматирующих команд..............
Закрытие таблицы.......................................
Дополнительные форматирующие команды.....................
Таблица, берущаяся по умолчанию........................
Описание страницы: поля заголовка и конца..............
Управление размещением по вертикали....................
Управление новой строкой...............................
Описание абзацев.......................................
ЗАПУСК RPF...............................................
ПРИМЕР 2 - ТАБЛИЧНЫЙ ОТЧЕТ.................................
Описание таблицы 1: Общие поля...........................
Описание колонок.........................................
Центровка и подчеркивание................................
Составные таблицы........................................
Введение данных в колонку................................
Выравнивание текста в колонке............................
Переход к новой строке...................................
Автоматическое выравнивание текста в колонке.............
Конец таблицы............................................
Основные положения RPF.....................................
Колонки..................................................
Условная таблица.........................................
Описание таблицы внутри условной таблицы.................
Таблицы и колонки........................................
Описание двухколоночной таблицы..........................
Неверное закрытие команд.................................
Использование неверного слэша............................
Ввод или удаление дополнительных пробелов..............
Вывод на печать обратного слэша........................
Вывод на печать обратного слэша........................
Указатель команд RPF.......................................
APN - Альтернативный номер страницы......................
В - Пробел...............................................
CEN - Центр..............................................
CL - Колоночный литерал..................................
CS - Пропуск колонки.....................................
CUL - центрирование с подчеркиванием.....................
DT - Определение таблицы.................................
F - Рисунки..............................................
FR - Заполнение вправо...................................
HS - Горизонтальные промежутки...........................
I - Отступ...............................................
L - Литерал..............................................
N - Новая строка.........................................
NC - Новая колонка.......................................
NP - Новая страница......................................
P - Параграф.............................................
PAGE - Страница..........................................
PAUSE - Пауза............................................
R - Выравнивание справа..................................
RR - Неровный правый край................................
S - Пропуск..............................................
SP - Расстояние..........................................
SPN - Начало нумерации страниц...........................
T - Таблица..............................................
TE - Конец таблицы.......................................
TTL - Заголовок..........................................
TTLU - Заголовок с подчеркиванием........................
UL - Подчеркивание.......................................
VS - Вертикальное расстояние.............................
Выполнение RPF.............................................
Переключатели RPF........................................
ЧАСТЬ III: ГЕНЕРАТОР ОТЧЕТОВ - RPT.........................
Глава 4. Обзор RPT.........................................
Введение...................................................
Процесс генерации отчета...................................
Выполнение RPT...........................................
Структура отчета...........................................
RPT версия 5.1 ............................................
Новые команды............................................
Согласованное использование идентификаторов..............
Сообщение об ошибочном использовании.....................
Предшествующий синтаксический контсоль...................
Выражение INTO в RPT.....................................
ГЛАВА 5. ПРИМЕРЫ RPT......................................
Пример 1 - шаблонное письмо................................
Пример 2 - табличный отчет.................................
Программа отчета.........................................
Выполнение программы отчета..............................
Пример 3 - составной отчет.................................
ГЛАВА 6. ОПЕРАТОРЫ ЯЗЫКА SQL*REPORT........................
Типы операторов............................................
Синтаксис..................................................
Краткое изложение RPT операторов...........................
Декларативные операторы....................................
DECLARE..................................................
Алфавитно цифровые.....................................
Цифровые...............................................
Дата...................................................
Слова константы........................................
SET.....................................................
EQUAL...................................................
Операторы макро определений...............................
Выполнение процедурного макроса ........................
Оператор REPORT.........................................
Составные отчеты......................................
Дизъюнктивный отчет...................................
Формат оператора REPORT...............................
Операторы управления программой...........................
Оператор определения метки..............................
Оператор GOTO...........................................
Оператор IF.............................................
Управляющая строка оператора IF.......................
Оператор IFNULL.........................................
Оператор STOP...........................................
Арифметические операторы..................................
ADD.....................................................
SUB.....................................................
MUL.....................................................
DIV.....................................................
DSUB....................................................
Смешанные операторы.......................................
Оператор PRINT..........................................
Оператор FPRINT.........................................
Оператор ASK............................................
Оператор TELL...........................................
Оператор REMARK.........................................
Оператор COMMIT.........................................
Оператор ROLLBACK.......................................
Приложение А. ...........................................
Пример 1 .................................................
Пример 2 .................................................
Пример 3 .................................................
Пример 4 .................................................
Пример 5 .................................................
Индекс....................................................
+ EW1ЧАСТЬ 1.W0 EW1ВВЕДЕНИЕ В SQL*REPORTW0F
ГЛАВА 1. ВВЕДЕНИЕ
Добро пожаловать в SQL*REPORT
SQL*Report соединяет возможности форматирования текстов
с возможностями SQL-запросов. Эта мощная программа позво-
лит вам сгенерировать различные документы, включающие ин-
формацию с помощью ORACLE, а так же любые нужные Вам текс-
ты.
Потенциальные возможности использования SQL*Report очень
разнообразны. В простейшем случае он м.б. использо-
ван для написания обычных писем или табличных отчетов. Так
же он м.б. использован для составления отчета,ис-
пользующего только одну таблицу ORACLa с заголовками коло-
нок,колонками информации БД и всем что угодно.
SQL*Report может генерировать более полные документы,вклю-
чая сложные отчеты с высоким уровнем вложенности,рассредо-
точенные отчеты,сложные изменения в колонках,разнообраз-
ные промежуточные и окончательные итоги.
Так же м.б. создан процедурный языковый макрос.
Применения,подчеркивающие возможности SQL*Report включа-
ют сгенерированные машиной материалы со вставкой имен,ад-
ресов,и другой информацией из БД ORACLE,или
периодический бюджет и отчет по стоимости.SQL*Report так
же может использоваться для подготовки форм для печати.
КРАТКИЙ ОБЗОР
SQL*REPORT состоит из 2 программ,которые используются
вместе для выборки данных и составления отчетов,представ-
ляющих эти данные в желаемой форме. Генератор отчетов (RPT)
выводит информацию в SQL операторах. REPORT TEXT FORMATTER
(RPF) обрабатывает данные в командах,включенных в текст.
Вы составляете отчет с помощью подготовленного файла,из-
вестного как файл контроля отчетов.Этот файл содержит
SQL*REPORT-операторы,и другие текстовые материалы,кото-
рые будут включены в отчет. Вы можете создать этот файл,
используя любой стандартный текстовый редактор.Если уп-
равляющий файл готов,Вы можете запустить процесс и гене-
рировать документ.Этот процесс включает 2 ступени:
* Сначала Вы работаете с RPT,получая файл внутреннего
образа.
* Затем Вы пропускаете файл через RPF для получения окон-
чательного документа.
RPT читает файл,просматривая в нем SQL*Report-операторы.
Эти операторы заставляют RPT открывать специфичные данные
ORACLа для того чтобы получить информацию для отчета. Для
получения необходимых данных SQL-запросы расположены вну-
три программы отчета. Существует множество операторов,поз-
воляющих RPT создавать заголовки и конец информации,ис-
пользовать форматы вывода специальных данных,или,если по-
требуется,разветвляться и выполнять SQL или RPT операторы.
RPT может чередовать информацию БД с RPF командами и поль-
зовательским текстом.
Когда процесс RPT завершен,создается файл внутреннего обра-
за. Этот файл внутреннего образа содержит вводимый Вами файл,
полученную Вами из БД информацию и RPF команды,описывающие
как вся эта информация должна выглядеть после завершения до-
кументирования. Файл внутреннего образа не может использова-
ться сам по себе,но может использоваться RPT для создания же-
лаемого отчета.
Примеры документов,полученных с помощью SQL*Report будут
приведены ниже в этом руководстве. Рис.1 демонстрирует про-
цесс работы RPF и генерацию конечного документа.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і SQL*Report операторы і
і + і
і ТЕКСТ ПОЛЬЗОВАТЕЛЯ і
і + і
і КОМАНДА FORMAT (RPF) і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
і і
\ /
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
/ \ ЪДДДДДДДДДДДДДДДДї
і Г Е Н Е Р А Т О Р і і"<пользователь>"і
і ГДД <ДДґ База Данных і
і О Т Ч Е Т О В і АДДДДДДДДДДДДДДДДЩ
\ /
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД БАЗА ДАННЫХ
і і ORACLE
\ /
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
INTERIM TEXT і База данных + тект пользователя і
FILE і і
----------------і И і
файл внутреннегоі і
образа текста і Команды форматора (RPF) і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
і і
\ /
ДДДДДДДДДДДДДДДДДДДДДДДДДДї
+--------------------------+ і
і і і В Ы В О Д
і AAAAAAAAAAAAAAA....... і і
і ...................... і і О Т Ч Е Т А
+--------------------------+ і
Рис. 1. Процесс генерации отчета
+ E ЧАСТЬ II:ФОРМИРОВАТЕЛЬ ТЕКСТА ОТЧЕТА - RPFF
EГЛАВА 2.
ПРЕДИСЛОВИЕ F
Формирователь Текста Отчета (RPF) - основной формирователь текста для
разнообразия применяемых слов,включая корреспонденцию,документ,отчет.
Вы включаете команды RPF в текст вашего документа для управлением
форматирования информации.
Команды RPF могут определить:
* горизонтальное и вертикальное поля
* центрирование и подчеркивание
* табуляция
* номерация страниц
* пнространственное и действительное местоположение текста
* управление устройствами вывода на принтер,терминал,или CRT.
Вы должны ознакомиться с RPF прежде чем попытаетесь его применить.
Хотя RPF м.б. использован независимо,RPT должен использоваться
в комбинации с RPF (или в комбинации с одним из других текстов
форматируемых языков).
EОБРАБОТКА RPFF
RPF принимает ввод этой обработки и команды,которые управляют
обработкой в некотором файле.Команды вложенные внутри отформатиро-
ванного файла применяются для управления операции форматирования.
Вы можете вручную вставить команды RPF в отформатированный файл,
обычно применяется текстовой редактор.Если файл сконструирован
программой,то команды RPF м.б. вставленны программой.
Этот процесс иллюстрирован под цифрой 2 на 12 странице.
EСИНТАКСИС F
Все команды RPF начинаются или с точки (.),или со знака фунта (#).
Их взаимозаменяемость не затрагивает значения команд.Слова
начинающиеся со знака фунта или точки,но не являющиеся командами,
воспринимаются как текст.Для печати команд как текста перед ними
ставится слэш (\).Например,#В - команда вставки пустой строки,
но \#В воспринимается как текст #В.
Команды м.б. написаны в верхнем или нижнем регистре символов.
Каждая команда может повторять один ил несколько параметров.
Команды и их обращения отделяются одним или несколькими пробелами,
табуляциями,или символами form feed.Единственную точку,или знак
фунта применяется для окончания команд,которые имеют переменное число
параметров,или которые управляются группой слов (центрирование и
подчеркивание).
EПРИНЦИПЫ RPF F
Текст представляется RPF как ряд слов."Слово"-один или несколько
символов,оканчивающихся как минимум одним пробелом или концом
строки.Позиции RPF каждого слова,одного за другим,в выводимой
строке.Последний символ строки вставляется в текстовой файл всякий
раз когда пользователь вводит возврат каретки.Одна позиция отделяет
каждое слово от следующего при выводе,несмотря на число позиций при
вводе.Пробелы,табуляции,возвраты корреток,и новые символы строк
обслуживаются только как разделители,не влияющие на местоположение
слова вводимого в RPF.
Поумолчанию введенный текст выравнивается вправо.Когда строка ока-
зывается заполненной,и следующее слово не будет годным для нее,
слова этой строки смещаются вправо так,чтобы последний символ строки
был выравненным с правым полем.При желании вы можете выключить
выравниванивание по правому полю.Слово является недилимым,никогда
не переносится на следующую строку.RPF продолжает обработку до
конца вводимого файла.
PRF позволяет вам определить начальную и конечную позиции строки.
Пространство строки,где находится текст,называется столбцом.
Если вы не определили границы столбца,RPF по умолчанию помещает
текст в столбец,который начинается с позиции 1 и кончается 255
позицией.Максимальная длина строки - 255 символов.
EВЕРСИЯ 5.1 PRFF
Это руководство модифицировало включение различных изменений
в текст,наряду с определенными изменениями делаемыми в версии 5.1.
Эти коррекции и изменения
ДДДДДДДДДД ДДДДДДДДДДДДДДДД
/ \ / \
і і<ДДД>/ ТЕКСТОВОЙ \
і і<ДДД>\ РЕДАКТОР /
\ / \ /
/ ДДДДДДДДДД \ ДДДДДДДДДДДДДДДД
ДДДДДДДДДДДДДДДДД іі
ТЕРМИНАЛ \/
ПОЛЬЗОВАТЕЛЯ ЪДДДДДДДДДДДДДДї
і ИСХОДНЫЙ і
і ФАЙЛ RPF і
АДДДДДДДДДДДДДДЩ
\/
ЪДДДДДДДДДДДДДДДДДДДДДДДї
і УТИЛИТЫ ФОРМАТИРУЕМОГОі
і ТЕКСТА RPF і
АДДДДДДДДДДДДДДДДДДДДДДДЩ
\/
ЪДДДДДДДДДї
ЪБДДДДДДДДїі
і AAAAAAA іі
ФОРМАТИРУЕМЫЙ ВЫХОД і ....... іі
і XXXXXXX ГЩ
АДДДДДДДДДЩ
Рис 2. Создание форматированного документа используя RPF.
+ EГЛАВА 3.ИСПОЛЬЗОВАНИЕ ТЕКСТОВОГО ФОРМАТОРАF
EПРИМЕР 1: ПРОСТОЕ ПИСЬМОF
Давайте проверим входной файл,который нужно преобразовать в
простое письмо. Взгляните на выборочные файлы,приведенные
на следущих страницах( рис.3 на стр.17 является перечнем фай-
ла,из которого создается письмо,приведенное на рис.4 на
стр.18).
Входной файл был создан с использованием стандартного тексто-
вого редактора. Отметим,что номера строк дописаны только
для того чтобы увидеть,с какими конкретными строками мы
имеем дело.
ВНИМАНИЕ: Команды RPF отличаются от пользовательского текста
наличием в начале точки (.) или знака фунтов (#).Команды
могут описываться с помощью проиписных и строчных букв.
Чтобы помочь вам различать команды RPF от операторов RPT,
в данном руководстве все RPF команды даются со знаком (#).
EИСПОЛЬЗОВАНИЕ RPF: ОСНОВНЫЕ СТАДИИ
Для использования RPF форматора вы вводите текст в виде
форматирующего "окна" или в виде таблицы,составленной из
одной или нескольких колонок. Например целое письмо,приве-
денное на рисунке 4 определено для RPF как одна таблица с
одной колонкой. Весь текст содержится в этой единственной
колонке.
Отметим,что таблица RPF не является таблицей ORACLE,а
является просто прямоугольным окном с определенной дли-
ной и шириной. Далее мы увидим,что ширина определяется
командой DT. Длина определяется числом выбранных записей
(SELECT) из БД и длиной введенного пользователем
текста.
Для форматирования простых таблиц,типа приведенной,
используется 4 основных ступени:
1. Описание таблицы.
2. Ввод таблицы.
3. Ввод текста и различных форматирующих команд.
4. Закрытие таблицы.
Сейчас мы проследим как используются эти шаги при форма-
тировании письма,приведенного на Рисунке 4. Рисунок 3 де-
монстрирует содержание файла RPF,используемого для создания
данного письма.
EОписание таблицыF
Команда DT (первая строка на рисунке 3) описывает таблицу.
#DT 1 13 73 #
Первый знак фунта (#) является запуском команды. Число,сле-
дующее после команды описания таблицы DT (Define Table)
(т.е. 1) описывает имя таблицы (ее индентификатор). Вы мо-
жете описывать до 30 таблиц в одном документе RPF,
но каждой присвоить уникальный N от 0 до 29.
Следущая пара чисел описывает поля этой таблицы.Так у данной
таблицы левое поле 13 и правое соответственно 73. Таблица
RPF может содержать до 255 колонок. Для описания большего,чем
одна,числа колонок требуется ввести дополнительные пары
чисел,описывающие левое и правое поля имеющихся колонок.
Как и ряд других команд RPF,DT относится к "закрываемым"
командам и должна заканчиваться точкой (.) или знаком фун-
та (#).В данном случае знак # указывает,что таблица не со-
содержит более колонок и заканчивает описание таблицы.
EВвод таблицыF
Описани
е таблицы не означает автоматическое помещение текс-
та в описанные для колонки границы. Таблица д.б. вве-
дена перед тем как она будет форматирована. Команда Т в
4 строке вводит Table 1: #T 1. Отметим,что индентификатор
таблицы (1) указывается после команды.
EВвод текста и других форматирующих командF
На данном этапе вы можете ввести текст,который должна содер-
жать таблица,а так же различные форматирующие команды RPF.
На рисунке 3 ТЕКСТ и форматирущие команды содержатся в стро-
ках с 6 ; команды далее будут рассмотрены более детально .
EЗакрытие таблицыF
Последним шагом является описание команды конца таблицы TE,
приведенной в строке 25. Эта команда сообщает RPF что табли-
ца более не активна. Границы колонок приписываются таблице
взятой по умолчанию (см. далее).
EДОПОЛНИТЕЛЬНЫЕ ФОРМАТИРУЮЩИЕ КОМАНДЫF
Рисунок 3 содержит ряд дополнительных команд RPF,которые
используются для управления размещением текста внутри опи-
санной таблицы.Сейчас мы просмотрим эти важные дополнитель-
ные команды.
EТаблица,берущаяся по умолчаниюF
Отметим,что RPF имеет определенные значения величин,которые
активны до тех пор пока пользователь не введет свои значения.
Например,если пользовательский текст включается в шаблонный
файл до строки 4,(где впервые пользователем определяется
таблица ) этот текст будет форматироваться в соответствии
с описанием таблицы,берущейся по определению. Эта таблица
определена как одна колонка,начинающаяся с позиции 1 до
позиции 255.
EОписание страницы: поля заголовка и концаF
Команда PAGE в строке 2 описывает поля заголовка и конца
страницы. RPF будет помещать текст после 6 строки каждой
страницы и автоматически переходить на новую страницу пос-
ле заполнения 58 строки. Полагается что все страницы содер-
жат 66 строк. Если печать производится с плотностью 6 строк
на дюйм,то 66 строк заполнят стандартную 11 дюймовую стра-
ницу.
EУправление размещением по вертикалиF
Команда SP управляет расстоянием между строк. Так как по
определению расстояние равно одному пробелу,эта команда
м.б. опущена. Команда S 3 в строках 5 и 7 указывает
на пропуск 3 строк. Когда вы печатаете письмо,необходимо
пропустить достаточное количество строк,чтобы напечатать
первую строку текста ниже заголовка письма.
Команда пустой строки В вставляет пустую строку и имеет
такой же результат как и команда S 1 (пропуск одной строки).
EУправление новой строкойF
Взгляните на строку 6,которая содержит первую строку поль-
зовательского текста. Описаны три слова разделенные запятой:
"JANUARY","10","1985". Напомним,что число пробелов во вво-
димом тексте не оказывает влияния на пробелы в выводимом те-
ксте. Можно ввести эти слова в различных строчках и все равно
эффект будет тот же самый.
Теперь взглянем на строку 8,содержащую имя адресата,после
которого следует команда перейти на новую строчку N. Эта
команда такая же как и ключ возврата при печати. Команда N
в строке 9 вызовет печать города и штата на строке следущей
после улицы адресата.
EОписание абзацевF
Команда Р в строке 12 вызовет сдвиг печати текста в следущей
строке на 5 пробелов. Содержание письма при этом печатается
внутри заданных границ колонки. В приведенном примере слово
"insurance" не м.б. напечатано в одну строку со словом
"dental". Следовательно из-за ограничения правой границей,
будет добавлена новая строка.
EЗАПУСК R P FF
Чтобы запустить RPF введите команду в следущем формате:
RPF <имя_файла>[<выходное_имя_файла>][<имя_усройства>][-<пеключатели>]
Так шаблонное письмо было напечатано на принтере с качеством
'рукописное' следущей системной командой:
RPF LETTER.ABC TT1: -I
где TT1: системный адрес желаемого принтера,LETTER.ABC - имя
файла с вводимым текстом. Если индентификатор файла опущен,
(в данном случае ABC),RPF его предполагает.
1: #DT 1 13 73 #
2: #page 6 58
3: #SP 1
4: #T 1
5: #S 3
6: January 10,1985
7: #S 3
8: Mr. William 0. Smith #N
9: 3752 Oakwood Drive #N Seaport,Me. 96142
10: #S 1
11: Dear Bill:
12: #S 1 #P
13: I hope you have received the medical and dental insurance forms
I sent.
14: #S 1
15: #P The form you submitted for your November 1,1984 visit to
Dr. George
16: Smedley did not indicate the nature of the treatment. Please
have the
17: doktor write me a note describing the reason for the visit and
the
18: treatment which was prescribed.
19: #B #P
20: If you have any questions please give me a call at my office.
21: #S 1
22: Sincerely,
23: #S 3
24: Sharon Brown
25: #TE
Рисунок 3. Ввод для RPF - простое письмо
January 10,1985
Mr. William O. Smith
3752 Oakwood Drive
Seaport,Me. 96142
Dear Bill:
I hope you have received the medical and dental insurance forms
I sent.
The form you submitted for your Novembtr 1,1984 visit to Dr. George
Smedley did not indicate the nature of the treatment. Please have
the doctor write me a note describing the reason for the visit and
the treatment which was prescribed.
If you have any questions please give me a call at my office.
Sincerly,
Sharon Brown
Рисунок 4. Вывод RPF - простое письмо
EПРИМЕР 2 - ТАБЛИЧНЫЙ ОТЧЕТ
Вторым примером использования RPF является табличный отчет
приведенный на следущих страницах.Посмотрите на рисунок 5
на странице 23.Здесь приведено содержание файла с вводимым
текстом из которого получен отчет,приведенный на рисунке
6 на странице 24.Просмотрите эти файлы прежде чем приступать
к чтению последущих разьяснений.Номера строк добавлены только
для того чтобы вам было удобнее.
EОписание таблицы 1: Общие поляF
Сначала описываются общие правое и левое поля таблицы на стра-
нице.В примере команда DT в первой строке описывает таблицу
Table 1,которая содержит одну колонку с позиции 13 до 73.
Этим устанавливаются горизонтальные поля для всего отчета
в целом,любая новая описанная таблица д.б.расположена
внутри границ этой колонки.
EОписание КолонокF
В строчке 2 описывается таблица Table 2.Эта таблица содержит
уже 5 колонок: первая с позиции 1 до 5,вторая с 9 по 28 пози-
цию,третья с 32 по 39 позицию и т.д..Отметим что пятая пос-
ледняя колонка описана парой чисел 52 и 0.Число 0 означает,
что эта колонка заканчивается на правом поле той таблицы,в
которую она вводится.Чуть позже мы увидим как используется
таблица Table2.
EЦентровка и подчеркиваниеF
Строка 3 описывает верхнее и нижнее поля выводимой страницы,
и строка 4 вводит таблицу Table 1.Так как таблица Table 1
содержит одну колонку,то текст форматируется в соответствии
с границами колонки.
Команда CUL в строке 6 указывает,что текст,следущий после
команды до знака фунта #,должен быть размещен в центре ко-
лонки и подчеркнут.Так как границы колонки 13 и 73,то
текст поместится в центр страничной строки.Команда CUL в
8 строке вызывает второе центрирование и подчеркивание
текста.
EСоставные таблицыF
В этом месте мы готовы к созданию табличного отчета.Этот отчет
будет состоять из 5 колонок на странице.Если этот отчет на-
до вывести на печать,то пользователю возможно придется устано-
вить позиции табуляции для первой позиции колонки.В RPF вводят-
ся новые таблицы для того,чтобы установить границы колонок.
Команда в строке 10 вводит таблицу Table 2,которая была опре-
делена в строке 2.В отличие от таблицы Table 1,которая имеет
только одну колонку,Table 2 содержит 5 отдельных колонок
для выходного текста.
Если таблица вводится в то время,когда активна предыдущая таб-
лица,новая таблица перераспределяет колонки,и колонки стано-
вятся текущими.Новые табличные границы должны уместиться между
текущими колонками первой или 'родительской' таблицы.Эти огра-
ничения не относятся к границам второй таблицы,если предыдущая
таблица закрыта раньше начала ввода этой второй таблицы.
Сейчас текущая колонка единственная в Table 1.Следовательно,
вводимая Table 2 перераспределяет 61 печатаемую позицию с 13 по
73 на 5 отдельных областей или колонок.
Границы колонки таблицы интерпретируются по отношению к грани-
цам текущей колонки.Например,первая колонка Table 2 распола-
гается между условными позициями 1 и 5.Так как текущая колонка
Table 1 начинается с позиции 13,абсолютное значение границ ко-
лонки от 13 до 17.Последняя колонка начинается с условной по-
зиции 52 ( абсолютное значение 64) до конца текущей колонки
( абсолютное значение 73 ).
Вложенная таблица должна полностью размещаться внутри колонки,
в которую она вводится.Колонка в которую была введена Table 2
содержит 61 печатную позицию.Если любая колонка Table 2 выйдет
за пределы условной позиции 61,то это будет воспринято,как
ошибка.Например,если последняя колонка была определена чис-
лами 52 и 65,то RPF выдаст ошибку.Ширина таблицы превосходит
ширину колонки,при введении Table 2 (строка 10).
EВедение данных в колонкуF
После того как таблица Table 2 была описана и введена,выводи-
мый текст должен размещаться во всех пяти колонках.Текст стро-
ки 11 поместится в первую колонку новой строки.Команда NC
означает конец размещения текста в текущей строке.Любой
последущий текст будет помещаться в первую строку следущей
колонки таблицы Table 2.
EВыравнивание текста в колонкеF
Команда CEN в строке 12 производит центрирование слов "ITEM" и
"DESCRIPTION" в первых двух строках второй колонки.Команда
R (выравнивание справа) в строках 13,14,и 15 описывает,что
весь соответствующий текст в колонках 3,4 и 5 д.б.
выравнен справа.Отметим,что заголовки колонок прилегают
к правым границам колонок.
EПереход к новой строкеF
Далее последняя колонка таблицы NC в строке 15 делает первую
колонку текущей.Команда S 2 в строке 16 имеет такое же зна-
чение и еще пропускает две строки.Строка 17 помещает первую
строку данных в каждую колонку отчета.Заметьте,что значе-
ния в долларах в последних 3 колонках выравнены справа.
Строки 19 и 21 описывают вывод второй и 3 строк отчета.
EАвтоматическое выравнивание текста в колонкеF
Текст "Chicago Cubs Baseball Uniforms" не уместится в одну
строку колонки "ITEM DESCRIPTION".Как показано выше,RPF
помещает в строку колонки столько слов,сколько уместится.
Призаполнении строки последнее слово помещается на правой
границе и оставшийся текст помещается в следущую строку.
Так как для "ITEM DESCRIPTION" требуется 2 строки,RPF
выравнивает остальные колонки так,чтобы все начала следущего
объекта,N объекта 8940 были в одной и той же строке.
RPF осуществит пропуск соответствующего числа строк в каждой
колонке таким образом,что начало размещения текста будет
начинаться в новую строку,определяемую самой длинной колон-
кой.
В строках 23 и 24 описана общая инфрормация.Так как в первых
двух строках нет никакого текста,включены 2 команды NC
чтобы отпозиционировать текст в 3 колонке.Выводимый
текст в последних 3 колонках содержит строки прочерков
и общие суммы в следущей строчке.
EКонец таблицыF
ТЕ в строке 25 заканчивает текущую таблицу Table 2.Закрытие
таблицы приводит к тому,что ранее введеная таблица Table 1
снова становится активной.Текст строки 26 будет отцентрирован
и подчеркнут в соответствии с границами колонки - 13 и 73.
Обратный слэш (\) для RPF означает добавление второго пробела
между словами.Обычно выводимые слова разделяются только
одним пробелом.
ТЕ в строке 27 закрывает таблицу Table 1,делая активной усло-
вную таблицу.
01: #DT 1 13 73 #
02: #DT 2 1 5 9 28 32 39 42 49 52 0 #
03: #page 6 58
04: #T 1
05: #S 4
06: #CUL " ALL SEANSON SPORTING GOODS " #
07: #S 2
08: #CUL MONTHLY SALES REPORT #
09: #S 4
10: #T 2
11: ITEM #N NO.#NC
12: #CEN ITEM # #N #CEN DESCRIPTION # #NC
13: #R PREVIOUS #N MONTH #NC
14: #R CURRENT #N MONTH #NC
15: #R Y-T-D #NC
16: #S 2
17: 2354 #NC NFL Footballs #NC $175.34 #NC $202.45 #NC $564.89 #NC
18: #S 1
19: 6734 #NC Chicago Cubs Baseball Uniforms #NC $56.10 #NC $162.01 #
20: #S 1
21: 8940 #NC Alpine Skis #nc $941.84 #NC $1005.93 #NC $3582.57 #NC
22: #S 1
23: #NC #NC -------- #N $1173.28 #NС -------- #N #1307.76 #NC ----
--#N
24: $4434.47
25: #TE #S 3
26: #CUL END\OF\REPORT #
27: #TE
Рисунок 5.Вход RPF-табличный отчет
" ALL SEASONS SPORTING GOODS "
MONTHLY SALES REPORT
--------------------------
ITEM ITEM PREVIOUS CURRENT Y-T-D
NO.DESCRIPTION MONTH MONTH
2354 NFL Footballs $175.34 $202.45 $564.89
6734 Chicago Cubs $56.10 $162.38 $287.89
Baseball Uniforms
8940 Alpine Skis $941.84 $1005.93 $3582.57
-------- -------- --------
$1173.28 $1307.76 $4434.47
END OF REPORT
Рисунок 6.RPF выход - табличный отчет
EОСНОВНЫЕ ПОЛОЖЕНИЯ RPFF
EКолонкиF
RPF обрабатывает текст по словам,помещая слова поочереди в
выходную строку в пределах границ текущей колонки.Колонка
описывается начальной и конечной позициями для символов.
Слова помещаются в колонку разделяемыми по крайней мере
одним пробелом с первой позиции вплоть до последней.Так
как слова подразумеваются неделимыми,они не переносятся.
Длина слова не должна превосходить длины колонки,иначе
RPF выдаст сообщение об ошибке.
Длина колонки численно равна номеру последней позиции ми-
нус N первой позиции плюс 1.Последнее слово размещается
тка,что его последний символ совпадает с последней позицией
колонки.Любой дополнительные пробелы вызванные размещением
распределяются по строке.
EУсловная таблицаF
Таблица может содержать от 1 до 255 колонок и описывает гра-
ницы для размещения слов в текущей строке.Условная таблица,
как будет показано далее,содержит одну колонку и является как
бы начальным описанием таблицы.Как мы уже видели,новые таб-
лицы могут описываться и вводится в границы текущей таблицы.
Пример на рисунке 7 страницы 26 приводит текст в адрес
Lincoln's Gettysburg,помещаемый в начало колонки с позиции
1 до позиции 132.Отметим,что все строки,за исключением
последней,выравниваются справа.
1 255
v v
+НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН+
v " Table 1 - Клонка 1 " v
+<------------------------------------------------------------------>+
"Fourscore and seven years ago our fathers brought fouth on this
continent a new nation,conceived in liberty,and dedicate to the
proposition that all men are created equal."
Рис. 7.Пример 1 - Условная таблица.
EОписание таблицы внутри условной таблицыF
Следущий пример демонстрирует ввод второй таблицы в условную
одноколоночную таблицу.Эта таблица содержит одну колонку с
позиции 4 до позиции 76.Здесь тот же текст переформатируется
внутри новой таблицы с новым описанием колонки.
1 4 76 255
v v v v
+ННН+НННННННННННННННННННННННННННННННННННННННННННННННННННН+ННННННННННН+
v " Table 1 - Клонка 1 " v
+<--+--------------------------------------------------+------------>+
v " Table 2 - Клонка 2 " v
+<------------------------------------------------>+
"Fourscore and seven years ago our fathers brought
fouth on this continent a new nation,conceived in
liberty, and dedicate to the proposition that all
men are created equal."
Рис.8.Пример 2 - Таблица внутри условной таблицы.
EТаблицы и колонкиF
Таблица всегда вводится в колонку,и ее колоночные позиции
высчитываются относительно начала внешней колонки.Следу-
щий пример демонстрирует 3 таблицу,содержащую 2 ко-
лонки,первая начинается с относительной 7 позиции и за-
канчивается в 22 позиции,вторая начинается с относительной 27
позиции и заканчивается в 41 позиции.Эта таблица вводится в
единственную колонку таблицы Table 2.Так как колонка в
таблице Table 2 начинается с относительной позиции 4 един-
ственной колонки условной таблицы,колонки таблицы Table 3
будут начинаться с абсолютных позиций 10 и 30.
Таблица должна умещаться внутри колонки,в которую она
вводится.Т.е.длина таблицы не должна превышать длину колон-
ки.Длина таблицы равняется значению последней позиции в
последней описанной в этой таблице колонки.Например,данная
таблица имеет длину 41: Вторая и последняя колонка этой таб-
лицы располагается с позиции 26 до 41.Следовательно эта
таблица уместится в текущей колонки,чья длина равняется
73 (76-4+1).
EОписание двухколоночной таблицыF
В примере 3 шаблонный текст занимает обе колонки таблицы.
RPF будет помещать слова в текущую колонку до тех пор,пока
не будет введена команда перехода к новой колонке.В данном
примере команда NC после слова "liberty" указывает RPF,что
оставшийся текст надо размещать в колонку 2.
1 4 10 25 30 45 76 132
v v v v v v v v
+==+=====+==============+====+==============+========+================+
v " Tаble 1 - Column 1 " v
+<-+-------------------------------------------------+--------------->+
v " Table 2 - Column 1 " v
+<----+--------------+----+--------------+------->+
Table 3 v " Column 1 " v v " Column 2 " v
+<------------>+ +<------------>+
7 22 27 41
"Fourscore and and dedicated to
seven years ago the proposition
our fathers that all men are
brougth forth on created equal."
this continent a
new nation,
conceived in
liberty,
Рисунок 9.Пример 3 - двухколоночная таблица текущей колонки
EНеверное закрытие командF
Возникают определенные трудности при диагностике ошибок RPF,
если ряд команд,таких как CL,не закрыты.Если команда CL
не закрыта,то последущие команды воспринимаются как вводи-
мый текст.Для того,чтобы помочь пользователю локализовать
причину ошибки,RPF выдает не только N строки,явившейся
причиной ошибки,но и N строки с последней воспринятой
командой,если он отличается от номера текущей строки.
EИспользование обратного слэшаF
Иногда возникает необходимость обойти правила RPF для выводи-
мого текста.RPF Воспринимает точку (.) после слов как конец
предложения и вводит 2 пробела перед началом нового предло-
жения.RPF так же разделяет слова одним пробелом и вам нужно
указывать,при необходимости,на ввод второго пробела.Точка
вначале команды также воспринимается RPF как команда,поэтому
необходимо как-то указывать на то,что надо напечатать ко-
манду.Поэтому в RPF используется обратный слэш (\) для ука-
зание на интерпритацию символа там,где иначе он не будет
восприниматься.
EВвод и удаление дополнительных пробеловF
Обычно RPF игнорирует число вводимых между словами пробелов во
входном файле,и разделяет слова просто одним пробелом.Однако
иногда вам нужно оставить определенное число пробелов между
словами.Обратный слэш (\) с пробелом после него указывает
на то,что в выводе нужно ввести дополнительный пробел.Это
справедливо для любого желаемого числа пробелов.Ввод дополни-
тельных пробелов показан в следущем примере:
Вводимый Текст Выводимый Текст
ДДДДДДДДДДДДДДДДДДДДДДДДД ДДДДДДДДДДДДДДДДДДДДДДД
1- Abraham Lincoln Abraham Lincoln
2- Abraham \ Lincoln Abraham Lincoln
1- Abraham \ \ \ Lincoln Abraham Lincoln
RPF вставляет 2 пробела,если слово заканчивается точкой.
Для того,чтобы точка воспринималась как сокращение слова,
а не конец предложения,введите после точки обратный
слэш (\).
Come between 5 p.m.\ and 10 p.m. Come between 5 p.m.and 10 p.m.
Helo.How are you. Helo.How are you.
EВывод на печать обратного слэшаF
RPF удаляет обратные слэши в конце слова.Если вы хотите вы-
вести,введите еего дважды:
Printslash\\ Printslash\
EВывод на печать команд RPFF
Самое простое,если вы хотите напечатать команду RPF и чтобы
она не воспринималась как команда,это ввести обратный слэш
перед ее именем.
The \.DT command works like this: The \.DT command works like this:
Use \.to terminate the command. Use .to terminate the command.
Если обратный слэш используется в качестве первого символа
слова,то он не выводится.Используйте двойной обратный
слэш,если один вам нужно напечатать.
\\Printblackslash \Printblackslash
EУказатель команд RPF F
В этом разделе детально рассматривается каждая команда RPF.Коман-
ды представлены в алфавитном порядке и объединены в следующую
таблицу.Комментарий " Cloused " ( закрываемая ) в описании указы-
вает,что команда должна оканчиваться или (.),или (#).
ЪДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і команда і описание і
ГДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і APN і Alternate Page Numer: положение каждой нумерованной і
і і страницы. і
і B і Blank: вставка пустой строки ввыводимый текст. і
і CEN і Center: центрирование следующего текста в текущей і
і і колонке. CLOUSED і
і CL і Column Literal: не осуществлять форматирование следую- і
і і щих строк текущей таблицы.CLOUSED і
і CS і Column Skip: пропустить "n" строк текущей таблицы. і
і CUL і Center With Underline: центрирование и подчеркивание і
і і последующего текста в текущей колонке.CLOUSED і
і DT і Define Table: определение границ колонки для описываемой і
і і таблицы. CLOUSED і
і F і Figures: зарезервировать описанные номера страниц для і
і і иллюстраций или глав в выходном документе.CLOUSED і
АДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рисунок 10.RPF команды ( APN-F )
ЪДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і команда і описание і
ГДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і FR і Flush right: Выравнивание по правому и левому полям. і
і і Эта установка осуществляется по умолчанию. і
і HS і Horizontal Spacing: для символов принтера Diablo. і
і I і Indent: ввести последующий текст в текущую колонку. і
і L і Lieral: прекратить форматирование последующих текстовых і
і і строк; определение колонки игнорируется.CLOUSED і
і N і New Line: переход кследующей строке текущей колонке. і
і NC і New Column: перейти к следующей колонке. і
і NP і New Page: окончание текущей странийы и запуск новой і
і і страницы. і
і PAGE і Page: определение верхней и нижней границ страницы. і
і P і Paragraph: начать новую строку текущей колонки, і
і і пропустив 5 пробелов от начала строки. і
і PAUSE і Pause: приостановить печать до следующей команды і
і і оператора. і
АДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рисунок 11.RPF команды ( FR-PAUSE )
ЪДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і команда і описание і
ГДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і R і Right Justify: Переключатель выравнивания по правому по- і
і і лю всего текста текущей колонки. і
і RR і Ragged Right: задание невыровненного (с разной дли- і
і і ной ) правого поля і
і S і Skip: Пропустить описанное число строк і
і SP і Spacing: Описание расстояния между сроками і
і SPN і Start Page Numbering: Описывает страницы для нумерации і
і і CLOSED і
і T і Table: Ввод описанной таблицы в текущую і
і і колонку і
і TE і Table End: Закрытие таблицы и возврат в предыдущее і
і і описании колонки і
і TTL і Title: Описание заголовка,который надо сцентрировать і
і і в верху каждой страницы. і
і і CLOSED і
і TTLU і Title: Описание заголовка,который надо сцентрировать і
і і и подчеркнуть в верху каждой страницы. і
і і CLOSED і
і UL і Underline: подчеркивание последующего текста. і
і і CLOSED і
і VS і Vertical Spacing: Описание вертикальных промежутков і
і і для принтера Diablo і
АДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Рисунок 12.Команды RPF ( R-VS )
EAPN -Альтернативный N страницы
Команда APN описывает расположение,где д.б. напечатан
N страницы.Если печать производится на обе стороны листа,
то эта команда позволяет печатать N на внешнем крае стра-
ницы.Более подробно смотри в команде SPN.
EСинтаксис:F
E#APN E<позиция>
<EпозицияF> описывает абсолютную позицию,в которой будет
напечатан первый знак номера страницы.
EB-ПробелF
Команда В вставляет пустую строку и эквивалентна команде S 1.
Она воздействует на все колонки многоколоночной таблицы.
EСинтаксис:F
E#BPF
ECEN-ЦентрF
Команда CEN помещает описываемый текст в центр текущей колонки.
Центрирование происходит в новую строку и включает в себя все
слова,заключенные между командой и первым отдельным знаком
фунта (#) или точкой.Центрируемый текст должен умещаться в
строку текущей колонки.
EСинтаксис:F
E#CEN <текст>#F
<текст> набор слов которые д.б. отцентрированы.За-
метим,что при этом происходит стандартное форматирование;
несколько пробелов,знаки табуляции и прогона страницы игнори-
руются.
ECL - КОЛОНОЧНЫЙ ЛИТЕРАЛF
Команда CL описывает одну или более строк текста,которые нуж-
но выводить в текущую колонку без форматирования.Каждая стро-
ка будет выводиться на устройство вывода точно так же,как
она вводилась,включая пробелы,знаки табуляции и прогона
страницы.Длина каждой строки не должна превышать длины те-
кущей колонки.Эта команда закрывается одной точкой (.) или
знаком фунта (#),поставленным в первую позицию,или иначе
говоря,в начало пустой строки.Если команда CL не закрыта,то
последущие команды RPF будут восприниматься как текст.В ре-
зультате RPF быстро переполнит память и прервет программу.
Команда CL похожа команду С.
EСинтаксис:F
E#CLF
...
...
...
<строки текста>
...
...
E#F
<Eстроки текстаF> неформатируемые строки выводимого
текста.
ECS - Пропуск колонкиF
Команда CS вставляет описанное число строк в текущую колонку.
Эта команда не оказывает ни какого влияния на другие колонки.
Следущая диаграмма демонстрирует две пустые строки,вставлен-
ные во вторую колонку,при это пустые строки в колонках 1 и 3
отсутствуют.
колонка 1 колонка 2 колонка 3
текст текст текст текст текст текст текст
текст текст текст текст текст текст текст
текст текст текст текст
текст текст текст текст
текст текст текст текст текст текст текст
текст текст текст текст текст текст текст
EСинтаксис:F
E#CSF <ном.строк>
<Eном.строк> номера вставляемых пустых строк.
ECUL - Центрирование с подчеркиваниемF
Команда CUL подчеркивает описанный текст и центрирует его в
текущей колонке.Ценрирование начинается со следущей строки
и включает все слова между командой и первой не прикрепленной
точкой (.) или знаком фунта (#).Цетрируемый текст должен уме-
щаться в текущую колонку.
EСинтаксис:F
E#CULF <текст>
<EтекстF> набор слов которые следует сцентрировать и под-
черкнуть.Отметим,что выполняется стандартное
форматирование; несколько подряд пробелов,знаки
табуляции и прогона листа игнорируются.
EDT - Определение таблицыF
Команда DT описывает таблицы и их колонки.Эта команда не
вводит таблицы; смотри описание команды Т.
EСинтаксис:F
E#DTF <ид таблицы><нп1><кп1><нп2><кп2> ...<нпN><кпN>
<Eид таблицыF> число от 0 до 29,который индентифицирует табли-
цу.Описывая предыдущий индентификатор
<ид таблицы> вы замените новое описание преды-
дущим.В этом случае появится предупреждение.
<EнпNF><EкпNF> Это два числа,описывающих правую и левую
границы колонки:
<EнпNE> начальная позиция N-ой колонки по от-
ношению к первой позиции таблицы.
<EкпNE> конечная позиция N-ой колонки по от-
ношению к первой позиции таблицы.
Границы колонки включают в себя начальную и последнюю позиции.
Начальный N позиции колонки д.б. по крайней мере
быть на единицу номера конецной позиции предыдущей колонки.
В таблице д.б.описана по крайней мере одна колонка.
Если конечная позиция последней колонки равна нулю,это озна-
чает последнюю позицию колонки,в которую вводится таблица.
Команда DT закрывается точкой или знаком фунта.
Пример:
#EDT 1 12 24 32 48 F#
Эта команда описывает таблицу с индентификатором
1,содержащую две колонки.Первая располагается
с позиции 12 до позиции 24,и вторая с 32 по 48.
#EDT 2 5 0 #F
Единственная колонка таблицы Table 2 располага-
ется с позиции 5 до конца колонки,в которую
она вводится.
EF - РисункиF
Команда F резервирует описанные номера сраниц для рисунков,
схем и диаграмм.Если описанный N страницы используется,
то он опускается в выводимом документе.
EСинтаксис:F
E#FF <страница ном.1><страница ном.2> ...#
<Eстраница ном.1F> N страницы,который будет пропущен
в выводимом документе.
Эта команда закрывается одиночной точкой (.) или знаком фунта
(#).
EFR - Заполнение вправоF
Команда FR указывает на то,что последнее слово каждой строки
будет заканчиваться в последней позиции колонки.Дополнитель-
ные пробелы будут пропорционально заполнять строку.Эта коман-
да в RPF выполняется по умолчанию и используется если произво-
дилось выравнивание с помощью команд R и RR.
EСинтаксис:F
E#FRF
Существует 3 команды выравнивания для текста:
EFRF Заполнение вправо и влево до границ ( по умолчанию).
E RR F Невыравненная правая граница,выравнивание левого края.
E R F Выравнивание справа,не выравненный левый край.
Установки FR и RR взаимноисключающие.Установленная по умол-
чанию FR прекращается после ввода RR.Аналогично RR заканчива-
вается с вводом FR.Таким образом документ с выравненным ле-
вым краем и неровным правым может перейти в заполненный впра-
ва и обратно.
Команда R (выравнивание справа ) переустанавливает обе RR и
FR : если введена R,тогда FR и RR не имеют влияния.Команда
R закрывается повторным вводом R.
EHS - Горизонтальные промежуткиF
Команда HS устанавливает помежутки для принтера типа Diablo.
EСинтаксис:F
E#HSF <промежуток>
<EпромежутокF> число,которое при умножении на 1/60 дюйма
даст промежуток между знаками.Например,
значение 6 указывает что на дюйм прийдется
10 символов.
Замечание: Расстояние между словами меняется
и не контролируется пользователем,но будет
максимально близко к указанному.Кроме того
нажав соответствещие кнопки на принтере вы
можете утановить расстояние между словами.
По умолчанию принимается значение 6 или 10 символов на дюйм.
EI - ОтступF
Команда I вводит отступ в текущей колонке.Это наиболее
простой способ описания и ввода таблицы с одной колонкой.Эта
колонка начинаеется с описанного числа пробелов в текущей ко-
лонке и заполняется до ее конца.Например,E#I 5E# экви-
валентно вводу таблицы,определенной как #EDT 1 5 0F #.
Отступление прекращается,если встретится команда ТЕ.Данная
команда вводится по тем же правилам,что и при вводе таблиц.
EСинтаксис:F
E#IF <число пробелов>
<Eчисло пробеловF> число пробелов на которое будет ппро-
изводится отступление для последущего
текста.
EL - ЛитералF
Команда L описывает одну или более строчек текста,которые бу-
дут выводиться без форматирования,точно так так,как были
введены.Команды введенные в этот текст будут игнорироваться
и восприниматься как текст.Описания колонок и таблиц приоста-
навливают свое действие.Каждая выводимая строка начинается с
позиции 1 .Литерал это возможность,когда несколько пробе-
лов,знаки табуляции и прогона страницы м.б.непосредст-
венно в выводимый текст.Команды L и CL имеют одни и те же
функции.
Эти команды вводятся сами по себе,как показано ниже.Они
закрываются отдельной точкой (.) или знаком фунта(#),стоя-
щими в первой позиции.
EСинтаксис:F
E#LF
...
...
...
<текст>
...
...
...
#
<EтекстF> текст,который будет послан на устройство вывода
в таком виде,в каком был введен.
EN - Новая строкаF
Команда N начинает новую строку в текущей колонке.
EСинтаксис:F
E#NF
Отметим,что новая строка автоматически генерируется многими
командами RPF,включая Т,В и S.
ENC - Новая колонкаF
Команда NC закнчивает текуущую колонку и начинает новую.Если
текущей окажется последняя колонка таблицы,то последущей
будет первая колонка таблицы.
EСинтаксис:F
E#NCF
Если текущая колока содержит несколько строк,команда NC
поместит текст в верхнюю строку новой колонки.
Переход к первой колонки вызовет установку колоночных указа-
телей строк в строку,следущую после последней строки самой
длинной колонки.
ENP -Новая страницаF
Команда NP начинает новую строку.
EСинтаксис:F
E#NPF
Эта команда должна вводится в первой колонке строки.
EP - ПараграфE
Команда P начинает новую строку в текущей колонке и вставляет
5 пробелов в начало первой строки.
EСинтаксис:F
E#PF
EPAGE - СтраницаF
Команда PAGE описывает верхнее и нижнее поля страницы.
EСинтаксис:F
E#PAGEF <верхняя строка><нижняя строка>
<Eверхняя строкаF> число строк пропускаемых от начала
страницы перед выводом текста.
<Eнижняя строкаF> оипсывает N последней строки,в ко-
торую производится вывод текста.
Первая строка страницы имет N один.Когда страница запол-
нена,RPF автоматически переходит на новую страницу.
EPAUSE - ПаузаF
Команда PAUSE временно прекращает процесс,таким образом вы
имеете возможность поправить или заменить бумагу перед тем
как продолжить печать.Встретив эту команду RPF приостанавли-
вается и ждет ввода знака с терминала.Может быть введен любой
символ и печать продолжится.Введенный символ на печать не вы-
водится.
EСинтаксис:F
E#PAUSEF
Команда PAUSE эффективна только в том случае,если в команд-
ной сроке был введен переключатель W призапуске RPF.
ER - Выравнивание справаF
команда R выравнивает тескт спава в текущей колонке,оставляя
неровным левый край.Это очень удобно для составления колонок
чисел.По умолчанию выполняется выравнивание слева с заполне-
нием до правой границы.Отметим,что команда RR напротив
оставляет неровным правый край,но производит выравнивание
слева.Команда R действует до тех пор,пока не будет введена
новая команда R или не закончится таблица.Обратитесь к разде-
лу по FR за более полной информацией о выравнивании.
EСинтаксис:F
E#RF
ERR - Неровный правый крайF
Команда RR позволяет вам печатать с невыравненным правым кра-
ем в колонке (неровный правый край).Она действует только в
колонке,в которой введена.Чтобы вернуться к выравниванию
справа (установке по умолчанию ) используйте команду FR -
заполнение вправо.Отметим,что команда R напротив произво-
дит выравнивание справа,ставляя неровным левый край колонки.
Обратитесь к разделу по FR за более полной информацией о
выравнивании.
EСинтаксис:F
E#RRF
ES - ПропускE
Команда S пропускает описанное число строк.Эта команда д.б.
введена в первой колонке,так как она окажет влияние на
все колонки в строке.Если вы хотите пропустить строки только
в одной колонке,используйте команду CS.
EСинтаксис:F
E#SF <число строк>
<Eчисло строкF> число строк,которое необходимо пропус-
тить.
Следуемый за командой S текст будет размещаться в первую коло-
ку.
ESP - РасстояниеE
Команда SP управляет глобальным расстоянием между строками,
независимо от колонки.Ее дествие не ограничивается текущей
колонкой.ПО умолчанию оно равно единице.
EСинтаксис:F
E#SPE
<EnF> целое число от 1 до 4,указывающее на расстояние.
Например SP 3 описывает тройное расстояние.
Значение расстояния начинает оказывать действие сразу же и
до ввода новой команды SP.
ESPN - Начало нумерации страницF
Команда SPN описывает нумерацию страниц.Параметры используе-
мые с этой командой описывают начальный N нумерации,
тип нумерации и размещение номера на странице.Эта команда
должна размещаться в отдельной строке.
N страницы всегда печатается в первой печатаемой строке
страницы.Если необходимо кроме того напечатать и заголовок
страницы,то в первой печатаемой строке печатается N ,
а затем через пробел заголовок страницы.Далее пропускается
строка (генерируется командой SPN) и далее печатается выводи-
мый текст.
EСинтаксис:F
E#SPNF<тип><поз><проп лин><нач N ><выбр.
N >#
<EтипF> число 1,2,или 3,указывающее на тип нумерации как
1- нумерация станиц по разделу: Номер страницы
печатается в виде m-n,где m- N раздела и
n- N страницы.
2- нумерация страниц письма: Номер страницы печа-
таентся ввиде -n-,где n- N страницы.На
первой странице N не печатается.
3- нумерация страниц с точкой: Номер страницы пе-
чатается как n.,где n- N страницы.
4- Простая нумерация: Номер страницы печатается
просто как n.
<EпозF> начальная позиция,с которой будет печататься
N страницы.
<Eпроп линF> число строк,которое будет пропущено после
печати N а страницы.
<Eнач N F> N первой выводимой страницы
<Eвыбр N F> N раздела,если выбран тип печати номе-
ра страницы 1.Это параметр неверен для остальных
типов нумерации.
Например: #SP 1 70 4 1 2 #
Будет использована нумерация страниц по разделам,
начиная с 2-1 для раздела 2.Номер страницы будет
печататься в первой строке с позиции 70,и далее
будет пропущено 4 строки перед печатью текста.
EТ - ТаблицаF
Команда Т вводит описанную таблицу в текущую колонку.Границы
колонок таблицы отсчитываются относительно начала текущей
колонки.
EСинтаксис:F
E#TF<ид таблицы>
<Eид таблицыF> присвоенный при описании таблицы ее N .
Смотри раздел для команды DT.
Последущий текст будет помещаться в первую колонку введенной
таблицы.Переход в другие колонки осуществляется командой NC.
Таблица закрывается командой ТЕ.
ETE - Конец таблицыF
Команда ТЕ указывает на конец таблицы.ПРи закрытии таблицы
колонка,в которую вводилась таблица остается.Текст будет
размещаться с начала этой колонки.
EСинтаксис:F
E#TEF
ETTL - ЗаголовокF
Команда TTL задает центрирование заголовка в строке заданной
ширины вверху каждой страницы.
Форматирование заголовка производится независимо от текущей
таблицы.Необязательная вторая строка заголовка описывается
вставкой перед ней вертикальной черты (|) как разделителя,
и с пробелами с обеих сторон.Заголовок может длиной до
255 знаков.
Если необходимо напечатать и заголовок и N
страницы,то в первой печатаемой строке печатается N ,
а затем через пробел заголовок страницы.Далее пропускается
строка (генерируется командой SPN) и далее печатается выводи-
мый текст.
EСинтаксис:F
E#TTLF<заголовок 1>[ | <заголовок 2>] #
<EwF> ширина строки,в которой центрируется заголовок.
<Eзаголовок 1F> описание первой строки заголовка.
| <Eзаголовок 2F> описание необязатедьной второй строки за-
головка.Перед ним д.б.вертикальная
черта (|) и с обеих сторон д.б. про-
белы (т.е.он не должен следовать непосред-
ственно за вертикальной чертой).
ETTLU - Заголовок с подчеркиваниемF
Команда TTLU описывает заголовок,который будет центрироваться
и подчеркиваться вверху каждой страницы.ЕЕ синтаксис анологи-
чен команде TTL.
EUL - ПодчеркиваниеF
Команда UL вызывает подчеркивание текста.
EСинтаксис:F
E#ULF <текст> #
<EтекстF> текст,который надо подчеркнуть.
Подчеркивание закрывается отдельной точкой или знаком фунта.
EVS - Вертикальное расстояниеE
Команда VS устанавливает вертикальное расстояние для принтера
Diablo.
EСинтаксис:F
E#VSF <расстояние>
<EрасстояниеF> число,которое при умножении на 1/48 дюйма
определяет расстояние между строками.
Например значение 8 обеспечит расстояние
между строками 8/48 дюйма,или 6 строк на
дюйм.
По умолчанию принимается значение 8,т.е.6 строк на дюйм.
EВЫПОЛНЕНИЕ RPFF
Форматор отчетов (RPF) запускается с пользовательского терми-
нала.Вывод м.б.назначен в файл или на любой терми-
нал,или принтер.
Для запуска RPF введите следущую команду:
RPF <входной файл><выходной файл>[-switches]
<Eвходной файлF> имя входного текстового файла.
<Eвыходной файлF> имя выходного файла или устройства.
<EswitchesF> описание одного и более переключателей,управ-
ляющих выполнением RPF.
Вы можете выводить прямо на устройство используя переключа-
тель устройства или называя имя системного устройства.
EПереключатели RPFF
Можеть быть описаны один или более переключателей для управ-
ления RPF.Порядок описания не имеет значения и переключатели
могут вводиться как в нижнем,так и вверхнем регистре.Далее
следует описание каждого переключателя.
EA - Все полужирноF
Переключатель А приводит к печати всего текста полужирным
шрифтом; это поддерживается только для принтера Diablo.для
других типов принтеров этот переключатель игнорируется.Пере-
ключатель В,если данный переключатель используется,описывать
не надо.
EВ - ПолужирноF
Перключатель В приводит к печати подчеркнутого текста шрифтом
Bold.Он поддерживается только для принтера Diablo,для ос-
тальных принтеров переключатель игнорируется.
ED:D - Устройство является принтером типа DIabloF
Переключатель D:D описывает что используется принтер Diablo
и будут поддерживаться шрифт Bold и двунаправленная печать.
ED:V - Устройство VT100F
Данный переключатель указывает,что выводным устройством яв-
ляется терминал VT100 и выводит весь подчеркнутый текст с
видео-инверсией.Выходной файл создастся,но он будет пустым.
Если тип терминала не указан,текст выводится с подчеркивани-
ем.
EF - Прогон листаF
Переключатель F вызовет посылку знака прогона листа перед пе-
чатью новой страницы.Если он не используется,то вводятся
пустые строки для перехода на новую страницу.При вводе пустых
строк предполагается страница длиной в 66 строк.Если формат
другой,то следует использовать F.Этот переключатель игнори-
руется для терминалов,не поддерживающих знак прогона.
EI - Начальный прогон страницыF
Переключатель I производит прогон листа перед началом выво-
да.
EP:N:M - СтраницаF
Переключатель P:N:M печатает страницы из диапазона от n до m.
Например:
Р:5 - Печатает с пятой по последнюю страницу.
Р:5:7 - Печатает страницы 5,6 и 7.
Р:5:5 - Печатает только страницу 5.
ER - Изменение порядка подчеркиванияF
Не все устройства поддерживают двойные удары.По умолчанию
RPF сначала печатает знаки,таким образом в устройствах,
которые не поддерживают двойные удары,таким образом
подчеркивание не выполнится.Для изменения этой установки
принимаемой по умолчанию используйте переключатель R.
ES - Спулинг принтераF
Переключатель S автоматически направляет вывод на принтер.
EU - Верхний регистрF
Переключатель U выводит весь текст в верхнем регистре.
EW - Ожидание(пауза)F
Переключатель W приводит к приостановке печати в конце каждой
страницы,каждый раз при встрече команды PAUSE.Печать про-
должается при вводе знака.Вводимый символ не печатается.
Комбинации W и команды PAUSE позволяют вам печатать на корот-
ких листах,или производить переустановку принтера при печати.
Если переключатель W не введен,команды PAUSE будут игнори-
роваться.
Переключатель W оказывает возздействие только если в командной
строке описаны устройства D(Diablo) или V (VT100).В этом
случае будет выполняться пауза по каждой команде PAUSE в кон-
це каждой страницы,а в случае VT100 через каждые 24 строки.
+ W1EЧАСТЬ III:ГЕНЕРАТОР ОТЧЕТОВ - RPTFW0
EГЛАВА 4.ОБЗОР RPTF
EВВЕДЕНИЕF
ORACLE - генератор отчетов (RPT) позволяет вам извлечь данные
из БД и включить эту информацию в ваш отчет,коррес-
понденцию,и другие документы.RPT позволяет вам :
* использование SQL-запросов для поиска информации в БД ORACLE.
* использование описания форматов выводимых данных
* Соединение данных с командами RPF и текстом для получения
желаемого отчета
Программа генератора отчетов воспринимает и выполняет 'описа-
ние' отчета или иначе эта программа,которая может состоять
из операторов SQL*Report,команд RPF,и текста.Необходим
практический опыт работы с RPF,перед тем как начать работать
с RPT.
Этот раздел описывает операторы,необходимые для конструирова-
ния описания отчета.Вначале объясняется структура этого
описания,и затем приводится обсуждение каждого програмного
оператора.
EПРОЦЕСС ГЕНЕРАЦИИ ОТЧЕТАF
Программный файл,используемый для выборки данных из БД
может содержать текст отчета и команды RPF ( или
другие команды форматора) помимо операторов программы RPT.
RPT игнорирует текст и команды RPF и они копируются прямо
как введены в файл внутреннего вида.Тем не менее операторы
программы отчета воспринимаются и исполняются.
Основная цель программы отчета это выбрать информацию из
БД и правильно разместить ее в файле внутреннего вида.
Каждый кусок данных,который RPT помещает в файл внутреннего
вида,воспринимается RPF как слово.Этот файл затем будет
обработан утилитой RPF.
Подобным образом информация БД вводится в текст,
чтобы получить окончательный документ.Текст м.б.вклю-
чен в заголовки отчета и колонок,в описательную информацию
или имспользован в качестве основы генерируемой машиной кор-
респонденции.RPF команды могут управлять текстом и размеще-
нием данных,пробелами,подчеркиваниями,контролем полей
и нумерацией страниц.Любая правильная команда RPF допустима
в программе отчета.См.рис.1 на странице 5.
EВыполнение RPTF
Утилита RPT м.б.выполнена с вашего терминала или быть
включена в пакетную процедуру.Выполнение вызывается следу-
щей командой:
RPT <входной файл><выходной файл>[индентификатор пользователя/
пароль]
<входной файл> это имя,относящееся к файлу внутреннего вида,
содержащему программу отчета RPT.
<выходной файл> это имя создаваемого RPT файла внутреннего
вида и следовательно обрабатываемого RPT.
инд.пользователя/пароль - являются вашими индентификаторами и
паролем.Это параметр запрашивается для того чтобы проверить
доступ пользователя к выборке данных.
EСТРУКТУРА ОТЧЕТАF
Язык программирования для RPT похож на остальные языки про-
граммирования.Хотя ни каких явных деклараций на программ-
ные разделы не трубуется,приведенная логическая группиров-
ка программ будет полезной.Выделено 3 раздела программ
RPT:
* Раздел описания данных
* Раздел макроопределений
* Раздел процедур
Раздел описания данных содержит определения ваших локальных
переменных для временного хранения выборки из БД.
Могут также быть определены перемнные для счета,тотальных
переменных,и для временного хранения.
2 типа макросов м.б.описаны в разделе макроопре-
делений.Макрос SELECT используется для описания операторов
SQL SELECT.Процедурный макрос состоит из выполнимых опера-
торов RPT и похож на подпрограмму.
Раздел процедур состоит из выполняемых операторов RPT,которые
составляют основное тело программы отчета.В этом разделе
SELECT и процедурный макрос может выполняться как явно,так
и неявно.
Эти разделы чисто логические; не существует языковых операто-
ров определяющих начало или конец раздела.Нет ни каких
условностей на счет ограничений на расположение оператора RPT
внутри программы.Переменные однако д.б. прежде опреде-
лены чем использованы.Команды RPF и текст для отчета могут
вводится в программу в любом месте и будут скопированы в файл
внутреннего вида по мере выполнения программы.
Суммируя,для RPT применимы следущие положения:
* Основная задача RPT это скопировать RPF команды и пользова-
тельский текст в файл внутреннего вида,который будет обраба-
тываться RPF.Информация из БД м.б.включена
в этот файл с помощью команды PRINT.
* Программные переменные,процедурные макросы,макросы SELECT,
д.б. описаны до сносок на них.Макро-определения хранят-
ся в том виде,в котором они встретились,но не выполняются
до тех пор пока это не будет запрошено в явном или неявном
виде.
* Команды RPF и пользовательский м.б.описаны в любом
месте программы.
ERPT ВЕРСИЯ 5.1F
В этом разделе приведены изменения для RPT в версии 5.1.
EНовые командыF
К RPT добавлены 3 новые команды: TELL,COMMIT,ROLLBACK.
Они полностью задокументированы в Главе 6.
EСогласованное использование индентификаторовF
Все индентификаторы RPT ( имена макросов,имена переменных,
метки операторов ) используются одинаково.Индентификатор
удовлетворяет следущим правилам:
* Он должен состоять по крайней мере из одного символа,пер-
вой д.б.буква (A-Z,a-z).
* Регистр не имеет значения: "NAME","name","NaME" - все это
один и тот же инднтификатор.
* Значимыми являются только первые 30 символов,даже если
для документирования используется длиннее.Так :
very_long_ident_with_over_30_chars означает имя того же ин-
дентификатора,что и very_long_ident_with_over_30_characters
EСообщение об ошибочном использованииF
Все сообщения об ошибках выводятся на стандартный вывод.Сооб-
щение об ошибке состоит из описательного текста,номера ошибки
,номера строки файла,где встретилась ошибка и самой ошибоч-
ной строки.
EПредшедствующий синтаксический контрольF
RPT 5.1 просматривает весь входной файл на синтаксис до выпол-
нения его.Эсли при просмотре встретится ошибка,то никакого
отчета не выведется.Опция -X в командной строке заставляет
сгенерировать отчет даже в том случае,если встретятся синтак-
сические ошибки во входном файле.В этом случае при попытке
выполнить строку с ошибкой результатом будет "no-op" ( не
выполняется ни какой операции ),за исключением того что сге-
нерируется дополнительное сообщение об ошибке.
Некоторые синтаксические ошибки не м.б.выявлены при
просмотре.Например:
.if "&varl != TO_CHAR()" then label_1 else label_2
не будет определено ошибки до тех пор,пока оператор непосред-
ственно не будет исполнен.Как тоько определена ошибка,ге-
нерация отчета прекращается.
EВыражение INTO в RPTF
При использовании набора операций (UNION,INTERSECT,или
MINUS) в выражении выборки SQL только одно предложение INTO
м.б.включено.Предложение INTO должно следовать за
первым предложением выборки.Следущий пример будет работать
корректно:
.DECLARE enameORdname a30
.DECLARE deptno 9999
.DEFINE sell
SELECT ename,deptno INTO enameORdname,deptno
FROM emp
UNION
SELECT dname,deptno
FROM dept
..
.DEFINE body
.PRINT enameORdname deptno
..
.REPORT sell body
+ EГЛАВА 5.ПРИМЕРЫ RPTF
EПРИМЕР 1 - ШАБЛОННОЕ ПИСЬМОF
В этом раэделе демонстрируется каким образом операторы RPT
комбинируются из команды RPT и пользовательского текста в
полную программу отчета.Предполагается наличие практического
опыта : отдельные команды RPT не обсуждаются в этом разделе.
Обращайтесь к ЧАСТИ-II этого руководства за необходимыми
знаниями по RPF.
Чтобы помочь вам различать команды RPF и операторы RPT в
данном руководстве все команды RPF будут использоваться со
знаком фунта (#) и все операторы RPT с точкой (.).Оба
символа допустимы в RPF,но это разделение упростит чтение
и составление программ отчета.
Этот пример демонстрирует гибкость SQL*Report при создании
генерируемых машиной писем.Конкретный текст комбинируется
с информацией БД для создания полного документа.
Возможности SQL позволяют получать данные из БД;
команды RPF и операторы RPT позволяют вставить эти данные
в формат писма.
Давайте просмотрим несколько шаблонных файлов.Рисунок 13 на
странице 63 приводит окончательный вид письма,составленный
из данных таблиц EMP и DEPT.Программа отчета создавала доку-
менты адресованные различным пользователям.Имена пользовате-
лей выбирались из таблицы EMP,а N а,названия отделов по-
льзователей и адреса выбирались из таблицы DEPT.
Текущее жалование за 1985 и предполагаемое за 1986 включены
в документ.Эта информация была получена суммированием жа-
лования из таблицы ЕМР,относящихся к адресуемым отделам.
Эта информация различается в зависимости от пользователя,
которому предназначен документ.хотя этот документ достаточно
прост,он демонстрирует возможности SQL*Report комбинировать
и включать данные из различных таблиц БД в одно пись-
мо.
Рисунок 17 страницы 67 представляет диаграмму,демонстрирующую
структуру программы отчета.Используется единственный оператор
RPT с одним макросом .Оператор SELECT который генерирует от-
чет,соединяет таблицу ЕМР с таблицей DEPT,чтобы выбрать дан-
ные адресов.Второй оператор SELECT выполняется в явной форме
чтобы подсчитать текущее и предполагаемое жалование для
адресованных отделов.Листинг программы запуска отчета приве-
ден на рисунке 14 страницы 64.Номера строк и заголовок
добавлены после выполнения для вашего удобства.
Первый из 2 макросов SELECT,"seladdr",связывает таблицу
ЕМР с таблицей чтобы получить информацию об адресе.Второй
предикат в выражении WHERE ограничивает список адресов
именами менеджеров отдела.Макрос selsum использует арифме-
тические возможности SQL для подсчета текущей суммы и уве-
личенной на 10% для работников отдела управления(строка 44).
Оператор REPORT в 99 строке вызывает генерацию этого
набора документов.Описано только тело макроса "memobody".
Так как не было заголовка макроса,его тело будет выполнятся
прямо с первой строки.Структура тела аналогична примеру RPF
приведенному в ЧАСТИ II этого руководства.С текстом работает
оператор PRINT,который вставляет соответствущую информацию
БД в выходной документ.Оператор EXECUTE строки 78
выполняет selsum,для подсчета суммы жалования.Команда Р с
обратным слэшем и пробелом в строке 67 служит для выделения
авторского заголока подчеркиванием под его именем(\ ).
Каждый (\ ) вызывает печать дополнительного пробела.NP в
строке 55 вызывает печать каждой копии на отдельном листе.
Date : 25-MAR-85
To: BLAKE
Department : 30 - SALES
Location : PARIS
From : Bill James
Director of Perconnel
Subj : 1986 Employee Compensation Plan
It's butget time again.To aid you in completing the
salary portion of your budget I have computed your
department's current salary expenses.For planning
purposes we are presently estimating an across the
board increase of 10% in the 1986 salary pool.
Your department's 1985 figure is: $140,430.00
Estimated 1986 figure is: $154,473.0
IN completing your salary plan you should break this
total down by individual employees.Please let me know
if you have any questions on this or related issues.
Bill
Рисунок 13.пример 1 - выходной файл шаблонного письма
001: .REM***************************************************************
002: .REM SAMPLE REPORT 1 ---- GENERATED LETTER **
003: .REM***************************************************************
004: .REM
005: .REM This sample demonstrates the capability to create a computer
006: .REM generated letter or memorandum.Information from the databasе
007: .REM is combined with the predefined text to form the completed
008: .REM letter.A REPORT statement is used to drive the generation of
009: .REM multiple letters,each with a different addressee and variable
010: .REM data.
011: .REM****************************************************************
012: .REM
013: .REM D E C L A R E V A R I A B L E S
014: .REM
015: .DATABASE personnel
016: .DECLARE addressee a10
017: .DECLARE deptno 999
018: .DECLARE dname a15
019: .DECLARE location a15
020: .DECLARE curdate a9
021: .REM Set the variable 'curdate' equal to today's date
022: .REM
023: .DECLARE sumsal $999,999.99
024: .DECLARE sumsal+ $999,999.99
025: .REM ***************************************************************
026: .REM
027: .REM D e f i n e S E L E C T Macros
028: .REM
029: .REM ***************************************************************
030: .REM
031: .REM Select Managers and their Departments
032: .REM
033: .DEFINE seladdr
034: SELECT emp.ename,dept.deptno,dept.dname,dept.loc,sysdate
035: INTO addressee,deptno,dname,location,curdata
036: FROM emp,dept
036: WHERE emp.deptno=dept.deptno
038: AND job = 'MANAGER'
039: ...
Рисунок 14.Пример 1 - программа шаблонного письма (часть 1)
040: .REM
041: .REM Select Depatment's Current Payroll
042: .REM
043: .DEFINE selsum
044: SELECT sum(sal*12),sum((sal*1.1)*12)
045: INTO sumsal,sumsal+
046: FROM emp
047: WTERE deptno = &deptno
048: ...
049: .REM ************************************************************
050: .REM
051: .REM D e f i n e P r o c e d u r a l M a c r o s
052: .REM
053: .REM ************************************************************
054: .DEFINE memobody
055: #NP
056: Date :
057: .PRINT curdate
058: #S 2
059: To:
060: .PRINT addressee
061: #B Departament :
062: .PRINT deptno
063: -
064: .PRINT dname
065: #B Location :
066: PRINT location
067: #S 2 From : Bill James #P \\ Director of Personnel
068: #S 2 Subj : 1986 Employee Compensation Plan
069: #S 2
070: It's butget time again.To aid you in completing the salaryportion
071: of your budget I have computed your department's current salary
072: expenses.For planning purposes we are presently estimating an
073: across the board increase of 10% in hte 1986 salary pool.
074: #S 2
075: .REM
Рисунок 15.Пример 1 - программа шаблонного письма(часть 2)
076: .REM S E L E C T Departament's Salary Total
077: .REM
078: .EXECUTE selsum
079: #i 10 Your deartment's 1985 figure is:
080: .PRINT sumsal
081: #B Estimated 1986 figure is:
082: .PRINT sumsal+
083: #S 3
084: #TE
085: In completing your salary plan you should break this total down
086: by individual employees.Please let me know if you have any
087: questions on this or related issues.
088: #S 3
089: Bill
090: ..
091: .REM ****************************************************************
092: .REM
093: .REM P R O C E D U R E S E C T I O N
094: .REM
095: .REM ****************************************************************
096: #DT 1 13 73 #
097: #T 1
098: #PAGE 8 56
099: .REPORT seladdr memobody
100: .STOP
Рисунок 16.пример 1 - программа шаблонного письма (3-3)
.REPORT -----------
/ \
/ "seladdr" \
\ /
\ /
-----------
body і
+---------------+
і "memobody" і
+---------------+
і
-------------
/ \
/ "selsum" \
\ /
\ /
--------------
Рисунок 17.Пример 1 - cтруктура прграммы шаблонного письма
EПРИМЕР 2 - ТАБЛИЧНЫЙ ОТЧЕТF
В этом разделе мы изучим создание табличного отчета.Давайте
рассмотрим шаблонный файл,приведенный на последущей странице.
Рисунок 18 на странице 71 является листингом простого таблич-
ного отчета.Данные для этого отчета выбираются из таблицы
ЕМР демонстрационной БД ORACLE,имя пользователя -
SCOTT.Листинг пррограммы отчета,генерирующей этот отчет
приведен на рисунке 19 страницы 72 и рисунке 21 страницы 74.
( Номера строк и заголовки добавлены после ее выполнения для
удобства чтения).
EПрограмма отчетаF
Базисная структура этого отчета приведена на рисунке 24 стра-
ницы 77.Оператор REPORT осуществляет выборку данных и
выполнение заголовка,тела и конца макроса.SQL-запрос,
описанный макроопределением "selemp" (строки с 38 по 42 ри-
сунка 19 на странице 72 ),осуществляет выборку всех
колонок из всех строк таблицы ЕМР.Далее мы рассмотрим
макрос,используемый для вывода и форматирования этих данных.
Определения таблиц RPF используемые для форматирования вывода,
расположены в строках с 7 до 12.Данные каждой строки таблицы
д.б. отформатированы в шесть( описываемых таблицей
Table 2) колонок.Строки с 14 по 22 содержат команды RPF,
описывающие эти таблицы и заголовки отчетов .Эти команды
также можно было поставить после программных операторов
DEFINE и DECLARE.
Описывая "0" в форматирующем определении в "empno",мы выведем
на печать все значимые нули.Не забудте что,в дополнение к
формату печати,декларированные форматы описывают максимальное
значение переменной.Так например "sal" (см.строку 31) может
иметь максимальное значение 99,999.99,и значение 100,000.00
вызовет переполнение этой переменной.При печати переполненной
переменной выводится знак # во всех позициях."B" в строке
33 приводит к печати пробела вместо нулевых значений.Любая
переменная со значением NULL будет печататься как пробел.
Макрос "selemp" SELECT описывает SQL- запрос который генери-
рует данный отчет.Выражение INTO индентифицирует программные
переменные,которые приобретут значения колонок,перчисленных
в SELECT.Существует однозначное соответствие между каждой
колонкой и ассоциируемой с ней программной переменой.Имена
переменной и колонки не должны совпадать.
Строки с 43 по 83 описывают заголовок,тело и конец процедур-
ного макроса,который д.б. неявно выполнен в результате
выполнения оператора REPORT в строке 89.
Заголовок макроса по имени "head" выполняется только один раз
при запросе первой строки.Таблица Table 2 вводится для того,
чтобы установить печать в 6 колонок.Команды RPF и пользо-
вательский текст включены в строки с 67 по 74 чтобы напечатать
заголовки колонок.
Отметим команду R,устанавливающую выравнивание справа в ко-
лонках EMPNO,SALARY,COMMISSION и DNO.Введена пустая строка
и далее непосредственно выполняется тело макроса (строка 76).
Это выводит на печать первую строку.Если этот шаг опустить,
то первая строка "потеряется".
Тело макроса "body" выполняется неявно в строках со второй до
последней.Оператор PRINT вводит текущие значение программных
переменных в выходной файл внутреннего вида.Рисунок 22 явля-
ется частью листинга этого файла.Команда NC вводит информа-
цию для строк в соответствущие колонки.Обратите внимание на
то,какая информация из БД обрабатывается командами
RPF.
После выполнения последней строки запроса выполняется конец
макроса ( строки с 81 по 85 ).В данном примере конец просто
закрывает таблицу Table 2 и печатает "END OF REPORT".
После оператора REPORT в процедурном разделе следуют команда
ТЕ,закрывающая таблицу Table 1,и оператор STOP,закрыавю-
щий программу отчета.Оператор STOP является необязательным
и,если он опущен,программа закончится после последнего
оператора.Если STOP включена в программу,то на печать вы-
водится сообщение об окончании выполнения.
EВыполнение программы отчетаF
Процесс генерации отчета осуществляется в два шага.Данный от-
чет был сгенерирован с помощью следущих двух системных команд:
EШаг 1 - выполнение RPTF
RPT SAMP1.RPT2 SAMP1.RPF SCOTT/TIGER
Здесь SAMP1 RPT2 имя файла с вводимым в отчет текстом,и
SAMP1.RPF файл внутреннего вида,который создан
утилитой RPT.SCOTT/TIGER - пользовательские индентификатор
и пароль.
EШаг 2 - Выполнение RPFF
>RPF SAMP1 LP:
Здесь "LP" - системное имя устройства вывода.Вывод может
быть адресован на системное устройство или в файл.Входным
файлом является файл,созданный RPT в предыдущем шаге.Так
как расширение имени файла опущено,RPF по умолчанию назначает
"RPF",т.е.полное имя воспринялось как SAMP1.RPF.
T E C H N O L O G Y S Y S T E M S, I N C
PERSONNEL REPORT FOR SEPTEMBER,1985
EMPNO NAME JOB SALARY COMMISSION DNO
----- ---- --- ------ ---------- ---
7369 SMITH CLERK $800.00 20
7499 ALLEN SALESMAN $1,600.00 $300.00 30
7521 WARD SALESMAN $1,250.00 $500.00 30
7566 JONES MANAGER $2,975.00 20
7654 MARTIN SALESMAN $1,250.00 $1,400.00 30
7698 BLAKE MANAGER $2,850.00 30
7782 CLARK MANAGER $2,450.00 10
7788 SCOTT ANALIST $3,000.00 20
7839 OATES PRESIDENT $5,000.00 10
7844 TURNER SALESMAN $1,500.00 30
7876 ADAMS CLERK $1,100.00 20
7900 JAMES CLERK $950.00 30
7902 FORD ANALYST $3,000.00 20
7934 MILLER CLERK $1,300.00 10
END OF REPORT
Рисунок 18.пример 2 - выходной файл табличного отчета
1: .REM *****************************************************************
2: .REM ******* SAMPLE REPORT 2 ----- SIMPLE TABULAR REPORT ************
3: .REM *****************************************************************
4: .REM
5: .REM ******* Define RPF Ttables --- Print Title ************
6: .REM
7: .REM " T a b l e 1 "
8: .REM +---------------------------------------------------------------+
9: .REM 4 76
10: .REM " T a b l e 2 "
11: .REM +---+ +---------+ +---------+ +--------+ +---------+ +---+
12: .REM 1 5 10 20 25 35 40 50 55 65 67 0
13: .REM
14: #DT 1 4 76 #
15: #DT 2 1 5 10 20 25 35 40 50 55 65 67 0 #
16: #T 1
17: #PAGE 6 58
18: #S 3
19: #CUL T E C H N O L O G Y \\ S Y S T E M S,\\ I N C #
20: #S 3
21: #CUL PERSONNEL REPORT FOR SEPTEMBER,1985 #
22: #S 3
23: .REM
24: .REM ******* Declare Program Variables ***************
25: .REM
26: .REM
27: .REM ******* Print all positions of empno - ie.0682 ***************
28: .DECLARE empno 0999
29: .DECLARE ename a10
30: .DECLARE job a10
31: .DECLARE sal $99,999.99
32: .REM ******* Print 'comm' as blank if value is zero ***************
33: .DECLARE comm $B99,999.99
34: .DECLARE deptno 99
35: .REM
Рисунок 19.пример 2 - листинг программы табличного отчета (3-1)
36: .REM ******* Define SELECT Macro ****************
37: .REM
38: .DEFINE selemp
39: SELECT empno,ename,job,sal,comm,deptno
40: . INTO empno,ename,job,sal,comm,depfno
41: . FROM emp
42: ..
43: .REM
44: .REM ******* Define BODY Macro *****************
45: .REM
46: .DEFINE body
47: .REM *** Print each column variable -- Advance to next column ******
48: .PRINT empno
49: #NC
50: .PRINT ename
51: #NC
52: .PRINT job
53: #NC
54: .PRINT sal
55: #NC
56: .PRINT comm
57: #NC
58: .PRINT deptno
59: #NC
60: ..
61: .REM
Рисунок 20.пример 2 - листинг программы табличного отчета (3-2)
62: .REM ******* Define HEAD Macro *******************
63: .REM
64: .DEFINE head
65: .REM *** Invoke "Table 2" - Report Column Layout ****
66: #T 2
67: .REM ******** Print Column Headings *****************
68: #r EMPNO #N ----- #NC
69: NAME #N ---- #NC
70: JOB #N --- #NC
71: #R SALARY #N ------ #NC
72: #R COMMISSION #N ---------- #NC
73: #R DNO #N --- #NC
74: #B
75: .REM ******** Execute body macro to print first row *********
76: .body
77: ..
78: .REM
79: .REM ******* Define Foot Macro *********************
80: .REM
81: .DEFINE foot
82: #TE
83: #S 4
84: #CUL END OF REPORT #
85: ..
86: .REM
87: .REM ******* Procedure Section --- Generate Report ***************
88: .REM
89: .REPORT selemp body head foot
90: #TE
91: .STOP
Рисунок 21.пример 2 - листинг программы табличного отчета (3-3)
#DT 1 4 76 #
#DT 2 1 5 10 20 25 35 40 50 55 65 67 0 #
#T 1
#PAGE 6 58
#S 3
#CUL T E C H N O L O G Y \ \ S Y T E M S,\ \ I N C #
#S 3
#CUL PERSONNEL REPORT FOR SEPTEMBER,1985 #
#S 3
#T 2
#R EMPNO #N ----- #N
NAME #N ---- #NC
JOB #N --- #NC
#R SALARY #N ------ #NC
#R COMMISSION #N ---------- #N
#R DNO #N ---#NC
#B
7369
#NC
SMITH
#NC
CLERK
#NC
$800.00
#NC
Рисунок 22.пример 2 - файл внутреннего представления составного
табличного отчета (2-1)
#NC
20
#NC
7499
#NC
ALLEN
#NC
SALESMAN
#NC
$1,600.00
#NC
$300.00
#NC
30
#NC
7521
#NC
WARD
#NC
SALESMAN
#NC
$1,250.00
#NC
( Далее продолжается подобным образом вывод до конца отчета.
Заметим,что этот файл внутреннего образа м.б.исполь-
зован только для работы с формирователем текстов RPF ).
Рисунок 23.пример 2 - файл внутреннего представления составного
табличного отчета (2-2)
.REPORT -------------
/ "selemp" \
\ /
-------------
head body і foot
+----------------+ +----------------+ +----------------+
і "head" і і "body" і і "foot" і
+----------------+ +----------------+ +----------------+
.REPORT selemp body head foot
Рисунок 24.пример 2 - структура программы табличного отчета
EПРИМЕР 3 - СОСТАВНОЙ ОТЧЕТF
EСоставной отчетF это такой отчет,в котором второй отчет
содержится в заголовке,теле макроса или окончании первичного
отчета.Посмотрите на пример на рисунке 25 страницы 81 и рису-
нок 26 на странице 82.Здесь первичный или "внешний" отчет со-
держит список имен отделов и их N а в подразделении.Затем
для каждого выбранного отдела выполняется второй отчет,кото-
рый содержит список сотрудников отдела.И в конце выводится
жалование всего отдела.
Блок-схема этого примера приведена на рисунке 34 на странице
90.Внутренний отчет,который содержит перечень информации о
о сотрудниках,выполняется в явной форме внутри тела
макроса внешнего отчета об отделе.Относящиеся к внутреннему
отчету заголовок,тело и окончание помечаются соответственно
как "emphead","empbody","empfoot".Заметьте,что в "empfoot"
макроса в явной форме выполняются два новых макроса.SELECT
макроса "deptsum" использует SQL-запрос для подсчета суммар-
ного жалования.Процедурный макрос "compsum" добавляет сумму
к отчету об отделе.Итог по всему подразделению генерируется
макросом "deptfoot" после информации по отделам.Отметим,что
все SELECT и процедурные макросы закрываются двумя точками
(..).
Начало листинга программы данного примера приведен на стра-
нице 83 на рисунке 27.Номера строк и заголовок добавлены
после выполнения программы для вашего удобства.Данные для
этого отчета получены из таблиц DEPT и ЕМР БД
PERSONNEL (срока 16).
Этот отчет содержит три макроса SELECT: "seldept","selemp",
и "deptsum".Макрос "selemp" ( строки с 42 по 46) заставляют
внешний отчет запрашивать имя и N каждого отдела из таб-
лицы DEPT.Отсутствие предложения WHERE приводит к выдаче
всех строк.Макрос "selemp" создает внутренний отчет,кото-
рый выводит информацию о всех сотрудниках отдела.Подста-
новка переменной "&deptno" вызывает подстановку текущего
значения программной переменной в предложение
WHERE.
Пятое значение в списке SELECT (строка 51) это подсчитанное
годовое вознаграждение.Для колонки "comm" требуется нуле-
вая функция,так как все сотрудники кроме продавца не име-
ют комиссионных.Если опустить "nlv",то у всех не продавцов
годовое вознаграждение будет равняться 0 и будет выво-
диться пробел.
Макрос SELECT в "deptsum" выполняется в явном виде в окончании
внутреннего отчета.После того,как все сотрудники отдела
перечислены,этот запрос использует встроенные функции SQL для
подсчета минимума,максимума,среднего и общей суммы для рас-
сматриваемого отдела.Этот подсчет требует нового просмотра
данных.
Альтернативный подход заключается в накоплении данных в пере-
менных и затем в подсчете сумм при помощи математических функ-
ций RPT.Эта технология использовалась в Обобщении по Подраз-
делению,приведенном на второй странице отчета.Однако,вместо
подсчета по каждому сотруднику использовались суммарные дан-
ные по отделам.
Этот выбор был сделан для упрощения выполнения при помощи
уменьшения числа обращений к выполнению макроса "compsum"
В большинстве случаев разница не значительна.Для анализа
максимального и минимального значений жалования требуется
два оператора IF.Как было показано в разделе "Управляющая
строка с оператором IF",выполнение оператора IF довольно вре-
меемкая операция и следовательно следует минимизировать его
использование.
Процедурный макрос "depthead" включен только по той причине,
что внешнему отчету необходим макрос "foot".Так как процедур-
ный макрос для оператора REPORT (строка 241) описан позицион-
но,имя макроса "head" должно располагаться ранее имени
"foot".Явное выполнение макроса "deptbody" тела приводит
к выполнению первой строки.
Тело отчета об отделе содержит имя,номер отдела и затем вы-
полняется отчет по каждому сотруднику (строка 102).В конце
отчета об отделе вычисляется усредненная компенсация (строка
112).Заголовок для всего подразделения формируется строками
с 121 по 124.Строка 121 не выводит никакого текста и служит
для вставки одной пустой строки.Команда R выполняется для
каждой колонки и производит выравнивание справа.
Макрос заголовка отчета по отдельному сотруднику ("emphead")
печатает шапку данного внутреннего отчета и производит вырав-
нивание в выводимых колонках (строка 150).И снова необходимо
явное выполнение тела для выполнения с первой строки.Тело
"body" выводит в колонку встретившиеся данные,и "foot" осу-
ществляет подсчет и выводит окончательную информацию об отде-
ле.
Переменная "compsum" используется в операторе ADD для накопле-
ния суммы компенсации и общего числа сотрудников.Оператор
IF сравнивает текущее значение максимального и минимального
жалования по отделу с теми же значениями для всего подразделе-
ния.Так как в выражения включены пробелы,они д.б.
заключены в двойные кавычки (").Если значения мини-
мума и максимума Eне обновляютсяF тогда значение логичес-
кого выражения EtrueF и переход на метку макроса,описан-
ную после выражения THEN,игнорируется.Так как описан опера-
тор ELSE,то будут выполняться описанные в нем действия при
значении EfalseF.Оператор EQUAL устанавливает значения
переменных для подразделения равными значениям для отдела.
Строка 211 заканчивает описания макросов и начинает Процедур-
ный раздел программы отчета.Как описано в строках с 220 по
223,для этого отчета требуются четыре таблицы.Таблицы 2,3
и 4 вводятся внутри таблицы Table 1 в различных местах отче-
та.Команда SPN (строка 225) вызывает нумерацию строк.
Выбран формат Type 2 (из Letter Page Numbering) чтобы печать
начиналась с позиции 42.После N а страницы будет пропущено
две строки.Нумерация начнется с "1",однако благодаря Type2
нумератора страниц,начнется нумерация не с самой первой стра-
ницы.
Оператор SET ( строки 236 и 237) инициализирует минимальное
и максимальное значения жалования по подразделению.Оператор
REPORT выполняет внешний отчет,который вызывает всю програм-
му.
D i v i s i o n P a y r o l l R e p o r t
by Department
**************************************************************************
DEPTNO: 010 - - DEPTNAME: ADMINISTRATION
**************************************************************************
EMPNO NAME MONTHLY COMM ANNUAL
SALARY COMPENSATION
----- --------------- -------- -------- ------------
7782 CLARK $3162.50 $37,950.00
7934 MILLER $1300.00 $15,600.00
7839 OATES $5750.00 $69,000.00
Department Summary ------------
AVG = $3,404.17 MIN = $1,300.00 MAX = $5,750.00 $122,550.00
**************************************************************************
DEPTNO: 020 - - DEPTNAME: RESEARCH
**************************************************************************
EMPNO NAME MONTHLY COOM ANNUAL
SALARY COMPENSATION
----- --------------- -------- -------- ------------
7369 SMITH $800.00 $9,600.00
7566 JONES $3421.25 $41,055.00
7876 ADAMS $1100.00 $13,200.00
7788 SCOTT $3000.00 $36,000.00
7955 WILSON
7956 JAKES $1000.00 $12,000.00
Department Summary -------------
AVG = $2,053.54 MIN = $800.00 MAX = $3/421.25 $147,855.00
Рисунок 25.пример 3 - выходной файл составного отчета (2-1)
**************************************************************************
DEPTNO: 030 - - DEPTNAME: SALES
**************************************************************************
EMPNO NAME MONTHLY COMM ANNUAL
SALARY COMPENSATION
----- --------------- -------- -------- ------------
7499 ALLEN $1600.00 $300.00 $19,500.00
7521 WARD $1437.50 $500.00 $17,750.00
7698 BLAKE $3277.50 $39,330.00
7654 MARTIN $1437.50 $1400.00 $18,650.00
7844 TURNER $1500.00 $0.00 $18,000.00
7900 JAMES $950.00 $11,400.00
7989 CARTER $1500.00 $0.00 $18,000.00
Department Summary ------------
AVG = $1,671.79 MIN = $950.00 MAX = $3,277.50 $142,630.00
**************************************************************************
DEPTNO: 040 - - DEPTNAME: OPERATIONS
**************************************************************************
MINIMUM MAXIMUM AVERAGE TOTAL
SALARY SALARY COMPENSATION COMPENSATION
------- -------- ------------ ------------
$800.00 $5,750.00 $25,814.69 $413,035.00
E n d O f R e p o r t
Рисунок 26.пример 3 - выходной файл составного отчета (2-2)
001: .REM ****************************************************************
002: .REM SAMPLE REPORT 3 -- NESTED REPORT
003: .REM ****************************************************************
004: .REM This sample demonstrates the capability to nest a report
005: .REM within the head,body or foot of another report.In this
006: .REM example the "payroll" status for each department within a
007: .REM devision will be reported.The compensation for each employee
008: .REM is listed,followed by the department's summary information.
009: .REM At the end of the report the entire devision's summary
010: .REM information is reported.
012: .REM ****************************************************************
014: .REM D e c l a r e V a r a i b l e s
015: .REM
016: .DATABASE personnel
017: .DECLARE deptno 000
018: .DECLARE dname a15
019: .DECLARE empno 0999
020: .DECLARE ename a15
021: .DECLARE monsal $9999.99
022: .DECLARE comm $9999.99
023: .DECLARE annsal $99,999.99
024: .DECLARE deptsum $999,999.99
025: .DECLARE deptmin $9,999.99
026: .DECLARE deptmax $9,999.99
027: .DECLARE deptavg $9,999.99
028: .DECLARE deptcnt 9999
029: .DECLARE divsum $999,999.99
030: .DECLARE divavg $99,999.99
031: .DECLARE divmin $9,999.99
032: .DECLARE divmax $9,999.99
033: .DECLARE empcnt 9999
Рисунок 27.листинг программы составного отчета (7-1)
034: .REM ****************************************************************
035: .REM
036: .REM D e f i n e S E L E C T M a c r o s
037: .REM
038: .REM ****************************************************************
039: .REM
040: .REM Select Department Information
041: .REM
042: .DEFINE seldept
043: SELECT deptno,dname
044: INTO deptno,dname
045: FROM dept
046: ..
047: .REM
048: .REM Select Employee Data Within a Department
049: .REM
050: .DEFINE selemp
051: SELECT empno,ename,sal,comm,(sal*12 + nvl(comm,0))
052: INTO empno,ename,monsal,comm,annsal
053: FROM emp
054: WHERE deptno = &deptno
055: ..
056: .REM
057: .REM Select Department Summary Information
058: .REM
059: .DEFINE deptsum
060: SELECT count(sal),min(sal),max(sal),avg(sal),sum(sal*12+nvl(comm,
061: INTO deptcnt,deptmin,deptmax,deptavg,deptsum
062: FROM emp
063: WHERE deptno = &deptno
064: ..
Рисунок 28: листинг программы составного отчета (7-2)
065: .REM ****************************************************************
066: .REM
067: .REM D e f i n e P r o c e d u r a l M a c r o s
068: .REM
069: .REM ****************************************************************
070: .REM
071: .REM D e v i s i o n R e p o r t " H e a d "
072: .REM
073: .DEFINE depthead
074: .REM This head macro just processes the first row of
075: .REM Department report.It is recuired only because a foot
076: .REM is specified on the REPORT statement.
077: .deptbody
078: ..
079: .REM
080: .REM D E P A R T M E N T R e p o r t " B o d y "
081: .REM
082: .DEFINE deptbody
083: .REM
084: .REM E x e c u t e E m p l o y e e R e p o r t
085: .REM
086: .REM P r i n t H e a d i n g F o r D e p t
087: .REM
088: #S 2
089: #CUL *******************************************************#
090: #B
091: #cen
092: DEPTNO:
093: .PRINT deptno
094: - - DEPTNAME:
095: .PRINT dname
096: #
097: #B
098: #CUL *******************************************************#
099: #S 2
Рисунок 29.листинг программы составного отчета (7-3)
100: .REM Report Each Employee within the current Department
101: .REM
102: .REPORT selemp empbody emphead empfoot
103: ..
104: .REM
105: .REM D E P A R T M E N T R e p o r t " F o o t "
106: .REM
107: .DEFINE deptfoot
108: .REM Compute Division summary information
109: .REM
110: .REM Compute "Average Monthly Salary"
111: .REM
112: .DIV divaving divsum empcnt
113: .REM
114: .REM Output: Maximum and Minimum Salary
115: .REM Average and Total Yearly Compensation
116: .REM
117: #NP
118: #CUL D i v i s i o n \ T o t a l s #
119: #S 1
120: #T 4
121: #R #NC #R #NC #R #NC #R #NC
122: MINIMUM #NC MAXIMUM #NC AVERAGE #NC TOTAL #NC
123: SALARY #NC SALARY #NC COMPENSATION #NC COMPENSATION #NC
124: ------- #NC -------- #NC ------------ #NC ------------ #NC
125: .PRINT divmin
126: #NC
127: .PRINT divmax
128: #NC
129: .PRINT divavg
130: #NC
131: .PRINT divsum
132: #TE
133: #S 2
134: #CUL E n d \ Of \ Report #
135: #TE
136: ..
Рисунок 30.листинг программы составного отчета (7-4)
137: .REM ****************************************************************
138: .REM
139: .REM E M P L O Y E E "H e a d" M a c r o
140: .REM
141: .DEFINE emphead
142: #T 2
143: #S 1
144: EMPNO #NC #cen NAME # #NC MONTHLY #NC COMM #NC ANNUAL #NC
145: #NC #NC SALARY #NC #NC COMPENSATION #NC
146: ----- #NC --------------- #NC -------- #NC -----------#NC
147: ------------- #NC
148: .REM Set-up Right/Left Justification Switches
149: .REM Insert One Blank Line
150: #NC #NC #R #NC #R #NC #R #NC
151: .REM
152: .REM Execute 'Body' Macro to Process First Row
153: .empbody
154: ..
155: .REM
156: .REM E M P L O Y E E R e p o r t " B o d y "
157: .REM
158: .DEFINE empbody
159: .PRINT empno
160: #NC
161: PRINT ename
162: #NC
163: .PRINT monsal
164: #NC
165: .PRINT comm
166: #NC
167: .PRINT annsal
168: #NC
169: ..
170: .REM
Рисунок 31.листинг программы составного отчета (7-5)
171: .REM E M P L O Y E E R e p o r t " F o o t "
172: .REM
173: .DEFINE empfoot
174: .REM
175: .REM Comute Department Summary Information
176: .REM
177: .EXECUTE deptsum
178: #TE
179: #T 3
180: #S 2
181: #CUL Department Summary # #NC ---------------- #NC
182: #S 1
183: \ AVG =
184: .PRYNT deptavg
185: \ MIN =
186: .PRINT deptmin
187: \ MAX =
188: .PRINT deptmax
189: #NC #R
190: .PRINT deptsum
191: #TE
192: .REM Execute macro to compute division totals
193: .compsum
194: ..
195: .REM ****************************************************************
197: .REM C o m p u t e D i v i s i o n T o t a l s
199: .DEFINE compsum
200: .ADD empcnt empcnt deptcnt
201: .ADD divsum divsum deptsum
202: .IF "&deptmax <= &divmax" THEN comp10
203: .REM S e t N e w M a x i m u m
204: .EQUAL divmax deptmax
205: .&comp10
206: .IF "&deptmin >= &divmin" THEN comp20
207: .REM S e t N e w M i n i m u m
208: .EQUAL divmin deptmin
209: .&comp20
Рисунок 32.листинг программы составного отчета (7-6)
211: .REM
212: .REM ****************************************************************
213: .REM
214: .REM
215: .REM R e p o r t : M a i n S e c t i o n
216: .REM
217: .REM
218: .REM D e f i n e " R P F " C o m m a n d s
219: .REM
220: #DT 1 10 75 #
221: #DT 2 5 9 13 27 31 38 42 49 55 0 #
222: #DT 3 1 51 55 0 #
223: #DT 4 1 9 12 20 23 37 47 0 #
224: #PAGE 6 58
225: #Spn 2 42 2 1
226: #Sp 1
227: .REM E x e c u t e D i v i s i o n R e p o r t
228: .REM Print Report Title
229: #T 1
230: #S 4
231: #CUL D i v i s i o n \ P a y r o l l \ R e p o r t #
232: #S 2
233: #CUL by Department #
234: .REM Initialize Division Minimum and Maximum Values
235: .REM Highest value for Minimum; Lowest Value for Maximum
236: .SET divmin 9999.99
237: .SET divmax 0
238: .REPORT seldept deptbody depthead deptfoot
239: .STOP
Рисунок 33.листинг программы составного отчета (7-7)
.REPORT -----------
/ "seldept" \
\ /
-----------
head body і foot
+----------------+ +----------------+ +----------------+
і "depthead" і і "deptbody" і і "deptfoot" і
+----------------+ +----------------+ +----------------+
і
.REPORT -----------
/ "selemp" \
\ /
-----------
head body і foot
+----------------+ +---------------+ +----------------+
і "emphead" і і "empbody" і і "empfoot" і
+----------------+ +---------------+ +----------------+
і
+---------------+
і "compsum" і
------------ і
/ "deptsum" \-+
\ /
------------
.REPORT seldept deptbody depthead deptfoot
Рисунок 34.вложенная структура программы составного отчета
+ EГЛАВА 6.ОПЕРАТОРЫ ЯЗЫКА SQL*REPORT
EТИПЫ ОПЕРАТОРОВF
Существует 6 типов операторов RPT:
* Декларативные операторы
* Операторы макроопрделений
* Макрооператоры выполнения
* Операторы управления программой
* Арифметические операторы
* Смешанные операторы
В данной главе рассматриваются синтаксис RPT,затем после
общей информации об операторах следует детальное их рассмот-
рение.
EСИНТАКСИСF
Операторы RPT имеют следущую общую форму:
<команда><аргумент1><аргумент2> ....<аргумент n>
Операторы отчета начинаются с точки(.) сразу после которой сле-
дует команда RPT.Хотя в данном руководстве команды и зарезер-
вированные слова печатаются в верхнем регистре,допустимо пе-
чатать их и в нижнем регистре (строчными буквами).
Команды RPT могут располагаться в любой вводимой строке.Каж-
дая команда занимает целую строку; текст или другие команды
не м.б.включены в нее.Все относящиеся к команде ар-
гументы д.б. описаны в этой же строке.
Команда может иметь один и более аргументов.Аргументы распо-
лагаются позиционно в описываемом порядке.Каждый аргумент от-
деляется от других по крайней мере одним пробелом.Они описы-
ваются подстановкой в выражение <аргумент1> ...<аргументn>
цифр или символов.
Некоторые аргументы могут содержать пробелы,но в этом случае
весь аргумент д.б. заключен в двойные кавычки.Например
.ASK "Please enter request date : " <дата>
Данная команда имеет два аргумента: послание "Please enter
request date : " и переменную <дата>.Двойные кавычки служат
для описания начала и конца аргумента,но не являются его
составляющими.Аргументы,которые могут содержать пробелы
заключаются в необязательные кавычки ("<аргумент>").
Аргументы,заключенные в квадратные скобки [] являются необя-
зательными; те,что ограничены вертикальными чертами ||,
означают выбор только одного из перечисленных аргументов.
EКРАТКОЕ ИЗЛОЖЕНИЕ RPT ОПЕРАТОРОВF
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Д Е К Л А Р А Т И В Н Ы Е О П Е Р А Т О Р Ы і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і .DECLARE <имя программной переменной><формат> і
і .SET <имя программной переменной><значен.литерала> і
і .EQUAL <назначаемая переменная><исходная переменная> і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і О П Е Р А Т О Р Ы М А К Р О О П Р Е Д Е Л Е Н И Й і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і .DEFINE і