Главная страница

Руководство для участников курса Версия курса 2й квартал 2005 г. Продолжительность курса 5 Дн. Номер материала 50072594


Скачать 38.91 Mb.
НазваниеРуководство для участников курса Версия курса 2й квартал 2005 г. Продолжительность курса 5 Дн. Номер материала 50072594
АнкорBC400_RU_ECC_2005.pdf
Дата13.04.2017
Размер38.91 Mb.
Формат файлаpdf
Имя файлаBC400_RU_ECC_2005.pdf
ТипРуководство
#4748
страница8 из 23
1   ...   4   5   6   7   8   9   10   11   ...   23
Глава 4: Основные языковые элементы ABAP
BC400
Рисунок 74: Независимое определение внутренних таблиц
Этот способ позволяет внедрить таблицы любой структуры без необходимости обращения к существующим структурам словаря.
На следующем рисунке представлен обзор возможных определений внутренних таблиц.
Рисунок 75: Возможные определения внутренних таблиц
В приведенном выше кратком тексте для определения таблицы неявно используются следующие значения по умолчанию:
тип таблицы: стандартная (по умолчанию);
126
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Работа с внутренними таблицами
уникальность ключа: не уникальный (единственный вариант для стандартной таблицы);
табличный ключ: ключ по умолчанию (все нечисловые поля таблицы являются ключевыми полями).
Рекомендация: Поскольку, как правило, использование ключа по умолчанию не является целесообразным, его можно применять для определения внутренней таблицы только в том случае, если ключ не требуется для обработки таблицы.
Внимание: Наиболее типичная синтаксическая ошибка
начинающего пользователя заключается в следующем:
DATA itab TYPE TABLE OF
<тип_таблицы> .
В этом случае будет определена внутренняя таблица, строки которой также будут являться внутренними таблицами (указанного типа)!
Рисунок 76: Определение структурированных объектов данных: обзор
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
127

Глава 4: Основные языковые элементы ABAP
BC400
Рисунок 77: Доступ к отдельным записям (обзор)
Для обработки отдельной записи внутренней таблицы, как правило,
требуется рабочая область, тип структурной переменной которой должен
совпадать с типом строки внутренней таблицы. На вышеприведенном рисунке представлена обработка внутренней таблицы с использованием соответствующей рабочей области.
APPEND
Добавление содержимого структуры к внутренней таблице. Эта операция может использоваться только со стандартными
таблицами.
INSERT
Вставка содержимого структуры во внутреннюю таблицу.
В случае стандартной таблицы это содержимое просто добавляется к таблице, в случае отсортированной таблицы содержимое вставляется в таблицу в требуемом месте согласно ключу, а в случае хеш-таблицы вставка производится в соответствии с хеш-алгоритмом.
READ
Копирование содержимого записи таблицы в структуру.
MODIFY
Перезапись строки внутренней таблицы с использованием содержимого структуры.
128
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Работа с внутренними таблицами
DELETE
Удаление строки внутренней таблицы.
COLLECT
Суммирование содержимого структуры в строке внутренней таблицы,
имеющей тот же самый ключ. При этом добавляются только неключевые поля. Следовательно, этот оператор может использоваться только для тех таблиц, все неключевые поля которых являются числовыми.
Для получения подробной информации относительно описанных здесь
ABAP-операторов см. соответствующую документацию по ключевым словам.
Рисунок 78: Обработка наборов записей (обзор)
LOOP . . . ENDLOOP
Оператор LOOP по очереди размещает строки внутренней таблицы в структуру, указанную в выражении INTO. В пределах оператора LOOP
существует возможность вывода или изменения текущего содержимого структуры с последующей записью обратно в таблицу.
DELETE
Удаление строк внутренней таблицы, удовлетворяющих определенному
<условию>.
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
129

Глава 4: Основные языковые элементы ABAP
BC400
INSERT
Копирование содержимого нескольких строк внутренней таблицы в другую внутреннюю таблицу.
APPEND
Добавление содержимого нескольких строк внутренней таблицы к другой стандартной таблице.
Для получения подробной информации относительно описанных здесь
ABAP-операторов см. соответствующую документацию по ключевым словам.
Рисунок 79: Пример синтаксиса: вставка строки
Существует возможность вставки строки во внутреннюю таблицу путем записи требуемых данных в подготовленную рабочую область с последующей вставкой во внутреннюю таблицу посредством оператора
INSERT.
В случае стандартных и хеш-таблиц происходит добавление строки. В
случае отсортированной таблицы строка вставляется согласно ключу.
130
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Работа с внутренними таблицами
Рисунок 80: Пример синтаксиса: построчный вывод внутренней
таблицы
Существует возможность построчного считывания и обработки содержимого внутренней таблицы с использованием оператора LOOP. При выполнении поиска в системном поле sy-tabix содержится номер строки текущей записи таблицы.
Приведенный выше пример показывает вывод соответствующей текущей записи с использованием оператора WRITE при обработке.
Если требуется изменить содержимое текущей записи таблицы во время прогона цикла, сначала следует внести изменения в копию строки в рабочей области, а затем с помощью оператора MODIFY записать измененную строку обратно в текущую запись таблицы. Для этого используется следующий синтаксис:
MODIFY itab FROM wa.
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
131

Глава 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".
Рекомендация: С точки зрения времени, затрачиваемого на выполнение, в случае большого объема данных наиболее подходящей для этого вида единичного доступа является хеш-таблица.
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
133

Глава 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: Внутренние таблицы в режиме отладки
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
135

Глава 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.
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
137

Глава 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).
Продолжение на следующей странице
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
139

Глава 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

BC400
Урок: Работа с внутренними таблицами
Решение 7: Работа с внутренними
таблицами
Задание 1:
Определение внутренней таблицы
1.
Создайте исполняемую программу ZBC400_##_ITAB_LOOP без
“TOP-INCLUDE”.
a)
Этот шаг выполняется в соответствии с обычной процедурой.
2.
Определите внутреннюю таблицу в качестве буфера для данных из таблицы базы данных SPFLI. Для этого следует определить для внутренней таблицы тип строки, который является совместимым со структурой строк таблицы SPFLI.
В ABAP-словаре выполните поиск всех типов таблиц, удовлетворяющих этому условию.
Рекомендация: Необходимо вывести прозрачную таблицу
SPFLI в ABAP-словаре. Затем воспользуйтесь соответствующей кнопкой для вызова ведомости использования SPFLI в виде списка. (Обратите внимание на правильность выбора при создании ведомости использования.)
a)
Этот шаг выполняется в соответствии с описанием.
3.
Определите внутреннюю таблицу (рекомендуемое имя: it_spfli) на основе одного из найденных глобальных типов таблиц.
a)
См. выдержку из исходного текста в примере решения.
4.
Определите соответствующую рабочую область для внутренней таблицы (рекомендуемое имя: wa_spfli).
a)
См. выдержку из исходного текста в примере решения.
Задание 2:
Заполнение и вывод внутренней таблицы
1.
Запрограммируйте доступ с выборкой массива ко всем записям данных в таблице базы данных SPFLI следующим образом:
SELECT * FROM spfli INTO TABLE it_spfli.
a)
См. выдержку из исходного текста в примере решения.
Продолжение на следующей странице
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
141

Глава 4: Основные языковые элементы ABAP
BC400
2.
Для вывода списка буферизированных данных во внутренней таблице используйте оператор LOOP.
a)
См. выдержку из исходного текста в примере решения.
Результат
Выдержка из исходного текста: SAPBC400TSS_ITAB_LOOP
REPORT sapbc400tss_itab_loop.
DATA
it_spfli TYPE sbc400_t_spfli.
DATA
wa_spfli LIKE LINE OF it_spfli.
SELECT * FROM spfli INTO TABLE it_spfli.
* at least one dataset selected
IF sy-subrc = 0.
LOOP AT it_spfli INTO wa_spfli.
WRITE: / wa_spfli-carrid,
wa_spfli-connid,
wa_spfli-cityfrom,
wa_spfli-cityto,
wa_spfli-deptime,
wa_spfli-arrtime.
ENDLOOP.
ENDIF.
142
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Работа с внутренними таблицами
Резюме по уроку
Теперь вы сможете:

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

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

анализировать внутренние таблицы в режиме отладки
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
143

Резюме по главе
BC400
Резюме по главе
Теперь вы сможете:

определять элементарные объекты данных (простые переменные)

использовать базовые ABAP-операторы с элементарными объектами данных

выполнять и анализировать программы в режиме отладки

определять структурированные объекты данных (переменные структуры)

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

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

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

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

анализировать внутренние таблицы в режиме отладки
Дополнительная информация
... См. онлайн-документацию к соответствующим ABAP-операторам.
144
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

1   ...   4   5   6   7   8   9   10   11   ...   23


написать администратору сайта