DEKLARACJE ZMIENNYCH ABAP
Artykuł omawia podstawy deklaracji zmiennych, struktur i tabel wewnętrznych w ABAP, porównując podejścia statyczne (znane typy w kompilacji, DATA) z dynamicznymi (runtime, CREATE DATA + RTTS).
Przydatne linki:
- Variables | SAP Help Portal
- ABAP w SAP – podstawy dla początkujących - os-CMS
- ABAP #1 – Typy danych – Destshar
- Internal Tablstrong textes | SAP Help Portal
- abap-cheat-sheets/01_Internal_Tables.md at main · SAP-samples/abap-cheat-sheets
Spis treści
- Zmienna statyczna a zmienna dynamiczna.
- Podział struktur ABAP.
- Podział tabel ABAP.
Zmienna statyczna a zmienna dynamiczna
- Zadanie projektowe
Porównanie deklaracji zmiennej dynamicznej i statycznej. -
WRITE: / lv_hello_ABAP.- najpierw przechodzi do następnej linii na liście i dopiero tam wypisuje wartość zmiennej. -
Bez ukośnika, czyli
WRITE: lv_hello_ABAP., tekst zostałby wypisany od bieżącej pozycji w tej samej linii (dopisany dalej w wierszu). -
DATA: lv_number TYPE i.- typi(integer) znany z góry. -
DATA: lt_employees TYPE TABLE OF zemployee.– tabela o stałym typie wiersza. -
Zalety: szybsze wykonanie, sprawdzanie typów w kompilatorze, mniej błędów runtime.
-
DATA: lv_dynamic TYPE REF TO data.+CREATE DATA lv_dynamic TYPE ('ZVC_HOURS_WORK'). -
FIELD-SYMBOLS: <lt_table> TYPE STANDARD TABLE.+ASSIGN lr_table->* TO <lt_table>. -
Przykład z DDIC: gdy tabela/struktura jest dynamiczna z SE11 lub RTTS (Runtime Type Services).
- Rozpoczyna definicję struktury o nazwie
ls_employee(ls_= lokalna struktura). - Definiuje pierwszy komponent struktury: pole
idtypui(integer, 4 bajty). - Definiuje drugi komponent: pole
nametypustring(zmienna długość tekstu). - Zamyka definicję struktury –
ls_employeejest teraz gotowy do użycia. - Wywołanie programu.
-
Zalety: sprawdzanie typów w kompilatorze, szybsze wykonanie.
-
Wady: sztywna struktura, nie da się zmienić w runtime.
-
Statyczne: większość przypadków, gdy struktura jest znana (raporty, przetwarzanie danych).
-
Dynamiczne: gdy struktura zależy od danych zewnętrznych (SELECT *, import CSV, dynamiczne ALV).
I. Tworzymy nowy projekt ABAP.


II. Deklarujemy zmienną dynamiczną, która wyświetli nam tekst “Hello ABAP”

III. Poniżej prezentuję kod, dla zadeklarowania tej samej zmiennej, ale w sposób statyczny - kod zaznaczony na żółto:

Wypisuję jeszcze zawartość obu tych zmiennych: WRITE:/

W instrukcji WRITE w ABAP ukośnik (/) oznacza zapis w nowej linii.
IV. Klikamy aktywację kodu lub skrót CTRL F3 i za pomocą F8 uruchamiamy:

Kiedy używamy deklaracji dynamicznej a kiedy statycznej dla zmiennych?
Deklaracja statyczna zmiennych
Używamy gdy typ i struktura są znane przed kompilacją:
Deklaracja dynamiczna zmiennych
Używaj gdy typ zależy od danych z runtime (np. z bazy, pliku, użytkownika):
Deklaracja statyczna dla prostych programów i wydajności - łatwa do rozpoznania dla systemu z ciągu znaków, dynamiczna gdy pracujemy z nieznanymi strukturami z bazy lub budujesz generyczne narzędzia. Jeśli system nie będzie w stanie rozpoznać typu danych, to wówczas system podkreśli na czerwono wyrażenie i wskaże, że typ danych ABAP nie został rozpoznany. W skrócie mówiąc deklaracja dynamiczna jest szybsza.
PODZIAŁ STRUKTUR ABAP
W ABAP struktury dzielą się na statyczne (typ znany w czasie kompilacji) i dynamiczne (typ tworzony w runtime). Różnica dotyczy głównie sposobu deklaracji i elastyczności.
Struktury statyczne
Deklarowane z znanym typem przed kompilacją:
DATA: BEGIN OF ls_employee,
id TYPE i,
name TYPE string,
END OF ls_employee.


DATA: BEGIN OF ls_employee,
id TYPE i,
name TYPE string,
END OF ls_employee.
WRITE: ls_employee-id, ls_employee-name.
Cechy struktur statycznych:
Struktury dynamiczne
Tworzone w runtime za pomocą RTTS (Runtime Type Services):
DATA: lr_struct TYPE REF TO data.
FIELD-SYMBOLS: <ls_struct> TYPE any.
CREATE DATA lr_struct TYPE ('ZVC_HOURS_WORK').
ASSIGN lr_struct->* TO <ls_struct>.
Kiedy używać struktury statycznej a kiedy dynamicznej?
PODZIAŁ TABEL ABAP
W ABAP tabele wewnętrzne (internal tables) dzielą się na statyczne i dynamiczne w zależności od momentu deklaracji ich struktury i sposobu tworzenia. Statyczne tabele mają zdefiniowaną strukturę w czasie kompilacji, podczas gdy dynamiczne są tworzone w runtime za pomocą RTTS (Runtime Type Services).
Tabele globalne w ABAP (deklarowane w sekcji TABLES lub jako globalne zmienne DATA w programach raportowych) są zasadniczo statyczne. Ich struktura definiowana jest w czasie kompilacji i opiera się na tabelach bazodanowych lub zdefiniowanych typach z Dictionary, bez możliwości dynamicznego tworzenia w runtime. W nowszych ABAP-ach (7.4+) preferuje się unikać TABLES na rzecz jawnych struktur DATA: ls_spfli TYPE spfli. i SELECT do tabel wewnętrznych dla lepszej czytelności i wydajności. Tabele globalne sprawdzają się w starszych programach ekranowych (klasyczne raporty z ekranami dialogowymi - Dynpro), ale nie oferują dynamiczności.
Tabele statyczne
Tabele statyczne deklaruje się za pomocą instrukcji DATA z konkretnym typem, np. DATA: lt_tabela TYPE TABLE OF spfli.. Ich struktura jest stała i znana przed uruchomieniem programu, co zapewnia wysoką wydajność i bezpieczeństwo typów. Nadają się do prostych scenariuszy, gdzie liczba pól i ich typy nie zmieniają się dynamicznie.
Tabele dynamiczne
Dynamiczne tabele tworzy się w runtime, np. za pomocą klas CL_ABAP_TABLEDESCR i CREATE DATA, gdy struktura zależy od danych wejściowych lub użytkownika. Przykładowo: pobranie opisu struktury z bazy, utworzenie typu tabeli i przypisanie do field-symboli<ltab>. Używa się ich w zaawansowanych przypadkach jak dynamiczny ALV czy przetwarzanie nieznanych tabel bazodanowych.