SAP ABAP - wypełnianie tabel wewnętrznych
W tabelach wewnętrznych wypełnianie obejmuje takie funkcje, jak zaznaczanie, wstawianie i dołączanie. Ten rozdział koncentruje się na instrukcjach INSERT i APPEND.
Instrukcja INSERT
Instrukcja INSERT służy do wstawiania pojedynczego wiersza lub grupy wierszy do wewnętrznej tabeli.
Poniżej znajduje się składnia dodawania pojedynczego wiersza do wewnętrznej tabeli -
INSERT <work_area_itab> INTO <internal_tab> INDEX <index_num>.
W tej składni instrukcja INSERT wstawia nowy wiersz do wewnętrznej tabeli internal_tab. Nowy wiersz można wstawić, używając wyrażenia work_area_itab INTO przed parametrem internal_tab. Kiedy używane jest wyrażenie work_area_itab INTO, nowa linia jest pobierana z obszaru roboczego work_area_itab i wstawiana do tabeli internal_tab. Jednak gdy wyrażenie work_area_itab INTO nie jest używane do wstawiania wiersza, wiersz jest pobierany z wiersza nagłówka tabeli internal_tab.
Kiedy nowy wiersz jest wstawiany do wewnętrznej tabeli przy użyciu klauzuli INDEX, numer indeksu wierszy po wstawionym wierszu jest zwiększany o 1. Jeśli wewnętrzna tabela zawiera <index_num> - 1 wiersze, nowy wiersz jest dodawany na koniec stołu. Gdy system SAP pomyślnie doda wiersz do wewnętrznej tabeli, zmienna SY-SUBRC przyjmuje wartość 0.
Przykład
Poniżej znajduje się przykładowy program, który używa instrukcji insert.
REPORT ZCUSLIST1.
DATA: BEGIN OF itable1 OCCURS 4,
F1 LIKE SY-INDEX,
END OF itable1.
DO 4 TIMES.
itable1-F1 = sy-index.
APPEND itable1.
ENDDO.
itable1-F1 = -96.
INSERT itable1 INDEX 2.
LOOP AT itable1.
Write / itable1-F1.
ENDLOOP.
LOOP AT itable1 Where F1 ≥ 3.
itable1-F1 = -78.
INSERT itable1.
ENDLOOP.
Skip.
LOOP AT itable1.
Write / itable1-F1.
ENDLOOP.
Powyższy kod daje następujący wynik wyjściowy -
1
96-
2
3
4
1
96-
2
78-
3
78-
4
W powyższym przykładzie pętla DO dołącza do niej 4 wiersze zawierające liczby od 1 do 4. Składnikowi linii nagłówka itable1-F1 przypisano wartość -96. Instrukcja wstawiania wstawia wiersz nagłówka jako nowy wiersz do treści przed wierszem 3. Istniejący wiersz 3 staje się wierszem 4 po wstawieniu. Instrukcja LOOP AT pobiera te wiersze z wewnętrznej tabeli, które mają wartość F1 większą lub równą 3. Przed każdym wierszem instrukcja Insert wstawia nowy wiersz z wiersza nagłówka. Przed wkładką zmieniono komponent F1 na -78.
Po wykonaniu każdej instrukcji wstawiania system ponownie indeksuje wszystkie wiersze poniżej wstawionego. Wprowadza to narzut podczas wstawiania wierszy w pobliżu góry dużej tabeli wewnętrznej. Jeśli chcesz wstawić blok wierszy do dużej tabeli wewnętrznej, przygotuj kolejną tabelę z wierszami do wstawienia i użyj zamiast tego linii wstawiania.
Podczas wstawiania nowego wiersza wewnątrz itable1 wewnątrz pętli w itable1, nie ma to natychmiastowego wpływu na wewnętrzną tabelę. W rzeczywistości staje się skuteczny przy następnym przejściu pętli. Podczas wstawiania wiersza po bieżącym wierszu tabela jest ponownie indeksowana w ENDLOOP. Sy-tabix jest zwiększane, a następna pętla przetwarza wiersz wskazywany przez sy-tabix. Na przykład, jeśli jesteś w drugim przebiegu pętli i wstawisz rekord przed wierszem 3. Po wykonaniu pętli końcowej nowy wiersz stanie się wierszem 3, a stary wiersz 3 stanie się wierszem 4 itd. Sy-tabix jest zwiększane o 1, a następne przejście pętli przetwarza nowo wstawiony rekord.
Instrukcja APPEND
Instrukcja APPEND służy do dodawania pojedynczego wiersza lub wiersza do istniejącej tabeli wewnętrznej. Ta instrukcja kopiuje pojedynczy wiersz z obszaru roboczego i wstawia go po ostatnim istniejącym wierszu w wewnętrznej tabeli. Obszarem roboczym może być wiersz nagłówka lub dowolny inny ciąg pola o takiej samej strukturze jak wiersz wewnętrznej tabeli. Poniżej znajduje się składnia instrukcji APPEND, która służy do dołączania pojedynczego wiersza w wewnętrznej tabeli -
APPEND <record_for_itab> TO <internal_tab>.
W tej składni wyrażenie <record_for_itab> może być reprezentowane przez obszar roboczy <work_area_itab>, który można zamienić na typ linii lub za pomocą klauzuli INITIAL LINE. Jeśli użytkownik korzysta z obszaru roboczego <work_area_itab>, system SAP dodaje nowy wiersz do wewnętrznej tabeli <internal_tab> i zapełnia go zawartością obszaru roboczego. Klauzula INITIAL LINE dołącza pusty wiersz zawierający początkową wartość każdego pola struktury tabeli. Po każdej instrukcji APPEND zmienna SY-TABIX zawiera numer indeksu dołączanej linii.
Dołączanie wierszy do standardowych i posortowanych tabel z nieunikalnym kluczem działa niezależnie od tego, czy wiersze z tym samym kluczem już istnieją w tabeli. Innymi słowy, mogą wystąpić zduplikowane wpisy. Jednak błąd w czasie wykonywania występuje, gdy użytkownik próbuje dodać zduplikowany wpis do posortowanej tabeli za pomocą unikalnego klucza lub jeśli użytkownik naruszy porządek sortowania posortowanej tabeli, dołączając do niej wiersze.
Przykład
REPORT ZCUSLIST1.
DATA: BEGIN OF linv Occurs 0,
Name(20) TYPE C,
ID_Number TYPE I,
END OF linv.
DATA table1 LIKE TABLE OF linv.
linv-Name = 'Melissa'.
linv-ID_Number = 105467.
APPEND linv TO table1.
LOOP AT table1 INTO linv.
Write: / linv-name, linv-ID_Number.
ENDLOOP.
Powyższy kod daje następujące dane wyjściowe -
Melissa 105467