Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4. Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР. Разработкаприложений sap r3Рюдигер Кречмерна языкеВольфганг Вейс
Скачать 28.36 Mb.
|
Глава 15. Считывание данных с помощью Logical Databases Глава 16. Интерфейс пользователя с отчетной подсистемой Report Глава 17. Движение вглубь объекта и дополнительные возможности при работе со списками Глава 18. Выполнение отчета Глава 15 Считывание донных с помощью Logical Databases • Что такое Logical Databases • Что использовать: команду select или Logical Databases • Задание составных критериев выборки • Работа с несколькими таблицами • Преимущества использования Logical Databases 168 Глава 15 В этой главе читатель узнает, что такое Logical Databases и как можно их использовать для создания в АВАР/4 отчетов — программ, которые выбирают данные из базы, группируют их согласно различным критериям и выводят информацию на экран в форме списков. Но сначала обсудим способы доступа к данным одной или нескольких таблиц базы и вывода на экран результатов. Создание отчета Отчеты можно создавать любым из следующих трех способов: • Задать размещение информации на экране с помощью средств АВАР/4 Query, позволяющих сгене- рировать программу автоматически • Написать текст программы, генерирующей отчет, с применением Logical Database, что упрощает доступ к базе данных • Использовать простейшие команды select Каждый из этих способов имеет свои преимущества. Средства АВАР/4 Query позволяют задать размещение элементов в списке, после чего программа генерируется автоматически. С помощью этих средств, которые легко освоить, можно очень быстро создавать отчеты. При выполнении стандартных запросов предпочтительнее использовать утилиту за- просов — АВАР/4 Query. Если же необходимо задействовать всю гибкость языка АВАР/4, возможно, придется выбрать другой метод. Работа с АВАР/4 Query описана в приложении В. Средства Logical Database предоставляют процедуры для извлечения сложных данных из базы. Кроме того, они автоматически строят стандартный диалог пользователя и создают стандартные диалоговые экраны для задания критериев выборки данных. Концепция Logical Databases отличает АВАР/4 от многих других языков программирования. С про- граммной точки зрения Logical Database не является базой данных в смысле СУБД, а представляет собой многократно используемые программные средства для упрощения инкапсуляции поиска данных. В частности, в Logical Database инкапсулируются следующие программные объекты: • Свободно компонуемые представления данных в базе данных • Экраны для задания критериев выборки, которые обеспечивают удобный диалог с пользователем • Детали доступа к базе данных (например, особая форма оператора select) Как и в других случаях многократного использования данных и методов, преимущества Logical Da- tabase становятся очевидными тогда, когда необходимо создать большое количество отчетов. В частнос- ти, Logical Database позволяет применять перечисленные выше средства сразу к нескольким отчетам: ускорив например, доступ к базе данных в одной Logical Database, можно сразу увеличить производи- тельность при выполнении всех отчетов. Если же разработчика отчетов не устраивает Logical Database, он может выбрать последний способ их создания и написать программу, включающую обычные операторы select (см. главу 11). Сравнение двух отчетов, разработанных с использованием разных средств Преимущества применения Logical Databases наиболее очевидны при сравнении двух программ от- четов, строящих один и тот же список разными методами: • Посредством операторов select • С помощью Logical Database и событий get Для примера используются две таблицы: customers (таблица 15.1) и bookings (таблица 15.2). Считывание данных с помощью Logical Databases 169 Таблица 15.1 Пример содержимого таблицы customers 00000001 00000002 00000017 87654321 Edwards Young Smith Edison Small Town Village Big City Fort Mayers 654-321-1234 333-444-2222 717-161-5151 111-111-1111 ABC ABC ABC AIR AIR XYZ XYZ 1000 1234 1234 0007 1234 0006 0007 19991230 19991230 19991231 19990430 19990901 19990606 19990505 001 002 005 010 011 008 007 00000017 00000002 00000017 87654321 00000002 00000001 87654321 19990101 19991229 19990101 19990101 19990101 19990101 19990101 Предположим, необходимо распечатать список всех заказчиков, которые вылетают после 05/01/1999 и забронировали места на рейс 01/01/1999. Список должен содержать даты авиарейсов и выглядеть так, как на рис. 15.1. Рис. 15.1 Список заказчиков и их регистрация Создание программного текста Такой список можно получить с помощью следующей программы, состоящей из двух вложенных циклов select: tables: customers, bookings. select * from customers. Таблица 15.2 Пример содержимого таблицы bookings 170 Глава 15 write / customers-name. select * from bookings where customid = customers-id and fldate > '19990501' and order_date = '19990101'. write at /3 bookings-fldate. endselect. endselect. Тот же самый список можно получить с помощью другой программы, которая использует соответ- ствующую логическую базу (Logical Database) и два события get: tables: customers, bookings. get customers. write / customers-name. get bookings. write at /3 bookings-fldate. Имя Logical Database является атрибутом программы и должно быть задано на экране атрибутов (рис. 15.2). Рис. 15.2 Ввод имени логической базы на экране атрибутов программы создания отчета Задание атрибутов программы см. в главе 3. Система R/3 содержит приблизительно 150 вариантов логических баз (Logical Databases), которые обеспечивают требования большинства бизнес-приложений. Например, Logical Databases можно исполь- зовать для следующих целей: • Обработки финансовых бухгалтерских документов • Поддержки центров оплаты • Обработки документов по продажам • Движения запасов • Обработки заказов Считывание данных с помощью Logical Databases 171 Задание параметров выборки В начале выполнения второй из приведенных выше программ пользователь увидит экран выбора, на котором он сможет ввести необходимые значения параметров. Сначала нужно задать нижнюю гра- ницу даты рейса и заказа (рис. 15.3). Рис. 15.3 Экран выбора для отчета учебного примера Нажав кнопку Selection Options на экране выбора, можно задать оператор Greater Than (больше чем) для даты полета (рис. 15.4). Использование этого оператора обеспечивает поиск только чисел, превос- ходящих указанное минимальное значение. Рис. 15.4 Задание параметров выборки для отчета учебного примера 172 Глава 15 После подтверждения выборки (нажатием кнопки Cору) существование условия поиска будет отме чено пиктограммой рядом с введенной величиной (рис. 15.5). Рис. 15.5 Завершение задания параметров выборки для отчета учебного примера После задания критериев выборки и выполнения отчета на экране появится требуемый список кли- ентов и дат рейсов (см. рис. 15.1). Обработка данных с помощью событий get В предыдущем примере использовалась обработка событий get, которая выполняется в АВАР/4. Про- цесс построен по схеме дерева: сначала выполняются операторы события get customers для каждого из клиентов, затем последовательно обрабатываются записи заказов, т.е. каждое событие get bookings об- рабатывается для каждой записи заказа текущего клиента. Этот небольшой пример показывает, что по- рядок обработки события get обусловлен иерархией Logical Database (рис. 15.6). Как видно из рис. 15.6, Рис. 15.6 Структура логической базы отчета учебного примера Считывание данных с помощью Logical Databases 173 таблица customers принадлежит к первому уровню иерархии (и изображается в верхней части экрана), таблица bookings — ко второму уровню (это показано уходящей вниз ветвью). Смысл использования древовидной структуры поясняется в разделе "Порядок выполнения событий get". Что применять: команду select или Logical Databases Имеется несколько существенных различий между двумя программами, приведенными в предыдущем разделе: • Вторая программа генерации отчета использует два события get, а не вложенные циклы select. • В первой программе отношение внешнего ключа между таблицами customers и bookings задается в условиях предложения where, что отсутствует во второй программе, где это отношение моде- лируется древовидной структурой Logical Database. Данная структура определяет также порядок обработки событий get. • В первой программе критерии выборки (дата авиарейса и дата заказа) задаются в предложении where. Во второй программе эти критерии задаются динамически конечным пользователем — они могут быть выбраны без изменения исходного текста. Каждый отчет может иметь только одну Logical Database, однако одна Logical Database может ис- пользоваться несколькими отчетами, и это одна из главных причин их применения. Logical Database упрощает и инкапсулирует извлечение данных; не нужно описывать технические детали, такие как пред- ложения where и команды select, когда для создания отчета применяется логическая база данных. Все модификации и улучшения, сделанные в рамках логической базы данных, будут сразу отражаться на характеристиках всех отчетов, использующих ее. Преимущества использования Logical Database показаны ниже, в разделе "Преимущества Logical Databases". Задание составных критериев выборки Критерии выборки во втором примере программы-отчета демонстрируют два важных случая: • Отдельные величины (например, дата заказа = 01/01/1999) • Нижние границы (например, дата полета > 05/01/1999) Кроме них, конечный пользователь может задавать другие критерии выборки: • Интервалы (например, имена между А и М) • Базисные значения (например, имена, начинающиеся с буквы S) • Отрицание всех указанных выше условий • Комбинированные условия выборки (например, телефонные номера от 111-000-0000 до 666-999-9999, но не равные 333-444-2222) Конечный пользователь может задавать любые из перечисленных критериев. Данные выбираются из таблиц базы согласно заданным критериям, и для этого не требуется изменять исходный текст про- граммы. В главе 18 будут рассмотрены варианты (Variants), позволяющие задавать для отчета предварительно определенные наборы критериев выборки, а также определять специфич- ные для отчета критерии, которые будут появляться на экране выбора отчета ниже стандартных критериев, специфичных для базы данных. Эта технология программирования описывается в главе 16. Порядок обработки событий get Второй пример предыдущего раздела показывает, что порядок обработки различных событий get полностью определяется древовидной иерархией, заданной в Logical Database. В принципе структура дерева отражает отношение внешнего ключа между соответствующими таблицами. Структура логичес- 7 Зак. 65 174 Глава 15 кой базы предыдущего примера включает как минимум отношение родитель — потомок между таблица- ми customers и bookings. Важно понимать, что отчет, создаваемый на основе Logical Database, не предусматривает последова- тельной обработки во время выполнения. Вместо этого порядок работы определяется структурой логи- ческой базы. Все операторы после конкретного оператора get и перед следующим событием принадлежат данному событию get. Эти операторы выполняются всякий раз, когда внутренние проце- дуры логической базы считывают элемент соответствующей таблицы. Таким образом, порядок располо- жения событий get в исходном тексте программы создания отчета не имеет значения. События get могут интерпретироваться как отдельные модули, вызываемые системой. Работа с несколькими таблицами Часто в отчете применяется несколько таблиц. Предположим, что в отчете обрабатываются четыре таблицы ztabl-ztab4, связанные следующим образом: • ztab1 — контрольная таблица для ztab2 • ztab2 — контрольная таблица для ztab3 и ztab4 При использовании операторов select отношения внешних ключей выражаются в форме различных уровней вложения: Древовидная структура Logical Database содержит готовую к использованию модель отношения между таблицами (рис. 15.7). Рис. 15.7 Структура сложной Logical Database Считывание донных с помощью Logical Databases 175 Следующий исходный текст программы, использующей Logical Database, реализует тот же самый отчет: Этот отчет выводит на экран тот же список, что и предыдущий отчет, использующий вложенные операторы select. Обратите внимание, что событие get late обрабатывается только после того, как будут обработаны все элементы таблиц, находящиеся на более низком уровне иерархии по отношению к ztab2. Элементы таблицы ztab1 считываются при выполнении отчета, несмотря на то что соответствую- щее событие get отсутствует. Вообще говоря, таблица со структурой, описанной в Logical Database, будет считываться в следующих случаях: 1. Таблица соответствует событию get или get late в отчете. 2. Таблица является предшественницей одной из таблиц, определяемых пунктом 1. В предыдущем примере таблицы ztab2, ztab3 и ztab4 относятся к первому случаю, а таблица ztab1 — ко втором}'. В соответствии с этими правилами поддерево не обрабатывается (т.е. элементы таблицы не считываются из базы), если в отчете не встречается соответствующее событие get. Древовидная структура Logical Database является свободно определяемым логическим представлением нескольких таблиц базы. Хотя в большинстве случаев отношение роди- тель — потомок отражает отношение внешнего ключа, иногда таблицы связаны через дополнитель- ную подпрограмму Logical Database, и эта связь устанавливается во время выполнения отчета. Использование внешних соединений Logical Databases дает возможность установить внешнее соединение различных таблиц базы, даже если такая процедура и не поддерживается используемой на нижнем уровне СУБД. Обратимся вновь к первому примеру этой главы и предположим, что необходимо получить отчет о заказах клиентов на рейсы, которые состоятся позднее 06/30/1999. Допустим также, что нужно письменно уведомить кли- ентов, которые не заказывали билеты в этот период, т.е. понадобится узнать их фамилии. Если такой отчет строится на основе логической базы, то нет необходимости изменять исходный текст программы. Можно просто ввести новую нижнюю границу 06/30/1999 для даты полета на экране выбора парамет- ров и сразу же получить требуемый список. Очевидно, что точно такой же список можно получить и с помощью вложенных операторов select с новыми критериями выборки в предложениях where. Однако, используя представления, определенные в Dictionary, можно получить только внутреннее соединение таблиц customers и bookings. Например, там не окажется фамилии клиента Edison, который не заказывал билет в тот период времени. Построение собственной логической базы Разработчик может создать собственную логическую базу, используя Object Browser в Development Workbench. Как правило, необходимо определить структуры, соответствующие критерию выборки, и процедуры доступа к базе данных. В дальнейшем разработанную Logical Database можно будет приме- нять в любом отчете. Подробная информация о создании и дальнейшем сопровождении логической базы содер- жится в руководстве пользователя АВАР/4 (User's Guide). Доступ к тексту руководства можно получить на начальном экране Development Workbench, если указать элементы меню: Help > Extended Help. 176 Глава Два события: start-of-selection и end-of-selection Иногда необходимо выполнить действия прежде, чем будет выбрана первая запись из базы данных. В АВАР/4 событие start-of-selection обрабатывается системой сразу после выборки всех критериев от- бора и до первого события get. Это событие выполняется также по умолчанию для первого события при выполнении программы- отчета, если разработчик по какой-либо причине забыл определить его в программе. Событие end-of-selection обрабатывается после последнего события get. Ниже приведен типичный пример использования этих двух событий: Преимущества логической базы данных Конечно, с помощью оператора select можно создавать отчет, не ссылаясь на логическую базу в атрибутах отчета. Однако применение логической базы данных дает следующие преимущества: • При организации запросов не надо следить за связями ключевых полей с внешними ключами таблицы. • Система автоматически выводит экран для задания соответствующих критериев отбора. В отчете определять их не нужно (см. главу 16). • Не требуется предусматривать в программе-отчете стандартные средства проверки полномочий, поскольку этот контроль выполняется на уровне Logical Database (например, для чтения докумен- тов или счетов). • Совершенствование метода доступа к Logical Database сразу же увеличивает производительность всех программ отчетов, которые ее используют. Разумеется, если Logical Database для необходимых таблиц отсутствует, отчеты придется создавать с помощью оператора select (заметим, однако, что почти все бизнес-приложения имеют Logical Data- bases). Тем не менее, если в отчетах требуется считывать информацию из большого числа таблиц, не организованных в логическую базу, рекомендуем создать ее с помощью Development Workbench. Обыч- но разработка такой базы аналогична созданию пользовательской функции. Реально логическая база представляет собой не что иное, как программный модуль для извлечения данных и задания критериев выборки с экрана. Резюме • Логическая база данных упрощает и инкапсулирует методы доступа к базе данных в программах- отчетах и создает стандартный диалог пользователя. • Экран выбора позволяет легко задать составные критерии выборки. • Отношения различных таблиц отображены в древовидной структуре логической базы. • Отчет, использующий логическую базу, структурирован в соответствии с событиями get, которые связаны с таблицами, принадлежащими дереву логической базы данных. Переключения по собы- тиям get осуществляются во время работы программы. • В отчете необязательно использовать все события get, соответствующие некоторой таблице дере- ва. Во время выполнения программы Logical Databases считывает только необходимые таблицы. • События start-of-selection и end-of-selection обрабатываются соответственно до и после считывания данных во время события get. В следующей главе будет рассмотрено задание полей ввода на экране критериев выборки, а также описаны способы обработки этих полей в дальнейшем (например, проверка правильности ввода). |