BC400_RU_ECC_2005
.pdfBC400 |
Урок: Подпрограммы |
– на глобальный объект данных. Это называется правилом скрытия. В рамках подпрограммы локальные объекты данных “ скрывают ” глобальные объекты, имеющие те же самые имена.
Для четкого выделения внутренних программных объектов можно использовать, например, следующие префиксы:
f_... для “формальных параметров” и
l_... для “локальных объектов данных”.
Рисунок 122: Пример синтаксиса: перенос внутренней таблицы
В приведенном выше примере внутренняя таблица it_flightinfo и глобальная переменная carrid переносятся путем вызова по ссылке, несмотря на то, что они не изменяются в подпрограмме. Преимуществом этого способа является отсутствие необходимости в создании копий.
Для обработки внутренней таблицы должна существовать рабочая область с совместимым типом строк. Она определяется локально в подпрограмме со ссылкой на табличный параметр f_itab. Такая ссылка возможна из-за того, что переменная f_itab типизирована в интерфейсе подпрограммы.
|
© 2006 г. SAP AG All rights reserved. Авторские |
211 |
06-04-2006 |
права защищены. |
Глава 7: Подпрограммы в ABAP |
BC400 |
Рисунок 123: Внедрение вызова подпрограммы
Можно использовать оператор PERFORM для вызова подпрограммы, сгенерированной в исходном тексте. Сначала следует определить подпрограмму, затем сохранить главную программу. Новая подпрограмма будет отображена в области навигации. Переместите ее к требуемой точке вызова в программе путем перетаскивания. После этого необходимо заменить формальные параметры в сгенерированном исходном тексте соответствующими текущими параметрами.
(Кроме того, для генерации вызова также можно использовать кнопку “
Модель ” в ABAP-редакторе.)
Преимущество генерации вызова заключается в устранении вероятности случайного опущения или неправильной расстановки параметров.
212 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Подпрограммы |
Рисунок 124: Подпрограммы в режиме отладки
Если текущий оператор предполагает вызов подпрограммы, можно выполнить всю подпрограмму без остановок путем выбора Выполнить . Обработка останавливается только после завершения подпрограммы.
Для остановки на первом операторе подпрограммы и более подробного отслеживания операций можно использовать опцию Отдельный шаг .
Если текущий оператор располагается в подпрограмме, можно выполнить
оставшуюся часть подпрограммы без остановки при помощи опции
Возврат . Обработка останавливается только после завершения подпрограммы.
|
© 2006 г. SAP AG All rights reserved. Авторские |
213 |
06-04-2006 |
права защищены. |
Глава 7: Подпрограммы в ABAP |
BC400 |
214 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Подпрограммы |
Упражнение 11: Подпрограммы
Цели упражнения
Выполнив это упражнение, вы сможете
•создавать подпрограммы
•использовать интерфейс подпрограммы для переноса данных
Практический пример
Необходимо изменить имеющуюся программу так, чтобы исходный текст, на основе которого осуществляется вывод данных, был инкапсулирован в подпрограмму.
Задание 1:
Создание подпрограммы с табличными параметрами
1.Скопируйте программу ZBC400_##_SELECT_SFLIGHT_ITAB
или соответствующий пример решения
SAPBC400DDS_AUTHORITY_CHECK_2 в новую программу ZBC400_##_SUBROUTINE.
2.Перенесите текст вывода данных в подпрограмму.
Для этого необходимо определить подпрограмму (рекомендуемое имя: WRITE_LIST) и ввести интерфейсный параметр для обеспечения возможности его переноса во внутреннюю таблицу, предназначенную для вывода данных.
3.Выведите данные из подпрограммы с использованием LOOP. Для этого в качестве локального объекта данных подпрограммы следует создать необходимую табличную рабочую область (рекомендуемое имя: wa).
Задание 2:
Вызов подпрограммы
1.После сортировки внутренней таблицы вызовите подпрограмму для вывода таблицы.
2.Выполните программу для проверки результатов.
|
© 2006 г. SAP AG All rights reserved. Авторские |
215 |
06-04-2006 |
права защищены. |
Глава 7: Подпрограммы в ABAP |
BC400 |
Решение 11: Подпрограммы
Задание 1:
Создание подпрограммы с табличными параметрами
1.Скопируйте программу ZBC400_##_SELECT_SFLIGHT_ITAB
или соответствующий пример решения
SAPBC400DDS_AUTHORITY_CHECK_2 в новую программу ZBC400_##_SUBROUTINE.
a)Этот шаг выполняется в соответствии с обычной процедурой.
2.Перенесите текст вывода данных в подпрограмму.
Для этого необходимо определить подпрограмму (рекомендуемое имя: WRITE_LIST) и ввести интерфейсный параметр для обеспечения возможности его переноса во внутреннюю таблицу, предназначенную для вывода данных.
a)См. выдержку из исходного текста в примере решения.
3.Выведите данные из подпрограммы с использованием LOOP. Для этого в качестве локального объекта данных подпрограммы следует создать необходимую табличную рабочую область (рекомендуемое имя: wa).
a)См. выдержку из исходного текста в примере решения.
Задание 2:
Вызов подпрограммы
1.После сортировки внутренней таблицы вызовите подпрограмму для вывода таблицы.
a)См. выдержку из исходного текста в примере решения.
2.Выполните программу для проверки результатов.
a)Этот шаг выполняется в соответствии с обычной процедурой.
Результат
Выдержка из исходного текста: SAPBC400PBS_SUBROUTINE
REPORT sapbc400pbs_subroutine.
CONTSTANTS actvt_display TYPE activ_auth VALUE ’03’.
DATA: it_flight TYPE sbc400_t_sbc400focc, wa_flight LIKE LINE OF it_flight.
Продолжение на следующей странице
216 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Подпрограммы |
PARAMETERS pa_car TYPE s_carr_id.
* Authority Check:
AUTHORITY-CHECK OBJECT ’S_CARRID’
ID ’CARRID’ FIELD pa_car
ID ’ACTVT’ FIELD actvt_display.
CASE sy-subrc.
|
WHEN 0. |
" User is authorized |
|
|
SELECT carrid connid fldate seatsmax seatsocc FROM sflight |
||
|
|
INTO CORRESPONDING FIELDS OF wa_flight |
|
|
|
WHERE carrid = pa_car. |
|
|
wa_flight-percentage = |
||
|
|
100 * wa_flight-seatsocc / wa_flight-seatsmax. |
|
|
APPEND wa_flight TO it_flight. |
||
|
ENDSELECT. |
|
|
|
IF sy-subrc = 0. |
||
|
SORT it_flight BY percentage. |
||
|
PERFORM write_list USING it_flight. |
||
|
ELSE. |
|
|
|
WRITE: ’No ’, pa_car, ’flights found !’. |
||
|
ENDIF. |
|
|
|
WHEN OTHERS. |
" User is not authorized |
|
|
WRITE: / ’Authority-Check Error’(001). |
||
ENDCASE. |
|
|
|
*& |
-------------------------------------------------------------- |
|
* |
*& |
Form |
WRITE_LIST |
|
*& |
-------------------------------------------------------------- |
|
* |
*--> P_IT_FLIGHT
*--------------------------------------------------------------- |
* |
FORM write_list USING p_it_flight TYPE sbc400_t_sbc400focc.
DATA wa LIKE LINE OF p_it_flight.
LOOP AT p_it_flight INTO wa.
Продолжение на следующей странице
|
© 2006 г. SAP AG All rights reserved. Авторские |
217 |
06-04-2006 |
права защищены. |
Глава 7: Подпрограммы в ABAP |
BC400 |
WRITE: / wa-carrid COLOR COL_KEY, |
|
wa-connid COLOR COL_KEY, |
|
wa-fldate COLOR COL_KEY, |
|
wa-seatsocc, |
|
wa-seatsmax, |
|
wa-percentage, ’%’. |
|
ENDLOOP. |
|
ENDFORM. |
" WRITE_LIST |
218 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Подпрограммы |
Резюме по уроку
Теперь вы сможете:
•определять подпрограммы
•вызывать подпрограммы
•анализировать процесс выполнения подпрограмм в режиме отладки
|
© 2006 г. SAP AG All rights reserved. Авторские |
219 |
06-04-2006 |
права защищены. |
Резюме по главе |
BC400 |
Резюме по главе
Теперь вы сможете:
•определять подпрограммы
•вызывать подпрограммы
•анализировать процесс выполнения подпрограмм в режиме отладки
Дополнительная информация
... См. онлайн-документацию к соответствующим ABAP-операторам.
220 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |