Welcome file

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:

  1. Variables | SAP Help Portal
  2. ABAP w SAP – podstawy dla początkujących - os-CMS
  3. ABAP #1 – Typy danych – Destshar
  4. Internal Tablstrong textes | SAP Help Portal
  5. abap-cheat-sheets/01_Internal_Tables.md at main · SAP-samples/abap-cheat-sheets

Spis treści

  1. Zmienna statyczna a zmienna dynamiczna.
  2. Podział struktur ABAP.
  3. Podział tabel ABAP.

Zmienna statyczna a zmienna dynamiczna

    • Zadanie projektowe
      Porównanie deklaracji zmiennej dynamicznej i statycznej.

    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.

    • 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).​

    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ą:

    • DATA: lv_number TYPE i. - typ i (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.

    Deklaracja dynamiczna zmiennych

    Używaj gdy typ zależy od danych z runtime (np. z bazy, pliku, użytkownika):

    • 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).

    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,

    • Rozpoczyna definicję struktury o nazwie ls_employee (ls_ = lokalna struktura).

    id TYPE i,

    • Definiuje pierwszy komponent struktury: pole id typu i (integer, 4 bajty).

    name TYPE string,

    • Definiuje drugi komponent: pole name typu string (zmienna długość tekstu).

    END OF ls_employee.

    • Zamyka definicję struktury – ls_employee jest teraz gotowy do użycia.

    WRITE: ls_employee-id, ls_employee-name.

    • Wywołanie programu.

    Cechy struktur statycznych:

    • Zalety: sprawdzanie typów w kompilatorze, szybsze wykonanie.

    • Wady: sztywna struktura, nie da się zmienić w runtime.

    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?

    • 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).

    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.