Учебники

SAP ABAP — чтение внутренних таблиц

Мы можем прочитать строки таблицы, используя следующий синтаксис оператора READ TABLE:

READ TABLE <internal_table> FROM <work_area_itab>.

В этом синтаксисе выражение <work_area_itab> представляет рабочую область, совместимую с типом строки таблицы <internal_table>. Мы можем указать ключ поиска, но не ключ таблицы, в операторе READ, используя предложение WITH KEY, как показано в следующем синтаксисе:

READ TABLE <internal_table> WITH KEY = <internal_tab_field>.

Здесь вся строка внутренней таблицы используется в качестве ключа поиска . Содержимое всей строки таблицы сравнивается с содержимым поля <internal_tab_field>. Если значения поля <internal_tab_field> несовместимы с типом строки таблицы, эти значения преобразуются в соответствии с типом строки таблицы. Ключ поиска позволяет вам находить записи во внутренних таблицах, которые не имеют структурированного типа строки, то есть где строка представляет собой отдельное поле или внутренний тип таблицы.

Следующий синтаксис оператора READ используется для указания рабочей области или символа поля с помощью предложения COMPARING —

READ TABLE <internal_table> <key> INTO <work_area_itab>
   [COMPARING <F1> <F2>...<Fn>].

При использовании предложения COMPARING указанные поля таблицы <F1>, <F2> …. <Fn> типа структурированной строки сравниваются с соответствующими полями рабочей области перед транспортировкой. Если указано предложение ALL FIELDS, система SAP сравнивает все компоненты. Когда система SAP находит запись на основе ключа, значение переменной SY-SUBRC устанавливается равным 0. Кроме того, значение переменной SY-SUBRC устанавливается равным 2 или 4, если содержимое сравниваемого поля не совпадают или если система SAP не может найти запись. Однако система SAP копирует запись в целевую рабочую область всякий раз, когда находит запись, независимо от результата сравнения.

пример

REPORT  ZREAD_DEMO. 
*/Creating an internal table 
DATA: BEGIN OF Record1, 
ColP TYPE I, 
ColQ TYPE I, 
END OF Record1. 

DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP. 
DO 6 Times.
Record1-ColP = SY-INDEX. 
Record1-ColQ = SY-INDEX + 5. 
INSERT Record1 INTO TABLE mytable. 
ENDDO. 

Record1-ColP = 4. 
Record1-ColQ = 12. 
READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ. 

WRITE: 'SY-SUBRC =', SY-SUBRC. 
SKIP. 
WRITE: / Record1-ColP, Record1-ColQ.

Приведенный выше код производит следующий вывод —

SY-SUBRC =    2 

4         9

В приведенном выше примере mytable — это внутренняя таблица типа хэшированной таблицы, с Record1 в качестве рабочей области и ColP в качестве уникального ключа. Первоначально mytable содержит шесть строк, где поле ColP содержит значения переменной SY-INDEX, а поле ColQ содержит (SY-INDEX + 5) значения.

Рабочая область Record1 заполняется значениями 4 и 12 в качестве значений для полей ColP и ColQ соответственно. Оператор READ читает строку таблицы после сравнения значения поля ключа ColP со значением в рабочей области Record1 с помощью предложения COMPARING, а затем копирует содержимое строки чтения в рабочей области. Значение переменной SY-SUBRC отображается как 2, потому что, когда значение в поле ColP равно 4, значение в ColQ не 12, а 9.