SAP ABAP - Tworzenie wewnętrznych tabel
Instrukcja DATA służy do deklarowania wewnętrznej tabeli. Program musi zostać poinformowany, gdzie zaczyna się i kończy tabela. Dlatego użyj instrukcji BEGIN OF, a następnie zadeklaruj nazwę tabeli. Następnie używany jest dodatek OCCURS, po którym następuje liczba, w tym przypadku 0. OCCURS informuje SAP, że tworzona jest wewnętrzna tabela, a 0 oznacza, że początkowo nie będzie ona zawierać żadnych rekordów. Następnie rozszerzy się, gdy zostanie wypełniony danymi.
Poniżej znajduje się składnia -
DATA: BEGIN OF <internal_tab> Occurs 0,
Utwórzmy pola w nowej linii. Na przykład utwórz „imię”, które jest zadeklarowane jako LIKE ZCUSTOMERS1-name. Utwórz kolejne pole o nazwie „dob”, TAKIE JAK ZCUSTOMERS1-dob. Na początku warto nadać nazwom pól w tabelach wewnętrznych takie same nazwy, jakie mają inne pola utworzone w innym miejscu. Na koniec zadeklaruj koniec wewnętrznej tabeli za pomocą „END OF <internal_tab>”. jak pokazano w poniższym kodzie -
DATA: BEGIN OF itab01 Occurs 0,
name LIKE ZCUSTOMERS1-name,
dob LIKE ZCUSTOMERS1-dob,
END OF itab01.
Tutaj „itab01” jest powszechnie używany skrótowo podczas tworzenia tabel tymczasowych w SAP. Klauzula OCCURS służy do definiowania treści tabeli wewnętrznej poprzez deklarowanie pól tabeli. Gdy używana jest klauzula OCCURS, można określić stałą numeryczną „n”, aby określić dodatkową pamięć domyślną, jeśli jest to wymagane. Domyślny rozmiar pamięci używanej przez klauzulę OCCUR 0 to 8 KB. Została utworzona struktura wewnętrznej tabeli i można napisać kod, aby wypełnić ją rekordami.
Wewnętrzną tabelę można utworzyć z użyciem wiersza nagłówka lub bez niego. Aby utworzyć wewnętrzną tabelę z wierszem nagłówka, w definicji tabeli wewnętrznej użyj klauzuli BEGIN OF przed klauzulą OCCURS lub klauzuli WITH HEADER LINE po klauzuli OCCURS. Aby utworzyć wewnętrzną tabelę bez wiersza nagłówka, użyj klauzuli OCCURS bez klauzuli BEGIN OF.
Możesz również utworzyć wewnętrzną tabelę jako lokalny typ danych (typ danych używany tylko w kontekście bieżącego programu) za pomocą instrukcji TYPES. Ta instrukcja używa klauzuli TYPE lub LIKE w celu odniesienia się do istniejącej tabeli.
Składnia do tworzenia wewnętrznej tabeli jako lokalnego typu danych to -
TYPES <internal_tab> TYPE|LIKE <internal_tab_type> OF
<line_type_itab> WITH <key> INITIAL SIZE <size_number>.
Tutaj <internal_tab_type> określa typ tabeli dla wewnętrznej tabeli <internal_tab>, a <line_type_itab> określa typ dla wiersza tabeli wewnętrznej. W instrukcji TYPES można użyć klauzuli TYPE, aby określić typ linii tabeli wewnętrznej jako typ danych oraz klauzuli LIKE, aby określić typ linii jako obiekt danych. Określenie klucza dla tabeli wewnętrznej jest opcjonalne i jeśli użytkownik nie określi klucza, system SAP definiuje typ tabeli z dowolnym kluczem.
ROZMIAR POCZĄTKOWY <rozmiar_numer> tworzy wewnętrzny obiekt tabeli, przydzielając mu początkową ilość pamięci. W powyższej składni klauzula INITIAL SIZE rezerwuje miejsce w pamięci dla wierszy tabeli size_number. Za każdym razem, gdy deklarowany jest wewnętrzny obiekt tabeli, rozmiar tabeli nie należy do typu danych tabeli.
Note - Znacznie mniej pamięci jest zużywane, gdy tabela wewnętrzna jest zapełniana po raz pierwszy.
Przykład
Step 1- Otwórz Edytor ABAP, wykonując kod transakcji SE38. Pojawi się początkowy ekran edytora ABAP.
Step 2 - Na ekranie początkowym wprowadź nazwę programu, wybierz przycisk radiowy Kod źródłowy i kliknij przycisk Utwórz, aby utworzyć nowy program.
Step 3- W oknie dialogowym „ABAP: Atrybuty programu” wprowadź krótki opis programu w polu Tytuł, wybierz opcję „Program wykonywalny” z menu rozwijanego Typ w grupie Atrybuty. Kliknij przycisk Zapisz.
Step 4 - Napisz następujący kod w edytorze ABAP.
REPORT ZINTERNAL_DEMO.
TYPES: BEGIN OF CustomerLine,
Cust_ID TYPE C,
Cust_Name(20) TYPE C,
END OF CustomerLine.
TYPES mytable TYPE SORTED TABLE OF CustomerLine
WITH UNIQUE KEY Cust_ID.
WRITE:/'The mytable is an Internal Table'.
Step 5 - Zapisz, aktywuj i uruchom program jak zwykle.
W tym przykładzie mytable jest tabelą wewnętrzną, a unikalny klucz jest zdefiniowany w polu Cust_ID.
Powyższy kod daje następujące dane wyjściowe -
The mytable is an Internal Table.