ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



                    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    і                     і
            і           .REPORT  <макрос SELECT > <тело макроса>          і
            і                    [<заголовок макроса> [<конец макроса>]]  і
            АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
            і О П Е Р А Т О Р Ы   У П Р А В Л Е Н И Я  П Р О Г Р А М М О Йі
            ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
            і   .&<имя метки>                                             і
            і   .GOTO <имя метки>                                         і
            і   .IF ["] <выражение> ["] THEN <метка1> [ ELSE <метка2> ]   і
            і   .IFNULL <имя переменной> <имя метки>                      і
            і   .STOP                                                     і
            АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
            і    А Р И Ф М Е Т И Ч Е С К И Е   О П Е Р А Т О Р Ы          і
            ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
            і і ADD і                                                     і
            і і SUB і <рез.перем> і<исх.переменная1>і і<исх.переменная2>іі
            і і MUL і             і <литерал>       і і<литерал>         іі
            і і DIV і                                                     і
            і і DSUBі                                                     і
            АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ

            ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
            і С М Е Ш А Н Н Ы Е   О П Е Р А Т О Р Ы                         і
            ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
            і  .PRINT <имя программной переменной> [<имя переменной>]...і
            і  .FPRINT [пропуск]<переменая>[[пропуск][<переменная>]]... і
            і  .ASK '<сообщение>' <имя программной переменной>              і
            і  .REM <контекст>                                              і
            і  .TELL '<сообщение>'                                          і
            і  .ROLLBACK                                                    і
            і  .COMMIT                                                      і
            АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
         
                         EДЕКЛАРАТИВНЫЕ ОПЕРАТОРЫF
                                 EDECLAREF
                   Декларативный оператор декларирует программную переменную
                   и описывает формат вывода переменной на печать.Всем прог-
                   раммным переменным присваивается значение NULL и специальные
                   значения устанавливаются другими операторами.
         
                   .DECLARE  
                      
                   <Evar nameF> 
                      имя,присваиваемое программной переменной.См.раздел
                      "Consistent Handing of Identifiers" (Согласованное управ-
                      ление идентификаторами) о правилах управления именами
                      переменных.
         
                   <EformatF>
                      это формат редактора,используемый для помещения этой
                      переменной в файл внутреннего вида.Формат так же управ-
                      ляет округлением и переполнением при выполнении ариф-
                      метических операторов.Спецификация формата указывает
                      на тип данных в переменных.Поддерживается три типа дан-
                      ных: буквенноцифровой,цифровой и дата.
         
         EБуквенноцифровойF
                 Буквенноцифровые переменные могут содержать любые печатные
                 символы и описываются форматом Аn (где n = число символов ).
                 При выполнении отчета всем цифробуквенные переменные имеют 
                 значения NULL.

         EЦифровыеF
                 Числовые переменные описываются с помощью следующих символов:
                 9      описывает каждую цифру числового значения.Первые нули
                        не выводяптся.
                 .  Описывает положение десятичной точки в числе.Положение
                        ее используется при вычислениях при выводе.
                ,    вставляет запятую в вывод.Она опускается при выводе,
                        если нет цифр слева от нее.
                 $      вставляет знак фунта перед числом в выводе.
                 MI     приводит к печати знака минус спрва от отрицательных
                        чисел.По умолчанию он печатается слева.
                 PR     производит печать отрицательных переменных в угловых
                        скобках (< >).
                 0      может использоваться вместо 9 для обозначения цифр.
                        Обычно все первые нули опускаются,однако 0 в форма-
                        те заполняет каждую цифру.
                 V      Описывает положение десятичной точки в числе.Положение
                        ее используется при расположении в арифметических опе-
                        раторах,однако десятичноя точка не выводится на
                        терминал.
                 B      выводит при печати переменных пробелы вместо нулей.

                 Приведем несколько примеров числовых форматов:
                 формат            значение           вывод
                 --------          ---------          ---------
                 999.99             56.478            56.48
                 999V99             56.478            5648 
                 9,999              8410              8,410   
                 9,999              639               639  
                 99999              607               607    
                 09999              607               00607 
                 9999              -5609             -5609
                 9999MI            -5609              5609-
                 9999PR            -5609              <5609>  
                 B999               564               564
                 B999               0                 blanks 
                 99.99              124.98 (1)        ##.##
                                                      24.98
                 $99.99             45.23             $45.23
                 DATE               2441453 (2)       12/23/80  
                 A5                 Customer          Custo 
                 A20                Customer          Customer
         (1) Если из БД больше,чем может вывестись по формату,пе-
           чатается знак фунта (#).Если переполнение происходит в результате
           арифметической операции,происходит сокращение значения.
         (2) Значение Юлианской даты для 12/23/80.

         FDate
                 ВНИМАНИЕ: До тех пор пока вы не начали вычисления с датой в
                 отчете,мы рекомендуем вам в RPT трактовать как строку  из
                 букв и цифр.Функция TO_CHAR м.б.использована для преоб-
                 разования даты в ORACLE в желаемый формат.Например :

                 TO_CHAR (,<'MM/DD/YY')

                 Выбирая дату без функции TO_CHAR вы получите начальный формат
                 в виде DD-MON-YY.( Посмотрите в SQL*Plus User's Guide описа-
                 ние TO_CHAR ).
                 Существует 3 типа переменной "date" в RPT,которые управляют
                 видом выражения даты.Это , и YYMMDD.Значение
                 любой из этих переменных хранятся в RPT в виде Юлианской
                 даты.Следовательно можно выполнять вычисления с датой и
                 присваивать значение одного типа даты другому.Чтобы получить
                 Юлианскую дату вы можете присвоить численной переменной значе-
                 ние пераменной даты с помощью команды RPT .EQUAL).
                         Чтобы работать с БД ORACLE,вы должны использовать
                 определенный тип переменной "date" чтобы получать даты в том
                 формате,в котором они используются в конкретной БД.
                 EDateF и EedateF обе м.б.использованы в колон-
                 ках БД,которые содержат выражения даты в виде Юли-
                 анского числа.YYMMDD может использоваться в колонках
                 БД,которые представляют дату,как 6-значное число
                 ( т.е.11 декабря 1985 г.будет представляться как 851211 ).
                         Входной (.ASK или .SET) и выходной ( .PRINT или .FPRINT )
                 форматы типа переменной EdateF - это ММ/DD/YY.Формат
                 переменной EedateF - это DD/MM/YY (Европейский формат).
                 Формат переменной EYYMMDDF будет такой,какой Вы зада-
                 дите.
                         Во внутреннем представлении каждая из переменных даты явля-
                 ется численной переменной,содержащей связанную с ней дату
                 в виде абсолютной юлианской даты.Этот подход позволяет Вам
                 вычитать одну дату из другой,получая число дней между ними.
                 Например:
                           01/20/86 - 12/29/85 = 22
                 Числовая величина так же м.б.добавлена  или вычтена
                 из даты.Это полезно при печатании накладных,в которых
                 дата м.б.посчитана,как текущая дата + 30 дней.
                         Переменная даты может иметь значение инициализированное
                 несколькими способами.Оно м.б.присвоено через ли-
                 теральную переменную ( переменная EdateF устанавливается
                 в формате MM/DD/YY ) или она м.б.приравнена значению
                 другой переменной даты .Если ее значение присваивается из ко-
                 лонки или возвращается как выражение в SQL SELECT,значение в
                 БД должно быть в формате внутренней Юлианской даты.
                 Вы можете SELECT колонку даты из ORACLE,используя преобразу-
                 ющую функцию:

                 TO CHAR (,'J')
                 
                 Форматом переменной типа EedateF яувляется MM/DD/YY
                 (Европейский формат).Формат переменной типа YYMMDD вы
                 задаете сами.
                         Для создания колонки совместимой с датой,колонка д.б.
                 описана как EnumberF в операторе SQL CREATE TABLE.Значе-
                 ние колонки д.б. определено и может изменяться только с
                 помощью IAF,где тип поля д.б. описан как EdateF.
                         Более подробно смотри в приложении примеры 4 и 5.

         EСлова-константыF
                 В связи с переменной даты отметим,что в RPT есть два слова-
                 константы: $$DATE$$ и $$TIME$$ - которые вставляются в строки.
                 Если вы ввели :
                                 
                                .SET txtvar $$DATE$$

                 то получите значение Юлианской даты в текстовой переменной.
                 Если введете:

                                .SET numvar $$DATE$$ 

                 вы получите значение Юлианской даты в числовой переменной.

                 Константа $$TIME$$ возвращает 24-часовой формат в виде 
                 HH:MI:SS.Например 15:28:53.
                         Обе этих переменных устанавливаются только раз при старте
                 RPT,таким образом дата и время такие,какие они в данный
                 момент.Болеее подробно смотрите пример 5 в приложении.

         ESET - УстановкаF
                 Оператор SET устанавливает значения переменных равными описан-
                 ным литеральным значениям.
                 .SET <имя переменной>"<значение литерала>"
                 <Eимя переменнойF> любая ранее описанная программная пере-
                                        менная
                 <Eзначение литералаF> числовой либо символьный литерал.Тип
                                        литерала должен соответствовать типу 
                                        переменной.Спецлитерал $$DATE$$ может
                                        быть использован для присвоения пере-
                                        менной даты значения системной даты.
      Например:
                 E.SET name JONESF
                           присваивает текущей переменной EnameF значение
                           JONES.
                 E.SET empno 5647F
                           присваивает текущей числовой переменной EempnoF 
                           значение 5647.
                 E.SET today $$DATE$$F
                           присваивает переменной даты EtodayF значение
                           текущей даты.
                 E.SET var "String of embedded blanksF
                           присваивает переменной EvarF значение текста
                           заключенного в кавычки.

                                 EEQUALF
                 Оператор EQUAL присваивает значение одной переменной значению
                 другой.Обе переменных должны иметь один и тот же тип данных.

                 .EQUAL <переменая><исх.переменная>

                 Переменной EпеременнаяF будет присвоено значение Eисх.
                 переменнаяF.
                         Для символьных переменных,значение Eисх.переменнаяF будет
                 сокращено,если оно длиннее EпеременнаяF,или заполнено
                 пробелами,если короче.
                         Для численных переменных,значение Eисх.переменнаяF будет
                 округлено,если оно имеет больше знаков в мантиссе,чем в фор-
                 мате EпеременнаяF.Ничего не будет сделано в случае пере-
                 полнения.
                         Если значение Eисх.переменнаяF не может храниться в фор-
                 мате EпеременнаяF,оно будет сокращено до нужной длины.
                 
                         EОПЕРАТОРЫ МАКРООПРЕДЕЛЕНИЙF
                 RPT распознает 2 типа макрооператоров: макрос SELECT и про-
                 цедурные макросы.Они оба описываются одинаково,и RPT различа-
                 ет их по тому как они вводятся и по типу содержащихся в них
                 операторов.

                                 EDEFINEF
                 Макрос DEFINE описывает макрос SELECT и процедурные макросы.
                 Выполнение этого оператора вызывает сохранение макроса для
                 дальнейшего использования.Ничего не выводится в файл внутрен-
                 него вида.Заметим что строка тоько с двумя точками (..)
                 используется для закрытия макроопределения.
                 
                           .DEFINE і             
                                        +-----------------------+
                                        і      FOOT             і
                                        +-----------------------+
                                  
          .REPORT 

KOAP Open Portal 2000