V tretej časti nášho sprievodcu sa posúvame od základov k praktickej práci s dátami. Ukážeme si, ako v ABAPe pracovať s internými tabuľkami, načítať údaje z databázových tabuliek pomocou SELECT a pripraviť jednoduchý, ale funkčný výstup pre používateľa. Tieto zručnosti sú nevyhnutné pri vývoji reálnych SAP aplikácií, reportov či formulárov.
V tejto časti sa naučíte:
- vytvárať interné tabuľky a pracovať s nimi ako s dynamickými zoznamami údajov,
- používať SQL príkaz SELECT v prostredí ABAP na načítanie reálnych dát zo SAP databázy,
- vytvoriť jednoduchý výstup založený na filtrovaní a spracovaní dát zo štandardných SAP tabuliek.
Čo sú interné tabuľky v ABAPe? 📦
Interné tabuľky (angl. internal tables) sú dočasné dátové štruktúry uchovávané v pamäti, ktoré fungujú podobne ako zoznamy alebo polia. Sú základným nástrojom na prácu s väčším množstvom údajov – najčastejšie z databázy. Slúžia na uchovávanie a spracovanie väčšieho množstva údajov počas behu programu – najčastejšie ide o dáta, ktoré sú načítané z databázových tabuliek SAP systému.
Interné tabuľky môžeme prirovnať k zoznamom alebo poliam v iných programovacích jazykoch. Na rozdiel od klasickej databázy sa však údaje v interných tabuľkách uchovávajú len v pamäti počas trvania behu programu a po jeho ukončení sa strácajú. Práca s nimi je preto veľmi rýchla a efektívna.
Interné tabuľky sa najčastejšie používajú na:
- spracovanie výstupu z databázy,
- filtrovanie a triedenie údajov,
- hromadné operácie nad záznamami,
- prípravu údajov pre tlačové výstupy alebo exporty.
Interná tabuľka je vždy tabuľka záznamov rovnakého typu (struct). Každý záznam sa označuje ako work area a správa sa ako premenná jedného riadku. Typ záznamu sa definuje pomocou TYPES, zatiaľ čo samotná tabuľka a pracovná premenná sa deklarujú pomocou DATA.
Príklad deklarácie a použitia interných tabuliek
* abap
TYPES: BEGIN OF ty_zamestnanec,
meno TYPE string,
priezvisko TYPE string,
vek TYPE i,
END OF ty_zamestnanec.
DATA: it_zamestnanci TYPE TABLE OF ty_zamestnanec,
wa_zamestnanec TYPE ty_zamestnanec.
wa_zamestnanec-meno = 'Adam'.
wa_zamestnanec-priezvisko = 'Šangala'.
wa_zamestnanec-vek = 35.
APPEND wa_zamestnanec TO it_zamestnanci.
LOOP AT it_zamestnanci INTO wa_zamestnanec.
WRITE: / 'Meno:', wa_zamestnanec-meno,
'Priezvisko:', wa_zamestnanec-priezvisko,
'Vek:', wa_zamestnanec-vek.
ENDLOOP.
príklad abap sap deklarácia a použitie interných tabuliek
Vysvetlenie krok za krokom
- Definícia typu záznamu
Príkaz TYPES definuje vlastnú štruktúru záznamu ty_zamestnanec, ktorá obsahuje tri polia: meno, priezvisko a vek. - Deklarácia internej tabuľky a pracovnej oblasti
Pomocou DATA vytvárame:- it_zamestnanci: samotnú internú tabuľku,
- wa_zamestnanec: pracovnú oblasť (work area), teda jeden riadok tabuľky.
- Priradenie hodnôt
Pracovnej oblasti priradíme konkrétne hodnoty – meno, priezvisko a vek. - Pridanie záznamu do tabuľky
Pomocou príkazu APPEND sa pracovná oblasť wa_zamestnanec vloží ako nový riadok do internej tabuľky it_zamestnanci.
Kedy použiť interné tabuľky
Interné tabuľky sa používajú takmer v každom ABAP reporte alebo formulári, kde sa pracuje s väčším množstvom údajov. Sú ideálnym riešením, keď potrebujete:
- pracovať s dátami bez nutnosti meniť databázu,
- vykonávať výpočty alebo zoskupenia nad množinou záznamov,
- pripraviť výstup (napr. zoznam zákazníkov, objednávok, produktov).
Výpis údajov z internej tabuľky
Nasledujúci kód ukazuje, ako môžete výstup z tabuľky it_zamestnanci jednoducho vypísať:
* abap
LOOP AT it_zamestnanci INTO wa_zamestnanec.
WRITE: / wa_zamestnanec-meno, wa_zamestnanec-priezvisko, wa_zamestnanec-vek.
ENDLOOP.
Týmto spôsobom zobrazíte každý záznam na novom riadku.
Načítanie dát pomocou SELECT 📥
Jednou z najdôležitejších schopností ABAP programovania je práca s databázou. SAP systém využíva vlastné databázové tabuľky, ktoré uchovávajú všetky dôležité informácie o zákazníkoch, objednávkach, produktoch, letoch, faktúrach a podobne. Na ich čítanie slúži príkaz SELECT, ktorý je súčasťou jazyka Open SQL – štandardizovanej podmnožiny SQL optimalizovanej pre SAP systémy. Pomocou tohto príkazu dokážeme z databázovej tabuľky získať konkrétne záznamy, uložiť ich do internej tabuľky a ďalej ich spracovať v aplikácii.
sap abap syntax sql select interné tabuľky
Syntax SELECT do internej tabuľky
Najčastejšia forma načítania údajov do pamäti programu vyzerá takto:
* abap
SELECT * FROM <tabuľka> INTO TABLE <interná_tabuľka>
WHERE <podmienka>.
SELECT * znamená, že chceme všetky stĺpce (polia).
FROM určuje názov databázovej tabuľky (napr. sflight).
INTO TABLE ukladá výsledky do internej tabuľky.
WHERE definuje filter – načítajú sa len tie riadky, ktoré splnia podmienku.
výber letov tabuľka sflight
Príklad 1: Výber letov zo SAP tabuľky SFLIGHT
* abap
DATA: it_flights TYPE TABLE OF sflight,
wa_flight TYPE sflight.
SELECT * FROM sflight INTO TABLE it_flights
WHERE carrid = 'LH'.
LOOP AT it_flights INTO wa_flight.
WRITE: / wa_flight-carrid, wa_flight-connid, wa_flight-price.
ENDLOOP.
sap abap výstup výber letov tabuľka sflight
Vysvetlenie príkladu
- DATA: it_flights TYPE TABLE OF sflight
Vytvárame internú tabuľku na uloženie údajov z databázy – každý riadok má typ sflight. - SELECT * FROM sflight INTO TABLE it_flights WHERE carrid = ‚LH‘
Načítame všetky lety (záznamy) zo SAP tabuľky SFLIGHT, ktoré patria leteckej spoločnosti Lufthansa (carrid = ‚LH‘). - LOOP AT it_flights INTO wa_flight.
Cez cyklus prechádzame každý riadok internej tabuľky a kopírujeme ho do pracovnej oblasti wa_flight. - WRITE: / …
Vypíšeme vybrané údaje: kód leteckej spoločnosti (carrid), číslo letu (connid) a cenu (price) na nový riadok.
Tento príklad zobrazí všetky lety spoločnosti Lufthansa (carrid = ‚LH‘) spolu s číslom spojenia a cenou. Ak by ste chceli zobraziť viacero záznamov, stačí pridať ďalšie APPEND s inými údajmi pred LOOP.
Príklad 2: Výber vybraných polí a zoradenie podľa ceny (z tabuľky SFLIGHT)
* abap
TYPES: BEGIN OF ty_let,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
price TYPE sflight-price,
END OF ty_let.
DATA: it_lety TYPE TABLE OF ty_let,
wa_let TYPE ty_let.
SELECT carrid
connid
price
INTO TABLE it_lety
FROM sflight
WHERE carrid = 'LH'
ORDER BY price DESCENDING.
LOOP AT it_lety INTO wa_let.
WRITE: / 'Let:', wa_let-carrid,
'Spoj:', wa_let-connid,
'Cena:', wa_let-price.
ENDLOOP.
sap abap výstup výber vybraných polí zoradenie cena sflight
Vysvetlenie príkladu
- TYPES: BEGIN OF ty_let … definuje vlastný typ so zvolenými poľami.
- SELECT carrid connid price – načítavame len potrebné stĺpce (lepší výkon než SELECT *).
- ORDER BY price DESCENDING – zoradí lety od najdrahšieho.
- INTO TABLE – ukladá výsledok priamo do internej tabuľky it_lety.
- LOOP AT – zobrazí všetky výsledky.
Príklad 3: Výber letov s kombinovanými podmienkami (AND, OR, BETWEEN)
Takéto kombinovanie podmienok je veľmi užitočné pri tvorbe reportov v SAPe, keď chcete používateľom zobraziť len určitý výsek dát – podľa ceny, dátumu, mesta, leteckej spoločnosti alebo akýchkoľvek iných parametrov.
* abap
DATA: it_vyber TYPE TABLE OF sflight,
wa_vyber TYPE sflight.
SELECT * FROM sflight
INTO TABLE it_vyber
WHERE carrid = 'LH'
AND price BETWEEN 100 AND 500
AND currency = 'EUR'.
LOOP AT it_vyber INTO wa_vyber.
WRITE: / 'Let:', wa_vyber-carrid,
'Spoj:', wa_vyber-connid,
'Mena:', wa_vyber-currency,
'Cena:', wa_vyber-price.
ENDLOOP.
sap abap výstup výber letov kombinovanie podmienok
Vysvetlenie príkladu
- carrid = ‚LH‘ – vyberáme len lety spoločnosti Lufthansa.
- price BETWEEN 100 AND 500 – obmedzujeme výber na lety s cenou medzi 100 a 500.
- Alternatívne cityfrom LIKE ‚F%‘ – vyberáme len lety, ktoré odlietajú z miest začínajúcich na „F“ (napr. Frankfurt).
Príklad 4: JOIN spojenie medzi tabuľkami SFLIGHT a SCARR
Takéto spojenie tabuliek je kľúčové v praxi – najmä keď chcete vytvárať prehľady, reporty, faktúry alebo exporty, kde sú potrebné dáta z viacerých SAP tabuliek.
* abap
TYPES: BEGIN OF ty_spojeny,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
cityfrom TYPE spfli-cityfrom,
cityto TYPE spfli-cityto,
price TYPE sflight-price,
carrname TYPE scarr-carrname,
END OF ty_spojeny.
DATA: it_spojeny TYPE TABLE OF ty_spojeny,
wa_spojeny TYPE ty_spojeny.
SELECT s~carrid,
s~connid,
p~cityfrom,
p~cityto,
s~price,
c~carrname
INTO CORRESPONDING FIELDS OF TABLE @it_spojeny
FROM sflight AS s
INNER JOIN spfli AS p ON s~carrid = p~carrid AND s~connid = p~connid
INNER JOIN scarr AS c ON s~carrid = c~carrid
WHERE s~price > 300.
LOOP AT it_spojeny INTO wa_spojeny.
WRITE: / 'Let:', wa_spojeny-carrid,
'Spoj:', wa_spojeny-connid,
'Z:', wa_spojeny-cityfrom,
'Do:', wa_spojeny-cityto,
'Cena:', wa_spojeny-price,
'Spoločnosť:', wa_spojeny-carrname.
ENDLOOP.
sap abap výstup join spojenie medzi tabulkami sflight scarr
Vysvetlenie príkladu
- s~ a c~ označujú aliasy pre tabuľky sflight a scarr.
- Výber sa vykoná len pre tie záznamy, kde existuje zhodný carrid (identifikátor leteckej spoločnosti) v oboch tabuľkách.
- Do výsledku sa načítajú údaje o lete aj názov leteckej spoločnosti (carrname) z tabuľky SCARR.
- WHERE s~price > 300 filtruje len drahšie lety.
Kde získať dáta?
Tabuľka SFLIGHT je štandardná SAP ukážková tabuľka, ktorá obsahuje testovacie údaje o letoch. Ak ju nemáte dostupnú, môžete si na testovanie vytvoriť vlastnú databázovú tabuľku, alebo sa obrátiť na vášho administrátora, aby vám ju aktivoval (pomocou transakcie SE11). Takmer vždy, keď použijete SELECT, ukladáte výsledok do internej tabuľky a ďalej ho spracovávate – napríklad ho filtrujete, zoraďujete, vypisujete alebo exportujete.
✅ Tipy na prax:
- Môžete použiť aj SELECT carrid connid price namiesto SELECT *, čím znížite prenášané dáta.
- Ak chcete načítať len jeden riadok, použite SELECT SINGLE.
- Pri väčších objemoch údajov používajte optimalizácie ako SELECT FOR ALL ENTRIES.
Jednoduchý výstup pre používateľa 🖥️
ABAP umožňuje generovať tabuľkové výstupy, ktoré sú prehľadné a praktické pre koncových používateľov. Po načítaní údajov do internej tabuľky je ďalším krokom ich zobrazenie používateľovi. V ABAPe môžeme výstup vytvoriť rôznymi spôsobmi – od úplne jednoduchého výpisu cez príkaz WRITE, až po profesionálne tabuľkové výstupy v tzv. ALV Gridoch (ABAP List Viewer). Táto kapitola ukazuje, ako zobraziť dáta v štandardnom texte a naznačuje možnosť využitia ALV komponentov.
Vylepšený základný výstup pomocou WRITE
Ak chcete údaje prehľadne zobraziť v konzolovej výstupnej časti SAP GUI, stačí správne použiť príkazy WRITE: spolu s cyklom LOOP AT. Pridanie hlavičky navyše zlepší čitateľnosť.
* abap
WRITE: / 'Let ', 'Spoj ', 'Cena'.
LOOP AT it_flights INTO wa_flight.
WRITE: / wa_flight-carrid, wa_flight-connid, wa_flight-price.
ENDLOOP.
Vysvetlenie príkladu:
- WRITE: / ‚Let ‚, ‚Spoj ‚, ‚Cena‘.
Prvý výstup slúži ako hlavička tabuľky – vypíše názvy stĺpcov. Lomítko / zabezpečí, že sa začne nový riadok. - LOOP AT it_flights INTO wa_flight.
Cyklus, ktorý prechádza internú tabuľku it_flights. - WRITE: / …
Výpis jednotlivých hodnôt z každého riadku – každý let, spojenie a jeho cena. Výsledkom je zoznam letov spoločnosti Lufthansa (z predchádzajúceho SELECT-u).
Výstup bude vyzerať napríklad takto:
Prehľad letov a cien | ||
Let | Spoj | Cena |
---|---|---|
LH | 400 | 350,00 € |
LH | 401 | 320,00 € |
LH | 402 | 410,00 € |
Tento typ výpisu je jednoduchý, rýchly a vhodný na prvé programy, testovanie a kontrolu dát.
Alternatívny spôsob pomocou ALV výstupu (Advanced List Viewer)
Ak ste pokročilejší používateľ, môžete na výstup použiť komponentu ALV Grid (CL_GUI_ALV_GRID), ktorá:
- umožňuje triedenie, filtrovanie a export do Excelu,
- má interaktívne rozhranie so stĺpcami a hlavičkami,
- podporuje zložité formátovanie a layouty.
Použitie ALV si však vyžaduje:
- vytvorenie kontajnera (napr. v transakcii SE80),
- definovanie fieldcatalogu (popis stĺpcov),
- objektovo orientované volanie.
V tejto fáze série sa zameriavame na jednoduchý textový výstup, ALV Grid si ukážeme v pokročilejších častiach.
abap sap alv výstup
✅ Zhrnutie
- WRITE je vhodný na základný výstup textových a číselných údajov.
- Pridaním hlavičky a zalomením riadkov zlepšíte čitateľnosť.
- Na výpis údajov z internej tabuľky sa používa cyklus LOOP AT … INTO.
- Pre profesionálne riešenia (reporty, prehľady, exporty) sa využíva ALV Grid.
Záver a odporúčania k ABAP
V tretej časti našej série sme sa posunuli k tomu, čo robí ABAP taký dôležitý v reálnom svete SAP systémov – práca s dátami. Naučili sme sa, čo sú interné tabuľky a ako sa používajú na dočasné uchovávanie zoznamov údajov v pamäti. Ukázali sme si deklaráciu vlastných dátových typov, vytváranie riadkov a ich vkladanie do tabuliek.
Ďalej sme prešli načítavaním údajov z databázových SAP tabuliek pomocou príkazu SELECT, čo je jeden z najčastejších scenárov v podnikových riešeniach. Práca s databázou je základná zručnosť pre každého ABAP programátora – najmä ak ide o spracovanie objednávok, zákazníkov, materiálov alebo dokladov.
V závere sme sa venovali zobrazovaniu údajov používateľovi – od jednoduchého výpisu cez WRITE až po úvod do profesionálnych výstupov cez ALV Grid, ktoré si podrobnejšie rozoberieme v ďalšej časti.
✅ Odporúčania pre ďalšiu prax:
- Vyskúšajte načítať údaje z inej tabuľky ako SFLIGHT, napríklad SCARR alebo SPFLI.
- Skombinujte SELECT s IF podmienkami pre filtrovanie údajov podľa viacero kritérií.
- Precvičte si prácu s internými tabuľkami – skúste vložiť viacero riadkov, prechádzať ich, filtrovať či upravovať.
- Pri výpise údajov si môžete vytvoriť hlavičku, zarovnať stĺpce alebo doplniť logiku farebného zvýraznenia (v pokročilejších prípadoch).
ABAP je robustný jazyk, ktorý vás s každým krokom pustí hlbšie do sveta SAP – a my vám ho pomáhame objaviť krok za krokom.
Objavte naše online kurzy SAP a ABAP
Použité zdroje a literatúra SAP a ABAP
Online zdroje:
- https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm
- https://community.sap.com/topics/abap
- https://developers.sap.com/mission.abap-get-started.html
- https://blogs.sap.com/2020/05/12/a-beginners-guide-to-abap/
- https://www.guru99.com/abap-tutorial.html
- https://www.sapdev.co.uk/abap/abap_home.htm
- https://www.tutorialspoint.com/sap_abap/index.htm
- https://www.geeksforgeeks.org/introduction-to-sap-abap/
- https://www.erpgreat.com/abap/abap-overview.htm
- https://www.saptechnical.com/Tutorials/ABAP/ABAP.htm
Odborné články a knihy:
- Horn, M. (2021). ABAP Programming for SAP S/4HANA. Rheinwerk Publishing.
- Jung, T. (2015). Modern ABAP Programming. SAP Press.
- Keller, G., Krüger, T. (2020). ABAP Objects: ABAP Programming in SAP NetWeaver. SAP Press.
- Müller, T. (2019). Practical Guide to SAP ABAP Part 1: Conceptual Overview. Espresso Tutorials.
- Richter, B. (2017). ABAP Development for SAP Business Workflow. SAP Press.
- Schneider, B. (2018). Clean ABAP: A style guide for better ABAP code. SAP Community WIKI.