Az ABAP nyelvi elemei I., Riportok készítése, debugger Az SAP programozása 1. Tarcsi Ádám
1. Az ABAP nyelvi elemei Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 2
Elemi adattípusok Adattípus Leírás I Integer 0 P Decimális, adott tizedesjegyekkel Kezdőérté k F lebegő pontos 0.000... Kezdő hossz platform függő 0 8 platform függő N numerikus szöveg 000... 1 C szöveg (karakter) space 1 D dátum YYYYMMDD 00000000 8 T idő HHMMSS 000000 6 X hexadecimális X'00' 1 STRING Szöveges dinamikus XSTRING Hexadecimális szöveges dinamikus Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 3
Operátorok EQ Egyenlő (=) NE Nem egyenlő (<>) GT Nagyobb (>) LT Kisebb (<) GE Nagyobb vagy egyenlő (>=) LE Kisebb vagy egyenlő (<=) Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 4
Aritmetikai operátorok +összeadás - kivonás * szorzás / osztás DIV egészosztás MOD egészosztás maradéka ** hatványozás Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 5
Néhány egyszerű példa DATA integer TYPE i. Integer = 4 / 10. - az eredmény 0 Integer = 5 / 10. - az eredmény 1 SUM = SUM + 1. SUM = SUM + : 1, 2, 3, 4. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 6
Változók kezelése Paraméterek (beolvasás): PARAMETERS pa_carr TYPE scarr-carrid. Lokális típus: TYPES z_c_tipus(8) TYPE c. Változó deklaráció: DATA z_text TYPE z_text_type. DATA : z_text TYPE z_text_type, z_carr TYPE scarr-carrid, z_carr2 LIKE z_carr. Konstans: CONSTANS c_cf TYPE s_crarr_id VALUE 'QF'. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 7
ABAP nyelvi elemei - áttekintés Elágazások: IF <feltétel1>. <végrehajtási blokk> ELSEIF <feltétel2>. <végrehajtási blokk> ELSEIF <feltétel2>. <végrehajtási blokk>... ELSE. <végrehajtási blokk> ENDIF. CASE <mezőnév>. WHEN <érték1>. <végrehajtási blokk> WHEN <érték2>. <végrehajtási blokk>... WHEN OTHERS. <végrehajtási blokk> ENDCASE. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 8
Elágazások példa IF sy-saprl < '45A'. WRITE: / 'ABAP Release', sy-saprl, 'nem objektumorientált'. ELSE. IF sy-saprl < '46A'. WRITE: / 'ABAP Release', sy-saprl, 'részben objektumorientált'. ELSE. WRITE: / 'ABAP Release', sy-saprl, 'teljesen objektumorientált'. ENDIF. ENDIF. CASE sy-datum+4(2). WHEN '12' OR '01' OR '02'. WRITE / 'Tél'. WHEN '03' OR '04' OR '05'. WRITE / 'Tavasz'. WHEN '06' OR '07' OR '08'. WRITE / 'Nyár'. WHEN '09' OR '10' OR '11'. WRITE / 'Ősz'. WHEN OTHERS. WRITE 'Hibás dátum'. ENDCASE. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 9
Ismétlési szerkezetek DO [<n> TIMES]. <végrehajtási blokk> ENDDO. DO. <végrehajtási blokk> IF <kilépési feltétel>. EXIT. ENDIF. ENDDO. While <feltétel>. <végrehajtási blokk> ENDWHILE. SELECT <mezőnevek> FROM <tábla> <végrehajtási blokk> ENDSELECT. LOOP AT <belső tábla> <végrehajtási blokk> ENDLOOP. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 10
DO és WHILE DATA: is_zero TYPE i. DO 20 TIMES. is_zero = sy-index MOD 2. CHECK is_zero = 0. WRITE:/ 'Index:', sy-index. ENDDO. DATA: inner_limit TYPE i VALUE 5, outer_limit TYPE i VALUE 5, inner_index TYPE i, outer_index TYPE i. WHILE outer_limit > 0. outer_index = sy-index. WRITE: / 'Külső érték:', sy-index, 'Limit:', outer_limit. inner_limit = 5. WHILE inner_limit > 0. inner_index = sy-index. WRITE: / ' Belső érték:', sy-index, ' Limit:', inner_limit. inner_limit = inner_limit - 1. ENDWHILE. outer_limit = outer_limit - 1. ENDWHILE. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 11
2. RIPORT program írása Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 12
WRITE WRITE AT [/] [<pos>][(<len>)] <f>. LEFT-JUSTIFIED Balra igazított szöveg CENTERED Középre igazított RIGHT-JUSTIFIED Jobbra igazított szöveg UNDER <g> A kimenet a <g> mező alatt kezdődik NO-GAP Nem hagy szóközt a mező kiírása után USING EDIT MASK <m> Formátum template-t lehet megadni NO-ZERO Ha csak nullákat tartalmaz akkor szóközt ír NO-SIGN A negatív előjel nem jelenik meg DECIMALS <d> Hány tizedesjegy jelenjen meg EXPONENT <e> F típusú mezőknél a kitevő hossza ROUND <r> <r> tizedesjegyre kerekít CURRENCY <c> A <c> pénznemnem megfelelő kiíratás UNIT <u> A mennyiségnek megfelelő tizedesjegy TEXT-001 A text-001 szöveges mező kiírása Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 13
WRITE 2. Vízszintes vonal ULINE [AT [/] [<pos>][(<len>)]. WRITE [AT [/] [<pos>][(<len>)] SY-ULINE. Függőleges vonal VLINE [AT [/] [<pos>]. WRITE [AT [/] [<pos>] SY-VLINE. Üres sor SKIP [<n>]. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 14
WRITE példák DATA: number TYPE p VALUE '-1234567.89' DECIMALS 2. * Egyszerű write WRITE 'Szia'. * Aposztróf kiírása. WRITE: / 'Aposztróf kiírása '' így lehetséges.'. * Standart output format. WRITE: 'A Number nevű szám packed formátumú:', number. * Pozícionálás WRITE 'Első sor.'. WRITE 'Még mindig az első sor.'. WRITE /'Második sor.'. WRITE /13 'Harmadik sor, 13-ik karaktertől.'. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 15
WRITE példák 2. DATA: len TYPE i, pos TYPE i, text(10) TYPE c VALUE '1234567890, integer TYPE i VALUE 1234567890. * Pozícionálás WRITE 'Első sor.'. WRITE 'Még mindig az első sor.'. WRITE /'Második sor.'. WRITE /13 'Harmadik sor, 13-ik karaktertől.'. len = 10. pos = 12. WRITE 'A számsor ------------ ebben a szövegben jelenik meg.'. WRITE AT pos(len) text. * Vágás WRITE: (5) integer, /(5) text. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 16
WRITE példák 3. * Listában nem jelenig meg üres sor WRITE: 'Egy', / ' ', / 'Kettő'. SKIP 2. * sy: System variables és igazítás. WRITE: 'Sorszám:', sy-linno LEFT-JUSTIFIED, /. "Sorszám. SKIP 2. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 17
WRITE példák 4. DATA: flag1 TYPE c VALUE ' ', flag2 TYPE c VALUE 'X', flag3(5) TYPE c VALUE 'Xenon'. * icon-ok és symbol-umok INCLUDE <symbol>. INCLUDE <icon>. WRITE: / 'Phone Symbol:', SYM_PHONE AS SYMBOL. SKIP. WRITE: / 'Alarm Icon: ', icon_alarm AS ICON. SKIP 2. * checkbox WRITE: / 'Flag 1 ', flag1 AS CHECKBOX, / 'Flag 2 ', flag2 AS CHECKBOX, / 'Flag 3 ', flag3 AS CHECKBOX. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 18
Környezeti változók (system fields): sy - tábla SY-DBSYS: adatbázis rendszer SY-HOST: alkalmazás-szerver SY-OPSYS: alkalmazás szerveri operációs rendszer SY-SYSID: R/3 rendszer ID SY-MANDT: mandant száma SY-MODNO: session szám SY-UNAME: felhasználó neve SY-DATUM: dátum SY-FDAYW: nap sorszáma a héten SY-TIMLO: lokális idő SY-UZEIT: idő a szerveren SY-TCODE: jelenlegi tranzakció kódja SY-REPID: jelenleg futó program neve SY-DYNNR: jelenleg futó ablak sorszáma SY-ULINE, SY-VLINE: konstans horizontális, vertikális vonalat rajzol SY-INDEX: cikluson belül az aktuális lépésszám SY-SUBRC: visszatérési érték, ált. hiba jelzésére SY-CUCOL, SY-CUROW: horizontális, vertikális kurzor pozíció Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 19
WRITE példák 5. DATA: g(5) TYPE c VALUE 'Hello', f(5) TYPE c VALUE 'Világ', float TYPE f VALUE '123456789.0', pack TYPE p VALUE '123.456' DECIMALS 3. * Formázás WRITE: g, f. WRITE: /10 g, / f UNDER g. WRITE: / g NO-GAP, f. WRITE: '000123', / '000123' NO-ZERO. WRITE float EXPONENT 3. WRITE pack DECIMALS 2. WRITE: / pack ROUND -2, / pack ROUND -1, / pack ROUND 1, / pack ROUND 2. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 20
WRITE példák 6. * Formázás FORMAT COLOR COL_HEADING. "vagy =1. WRITE: 'Oszlopfejléc formátumú szöveg'. FORMAT COLOR COL_HEADING OFF. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 21
Dátumok kezelése 1. DATA: time TYPE t VALUE '154633', datum TYPE sy-datum, ev(4) type c, honap(2) type c, nap(2) type c. WRITE: sy-datum, / sy-datum YYMMDD. datum = sy-datum. ev = datum(4). honap = datum+4(2). nap = datum+6(2). ULINE. WRITE: / datum, / ev no-gap, honap no-gap, nap. WRITE: time, /(8) time USING EDIT MASK ' : : '. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 22
Dátumok kezelése 2. PARAMETERS t_start TYPE t DEFAULT '080000'. DATA: d_start TYPE d, year_days TYPE i, working_hours TYPE i. d_start = sy-datum. d_start+4(4) = '0101'. year_days = sy-datum - d_start + 1. working_hours = ( sy-uzeit - t_start ) / 3600. WRITE: / 'Eltelt napok száma a', sy-datum(4), '-es évben:', year_days, / 'Eltelt munkaidő:', working_hours. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 23
Szövegszimbólumok használata DATA szoveg(10) TYPE c. szoveg = text-010. WRITE: / szoveg, text-020. Többnyelvű Aktiválni kell Eredménye: Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 24
Szövegkezelés Szöveg hossza: DATA: text(25) TYPE c VALUE 'SAP ABAP programozás', len TYPE i. len = strlen( text ). WRITE: / 'A(z)', text, 'szöveg hossza:', len. Konkatenáció: DATA: SOR(20) TYPE C. CONCATENATE 'You''' 'll be there.' INTO SOR. WRITE:/ SOR. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 25
Szövegkezelés Csere: DATA text TYPE string. text = 'Token 1, Token 2, Token 3, Token 4'. WHILE sy-subrc = 0. REPLACE ', ' WITH ' - ' INTO text. ENDWHILE. WRITE / text. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 26
Keresés szövegben DATA: text TYPE string. text = 'Öreg kutya vak-vak-vak, ha nem muszáj, nem ugat!'. WRITE: / 'Keresés az alábbi szövegben:', '''Öreg kutya vak-vak-vak, ha nem muszáj, nem ugat!'''. SKIP. SEARCH text FOR 'ugat '. WRITE: / 'Keresendő: ''ugat '''. WRITE: / 'sy-subrc:', sy-subrc, / 'sy-fdpos:', sy-fdpos. ULINE. SEARCH text FOR '.ugat.'. WRITE: / 'Keresendő: ''.ugat.'''. WRITE: / 'sy-subrc:', sy-subrc, / 'sy-fdpos:', sy-fdpos. ULINE. SEARCH text FOR 'kuty*'. WRITE: / 'Keresendő: ''kuty*'''. WRITE: / 'sy-subrc:', sy-subrc, / 'sy-fdpos:', sy-fdpos. ULINE. SEARCH text FOR '*utya'. WRITE: / 'Keresendő: ''*utya'''. WRITE: / 'sy-subrc:', sy-subrc, / 'sy-fdpos:', sy-fdpos. ULINE. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. sy-subrc: 0 sy-fdpos: 43 sy-subrc: 4 sy-fdpos: 0 sy-subrc: 0 sy-fdpos: 5 sy-subrc: 0 sy-fdpos: 5 27
Értékadás / törlés Move DATA: A(5), B(5), C(5). A = 12345. B = 67890. MOVE A+2(2) TO C. MOVE A+2(2) TO B+1(3). C értéke 34 lesz, B értéke pedig 634 0 MOVE-CORRESPONDING <fs1> TO <fs2>. WRITE (a) TO b. Változó értékének törlése: CLEAR f. Belső tábla értékeinek törlése: REFRESH t_itab. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 28
Logikai kifejezések karaktersorozathoz CO (Contains Only): <f1> CO <f2> Igaz, ha <f1> csak <f2>-beli karaktereket tartalmaz. CN (Contains Not only): <f1> CN <f2> Igaz, ha <f1> nem csak <f2>-beli karaktereket tartalmaz. CA (Contains Any): <f1> CA <f2> Igaz, ha <f1> legalább egy karaktert tartalmaz <f2>-ből. NA (contains Not Any): <f1> NA <f2> Igaz, ha <f1> egyetlen karaktert sem tartalmaz <f2>-ből. CS (Contains String): <f1> CS <f2> Igaz, ha <f1> tartalmazza <f2> stringet. Az összehasonlítás nem kisbetű/nagybetű függő. NS (contains No String): <f1> NS <f2> Igaz, ha <f1> nem tartalmazza <f2> stringet. Az összehasonlítás nem kisbetű/nagybetű függő. CP (Contains Pattern): <f1> CP <f2> Igaz, ha <f1> tartalmazza az <f2> mintát. A minta tartalmazhat joker karaktereket (* és +). Az összehasonlítás nem kisbetű/nagybetű függő. NP (contains No Pattern): <f1> NP <f2> Igaz, ha <f1> nem tartalmazza az <f2> mintát. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 29
3. Debugger Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 30
Debugger Test plan készítés Minden pozitív / negatív teszt esetre tesztelni Nullával való osztás Beviteli ellenőrzések tesztelése Paraméterek értékének, kitöltésének ellenőrzése Hiba esetén ABAP debugger Breakpointok elhelyezése, lépésenkénti végrehajtás Kivételkezelés Memória és egyéb erőforráshasználat- figyelés Watch point elhelyezése ABAP és SQL trace Változó értékének nyomkövetése sy-subrc <> 0 ellenőrzése SE30 performancia analízis tranzakció SLIN tranzakció: kiterjesztett szintaktikai ellenőrzés CATT: Computer Aided Test Tool Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 31
ABAP Debugger 1. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 32
ABAP Debugger 2. Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 33