Az ABAP nyelvi elemei I. - ELTE SAP Portalsap.elte.hu/sap_abap/ABAP-04.pdf · Hiba esetén ABAP...
Transcript of Az ABAP nyelvi elemei I. - ELTE SAP Portalsap.elte.hu/sap_abap/ABAP-04.pdf · Hiba esetén ABAP...
Az ABAP nyelvi elemei I. , Riportok készítése, debugger
Az SAP programozása 1.
Tarcsi Ádám
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 2
1. Az ABAP nyelvi elemei
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 3
Elemi adattípusok
Adattípus Leírás Kezdőérték
Kezdő hossz
I Integer 0 platform
függő
P Decimális, adott tizedesjegyekkel
0 8
F lebegő pontos 0.000... 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. 4
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. 5
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. 6
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. 7
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. 8
ABAP nyelvi elemei - áttekintés
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.
Elágazások:
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
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 10
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.
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
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 12
2. RIPORT program írása
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 13
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. 14
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. 15
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.'.
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
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 19
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ó
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
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 22
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 '__:__:__'.
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.
Eredménye:
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 24
• Többnyelvű • Aktiválni kell
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.
27
sy-subrc: 0 sy-fdpos: 43
sy-subrc: 4 sy-fdpos: 0
sy-subrc: 0 sy-fdpos: 5
sy-subrc: 0 sy-fdpos: 5
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1.
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 28
É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. 29
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. 30
3. Debugger
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 31
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. 32
ABAP Debugger – 1.
Tarcsi Ádám, ELTE Informatikai Kar: Az SAP programozása 1. 33
ABAP Debugger – 2.