Использование дополнения occurs

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

Число, заданное в occurs определяет объем памяти, который будет выделяться при добавлении данных в таблицу. Например, при записи occurs 3 при добавлении первой записи будет выделена память для трех записей. При добавлении четвертой строки будет выделена память еще для трех записей и т.д.

При задании occurs 0, система распределяет по 8 КБ страниц памяти за один раз. Нет никаких преимуществ для использования occurs 0 кроме того факта, что проще записать occurs 0, чем оценить размер внутренней таблицы.

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

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

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

  • loop at
  • read table

Цикл loop at используется для чтения множества строк внутренней таблицы. read table – для чтения только одной строки.

Чтение множества строк используя оператор loop at

Оператор loop at используется, чтобы прочитать несколько или все строки внутренней таблицы. Оператор loop at при чтении данных из внутренней таблицы, размещает их по одной записи в рабочую область.

loop at it [into wa ] [from m ] [to n ] [where exp ].

---

endloop.

· it – название внутренней таблицы.

· wa – название рабочей области.

· m и n – целочисленные литералы, константы, или переменные, представляющие относительный номер ряда. Например, 1 определят первую строку в таблице, 2 – вторую, и так далее.

· exp – логическое выражение, ограничивающее строки, которые читаются.

· --- представляет любое число строк программы.

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

Особенности оператора:

· у wa должна быть та же структура как и строка тела.

· wa может быть строкой заголовка, или это может быть любой Field String, имеющий ту же самую структуру как строка в теле.

· Если Вы не определяете рабочую область, по умолчанию система использует строку заголовка. Например, loop at it into it читает строки из внутренней таблицы it размещая их по одной в заголовок it. Эквивалентный оператор – loop at it.

· Если from не определен, значение по умолчанию – читать с первой строки.

· Если to не определен, значение по умолчанию – читать до последней строки.

· Компонентам it определенным в логическом выражении не должно предшествовать название внутренний таблицы. Например, where f1 = 'X' правильно, но where it-f1 = 'X' вызовет синтаксическую ошибку.

· exp может быть любым логическим выражением. Однако, первый операнд каждого сравнения должен быть компонентом внутренней таблицы. Например, если it содержит компонент f1, то where f1 = 'X' правильная запись; where 'X' = f1 неправильная запись и вызывает синтаксическую ошибку.

Дополнения from, to, и where не обязательны.

Внутри цикла loop, системная переменная sy-tabix содержит относительный номер текущей записи. Например, обрабатывая первую запись в внутренней таблице, значение sy-tabix будет 1. Обрабатывая вторую, sy-tabix будет 2. После выхода из цикла значение sy-tabix сброшено к значению, которое имела эта системная переменная до начала цикла. Если циклы вложены, значение в sy-tabix определяется текущим циклом.

После endloop, sy-subrc будет иметь значение нуль, если какие-нибудь строки были прочитаны, и принимать ненулевое значение, если никакие строки не читались из внутренней таблицы.

Программа добавляет 3 строки к внутренней таблице через строку заголовка

report ztx1104.

data: begin of it occurs 3,

f1(1),

f2(2),

end of it.

it-f1 = 'A'.

it-f2 = 'XX'.

append it to it. "appends header line IT to body IT

it-f1 = 'B'.

it-f2 = 'YY'.

append it. "same as line 8

it-f1 = 'C'.

append it. "the internal table now contains three rows.

sy-tabix = sy-subrc = 99.

loop at it. "same as: loop at it into it

write: / sy-tabix, it-f1, it-f2.

endloop.

write: / 'done. sy-tabix =', sy-tabix,

/ ' sy-subrc =', sy-subrc.

1 A XX

2 B YY

3 C YY

done. sy-tabix = 99

sy-subrc = 0

Ограничение чтения строк из внутренней таблицы

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

Программа чтения некоторых строк таблицы

report ztx1105.

data: begin of it occurs 3,

f1(1),

f2(2),

end of it.

it-f1 = 'A'.

it-f2 = 'XX'.

append it.

it-f1 = 'B'.

it-f2 = 'YY'.

append it.

it-f1 = 'C'.

append it. "it now contains three rows

loop at it where f2 = 'YY'. "f2 is right, it-f2 would be wrong here

write: / sy-tabix, it-f1, it-f2.

endloop.

skip.

loop at it to 2. "same as: loop at it from 1 to 2.

write: / sy-tabix, it-f1, it-f2.

endloop.

skip.

loop at it from 2. "same as: loop at it from 2 to 3.

write: / sy-tabix, it-f1, it-f2.

endloop.

skip.

loop at it from 2 where f1 = 'C'.

write: / sy-tabix, it-f1, it-f2.

endloop.

2 B YY

3 C YY

1 A XX

2 B YY

2 B YY

3 C YY

3 C YY


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: