SAP Tabela wewnętrzna ABAP: twórz, czytaj, wypełniaj, kopiuj i usuwaj

Co to jest tabela wewnętrzna?

TABELA WEWNĘTRZNA służą do uzyskiwania danych ze stałej struktury do dynamicznego wykorzystania w ABAP. Każda linia w tabeli wewnętrznej ma tę samą strukturę pól. Głównym zastosowaniem tabel wewnętrznych jest przechowywanie i formatowanie danych z tabeli bazy danych w programie.

Co to jest obszar pracy?

Obszary robocze to pojedyncze wiersze danych. Powinny mieć taki sam format jak każda z tabel wewnętrznych. Służy do przetwarzania danych w tabeli wewnętrznej, po jednej linii na raz.

Różnica między stołem wewnętrznym a obszarem roboczym?

Obraz mówi tysiąc słów

Różnica między stołem wewnętrznym a obszarem roboczym

Rodzaje tabel wewnętrznych

Istnieją dwa typy tabel wewnętrznych.

  1. Tabele wewnętrzne z linią HEADER
  2. Tabele wewnętrzne bez linii HEADER.

Tabele wewnętrzne z linią nagłówka

  • Tutaj system automatycznie tworzy obszar roboczy.
  • Obszar roboczy ma ten sam typ danych co tabela wewnętrzna.
  • Ten obszar roboczy nazywany jest linią HEADER.
  • To tutaj dokonuje się wszystkich zmian lub jakichkolwiek działań na zawartości tabeli. Dzięki temu rekordy można bezpośrednio wstawiać do tabeli lub uzyskać do nich dostęp bezpośrednio z tabeli wewnętrznej.

Tabele wewnętrzne bez linii nagłówka :

  • Tutaj nie ma obszaru roboczego powiązanego ze stołem.
  • Obszar roboczy należy wyraźnie określić, gdy potrzebujemy dostępu do takich tabel.
  • Dlatego nie można uzyskać bezpośredniego dostępu do tych tabel.

Tworzenie tabel wewnętrznych

Istnieje wiele sposobów tworzenia tabeli wewnętrznej. Przyjrzyjmy się im jeden po drugim-

1. Używając instrukcji typu

Stwórzmy teraz tabelę wewnętrzną itab za pomocą TYP instrukcja.

Składnia to –

Types : begin of line,

column1 type I,

column2 type I,

end of line.

Przykład:

TYPES : begin of line,

empno		type I,

empname(20)   	type c	,

end of line.

Instrukcja TYPES tworzy zdefiniowaną linię struktury.

Aby utworzyć tabelę wewnętrzną itab użyj następującego polecenia:

Data itab type line occurs 10.

Tworzona jest wewnętrzna tabela itab o strukturze line. Oprócz zadeklarowania struktury wewnętrznej tabeli, klauzula OCCURS określa również, ile wpisów tabeli jest przechowywanych w pamięci głównej (w tym przypadku 10). Dodatkowe rekordy są zapisywane w obszarze stronicowania i mogą mieć wpływ na wydajność

2.Przez odniesienie do innej Tabeli

Możesz utworzyć tabelę wewnętrzną, odwołując się do istniejącej tabeli. Istniejący stół mógłby być standardem SAP stół, stół Z lub inny stół wewnętrzny.

Składnia-

Data <f> <type> [with header line].

Przykład-

DATA itab TYPE line OCCURS 10 with header line.

Tutaj tworzona jest wewnętrzna tabela itab z linii typu z linią nagłówka. Należy pamiętać, że opcja „z linią nagłówka” jest opcjonalna.

3.Odnosząc się do istniejącej Struktury

Składnia-

Data	<f> LIKE <struct> occurs n [with header line].

Przykład-

DATA itab LIKE sline OCCURS 10.

Tutaj tworzona jest tabela itab o strukturze takiej samej jak sline

4. Tworząc nową Strukturę

Stwórzmy teraz tabelę wewnętrzną z naszą własną strukturą. Tutaj tworzona jest tabela z linią nagłówka, domyślnie.

Składnia –

Data : Begin of <f> occurs <n>,

<component declaration>,

.................................,

End of <f>.

Przykład -

Data : Begin of itab occurs 10,

column1       type I,

column2(4)  type C,

column3      like  mara-ernam,

End of itab.

Utworzono wewnętrzną tabelę itab

Wypełnianie tabel wewnętrznych

Teraz, gdy pomyślnie utworzyliśmy kilka tabel wewnętrznych, zobaczmy, jak wypełnić je niektórymi rekordami. Dostępne są różne metody wypełniania tabel

1. Dołącz dane linia po linii

Pierwszą dostępną metodą jest użycie instrukcji APPEND.

Za pomocą instrukcji APPEND możemy albo dodać jedną linię z innego obszaru roboczego do tabeli wewnętrznej, albo możemy dodać jedną linię początkową do tabeli wewnętrznej.

Składnia –

APPEND [<wa> TO / INITIAL LINE TO] <itable>.

Tutaj miejsce pracy lub Wiersz początkowy jest dodawany do tabeli wewnętrznej .

Zmienna systemowa SY-TABIX zawiera indeks dołączonej linii.

Przykład:

Data: Begin of itab occurs 10,

col1 type C,

col2 type I,

end of itab.

Append initial line to itab.

Wyniki: '' '0'

Linie początkowe dodają do tabeli linię zainicjowaną wartością poprawną dla swojego typu. Tutaj col1 jest znakiem, a col2 jest liczbą całkowitą. Następnie DOŁĄCZ linię początkową, dodaje linię zainicjowaną ze względu na typ danych kolumn, tj. spację dla col1 i 0 dla col2.

2. Korzystanie z instrukcji COLLECT

COLLECT to kolejna forma instrukcji używana do wypełniania tabel wewnętrznych. Ogólnie rzecz biorąc, COLLECT jest używany podczas wstawiania linii do wewnętrznej tabeli za pomocą unikalnego standardowego klucza.

Składnia-

COLLECT [<wa> INTO] <itable>.

W przypadku tabel z linią nagłówka opcja INTO jest pomijana. Załóżmy, że istnieje już wpis mający taki sam klucz jak ten, który próbujesz dodać, a następnie do tabeli nie jest dodawany nowy wiersz, ale dodawane są pola numeryczne obu wpisów i obecny jest tylko jeden wpis odpowiadający kluczowi . Wartość SY-TABIX zostaje zmieniona na wiersz oryginalnego wpisu. W przeciwnym razie COLLECT działa podobnie do APPEND, a SY-TABIX zawiera indeks przetwarzanej linii.

3.Korzystanie z instrukcji INSERT

Instrukcja INSERT dodaje wiersz/obszar roboczy do tabeli wewnętrznej. Możesz określić pozycję, w której ma zostać dodany nowy wiersz, używając klauzuli INDEX z instrukcją INSERT.

Składnia

INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].

Tutaj, miejsce pracy lub INITIAL LINE jest wstawiany do tabeli wewnętrznej w indeksie .

Kopiowanie tabel wewnętrznych

Zawartość jednej tabeli wewnętrznej można skopiować do innej, używając polecenia APPEND LINES lub INSERT LINES. Prostszym sposobem jest użycie dowolnej z następujących składni.

MOVE  <itab1> To <itab2>.

OR

<itab1> = <itab2>.

Kopiują one zawartość ITAB1 do ITAB2. W przypadku tabel wewnętrznych z linią nagłówka musimy użyć [] w celu odróżnienia od obszaru roboczego. Zatem, aby skopiować zawartość tabel wewnętrznych z linią nagłówka, składnia wygląda następująco:

itab1[] = itab2[].

Przeczytaj tabele wewnętrzne

Zaznajomiliśmy się już z tworzeniem tabel wewnętrznych i zapełnianiem ich danymi. Zobaczymy teraz, jak faktycznie wykorzystujemy dane lub pobieramy dane z wewnętrznych tabel.

1. Korzystanie z pętli -Endloop

Jednym ze sposobów dostępu lub odczytu tabeli wewnętrznej jest użycie LOOP-ENDLOOP.

Składnia

LOOP AT <itable> [INTO <wa>]

...................................

ENDLOOP.

Tutaj, gdy powiesz LOOP AT ITABLE, wewnętrzna tabela ITABLE będzie czytana wiersz po wierszu. Dostęp do wartości kolumn dla tej linii można uzyskać w dowolnej części struktury LOOP-ENDLOOP. Wartość SY-SUBRC jest ustawiona na 0, nawet jeśli odczytywany jest tylko jeden rekord.

2. Korzystanie z CZYTAJ

Inną metodą odczytu tabeli wewnętrznej jest użycie instrukcji READ.

Składnia-

READ TABLE <itable> [INTO <wa>] INDEX <idx>.

Ta instrukcja odczytuje bieżącą linię lub linię określoną przez indeks . Wartość SY-TABIX jest indeksem odczytanej linii. Jeśli zostanie znaleziony wpis o określonym indeksie, wówczas SY-SUBRC zostanie ustawione na 0. Jeśli określony indeks będzie mniejszy niż 0, wystąpi błąd wykonania. Jeśli określony indeks przekracza rozmiar tabeli, wówczas SY-SUBRC jest ustawiane na 4.

Usuwanie tabel wewnętrznych

Istnieje wiele sposobów usuwania linii z tabeli wewnętrznej.

1.Usuwanie linii w pętli.

Jest to najprostszy sposób usuwania linii.

Składnia

DELETE <ITABLE>.

Ta instrukcja działa tylko w pętli. Usuwa bieżącą linię. Możesz warunkowo usunąć linie w pętli, dodając klauzula GDZIE.

2.Usuwanie linii za pomocą indeksu.

Służy do usunięcia linii z tabeli wewnętrznej pod dowolnym znanym indeksem.

Składnia

DELETE <ITABLE> INDEX <IDX>.

Linia z indeksem jest usuwany. Indeks następnego wiersza jest zmniejszany o 1.