Работа с внутренними таблицами со строкой заголовка

У меня есть вопрос о строке заголовка внутренних таблиц. Я присвоил некоторые значения in_table1, а затем попытался добавить запись с командой APPEND в in_table2 в следующем блоке кода. Но я не вижу запись, которую я добавил в in_table2. Это из-за строки заголовка in_table2? Если да, то как я могу просмотреть записи?

*&---------------------------------------------------------------------*
*& Report  ZTEST_LOOP
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_STRUCT_DATA_TYPE.

***** define structure data types

TYPES: BEGIN OF adres_bilgileri, " this is a struct with a set of types
  sokak type c length 30,
  cadde type c length 30,
  sehir type c length 15,
  ev_no type n length 4,
  end of adres_bilgileri.

  types: BEGIN OF personel_bilgileri,
    ad type c LENGTH 20,
    soyad type c LENGTH 20,
    tel_no type n LENGTH 12,
    adres TYPE adres_bilgileri," ********************!!!!!!!!!!!!!!!!!!!!!!
    END OF personel_bilgileri.

TYPES personel_bilgi_tablosu TYPE STANDARD TABLE OF personel_bilgileri WITH key TABLE_LINE.
  data: in_table1 type personel_bilgileri,
        in_table2 type personel_bilgi_tablosu WITH HEADER LINE.
        "adres1 type adres_bilgileri.


 in_table1-ad = 'Latife'.
 in_table1-soyad = 'A'.
 in_table1-adres-sokak = 'Hasanpaşa'. """"""""""""adresten sokak bilgisine geçiş
 in_table1-adres-ev_no = 10.

 append in_table1 to in_table2.

  WRITE / :  'Records in in_table2:', in_table2. 

person user3069768    schedule 17.07.2014    source источник
comment
Прежде всего, вы больше не должны использовать внутренние таблицы с заголовками. Во-вторых, вы печатаете заголовок in_table2, который, конечно, пуст. Если вы хотите распечатать содержимое таблицы in_table2[], у вас слишком много циклов.   -  person Jagger    schedule 17.07.2014


Ответы (1)


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

Во-вторых, если вам действительно нужно это сделать, вот какое-то решение.

Заголовок in_table2 в вашем случае, конечно, пуст. Вы должны перебрать таблицу, чтобы распечатать ее. Например вот так.

LOOP AT in_table2.   "here in_table2 means table (an internal table)
  WRITE / in_table2. "here in_table2 means the header of the table (a structure)
ENDLOOP.

Внутренние таблицы с заголовками не следует использовать именно из-за этой путаницы. Похоже, вы запутались именно таким образом. Значение in_table2 неоднозначно и зависит от контекста.

Лучше использовать символы полей для зацикливания и добавления.

FIELD-SYMBOLS: <fs_for_loop> LIKE LINE OF in_table2[].
LOOP AT in_table2[] ASSIGNING <fs_for_loop>.
  WRITE / <fs_for_loop>.
ENDLOOP.
person Jagger    schedule 17.07.2014