BC400_RU_ECC_2005
.pdfBC400 |
Урок: Работа с внутренними таблицами |
Внутренняя таблица – это объект данных, в котором во время выполнения могут сохраняться несколько одинаково структурированных записей данных (табличных переменных). Количество записей данных ограничено только масштабом конкретных внедренных систем.
Исполняющая система ABAP осуществляет динамическое управление размером внутренней таблицы. Это означает, что разработчик не должен выполнять какие-либо действия по управлению памятью.
Отдельные наборы данных во внутренней таблице называются строками таблицы или записями таблицы.
Поэтому отдельные компоненты в строке носят название полей или столбцов внутренней таблицы.
Тип строки внутренней таблицы, определяемый с помощью любого типа данных, описывает структуру строк записей таблицы.
Таким образом, внутренние таблицы предоставляют простой способ обработки больших наборов данных в структурированном виде. Типичные способы использования внутренних таблиц:
•сохранение данных из таблиц базы данных или последовательных файлов для последующей обработки;
•форматирование данных для вывода на экран или для печати (например, сортировка);
•форматирование данных для использования другими сервисами (например, для подпрограмм, функциональных модулей или при вызове метода).
Рисунок 70: Атрибуты внутренних таблиц
Следующие свойства полностью определяют внутреннюю таблицу:
|
© 2006 г. SAP AG All rights reserved. Авторские |
121 |
06-04-2006 |
права защищены. |
Глава 4: Основные языковые элементы ABAP |
BC400 |
Тип строки
Тип строки описывает структуру записей таблицы. Для этого, как правило, необходимо указать тип структуры. Однако могут использоваться любые типы данных.
Ключ
Ключ внутренней таблицы состоит из ключевых полей с учетом порядка их расположения. Порядок ключевых полей используется, помимо прочего, для сортировки в соответствии с ключами. В зависимости от вида доступа, ключ может быть определен как уникальный или групповой. Уникальный ключ означает, что строка с определенными ключевыми значениями, возможно, является уникальной в пределах таблицы.
Тип таблицы
Существует три различных типа таблиц: стандартные
, отсортированные и хеш-таблицы . Из соображений производительности, следует выбирать соответствующий тип таблицы в зависимости от используемого вида доступа. На следующем рисунке показан выбор соответствующего типа таблицы.
Рисунок 71: Атрибуты и использование типов таблицы
Если доступ к записи таблицы осуществляется путем указания соответствующего номера строки, такой способ называется доступом по индексу.
Напротив, доступ к записи путем ввода ключевого значения называется доступом по ключу.
122 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Работа с внутренними таблицами |
Из соображений производительности, следует выбрать наиболее подходящий из следующих трех типов таблиц в зависимости от вида доступа:
• В стандартных таблицах нумерация строк (индекс) является внутренней. Существует возможность доступа как по индексу, так и по ключу.
Этот тип таблицы следует выбирать в том случае, когда для доступа к внутренней таблице, главным образом, используется индекс.
• В отсортированных таблицах записи данных автоматически сортируются по восходящей по ключевым полям. В этом случае индекс также является внутренним. Существует возможность доступа как по индексу, так и по ключу.
Этот тип таблицы следует выбирать в том случае, когда для доступа к внутренней таблице, главным образом, используется ключ, или если требуется автоматическая сортировка таблицы по ключу.
• В хеш-таблицах для быстрого доступа по ключу используется управление записями данных посредством процедуры хеширования. Ключ должен быть уникальным. В случае хеш-таблиц возможен доступ только по ключу.
Этот тип таблицы следует выбирать в том случае, когда внутренняя таблица является чрезвычайно объемной, и используется только доступ по ключу.
В этом курсе рассматриваются только стандартные таблицы, однако (за исключением нескольких особых случаев) синтаксис для всех трех типов таблиц является идентичным.
|
© 2006 г. SAP AG All rights reserved. Авторские |
123 |
06-04-2006 |
права защищены. |
Глава 4: Основные языковые элементы ABAP |
BC400 |
Рисунок 72: Определение внутренних таблиц с глобальными типами
Тип внутренней таблицы называется типом таблицы. Типы таблицы могут определяться глобально в ABAP-словаре или локально в программе. На приведенном выше рисунке показан тип таблицы, описанный в ABAP-словаре, а также определение в рамках программы табличной переменной со ссылкой на тип таблицы.
Для получения подробной информации относительно описания глобальных типов таблицы в ABAP-словаре см. онлайн-документацию, доступ к которой можно получить с помощью кнопки "i" при просмотре или ведении типа таблицы.
124 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Работа с внутренними таблицами |
Рисунок 73: Определение внутренних таблиц с локальными типами
На вышеприведенном рисунке показана таблица, описанная локально в программе, а также определение табличной переменной в рамках программы со ссылкой на описанный тип таблицы.
Обратите внимание на то, что при перечислении ключевых полей в типе таблицы для некоторых видов обработки, например, “сортировки по ключу”, порядок следования полей имеет существенное значение. Для получения подробной информации относительно определения локальных типов таблиц см. документацию по ключевым словам для оператора TYPES.
Кроме того, можно непосредственно определить внутреннюю таблицу. Для этого следует просто использовать оператор DATA вместо оператора TYPES.
В предыдущих определениях внутренних таблиц всегда использовались объекты словаря – либо тип таблицы (SBC400_T_SBC400FOCC), либо, по крайней мере, тип структуры (SBC400FOCC). На следующем рисунке показано “независимое” определение таблицы.
|
© 2006 г. SAP AG All rights reserved. Авторские |
125 |
06-04-2006 |
права защищены. |
Глава 4: Основные языковые элементы ABAP |
BC400 |
Рисунок 74: Независимое определение внутренних таблиц
Этот способ позволяет внедрить таблицы любой структуры без необходимости обращения к существующим структурам словаря.
На следующем рисунке представлен обзор возможных определений внутренних таблиц.
Рисунок 75: Возможные определения внутренних таблиц
В приведенном выше кратком тексте для определения таблицы неявно используются следующие значения по умолчанию:
тип таблицы: стандартная (по умолчанию);
126 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |
BC400 |
Урок: Работа с внутренними таблицами |
уникальность ключа: не уникальный (единственный вариант для стандартной таблицы);
табличный ключ: ключ по умолчанию (все нечисловые поля таблицы являются ключевыми полями).
Рекомендация: Поскольку, как правило, использование ключа по умолчанию не является целесообразным, его можно применять для определения внутренней таблицы только в том случае, если ключ не требуется для обработки таблицы.
Внимание: Наиболее типичная синтаксическая ошибка начинающего пользователя заключается в следующем:
DATA itab TYPE TABLE OF <тип_таблицы> .
В этом случае будет определена внутренняя таблица, строки которой также будут являться внутренними таблицами (указанного типа)!
Рисунок 76: Определение структурированных объектов данных: обзор
|
© 2006 г. SAP AG All rights reserved. Авторские |
127 |
06-04-2006 |
права защищены. |
Глава 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
Удаление строк внутренней таблицы, удовлетворяющих определенному <условию>.
|
© 2006 г. SAP AG All rights reserved. Авторские |
129 |
06-04-2006 |
права защищены. |
Глава 4: Основные языковые элементы ABAP |
BC400 |
INSERT
Копирование содержимого нескольких строк внутренней таблицы в другую внутреннюю таблицу.
APPEND
Добавление содержимого нескольких строк внутренней таблицы к другой стандартной таблице.
Для получения подробной информации относительно описанных здесь ABAP-операторов см. соответствующую документацию по ключевым словам.
Рисунок 79: Пример синтаксиса: вставка строки
Существует возможность вставки строки во внутреннюю таблицу путем записи требуемых данных в подготовленную рабочую область с последующей вставкой во внутреннюю таблицу посредством оператора
INSERT.
В случае стандартных и хеш-таблиц происходит добавление строки. В случае отсортированной таблицы строка вставляется согласно ключу.
130 |
© 2006 г. SAP AG All rights reserved. Авторские |
|
права защищены. |
06-04-2006 |