Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

BC400_RU_ECC_2005

.pdf
Скачиваний:
1457
Добавлен:
21.05.2015
Размер:
40.8 Mб
Скачать

BC400

Урок: Считывание таблиц базы данных

В дополнении к оператору SELECT, Open SQL также содержит операторы UPDATE, INSERT, DELETE и MODIFY. Однако для реализации доступа к базе данных для изменения, предоставляемого этими операторами,

необходимы знания о концепции транзакций SAP; в противном случае это может стать причиной противоречивости данных.

Концепция транзакций SAP рассматривается в курсе BC414.

 

© 2006 г. SAP AG All rights reserved. Авторские

161

06-04-2006

права защищены.

Глава 5: Сбор данных

BC400

162

© 2006 г. SAP AG All rights reserved. Авторские

 

права защищены.

06-04-2006

BC400

Урок: Считывание таблиц базы данных

Упражнение 8: Сбор данных с использованием цикла SELECT

Цели упражнения

Выполнив это упражнение, вы сможете

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

ограничивать выбор данных в соответствии с параметрами ввода

Практический пример

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

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

Задание 1:

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

1.Скопируйте исполняемую программу ZBC400_##_GS_LIST (решение для упражнения из урока “Разработка программ и организация разработок”) или шаблон SAPBC400WBS_GS_LIST и присвойте им новое имя

ZBC400_##_SELECT_SFLIGHT.

2.Измените определение рабочей области (рекомендуемое имя: wa_flight). После этого используйте глобальную структуру SBC400FOCC для типизации. Просмотрите информацию о полях этой структуры.

3.Определите параметр ввода для сокращенного названия авиакомпании.

4.В таблице базы данных SFLIGHT должны выбираться все расписания рейсов для выбранной пользователем авиакомпании. Ограничьте выбор полями таблицы, для которых в рабочей области содержится целевое поле.

5.Каково первое ключевое поле прозрачной таблицы SFLIGHT? Содержит ли оператор SELECT выражение WHERE? Используется ли первичный индекс в интерфейсе базы данных (до сих пор)?

Продолжение на следующей странице

 

© 2006 г. SAP AG All rights reserved. Авторские

163

06-04-2006

права защищены.

Глава 5: Сбор данных

BC400

Задание 2:

Расчет процентной занятости мест по рейсу

1.В рамках оператора цикла должен производиться расчет процентной занятости мест в каждом рейсе. Присвойте результат полю PERCENTAGE в рабочей области.

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

164

© 2006 г. SAP AG All rights reserved. Авторские

 

права защищены.

06-04-2006

BC400

Урок: Считывание таблиц базы данных

Решение 8: Сбор данных с использованием цикла SELECT

Задание 1:

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

1.Скопируйте исполняемую программу ZBC400_##_GS_LIST (решение для упражнения из урока “Разработка программ и организация разработок”) или шаблон SAPBC400WBS_GS_LIST и присвойте им новое имя

ZBC400_##_SELECT_SFLIGHT.

a)Этот шаг выполняется в соответствии с обычной процедурой.

2.Измените определение рабочей области (рекомендуемое имя: wa_flight). После этого используйте глобальную структуру SBC400FOCC для типизации. Просмотрите информацию о полях этой структуры.

a)См. выдержку из исходного текста в примере решения.

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

-CARRID типа S_CARR_ID;

-CONNID типа S_CONN_ID;

-FLDATE типа S_DATE;

-SEATSMAX типа S_SEATSMAX;

-SEATSOCC типа S_SEATSOCC и

-PERCENTAGE типа S_FLGHTOCC.

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

3.Определите параметр ввода для сокращенного названия авиакомпании.

a)См. выдержку из исходного текста в примере решения.

Продолжение на следующей странице

 

© 2006 г. SAP AG All rights reserved. Авторские

165

06-04-2006

права защищены.

Глава 5: Сбор данных

BC400

4.В таблице базы данных SFLIGHT должны выбираться все расписания рейсов для выбранной пользователем авиакомпании. Ограничьте выбор полями таблицы, для которых в рабочей области содержится целевое поле.

a)См. выдержку из исходного текста в примере решения.

5.Каково первое ключевое поле прозрачной таблицы SFLIGHT? Содержит ли оператор SELECT выражение WHERE? Используется ли первичный индекс в интерфейсе базы данных (до сих пор)?

a)Первым ключевым полем прозрачной таблицы SFLIGHT является поле MANDT. Даже если значение для этого поля не указывается в выражении WHERE, это значение (текущий мандант выполнения) переносится в базу данных функцией “автоматического выбора манданта”. Это означает, что выбор ограничивается полем MANDT, а не CARRID. Следовательно, в этом случае для выбора записей интерфейсом базы данных может использоваться первичный индекс (частичная, но выровненная по левому краю область ключевых полей в ограничении выбора).

Рекомендация: Примечание относительно автоматического выбора манданта:

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

выражение WHERE автоматически дополняется условием mandt = sy-mandt. (Информация о текущем манданте выполнения содержится в поле sy-mandt.)

Задание 2:

Расчет процентной занятости мест по рейсу

1.В рамках оператора цикла должен производиться расчет процентной занятости мест в каждом рейсе. Присвойте результат полю PERCENTAGE в рабочей области.

a)См. выдержку из исходного текста в примере решения.

Продолжение на следующей странице

166

© 2006 г. SAP AG All rights reserved. Авторские

 

права защищены.

06-04-2006

BC400

Урок: Считывание таблиц базы данных

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

a)См. выдержку из исходного текста в примере решения.

Результат

Выдержка из исходного текста: SAPBC400DDS_SELECT_SFLIGHT

REPORT sapbc400dds_select_sflight.

DATA wa_flight TYPE sbc400focc.

PARAMETERS pa_car TYPE s_carr_id.

* Select all flights belonging to carrier PA_CAR :

SELECT carrid connid fldate seatsmax seatsocc

FROM sflight

INTO CORRESPONDING FIELDS OF wa_flight

WHERE carrid = pa_car.

*Calculate occupation of each flight: wa_flight-percentage =

100 * wa_flight-seatsocc / wa_flight-seatsmax.

*Create list:

WRITE: / wa_flight-carrid, wa_flight-connid, wa_flight-fldate, wa_flight-seatsmax, wa_flight-seatsocc,

wa_flight-percentage, ’%’.

ENDSELECT.

IF sy-subrc NE 0.

WRITE: ’No ’, pa_car, ’flights found !’.

ENDIF.

 

© 2006 г. SAP AG All rights reserved. Авторские

167

06-04-2006

права защищены.

Глава 5: Сбор данных

BC400

168

© 2006 г. SAP AG All rights reserved. Авторские

 

права защищены.

06-04-2006

BC400

Урок: Считывание таблиц базы данных

Упражнение 9: Сбор и буферизация данных во внутренней таблице

Цели упражнения

Выполнив это упражнение, вы сможете

заполнять внутренние таблицы данными из таблиц баз данных

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

Практический пример

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

Задание 1:

Сбор данных и заполнение внутренней таблицы

1.Скопируйте программу ZBC400_##_SELECT_SFLIGHT

(решение из первого упражнения настоящего урока) или шаблон

SAPBC400DDS_SELECT_SFLIGHT и присвойте им новое имя ZBC400_##_SELECT_SFLIGHT_ITAB.

2.Определите внутреннюю таблицу (рекомендуемое имя: it_flight) с использованием глобального типа таблицы, в котором типом строки является глобальная структура SBC400FOCC.

Рекомендация: В SBC400FOCC вызовите ведомость использования для поиска подходящего типа таблицы (возможно, он уже существует).

3.Каждая считываемая строка SFLIGHT должна не выводиться непосредственно, а вставляться во внутреннюю таблицу (оператор

INSERT).

Задание 2:

Сортировка и вывод внутренней таблицы

1.Выполните сортировку внутренней таблицы в соответствии со значениями занятости (по восходящей).

2.Используйте оператор LOOP для вывода содержимого внутренней таблицы.

 

© 2006 г. SAP AG All rights reserved. Авторские

169

06-04-2006

права защищены.

Глава 5: Сбор данных

BC400

Решение 9: Сбор и буферизация данных во внутренней таблице

Задание 1:

Сбор данных и заполнение внутренней таблицы

1.Скопируйте программу ZBC400_##_SELECT_SFLIGHT

(решение из первого упражнения настоящего урока) или шаблон

SAPBC400DDS_SELECT_SFLIGHT и присвойте им новое имя ZBC400_##_SELECT_SFLIGHT_ITAB.

a)Этот шаг выполняется в соответствии с обычной процедурой.

2.Определите внутреннюю таблицу (рекомендуемое имя: it_flight) с использованием глобального типа таблицы, в котором типом строки является глобальная структура SBC400FOCC.

Рекомендация: В SBC400FOCC вызовите ведомость использования для поиска подходящего типа таблицы (возможно, он уже существует).

a)Этот шаг выполняется в соответствии с обычной процедурой.

3.Каждая считываемая строка SFLIGHT должна не выводиться непосредственно, а вставляться во внутреннюю таблицу (оператор

INSERT).

a)См. выдержку из исходного текста в примере решения.

Задание 2:

Сортировка и вывод внутренней таблицы

1.Выполните сортировку внутренней таблицы в соответствии со значениями занятости (по восходящей).

a)См. выдержку из исходного текста в примере решения.

2.Используйте оператор LOOP для вывода содержимого внутренней таблицы.

a)См. выдержку из исходного текста в примере решения.

Результат

Выдержка из исходного текста: SAPBC400DDS_SELECT_SFLIGHT_TAB

Продолжение на следующей странице

170

© 2006 г. SAP AG All rights reserved. Авторские

 

права защищены.

06-04-2006

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]