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

BC400_RU_ECC_2005

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

BC400

Урок: Работа с внутренними таблицами

Рисунок 80: Пример синтаксиса: построчный вывод внутренней таблицы

Существует возможность построчного считывания и обработки содержимого внутренней таблицы с использованием оператора LOOP. При выполнении поиска в системном поле sy-tabix содержится номер строки текущей записи таблицы.

Приведенный выше пример показывает вывод соответствующей текущей записи с использованием оператора WRITE при обработке.

Если требуется изменить содержимое текущей записи таблицы во время прогона цикла, сначала следует внести изменения в копию строки в рабочей области, а затем с помощью оператора MODIFY записать измененную строку обратно в текущую запись таблицы. Для этого используется следующий синтаксис:

MODIFY itab FROM wa.

 

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

131

06-04-2006

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

Глава 4: Основные языковые элементы ABAP

BC400

Рисунок 81: Пример синтаксиса: считывание с помощью индекса

В цикле предусмотрена возможность ограничения доступа к определенным строкам при помощи дополнения FROM-TO. В приведенном выше примере последовательно просматриваются только первые пять строк внутренней таблицы.

Для считывания отдельной записи можно использовать оператор READ TABLE. В целях указания номера строки, содержащей требуемую запись, используется дополнение INDEX.

Обратите внимание на то, что в обоих приведенных выше примерах используется индекс, что возможно только в случае индексных таблиц (т. е. стандартных и отсортированных таблиц).

132

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

 

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

06-04-2006

BC400

Урок: Работа с внутренними таблицами

Рисунок 82: Пример синтаксиса: считывание с помощью ключа

В цикле можно ограничить доступ к определенным строкам при помощи дополнения WHERE. В приведенном выше примере обрабатываются только те строки внутренней таблицы, поле CARRID которых имеет значение LH.

Рекомендация: С точки зрения времени, затрачиваемого на выполнение, наиболее подходящей для этого вида обработки таблицей является отсортированная таблица, поле CARRID которой представляет собой ее первое ключевое поле.

Существует возможность использования синтаксиса READ TABLE, представленного на приведенном выше рисунке, для считывания определенной строки внутренней таблицы. В этом случае всем ключевым полям после дополнения WITH TABLE KEY необходимо присвоить соответствующие значения. Если соответствующая строка находится во внутренней таблице, для кода возврата sy-subrc устанавливается значение

"0".

Рекомендация: С точки зрения времени, затрачиваемого на выполнение, в случае большого объема данных наиболее подходящей для этого вида единичного доступа является хеш-таблица.

 

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

133

06-04-2006

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

Глава 4: Основные языковые элементы ABAP

BC400

Обратите внимание на то, что в случае использования дополнения WITH TABLE KEYво всех ключевых полях должны содержаться данные. При необходимости ограничения полей следует использовать дополнение WITH

KEY.

Рисунок 83: Пример синтаксиса: сортировка и удаление содержимого

С помощью оператора SORT можно выполнить сортировку стандартных и хеш-таблиц в порядке возрастания или убывания по табличному ключу или столбцам. Если порядок сортировки (ASCENDING или DESCENDING) не определен, то по умолчанию используется первый вариант.

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

Для внедрения лексикографической сортировки можно использовать необязательное дополнение AS TEXT . В немецко-говорящих странах это означает, что “ä” предшествует “b”, а не следует за “z”, что имело бы место в случае нелексикографической сортировки.

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

Для получения дополнительной информации см. документацию по ключевым словам оператора SORT.

Для удаления содержимого таблицы можно использовать следующие операторы:

134

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

 

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

06-04-2006

BC400

Урок: Работа с внутренними таблицами

REFRESH

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

CLEAR

Для внутренних таблиц без строки заголовка (всех тех, что были ранее описаны в курсе) оператор CLEAR имеет ту же функцию, что и оператор REFRESH.

Однако для внутренних таблиц со строкой заголовка (см. ниже)

использование этого оператора приводит только к инициализации строки заголовка.

FREE

Этот оператор используется для удаления всего содержимого внутренней таблицы, а также для освобождения ранее используемой памяти. Оператор FREE используется для внутренних таблиц, которые уже были проанализированы и больше не требуются в процессе выполнения программы. В результате ранее присвоенная, но больше не являющаяся необходимой память становится доступной для последующего использования.

Рисунок 84: Внутренние таблицы в режиме отладки

 

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

135

06-04-2006

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

Глава 4: Основные языковые элементы ABAP

BC400

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

В качестве альтернативы можно воспользоваться кнопкой Таблица и указать имя таблицы в поле Внутренняя таблица. Затем можно перейти к просмотру содержимого таблицы путем нажатия клавиши Enter.

Рисунок 85: Сравнение внутренних таблиц со строками заголовка и без строк заголовка

Дополнение WITH HEADER LINE в определении внутренней таблицы предоставляет возможность создания таблицы со строкой заголовка. В этом случае соответствующая таблице рабочая область (строка заголовка)

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

136

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

 

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

06-04-2006

BC400

Урок: Работа с внутренними таблицами

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

Автоматически созданная рабочая область имеет то же самое имя, что и внутренняя таблица, что затрудняет восприятие программы.

Таблицы со строками заголовка не допускается использовать в следующих случаях:

для комплексных объектов данных (структур и внутренних таблиц, компонентами которых также являются внутренние таблицы);

для ABAP-объектов (объектно-ориентированных расширений

ABAP).

.

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

В случае внутренней таблицы со строкой заголовка под названием itab для адресации к соответствующему полю в рабочей области используется itab- Поле таблицы.

Для адресации к телу таблицы можно использовать itab[] . В следующем примере поясняется описанная выше ситуация.

DATA itab1 TYPE TABLE OF scarr WITH HEADER LINE.

DATA itab2 LIKE itab1.

itab1 = itab2 . Только операции со строками заголовка ! itab1[] = itab2[] . Операции с телом таблицы

Следующий устаревший синтаксис также определяет внутреннюю таблицу со строкой заголовка даже с учетом того, что непосредственное указание на это отсутствует.

DATA: BEGIN OF itab OCCURS n,

field1 TYPE ... ,

field2 TYPE ... ,

... ,

END OF itab.

 

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

137

06-04-2006

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

Глава 4: Основные языковые элементы ABAP

BC400

138

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

 

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

06-04-2006

BC400

Урок: Работа с внутренними таблицами

Упражнение 7: Работа с внутренними таблицами

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

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

выполнять поиск подходящих типов таблиц в ABAP-словаре

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

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

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

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

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

Задание 1:

Определение внутренней таблицы

1.Создайте исполняемую программу ZBC400_##_ITAB_LOOP без

“TOP-INCLUDE”.

2.Определите внутреннюю таблицу в качестве буфера для данных из таблицы базы данных SPFLI. Для этого следует определить для внутренней таблицы тип строки, который является совместимым со структурой строк таблицы SPFLI.

В ABAP-словаре выполните поиск всех типов таблиц, удовлетворяющих этому условию.

Рекомендация: Необходимо вывести прозрачную таблицу SPFLI в ABAP-словаре. Затем воспользуйтесь соответствующей кнопкой для вызова ведомости использования SPFLI в виде списка. (Обратите внимание на правильность выбора при создании ведомости использования.)

3.Определите внутреннюю таблицу (рекомендуемое имя: it_spfli) на основе одного из найденных глобальных типов таблиц.

4.Определите соответствующую рабочую область для внутренней таблицы (рекомендуемое имя: wa_spfli).

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

 

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

139

06-04-2006

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

Глава 4: Основные языковые элементы ABAP

BC400

Задание 2:

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

1.Запрограммируйте доступ с выборкой массива ко всем записям данных в таблице базы данных SPFLI следующим образом:

SELECT * FROM spfli INTO TABLE it_spfli.

2.Для вывода списка буферизированных данных во внутренней таблице используйте оператор LOOP.

140

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

 

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

06-04-2006

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