Академический Документы
Профессиональный Документы
Культура Документы
Contents :
8.5.4.EXCLUDE_TB_FUNCTIONS.............................................................................................................31
8.5.5.BUTTON_SCNUM...........................................................................................................................32
8.6.Program Testing....................................................................................................................................32
9.BDC (Batch Data Communication)..................................................................................................32
9.1. SHDB (Transaction Recording).............................................................................................................32
9.2. Dialog program untuk BDC..................................................................................................................34
9.2.1. Deklarasi type, data, parameter dan start of selection.................................................................35
9.2.2. Create screen................................................................................................................................35
9.2.3. Subroutine....................................................................................................................................36
9.2.3.1. REFRESH.................................................................................................................................36
9.2.3.2. SET_FIELDCAT........................................................................................................................36
9.2.3.3. EXCLUDE_TB_FUNCTIONS......................................................................................................36
9.2.3.4. GETDATA................................................................................................................................36
9.2.3.5. BACA......................................................................................................................................36
9.2.3.6. VALIDASI_WA_GRID...............................................................................................................37
9.2.3.7. RUNBDC.................................................................................................................................37
10. Program Template........................................................................................................................37
10.1.ALV Template......................................................................................................................................37
10.2.Dialog Template..................................................................................................................................37
10.2.1.Class ALV for List transaction.......................................................................................................37
10.2.2. Dialog Table Control Template....................................................................................................37
10.3.BDC template.....................................................................................................................................37
View Tables
Character (text), Numerical character (number string), Date, Time Integer, Floating point
number, Packed number, dan HeX code).
Tipe Data Artinya Nilai Awal Panjang Digit Digit
diperbolehkan
Numerik
P Packed Number 0 8 1-16
I Integer 0 4 4
F Floating point no. 0.000… 8 8
Alfa-numerik
N Numeric text 00…0 1 1-max.
C Text blank 1 1-max.
D Date 00000000 8 8
(yyyyMMdd)
T Time (hhmmss) 000000 6 6
X Hexadesimal X'00' 1 1-max.
Max : 65,535 bytes
Contoh :
>> Kode Sintak
Data :
a TYPE i,
b TYPE i,
c TYPE p DECIMALS 2.
START-OF-SELECTION.
a = 10.
b = 100.
c = a / b.
WRITE : / 'Hitung : ', a, '/', b, '=', c.
>> Tampilan :
User-define data types memungkinkan untuk melakukan deklarasi data types yang specific sesuai
dengan kebutuhan.
Elementary Types merupakan data type sederhana yang mengacu terhadap data type yang lainya
yang sudah dideklarasikan, bukan mengacu ke Built-in Elementary.
2. Globa> data type yang dideklarasikan di dalam Program Include atau di ABAP Dictionay ( Domain,
Data Element , dsb )
Contoh Domain :
Contoh :
DATA :
A TYPE I,
B TYPE I,
C TYPE P DECIMALS 2.
DATA : D LIKE C. " Elementary Data Type (Local)
START-OF-SELECTION.
A = 10.
B = 100.
C = A / B.
D = C.
WRITE : / 'Hitung : ', A, '/', B, '=', D.
>> Tampilan :
1.2.2.1. Structure.
Structure dalam ABAP sering disebut juga sebagai Workarea atau Header Line. Dalam bahasa
pemrograman lain structure bisa juga disamakan sebagai Array satu dimensi.
*Cara Pertama
types : begin of ty_wa,
a type i,
b type i,
hasil type p decimals 2,
end of ty_wa.
Data : l_wa1 type ty_wa. " Sturcture (Workarea)
*Cara Kedua
data: begin of l_wa2,
a type i,
b type i,
hasil type p decimals 2,
end of l_wa2. " Sturcture (Workarea)
1.2.2.2. Table
Tables dalam ABAP sering disebut juga sebagai internal table ( temporary table ) atau table (real).
Dalam bahasa pemrograman lain tables bisa juga disamakan sebagai Array multi dimensi.
TYPES :
BEGIN OF ty_wa,
a TYPE i,
b TYPE i,
hasil TYPE p DECIMALS 2,
END OF ty_wa.
SAP Menu > Tools > ABAP Workbench > Development > ABAP Dictionary
Domain
Table View
2.1. Domain
Domain merupakan bagian dari Elementary Types dengan type global, yang dapat digunakan
diseluruh Data Element.
4. Klik tombol
5. Isi Short Description. Kemudian isi Data Type, No. Characters, Decimal places dan Output length
seperti dibawah ini.
6. Klik tombol
7. Package diisi untuk membuat Domain yang dapat di transport ke client lain, tapi jika hanya untuk
latihan tidak perlu diisi.
8. Klik tombol jika ingin membuat Domain yang dapat ditransport ke client lain. Klik
tombol jika hanya untuk latihan.
Elemen Data merupakan bagian dari Elementary Types dengan type global, yang dapat digunakan
diseluruh Field (dalam Table) dan sebagai reference data type dalam program ABAP.
4. Klik tombol
6. Isi Short Description. Kemudian isi Domain jika ingin menggunaka data type dari Domain. Tetapi jika
ingin membuat data type maka aktifkan Built-int type.
7. Aktifkan Tab Field label dan kemudian isi Field Label sesuai dengan kebutuhan, jika sudah selesai
tekan enter.
By Eclectic Consulting P a g e | 10
SAP Abap Training
8. Klik tombol
9. Package diisi untuk membuat Data Element yang dapat di transport ke client lain, tapi jika hanya
untuk latihan tidak perlu diisi.
10. Klik tombol jika ingin membuat Data Element yang dapat ditransport ke client lain. Klik
tombol jika hanya untuk latihan.
2.3. Structure
Structure merupakan bagian dari Complex Types dengan type global structures, yang dapat digunakan
sebagai reference data type diseluruh program ABAP.
4. Klik tombol
By Eclectic Consulting P a g e | 11
SAP Abap Training
7. Isikan field-field yang dibutuhkan. Jika suatu field memiliki data type yang sama dengan yang di Data
Element, maka isi Data Element tersebut di kolom Data Element. Jika suatu field memiliki data type
yang beda dengan yang ada di Data Element SAP maka tombol harus diklik untuk
mengaktikan kolom Data Type. Jika sudah selesai maka klik tombol lagi untuk
mengaktifkan kolom Component Type.
8. Klik tombol
9. Package diisi untuk membuat Structure yang dapat di transport ke client lain, tapi jika hanya untuk
latihan tidak perlu diisi.
By Eclectic Consulting P a g e | 12
SAP Abap Training
10. Klik tombol jika ingin membuat Structure yang dapat ditransport ke client lain. Klik tombol
jika hanya untuk latihan.
2.4. Table
Table merupakan bagian dari Complex Types dengan type global tables tetapi Table dapat diisi data dan
disimpan di server, yang dapat digunakan sebagai reference data type diseluruh program ABAP.
4. Klik tombol
5. Isi Short Description. Kemudian isi Delivery Class dan Data Browser/Table View Maint. seperti
By Eclectic Consulting P a g e | 13
SAP Abap Training
dibawah ini.
6. Aktifkan tab Fields. Kemudian isi Field dan atribute-nya seperti dibawah ini.
Keterangan :
•F
i
e
l
d
"
M
A
N
By Eclectic Consulting P a g e | 14
SAP Abap Training
D
T
"
w
a
ji
b
d
i
b
u
a
t
u
n
t
u
k
m
e
m
b
e
d
a
k
a
n
d
a
t
a
b
e
r
d
a
s
a
r
By Eclectic Consulting P a g e | 15
SAP Abap Training
k
a
n
c
li
e
n
t
ji
k
a
d
a
l
a
m
s
a
t
u
s
e
r
v
e
r
m
e
m
il
i
k
i
b
e
b
e
r
a
By Eclectic Consulting P a g e | 16
SAP Abap Training
p
a
c
li
e
n
t
.
• Ji
k
a
C
h
e
c
k
B
o
x
K
e
y
d
i
a
k
ti
f
k
a
n
m
a
k
a
fi
e
l
d
t
By Eclectic Consulting P a g e | 17
SAP Abap Training
e
r
s
e
b
u
t
a
d
a
l
a
h
m
a
n
d
a
t
o
r
y
d
a
n
m
e
n
j
a
d
i
p
ri
m
a
r
y
k
e
By Eclectic Consulting P a g e | 18
SAP Abap Training
y
.
• Ji
k
a
C
h
e
c
k
B
o
x
I
n
ti
a
l
V
a
l
u
e
d
i
a
k
ti
f
k
a
n
m
a
k
a
fi
e
l
d
By Eclectic Consulting P a g e | 19
SAP Abap Training
t
e
r
s
e
b
u
t
m
e
m
il
i
k
i
n
il
a
i
a
w
a
l
s
e
s
u
a
i
d
e
n
g
a
n
d
a
t
a
t
By Eclectic Consulting P a g e | 20
SAP Abap Training
y
p
e
-
n
y
a
k
e
ti
k
a
d
i
a
k
a
n
d
i
a
p
p
e
n
d
a
t
a
u
d
i
i
n
s
e
r
t
.
By Eclectic Consulting P a g e | 21
SAP Abap Training
7. Isikan field-field yang dibutuhkan. Jika suatu field memiliki data type yang sama dengan yang di Data
Element, maka isi Data Element tersebut di kolom Data Element. Jika suatu field memiliki data type
yang beda dengan yang ada di Data Element SAP maka tombol harus diklik
untuk mengaktikan kolom Data Type. Jika sudah selesai maka klik tombol lagi
untuk mengaktifkan kolom Component Type.
8. Klik tombol
9. Package diisi untuk membuat Table yang dapat di transport ke client lain, tapi jika hanya untuk
latihan tidak perlu diisi.
10. Klik tombol jika ingin membuat Table yang dapat ditransport ke client lain. Klik
tombol jika hanya untuk latihan.
12. Isi Data Class dan Size Category seperti dibawah ini.
By Eclectic Consulting P a g e | 22
SAP Abap Training
2. 5. View
View merupakan bagian dari Complex Types dengan tipe global tables yang isi adalah gabungan dari
beberapa table. Selain itu, view dapat digunakan sebagai reference data tipe diseluruh program ABAP.
By Eclectic Consulting P a g e | 23
SAP Abap Training
4. Klik tombol
Penting : Sumber adalah table yang bernama ZTNOTA dan ZTNOTAD. Buat table ZTNOTAD jika ZTNOTAD
belum ada sesuai dengan gambar dibawah ini.
By Eclectic Consulting P a g e | 24
SAP Abap Training
7. Gabungkan dua table yang bernama ZTNOTA dan ZTNOTAD sesuai dengan gambar dibawah ini.
8. Aktikan field View Flds. Kemudian isi kolom-kolomnya seperti gambar berikut.
9. Klik tombol
10. Package diisi untuk membuat View yang dapat di transport ke client lain, tapi jika hanya untuk latihan
tidak perlu diisi.
By Eclectic Consulting P a g e | 25
SAP Abap Training
11. Klik tombol jika ingin membuat View yang dapat ditransport ke client lain. Klik tombol
jika hanya untuk latihan.
3. Abap Programing
Contoh :
TYPES :
BEGIN OF zs_reason,
By Eclectic Consulting P a g e | 26
SAP Abap Training
selec TYPE char1,
grund TYPE co_agrnd,
grdtx TYPE co_grdtx,
END OF zs_reason.
DATA :
it_reason TYPE TABLE OF zs_reason,
wa_reason TYPE TABLE OF zs_reason.
Contoh:
TABLES : mara.
PARAMETERS : p_aufnr TYPE afko-aufnr OBLIGATORY.
SELECT-OPTIONS: p_matnr FOR mara-matnr.
5. Main Program
Merupakan kursor awal program dijalankan setelah initial screen (Screen parameters dan selection-option) di
tampilkan (F8).
START-OF-SELECTION.
…
END-OF-SELECTION.
6. Subroutine
Merupakan procedure yang dibuat di dalam program.
Deklarasi procedure:
FORM <SubrName> [TABLES table_parameters]
[USING parameters]
[CHANGING parameters]
[RAISING exc1|RESUMABLE(exc1) exc2|RESUMABLE(exc2) ...].
...
ENDFORM.
Memanggil Procedure :
PERFORM <SubrName> [TABLES table_parameters]
[USING parameters]
[CHANGING parameters]
[RAISING exc1|RESUMABLE(exc1) exc2|RESUMABLE(exc2) ...].
ABAP Editor adalah salah satu Menu SAP untuk mendevelop program ABAP. Pertama-tama dalam
membuat program ABAP, user SAP harus memiliki Developer Key terlebih dahulu. Tanpa Developer Key,
user tidak diperkenankan untuk membuat program ABAP di SAP.
By Eclectic Consulting P a g e | 27
SAP Abap Training
1. Check (Ctrl+F2), digunakan untuk memeriksa syntax ABAP. Jika ada syntax yang salah maka akan
keluar list errornya.
2. Activate (Ctrl+F3), digunakan untuk menaktifkan program ABAP. Jika program ABAP belum aktif
maka program tidak dapat dijalankan dan tidak dapat ditransport.
4. Display Object List (Ctrl+Shift+F5), digunakan untuk menampilkan structure dari syntax program
ABAP.
5. Help On (Ctrl+F8), digunakan untuk membuka dan mencari keyword untuk Help Syntax ABAP.
By Eclectic Consulting P a g e | 28
SAP Abap Training
By Eclectic Consulting P a g e | 29
SAP Abap Training
p
(F
5)
,
di
g
u
n
a
k
a
n
u
nt
u
k
m
as
u
k
k
e
d
al
a
m
s
u
br
o
ut
in
e
at
a
u
m
o
d
ul
e.
2. Ex
e
c
ut
e
(F
By Eclectic Consulting P a g e | 31
SAP Abap Training
8)
,
di
g
u
n
a
k
a
n
u
nt
u
k
m
e
n
g
e
ks
e
k
u
si
b
ar
is
k
o
di
n
g
sa
tu
p
er
sa
tu
.
3. R
et
ur
n
F
7)
,
By Eclectic Consulting P a g e | 32
SAP Abap Training
di
g
u
n
ak
a
n
u
nt
u
k
k
el
u
ar
d
ar
i
su
br
o
ut
in
e.
4. R
u
n
(t
o
C
ur
s
or
)
(F
8)
,
di
g
u
n
a
k
a
n
u
nt
By Eclectic Consulting P a g e | 33
SAP Abap Training
u
k
m
e
n
g
e
ks
e
k
u
si
s
e
m
u
a
b
ar
is
pr
o
gr
a
m
d
a
n
d
a
p
at
b
er
h
e
nt
i
ji
k
a
a
d
a
Ic
o
n
By Eclectic Consulting P a g e | 34
SAP Abap Training
"
"
By Eclectic Consulting P a g e | 35
SAP Abap Training
4. Data Retreival
REPORT z_eic_parameter.
DATA word(20).
TYPES :
BEGIN OF zs_makt,
maktx TYPE makt-maktx,
matnr TYPE makt-matnr,
END OF zs_makt.
TABLES : mara,toa01,bkpf,vbak.
AT SELECTION-SCREEN OUTPUT.
text_101 = 'Selection Parameter'.
By Eclectic Consulting P a g e | 36
SAP Abap Training
*** FROM makt
*** INTO TABLE it_makt
*** WHERE spras = 'E'.
***
***
*** CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
*** EXPORTING
*** retfield = 'PMATNR'
*** dynpprog = 'ZLAT_01'
*** dynpnr = '1000'
*** dynprofield = 'P'
*** value_org = 'S'
*** TABLES
*** value_tab = it_makt.
*** IF sy-subrc <> 0.
**** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
**** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*** ENDIF.
***
***
***AT SELECTION-SCREEN ON VALUE-REQUEST FOR pmatnr1-low.
**** ambil data
*** CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
*** EXPORTING
*** retfield = 'PMATNR1'
*** dynpprog = 'ZPRINT_ZNOTA'
*** dynpnr = '1000'
*** dynprofield = 'PMATNR1'
*** value_org = 'S'
*** TABLES
*** value_tab = it_makt.
*** IF sy-subrc <> 0.
**** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
**** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*** ENDIF.
***
***AT SELECTION-SCREEN ON VALUE-REQUEST FOR pmatnr1-high.
**** ambil data
*** CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
*** EXPORTING
*** retfield = 'PMATNR1'
*** dynpprog = 'ZLAT_01'
*** dynpnr = '1000'
*** dynprofield = 'PMATNR1'
*** value_org = 'S'
*** TABLES
*** value_tab = it_makt.
*** IF sy-subrc <> 0.
**** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
**** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*** ENDIF.
****
**
By Eclectic Consulting P a g e | 37
SAP Abap Training
**** Berikut contoh Radio Button
****&----------------------------------------------------------*
*** selection-screen begin of block1 selscr with frame title text-000.
***
*** PARAMETERS: p_rad1 RADIOBUTTON GROUP rad1 USER-COMMAND a DEFAULT 'X',
*** p_rad2 RADIOBUTTON GROUP rad1,
*** p_rad3 RADIOBUTTON GROUP rad1.
***
****-- Selection Screen for radio button 1
*** SELECTION-SCREEN BEGIN OF BLOCK rad1 WITH FRAME TITLE text-001.
*** PARAMETERS: p_date LIKE sy-datum DEFAULT sy-datum MODIF ID one.
*** SELECT-OPTIONS: s_uzeit FOR sy-uzeit MODIF ID one.
*** selection-screen end of block1 rad1.
***
***
***
****-- Selection Screen for radio button 2
*** SELECTION-SCREEN BEGIN OF BLOCK rad2 WITH FRAME TITLE text-002.
*** PARAMETERS: p_werks1 LIKE t001w-werks MODIF ID two.
*** SELECTION-SCREEN BEGIN OF LINE.
*** SELECTION-SCREEN COMMENT 1(6) text-003 MODIF ID two.
*** SELECTION-SCREEN POSITION 8.
*** PARAMETERS: p_chk AS CHECKBOX DEFAULT 'X' MODIF ID two.
*** SELECTION-SCREEN END OF LINE.
*** SELECTION-SCREEN END OF BLOCK rad2.
***
****-- Selection Screen for radio button 3
*** SELECTION-SCREEN BEGIN OF BLOCK rad3 WITH FRAME TITLE text-004.
*** PARAMETERS: p_matnr1 LIKE mkal-matnr MODIF ID tri,
*** p_verid LIKE mkal-verid MODIF ID tri.
*** SELECTION-SCREEN END OF BLOCK rad3.
***
*** SELECTION-SCREEN END OF BLOCK selscr.
***
****--------------------------
***AT SELECTION-SCREEN OUTPUT.
****--------------------------
*** IF p_rad1 = 'X'.
*** LOOP AT SCREEN.
*** IF screen-group1 = 'TWO' OR
*** screen-group1 = 'TRI'.
*** screen-input = 0.
*** screen-invisible = 1.
*** MODIFY SCREEN.
*** ENDIF.
*** ENDLOOP.
*** ELSEIF p_rad2 = 'X'.
*** LOOP AT SCREEN.
*** IF screen-group1 = 'ONE' OR
*** screen-group1 = 'TRI'.
*** screen-input = 0.
*** screen-invisible = 1.
*** MODIFY SCREEN.
*** ENDIF.
By Eclectic Consulting P a g e | 38
SAP Abap Training
*** ENDLOOP.
*** ELSEIF p_rad3 = 'X'.
*** LOOP AT SCREEN.
*** IF screen-group1 = 'ONE' OR
*** screen-group1 = 'TWO'.
*** screen-input = 0.
*** screen-invisible = 1.
*** MODIFY SCREEN.
*** ENDIF.
*** ENDLOOP.
*** ENDIF.
By Eclectic Consulting P a g e | 39
SAP Abap Training
START-OF-SELECTION.
* call screen 100.
PERFORM get_data.
** 2) Select 1 record
CLEAR wa_vbak.
SELECT SINGLE vbeln kunnr audat
FROM vbak
INTO CORRESPONDING FIELDS OF wa_vbak
WHERE vbeln = p_vbeln.
** 3) select data dimana data yang sama hanya diambil satu kali
REFRESH it_vbak.
SELECT DISTINCT vbeln kunnr audat
FROM vbak
INTO CORRESPONDING FIELDS OF TABLE it_vbak
WHERE kunnr = p_kunnr AND
audat IN p_audat.
**4) CORRESPONDING FIELDS : jika field yang di select tidak sesuai dengan
*** field pada WA atau itab maka hanya fields yang susai akan di penampung.
REFRESH it_data.
SELECT a~vbeln a~audat b~matnr b~kwmeng
FROM vbak AS a INNER JOIN vbap AS b ON ( a~vbeln = b~vbeln )
INTO CORRESPONDING FIELDS OF TABLE it_data
WHERE a~vbeln = p_vbeln.
REPORT zeic_getdata.
TYPES:
BEGIN OF zs_print,
ebeln TYPE ekpo-ebeln,
lifnr TYPE ekko-lifnr,
namev TYPE char70,
ebelp TYPE ekpo-ebelp,
matnr TYPE ekpo-matnr,
maktx TYPE makt-maktx,
menge TYPE ekpo-menge,
netpr TYPE ekpo-netpr,
waers TYPE ekko-waers,
total TYPE ekpo-netpr,
END OF zs_print.
DATA:
it_print TYPE TABLE OF zs_print,
wa_print TYPE zs_print.
*&---------------------------------------------------------------------*
** paramters dan select-option
TABLES : ekko.
SELECT-OPTIONS :
p_ebeln FOR ekko-ebeln.
START-OF-SELECTION.
PERFORM getdata.
*&---------------------------------------------------------------------*
FORM getdata .
DATA :
it_ekko TYPE TABLE OF ekko,
wa_ekko TYPE ekko,
it_ekpo TYPE TABLE OF ekpo,
wa_ekpo TYPE ekpo.
DATA :
v_name1 TYPE lfa1-name1,
v_name2 TYPE lfa1-name2.
DATA :
it_makt TYPE TABLE OF makt,
wa_makt TYPE makt.
REFRESH: it_ekko. " bersihkan it_ekko
SELECT * FROM ekko
INTO TABLE it_ekko
WHERE ebeln IN p_ebeln.
By Eclectic Consulting P a g e | 41
SAP Abap Training
REFRESH it_ekpo.
LOOP AT it_ekko INTO wa_ekko.
SELECT * FROM ekpo
APPENDING TABLE it_ekpo
WHERE ebeln = wa_ekko-ebeln.
CLEAR: wa_ekko.
ENDLOOP.
* loop loop untuk setiap record dari it_ekko ditampung pada wa_ekko
LOOP AT it_ekpo INTO wa_ekpo WHERE ebeln = wa_ekko-ebeln.
CLEAR : wa_print. " bersihkan wa_print sebelum di isi data baru
** menggabungkan v_name1 v_name2 kedalam wa_print-namev dengan karakter pemisah ' '
CONCATENATE v_name1 v_name2 INTO wa_print-namev SEPARATED BY space.
By Eclectic Consulting P a g e | 42
SAP Abap Training
ENDLOOP.
CLEAR wa_ekko. "clear data wa_ekko untuk loop berikutnya
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form HIT_AMT
* -->P_WA_print_MENGE text
* -->P_WA_print_NETPR text
* <--P_WA_print_AMOUNT text
*----------------------------------------------------------------------*
FORM hit_amt USING p_wa_print_menge
p_wa_print_netpr
CHANGING p_wa_print_total.
p_wa_print_total = p_wa_print_menge * p_wa_print_netpr.
ENDFORM. " HIT_AMT
By Eclectic Consulting P a g e | 43
SAP Abap Training
Isi function module, function group, short text dan klik save.
By Eclectic Consulting P a g e | 44
SAP Abap Training
Pada Tab Import isikan parameter p_menge dan p_netpr seperti diatas.
By Eclectic Consulting P a g e | 45
SAP Abap Training
By Eclectic Consulting P a g e | 46
SAP Abap Training
form hit_class.
*** contoh menggunakan class
*Create the object.
DATA obj TYPE REF TO hitung.
CREATE OBJECT obj.
CLEAR wa_data.
ENDLOOP.
endform.
By Eclectic Consulting P a g e | 47
SAP Abap Training
Skenario kita akan membuat program alv report untuk menampilakan data yang sudah pernah kita
buat getdata-nya seperti pada materi sebelumnya (4.2. Get Data). Jika ditampilakan maka akan
terlihat seperti diatas.
By Eclectic Consulting P a g e | 48
SAP Abap Training
2. SELECT-OPTIONS.
** paramters dan select-option
TABLES : ekko.
SELECT-OPTIONS :
p_ebeln FOR ekko-ebeln.
3. Form getdata.
Copy isi dari “FORM getdata” yang ada pada program “ZEIC_GETDATA” beserta form
pendukungnya yaitu “FORM hit_amt”.
4. Form f_build_fieldcat.
FORM f_build_fieldcat.
*****************************************************
REFRESH i_fieldcat.
* CLEAR wa_fieldcat.
* wa_fieldcat-fieldname = 'VBELN'.
* wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PRINT'.
* wa_fieldcat-ref_tabname = 'VBAK'.
* wa_fieldcat-ref_fieldname = 'VBELN'.
* wa_fieldcat-just = 'L'.
* wa_fieldcat-seltext_L = 'Bussiness Area 1'. "ditambahkan jika title didefine sendi
ri
* wa_fieldcat-ddictxt = 'L'. "ditambahkan jika title didefine sendiri
* wa_fieldcat-qfieldname = 'VRKME'. "untuk field bertipe quantity
* wa_fieldcat-cfieldname = 'WAERK'. "untuk field bertipe price
* wa_fieldcat-cfieldname = 'WAERK'. "untuk field bertipe price
* wa_fieldcat-do_sum = 'X'. "untuk sum
* wa_fieldcat-do_sum = 'C'. "untuk avg
* APPEND wa_fieldcat TO i_fieldcat.
By Eclectic Consulting P a g e | 49
SAP Abap Training
wa_fieldcat-fieldname = 'EBELP'.
wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PRINT'.
wa_fieldcat-ref_tabname = 'EKPO'.
wa_fieldcat-ref_fieldname = 'EBELP'.
APPEND wa_fieldcat TO i_fieldcat.
ENDFORM. "f_build_field_cat
Program Check
Active Program
Execute program
Execute Report sampai muncul tampilan report alv, kemudian klik change layput .
By Eclectic Consulting P a g e | 51
SAP Abap Training
Pada tab view, ubah preferred view menjadi crystal report lalu klik .
Layout akan berubah menjadi layout Crystal report seperti gambar berikut :
By Eclectic Consulting P a g e | 52
SAP Abap Training
Untuk merubah tampilan report bisa menggunakan program SAP CRYSTAL REPORT 2011. Cara adalah
dengan meng-export file rpt ke lokal folder, kemudian mulai lakukan perubahan report. Setelah
selesai file rpt di upload kembali ke ALV. Dilanjutkan dengan menyimpan layout
By Eclectic Consulting P a g e | 53
SAP Abap Training
6. SmartForm.
Smartform digunakan membuat form cetakan untuk document misalnya documen Purchase Order.
Form yang diakan dipanggil pada program dengan menggunakan Call Function.
Skenario kita akan membuat form Purchase Oder sederhana seperti tampilan berikut :
By Eclectic Consulting P a g e | 54
SAP Abap Training
Pada Global Setting Form Attribut, isi mean dengan keterangan form. Pilih page format, misal:
DINA4. Pilih style misal Z_SAP_STYLE_CAND_PREVIEW. Style merupakan standarisasi jenis font ukuran
dan aligment text. Untuk style bisa di ubah pada tcode Smartforms.
By Eclectic Consulting P a g e | 55
SAP Abap Training
Form interface ini menghubungkan smartform dengan program pemanggil, interface bisa berupa
import dan export serta table.
Untuk latihan ini kita akan membuat parameters p_ebeln type ekpo-ebeln yaitu nomer PO.
C. Initialization
By Eclectic Consulting P a g e | 56
SAP Abap Training
Pada tab initialization kita dapat melakukan proses getdata. Yang perlu di isi input pada output
parameter. Isi P_EBELN sebagai input parameter. Untuk Output parameters : T_PRINT,
WA_PRINT, TOTAL , IT_EKPO, WA_EKPO.
break totok.
CLEAR wa_print.
LOOP AT it_ekpo INTO wa_ekpo.
wa_print-ebeln = wa_ekpo-ebeln.
wa_print-ebelp = wa_ekpo-ebelp.
wa_print-matnr = wa_ekpo-matnr.
wa_print-menge = wa_ekpo-menge.
wa_print-meins = wa_ekpo-meins.
wa_print-netpr = wa_ekpo-netpr.
wa_print-total = wa_ekpo-netpr * wa_ekpo-menge.
total = total + wa_print-total
.
CLEAR wa_print-maktx.
SELECT SINGLE maktx
FROM makt
INTO wa_print-maktx
WHERE matnr = wa_print-matnr.
CLEAR wa_print-lifnr.
SELECT SINGLE lifnr waers
FROM ekko
By Eclectic Consulting P a g e | 57
SAP Abap Training
INTO (wa_print-lifnr, wa_print-waers)
WHERE ebeln = wa_print-ebeln.
CLEAR wa_print-name1.
SELECT SINGLE name1
FROM lfa1
INTO wa_print-name1
WHERE lifnr = wa_print-lifnr.
By Eclectic Consulting P a g e | 58
SAP Abap Training
Klik tab table dan klik details untuk membuat kolom table
Buat 3 format kolom yaitu header content footer seperti gambar diatas
Untuk kolom 6 dan 7 tampak pada gambar diatas. Caranya tekan tombol navigasi pada kanan atas.
Kemudian dilanjutkan create table line, klik kanan pada table header create table line
By Eclectic Consulting P a g e | 59
SAP Abap Training
Pilih line type misal HEADER, otomatis akan tercreate table sesuai jumlah kolom pada line type yang
dipilih.
Lakukan hal yang sama untuk main area dan footer.
Kemudian ubah nama cell sesuai nama kolom nya dengan cara double klik pada cell. Contoh : EBELN.
Lakukan hal yang sama untuk cell berikutnya.
lakukan hal yang sama untuk table line main area dan footer.
By Eclectic Consulting P a g e | 60
SAP Abap Training
Kemudian lanjutkan dengan membuat text dengan cara klik kanan pada table line create text.
Masukkan “Lines” sebagai Caption H_EBELP. Lakukan hal yang sama untuk table cell yang lainnya dari
table line header (Material, description, Quantity, Uom, Price, Amount).
Berikutnya buat text pada main area dan edit name menjadi seperti di bawah :
By Eclectic Consulting P a g e | 61
SAP Abap Training
C_MATNR &WA_PRINT-MATNR(CZ)&
C_MAKTX &WA_PRINT-MAKTX(CZ)&
C_MENGE &WA_PRINT-MENGE(CZ)&
C_MEINS &WA_PRINT-MEINS(CZ)&
C_NETPR &WA_PRINT-NETPR(CZ)&
C_TOTAL &WA_PRINT-TOTAL(CZR.2)&
Double klik pada text C_EBELP, pada tab general attribute klik icon maka akan muncul window
change fields. Ketik dengan huruf besar &WA_PRINT-EBELP(CZ)& dan di awali dengan karakter “&”.
(CZ) artinya membuang spasi depan dan belakang.
(CZR) artinya rata kanan.
(CZR.2) artinya rata kanan dan format 2 digit belakang koma.
Untuk footer tambahkan text seperti diatas. (CZR.2) artinya rata kanan dan 2 digit belakang koma.
By Eclectic Consulting P a g e | 62
SAP Abap Training
By Eclectic Consulting P a g e | 63
SAP Abap Training
Berikut cara seting line dan kolom, pada tab output option :
By Eclectic Consulting P a g e | 64
SAP Abap Training
7. Dialog Program
7.1. Skenario
Skenarionya kita akan membuat program entry data untuk data nota. Data tersebut mempunyai
Header Data dan Detail Data. Header data berisi informasi nomer nota, customer, date, currency.
Detail data berisi line item, material, quantity, UoM, harga, amount.
By Eclectic Consulting P a g e | 65
SAP Abap Training
By Eclectic Consulting P a g e | 66
SAP Abap Training
total TYPE ztnotad-netpr,
END OF zs_grid.
DATA:
comm_grid TYPE zs_grid,"Comm_grid adalah wa untuk table control
it_grid TYPE TABLE OF zs_grid,"it_grid adalah itab detail data.
wa_grid TYPE zs_grid."it_grid adalah wa detail data.
*** deklarasi itab dan wa untuk proses getdata dan simpan data
DATA :
it_ztnota TYPE TABLE OF ztnota,
wa_ztnota TYPE ztnota,
it_ztnotad TYPE TABLE OF ztnotad,
wa_ztnotad TYPE ztnotad.
**Paremeters / select-options
PARAMETERS :
p_scnum TYPE ztnota-scnum.
START-OF-SELECTION.
CALL SCREEN 100.
By Eclectic Consulting P a g e | 67
SAP Abap Training
Ubah name yang sebelumnya ZTNOTA-SCNUM menjadi V_SCNUM. Kemudian blok dan copy scnum
untuk keperluan membuat text element berikutnya.
By Eclectic Consulting P a g e | 68
SAP Abap Training
Isi name dengan V_SCNUM atau paste dari clipboard. Tujuan name sama antara input/output eleman
dan text element agar pada saat kita akan meng-hide element akan lebih mudah karena kedua
element tersebut mempunyai nama yang sama.
Tahap berikut nya adalah membuat element untuk data header dengan cara yang sama seperti di
atas, berikut attribut dari element :
Berikut
Name Reff. field Text Search Parameter
element (Khusus Field Element) (khusus text Element) Conv. Exit Help ID
V_SCNUM ZTNOTA-SCNUM Nota Number
V_SDATE ZTNOTA-SDATE Date
V_KUNNR ZTNOTA-KUNNR Customer ALPHA VAG
V_WAERS ZTNOTA-WAERS Currency H_TCURC FWS
V_LINES ZTNOTAD-LINES Lines
V_MATNR ZTNOTAD-MATNR Material MATN1 MAT
V_MENGE ZTNOTAD-MENGE Quantity
V_MEINS ZTNOTAD-MEINS UoM CUNIT H_T006
V_NETPR ZTNOTAD-NETPR Price
tampilan screen template :
By Eclectic Consulting P a g e | 69
SAP Abap Training
Tahap berikutnya adalah membuat field dan text element untuk masing-masing kolom pada table
control.
By Eclectic Consulting P a g e | 70
SAP Abap Training
By Eclectic Consulting P a g e | 71
SAP Abap Training
By Eclectic Consulting P a g e | 72
SAP Abap Training
FctCode adalah Function Code yang dikirim screen ke program. Berdasarkan Function Code tersebut
program akan perform subrutine. Misalnya FORM INSERT_ROW. Function Code di simpan pada
system variable sy-ucomm. Untuk lebih jelasnya akan di bahas pada user command.
By Eclectic Consulting P a g e | 73
SAP Abap Training
PROCESS AFTER INPUT. " Proses setelah screen diedit oleh user
LOOP WITH CONTROL tc_0100.
MODULE update_tc_0100."process update data IT_PRINT sesuai table
"control
ENDLOOP.
MODULE user_command_0100."Memproses FuctCode yg dikirim oleh screen.
*=====================PBO
• Berikutnya kita membuat MODULE set_screen_0100, dengan cara double klik pada set_screen_0100
di flow logic screen 100.
By Eclectic Consulting P a g e | 74
SAP Abap Training
By Eclectic Consulting P a g e | 75
SAP Abap Training
IF screen-name = 'V_SCNUM'.
screen-input = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
endmodule. " SET_SCREEN_0100 OUTPUT
• Berikutnya kita membuat MODULE fill_tc_0100, dengan cara double klik pada fill_tc_0100 di flow
logic screen 100.
*&---------------------------------------------------------------------*
*& Module FILL_TC_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module FILL_TC_0100 output.
** ISI
endmodule. " FILL_TC_0100 OUTPUT
Berikut syntax program module FILL_TC_0100 output :
*----------------------------------------------------------------------*
* MODULE fill_tc_0100 OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE fill_tc_0100 OUTPUT.
DATA:
tw_grid TYPE zs_grid.
CLEAR tw_grid.
READ TABLE it_grid INTO tw_grid INDEX tc_0100-current_line.
IF sy-subrc = 0.
MOVE tw_grid TO comm_grid.
ELSE.
EXIT FROM STEP-LOOP.
ENDIF.
ENDMODULE. " fill_tc_0100 OUTPUT
• Berikutnya kita membuat module STATUS_0100 output, dengan cara double klik pada STATUS_0100 di
flow logic screen 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module STATUS_0100 output.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
** ISI
endmodule. " STATUS_0100 OUTPUT
Berikut syntax program module STATUS_0100 output :
module STATUS_0100 output.
SET PF-STATUS 'STAT0100'.
IF v_mode = 'OLD'.
SET TITLEBAR 'TITLE0100_B'.
By Eclectic Consulting P a g e | 76
SAP Abap Training
ELSE.
SET TITLEBAR 'TITLE0100_A'.
ENDIF.
endmodule. " STATUS_0100 OUTPUT
• Berikutnya kita membuat module UPDATE_TC_0100 output, dengan cara double klik pada
UPDATE_TC_0100 di flow logic screen 100.
*&---------------------------------------------------------------------*
*& Module UPDATE_TC_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module UPDATE_TC_0100 input.
** ISI
endmodule. " UPDATE_TC_0100 INPUT
Berikut syntax program module UPDATE_TC_0100 output :
MODULE update_tc_0100 INPUT.
MODIFY it_grid FROM comm_grid INDEX tc_0100-current_line.
ENDMODULE. " update_tc_0100 INPUT
• Berikutnya kita membuat module USER_COMMAND_0100 output, dengan cara double klik pada
USER_COMMAND_0100 di flow logic screen 100.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module USER_COMMAND_0100 input.
** ISI
endmodule. " USER_COMMAND_0100 INPUT
IF v_answer = '1'.
LEAVE TO SCREEN 0.
By Eclectic Consulting P a g e | 77
SAP Abap Training
ELSEIF v_answer = '2'.
MESSAGE 'Exit attempt cancelled' TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
ENDCASE.
ENDMODULE. " update_tc_0100 INPUT
GUI Status : merupakan tempat dimana kita bisa mendifinisikan menu dan toolbar, ada 3 jenis
yaitu :
1. Menu Bar
2. Application Toolbar
3. Standard Toolbar
Step :
1. Pada object tree, double klik PBO Modules STATUS_0100.
2. Pada abap editor akan muncul Module Status_0100 output.
Double klik pada ‘STAT0100’.
3. Muncul confirmation dialog, klik YES.
By Eclectic Consulting P a g e | 78
SAP Abap Training
Berikutnya …
By Eclectic Consulting P a g e | 79
SAP Abap Training
Step :
1. Pada object tree, double klik PBO Modules STATUS_0100.
2. Pada abap editor akan muncul Module Status_0100 output. Double klik pada ‘TITLE0100_A’.
3. Muncul confirmation dialog, klik YES.
Lakukan tahapan yang sama seperti di atas untu TITLE0100_B dengan title “Edit Nota”.
7.7. Subroutine.
By Eclectic Consulting P a g e | 80
SAP Abap Training
IF v_answer = '1'.
LEAVE TO SCREEN 0.
ELSEIF v_answer = '2'.
MESSAGE 'Exit attempt cancelled' TYPE 'I' DISPLAY LIKE 'E'.
By Eclectic Consulting P a g e | 81
SAP Abap Training
ENDIF.
WHEN 'SAVE'.
PERFORM simpan.
WHEN 'PRINT'.
PERFORM cetak.
WHEN 'INSERT'.
PERFORM getlast_line.
CLEAR wa_grid.
v_iline = v_iline + 1.
wa_grid-lines = v_iline.
wa_grid-matnr = v_matnr.
wa_grid-menge = v_menge.
wa_grid-meins = v_meins.
wa_grid-netpr = v_netpr.
APPEND wa_grid TO it_grid.
WHEN 'SELECTALL'.
CLEAR wa_grid.
LOOP AT it_grid INTO wa_grid.
wa_grid-check = 'X'.
MODIFY it_grid FROM wa_grid.
CLEAR wa_grid.
ENDLOOP.
WHEN 'DESELECT'.
LOOP AT it_grid INTO wa_grid.
wa_grid-check = ''.
MODIFY it_grid FROM wa_grid.
CLEAR wa_grid.
ENDLOOP.
WHEN 'DELETE'.
LOOP AT it_grid INTO wa_grid WHERE check = 'X'.
DELETE it_grid .
ENDLOOP.
ENDCASE.
endmodule. " USER_COMMAND_0100 INPUT
7.7.2. Getdata
Pada double klik Event START-OF-SELECTION.
By Eclectic Consulting P a g e | 82
SAP Abap Training
Kita akan menyisipkan syntax antara start of selection dengan call screen 100.
Berikut list program pada start of selection :
START-OF-SELECTION.
*** set value v_mode = 'NEW' jika parameters p_scnum = ''
*** jika tidak v_mode = 'OLD'
*** variable v_mode akan dipakai pada perform getdata.
IF p_scnum = ''.
v_mode = 'NEW'.
ELSE.
v_mode = 'OLD'.
ENDIF.
PERFORM getdata.
CALL SCREEN 100.
Kemudian double klik pada “getdata”, maka system akan membuat subroutine getdata.
*&---------------------------------------------------------------------*
*& Form GETDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form GETDATA .
By Eclectic Consulting P a g e | 83
SAP Abap Training
_wait = ' '
_collect = ' '
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc = 0.
*** sy-subrc = 0 yg artinya ztnota untuk scnum = p_scnum bisa di lock
*** dan tidak di gunakan oleh user lain
*** berikut proses get data
SELECT SINGLE * FROM ztnota INTO wa_ztnota WHERE scnum = p_scnum.
SELECT * FROM ztnotad INTO CORRESPONDING FIELDS OF TABLE it_grid WHERE scnum
= p_scnum.
v_scnum = wa_ztnota-scnum.
v_sdate = wa_ztnota-sdate.
v_kunnr = wa_ztnota-kunnr.
v_waers = wa_ztnota-waers.
v_total = wa_ztnota-total.
ELSE.
*** jika dilock user lain maka tampilkan message.
DATA: it_enq TYPE STANDARD TABLE OF seqg3,
wa_enq LIKE LINE OF it_enq,
ld_gname TYPE seqg3-gname,
ld_garg TYPE seqg3-garg.
ld_gname = 'ZTNOTA'. "This is the name of the lock object as shown in tcode S
M12
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
gclient = sy-mandt
gname = ld_gname "Lock opject name
guname = '*' "User name, default is SY-UNAME but need
to use * to return locks for all users
TABLES
enq = it_enq
EXCEPTIONS
communication_failure = 1
system_failure = 2
OTHERS = 3.
"will need to check values returned by FM to check what values are needed to
build ld_garg value
CONCATENATE sy-mandt 'SCNUM' INTO ld_garg .
LOOP AT it_enq INTO wa_enq WHERE garg CS p_scnum.
EXIT.
ENDLOOP.
By Eclectic Consulting P a g e | 84
SAP Abap Training
* TXT4 = ' '
.
LEAVE PROGRAM.
ENDIF.
ENDIF.
ENDFORM. " GETDATA
Berikutnya kita akan membuta subroutine simpan dan do_refresh. Form do_refresh akan dipanggil
setelah proses simpan selesai. Sedangkan form simpan dipanggil pada module user_command_0100
input WHEN ‘SAVE’.
Berikut syntax untuk subroutine simpan dan do_refresh:
FORM simpan .
IF v_mode = 'NEW'.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = 'S1'
object = 'ZSCNUM'
IMPORTING
number = v_scnum.
ELSE.
DELETE FROM ztnota WHERE scnum = v_scnum.
DELETE FROM ztnotad WHERE scnum = v_scnum.
ENDIF.
CLEAR wa_ztnota.
wa_ztnota-scnum = v_scnum.
wa_ztnota-sdate = v_sdate.
wa_ztnota-waers = v_waers.
wa_ztnota-total = v_total.
wa_ztnota-kunnr = v_kunnr.
INSERT ztnota FROM wa_ztnota.
CLEAR wa_grid.
LOOP AT it_grid INTO wa_grid.
CLEAR wa_ztnotad.
MOVE-CORRESPONDING wa_grid TO wa_ztnotad.
wa_ztnotad-scnum = v_scnum.
wa_ztnotad-waers = v_waers.
INSERT ztnotad FROM wa_ztnotad.
CLEAR wa_grid.
ENDLOOP.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
MESSAGE v_scnum TYPE 'I'. "DISPLAY LIKE 'I'.
ELSE.
ROLLBACK WORK.
ENDIF.
PERFORM do_refresh.
*&---------------------------------------------------------------------*
By Eclectic Consulting P a g e | 85
SAP Abap Training
*& Form do_refresh
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM do_refresh .
IF v_scnum <> ''.
p_scnum = v_scnum.
v_mode = 'OLD'.
ENDIF.
PERFORM getdata.
ENDFORM. " DO_REFRESH
Berikutnya kita buat form getlast_line, yang dipanggil pada module user_command_100 input
WHEN 'INSERT'. Berikut syntax untuk subroutine getlast_line :
FORM getlast_line.
DATA irec TYPE i.
CLEAR v_iline.
DESCRIBE TABLE it_grid LINES irec.
SORT it_grid BY lines.
IF irec > 0.
CLEAR wa_grid.
READ TABLE it_grid INDEX irec INTO wa_grid.
v_iline = wa_grid-lines.
ENDIF.
ENDFORM. "getlast_line
By Eclectic Consulting P a g e | 86
SAP Abap Training
Tugas anda untuk menyempurnakan program, berikut daftar yang harus disempurnakan :
1. Tampilkan nama customer dibawah kode customer, select ke table kna1 field name1 where kunnr =
v_kunnr.
2. Tambahkan kolom pada table control untuk material description setelah kolom material. Data di
select dari makt field maktx where matnr = wa_grid-matnr dan spras = ‘E’.
3. Hitung kolom amount = kolom quantity * kolom price.
4. Tambahkan field element total amount di bawah currency.
By Eclectic Consulting P a g e | 87
SAP Abap Training
By Eclectic Consulting P a g e | 88
SAP Abap Training
By Eclectic Consulting P a g e | 89
SAP Abap Training
waers TYPE ztnota-waers,
mark(1) TYPE c,
END OF zs_grid.
DATA :
it_grid TYPE TABLE OF zs_grid,
wa_grid TYPE zs_grid.
***deklarasi ok_code
DATA :
ok_code TYPE sy-ucomm,
v_answer TYPE char1.
By Eclectic Consulting P a g e | 90
SAP Abap Training
G_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER,
WA_STABLE TYPE LVC_S_STBL.
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS:HANDLE_BUTTON_CLICK FOR EVENT BUTTON_CLICK OF CL_GUI_ALV_GRID
IMPORTING ES_COL_ID ES_ROW_NO.
ENDCLASS. "lcl_event_handlers DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_BUTTON_CLICK.
DATA L_ROW TYPE C LENGTH 10.
DATA: LS_GOOD TYPE LVC_S_MODI.
DATA : LWA_MOD_CELL TYPE LVC_S_MODI,
LWA_MOD TYPE TY_MOD.
L_ROW = ES_ROW_NO-ROW_ID.
CASE ES_COL_ID-FIELDNAME.
WHEN 'SCNUM'.
CLEAR WA_GRID.
READ TABLE IT_GRID INDEX ES_ROW_NO-ROW_ID INTO WA_GRID.
PERFORM BUTTON_SCNUM USING WA_GRID-SCNUM.
ENDCASE.
ENDMETHOD. "HANDLE_BUTTON_CLICK
ENDCLASS. "lcl_event_handlers IMPLEMENTATION
START-OF-SELECTION.
CALL SCREEN 0100.
By Eclectic Consulting P a g e | 91
SAP Abap Training
Berikutnya kita akan membuat sub screen pada screen 100, berikut tahapannya :
By Eclectic Consulting P a g e | 92
SAP Abap Training
Berikutnya kita membuat module STATUS_0100 output, dengan cara double klik pada STATUS_0100 di
flow logic screen 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module STATUS_0100 output.
* SET PF-STATUS 'xxxxxxxx'.
By Eclectic Consulting P a g e | 93
SAP Abap Training
* SET TITLEBAR 'xxx'.
** ISI
endmodule. " STATUS_0100 OUTPUT
Berikut syntax program module STATUS_0100 output :
module STATUS_0100 output.
SET PF-STATUS 'STATU0100'.
SET TITLEBAR 'TITLE0100'.
PERFORM refresh.
endmodule. " STATUS_0100 OUTPUT
Step :
4. Pada object tree, double klik PBO Modules STATUS_0100.
5. Pada abap editor akan muncul Module Status_0100 output.
Double klik pada ‘STAT0100’.
6. Muncul confirmation dialog, klik YES.
Berikutnya …
By Eclectic Consulting P a g e | 94
SAP Abap Training
Berikut akan tampil status screen 100
Tahapan :
1. Expand application toolbar
2. Buat function code Refresh
3. Isi function text, icon name, icon text dan info text.
4. Tekan tombol OK.
By Eclectic Consulting P a g e | 95
SAP Abap Training
By Eclectic Consulting P a g e | 96
SAP Abap Training
Tahapan
1. Double klik ada PBO Module Status_0100
2. Double klik pada ‘TITLE0100’
3. Klik YES pada confirmation dialog.
4. Berikutnya isi title dan klik tombol OK
By Eclectic Consulting P a g e | 97
SAP Abap Training
Klik kanan pada GUI Title TITLE0100 dan klik Activate Interface.
Berikutnya kita akan membuat module user comand untuk screen 100:
Tahapan :
1. Double klik screen 0100.
2. Klik pada tab flow logic
3. Double klik user_command_0100
4. Klik yes pada dialog confirmation.
5. Klik pada main program dan tekan tombol OK
By Eclectic Consulting P a g e | 98
SAP Abap Training
ok_code = sy-ucomm.
CLEAR sy-ucomm.
CASE ok_code.
WHEN 'EXIT'.
CLEAR v_answer.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Quit Confirmation'
text_question = 'Do you want to quit ?'
icon_button_1 = 'ICON_OKAY'
icon_button_2 = 'ICON_CANCEL'
display_cancel_button = ''
popup_type = 'ICON_MESSAGE_WARNING'
IMPORTING
answer = v_answer.
IF v_answer = '1'.
LEAVE PROGRAM.
ELSEIF v_answer = '2'.
MESSAGE 'Exit attempt cancelled' TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
WHEN 'NEW'.
SUBMIT zenota_tran AND RETURN.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
By Eclectic Consulting P a g e | 99
SAP Abap Training
8.5. Subroutine.
Berikut subroutine yang harus dilengkapi :
8.5.1. REFRESH.
Perform REFRESH di panggil dari PBO modules STATUS_0100.
8.5.2. GETDATA.
Perform GETDATA dipanggil dari form REFRESH :
FORM refresh .
*** kosong kan it_grid.
REFRESH it_grid.
8.5.3. SET_FIELDCAT.
Perform SET_FIELDCAT dipanggil dari form REFRESH, berikut listing program :
*&---------------------------------------------------------------------*
*& Form set_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM set_fieldcat .
REFRESH i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'SCNUM'.
wa_fieldcat-ref_table = 'ZTNOTA'.
wa_fieldcat-ref_field = 'SCNUM'.
wa_fieldcat-icon = 'X'.
wa_fieldcat-style = cl_gui_alv_grid=>mc_style_button.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'SDATE'.
wa_fieldcat-ref_table = 'ZTNOTA'.
wa_fieldcat-ref_field = 'SDATE'.
wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_s = 'Date'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'KUNNR'.
wa_fieldcat-ref_table = 'ZTNOTA'.
wa_fieldcat-ref_field = 'KUNNR'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'TOTAL'.
wa_fieldcat-ref_table = 'ZTNOTA'.
wa_fieldcat-ref_field = 'TOTAL'.
wa_fieldcat-edit = 'X'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'WAERS'.
wa_fieldcat-ref_table = 'ZTNOTA'.
wa_fieldcat-ref_field = 'WAERS'.
APPEND wa_fieldcat TO i_fieldcat.
8.5.4. EXCLUDE_TB_FUNCTIONS.
Perform EXCLUDE_TB_FUNCTIONS dipanggil dari form REFRESH, berikut listing program :
*&---------------------------------------------------------------------*
*& Form exclude_tb_functions
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_EXCLUDE text
*----------------------------------------------------------------------*
FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
DATA ls_exclude TYPE ui_func.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
APPEND ls_exclude TO pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_print.
* APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_refresh.
APPEND ls_exclude TO pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_info.
* APPEND ls_exclude TO pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_graph.
* APPEND ls_exclude TO pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_check.
APPEND ls_exclude TO pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_current_variant.
* APPEND ls_exclude TO pt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_views.
* APPEND ls_exclude TO pt_exclude.
ENDFORM. " EXCLUDE_TB_FUNCTIONS
8.5.5. BUTTON_SCNUM.
Perform BUTTON_SCNUM dipanggil dari CLASS LCL_EVENT_RECEIVER IMPLEMENTATION, berikut
listing program :
*&---------------------------------------------------------------------*
* text
Entry short text dan pilih option yang ke 2. Kemudian klik OK.
Berikutnya kita akan gunakan tcode SHDB untuk recording, Berikut tahapannya :
Klik execute .
Maka akn muncul tampilan seperti diatas. Tekan tombol save dan back.
Berikut potongan program yang akan kita gunakan untuk membuat program upload :
*** Screen 1000 untuk paramters kemudian tekan tombol execute '=ONLI'
perform bdc_dynpro using 'ZENOTA_TRAN' '1000'.
perform bdc_field using 'BDC_CURSOR'
'P_SCNUM'.
perform bdc_field using 'BDC_OKCODE'
'=ONLI'.
Dari syntax diatas terlihat bagaimana proses recording yang kita lakukan diterjemahkan menjadi
sebuah syntax program. Setiap event akan dibuatkan syntax.
Dari syntax di atas dapat kita sederhanakan dengan membuang syntax yang berulang.
Berikut sytax setelah disederhanakan :
*** Screen 1000 untuk paramters kemudian tekan tombol execute '=ONLI'
perform bdc_dynpro using 'ZENOTA_TRAN' '1000'.
perform bdc_field using 'BDC_CURSOR'
'P_SCNUM'.
perform bdc_field using 'BDC_OKCODE'
'=ONLI'.
Bagian yang di blok warna kuning merupakan syntax untuk entry data detail dari nota. Jika ada lebih
dari 1 line maka syntax tersebut harus dimasukkan kedalam LOOP. Contoh :
Pertama kita pilih file name excel yang berisi data nota. Kemudian tekan tombol Read untuk membaca
file excel dan setelah itu akan ditampilkan pada ALV grid. Jika kita tekan tombol Process maka program
akan memasukkan data dengan tcode ZENOTA_TRAN.
DATA :
it_excel TYPE TABLE OF zs_excel,
wa_excel TYPE zs_excel,
it_header TYPE TABLE OF zs_header,
wa_header TYPE zs_header,
it_grid TYPE TABLE OF zs_grid,
wa_grid TYPE zs_grid.
DATA:
v_count(2) TYPE n,
v_str1 TYPE string,
v_str2 TYPE string,
it_mssg TYPE TABLE OF zs_mssg,
wa_mssg TYPE zs_mssg,
ld_color.
DATA :
bdc_data LIKE bdcdata OCCURS 0 WITH HEADER LINE,
bdc_message LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,
opt TYPE ctu_params,
wa_message LIKE bdcmsgcoll,
v_msgno TYPE sy-msgno,
v_message LIKE message,
msg_count TYPE i.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdc_data.
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdc_data.
bdc_data-fnam = fnam.
bdc_data-fval = fval.
APPEND bdc_data.
ENDFORM. "BDC_FIELD
*** Paramaters
SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
PARAMETERS:
START-OF-SELECTION.
CALL SCREEN 0100.
3. Isi program name tujuan dan screen number misal ZEBDC_NOTA. Kemudian tekan tombol OK .
IF wa_grid IS INITIAL.
DATA iinvalid TYPE i.
DATA istatus TYPE i.
* PERFORM VALIDASI_EXCEL
IF iinvalid = 0 AND istatus = 0.
PERFORM runbdc.
ELSE.
MESSAGE 'Tidak bisa diproses ada data yang tidak valid ter-proses ...'
TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
ELSE.
REFRESH : it_grid, it_header, it_excel.
MESSAGE 'Sudah ter-proses ...' TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
9.2.3. Subroutine.
9.2.3.1. REFRESH.
*&---------------------------------------------------------------------*
*& Form REFRESH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM refresh .
IF ok_code <> 'EXIT'.
CLEAR i_variant.
i_layout-stylefname = 'T_EDITCELL'.
i_layout-info_fname = 'LINE_COLOR'.
PERFORM set_fieldcat.
* SET HANDLER :
9.2.3.2. SET_FIELDCAT
*&---------------------------------------------------------------------*
*& Form SET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_fieldcat .
REFRESH i_fieldcat.
* category TYPE char20,
* start_date type char10,
* start_time type char8,
* end_date type char10,
* end_time type char8,
* aufnr type char12,
* logrp type char2,
* valid type char1,
* status type char20,
* notes type string,
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'SCNUMN'.
wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_l = 'New
SCNUM'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'SCNUM'.
wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_l = 'SCNU
M'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'SDATE'.
wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_l = 'Date
'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'KUNNR'.
wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_l = 'CUST
OMER'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'WAERS'.
wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_l = 'Curr
ency'.
APPEND wa_fieldcat TO i_fieldcat.
*sntype
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MATNR'.
wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_l = 'Mate
rial'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MENGE'.
wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_l = 'Quan
tity'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MEINS'.
wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_l = 'Satu
an'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'NETPR'.
wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_l = 'Pric
e'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'SNOTE'.
wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_l = 'Note
s'.
APPEND wa_fieldcat TO i_fieldcat.
9.2.3.3. EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*& Form exclude_tb_functions
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_EXCLUDE text
*----------------------------------------------------------------------*
FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
9.2.3.4. GETDATA
*&---------------------------------------------------------------------*
*& Form getdata
*&---------------------------------------------------------------------*
FORM getdata.
CLEAR wa_grid.
LOOP AT it_grid INTO wa_grid.
PERFORM validasi_wa_grid.
CLEAR wa_grid.
ENDLOOP.
ENDFORM. "getdata
9.2.3.5. BACA
*&---------------------------------------------------------------------*
*& Form baca
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM baca.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_field_seperator = 'X'
i_line_header = 'X'
i_tab_raw_data = i_tab_raw_data
i_filename = filename
TABLES
i_tab_converted_data = it_excel
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "baca
9.2.3.6. VALIDASI_WA_GRID
*&---------------------------------------------------------------------*
*& Form validasi_wa_grid
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM validasi_wa_grid.
DATA :
xkunnr TYPE ztnota-kunnr,
CLEAR wa_grid-snote.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_grid-kunnr
IMPORTING
output = wa_grid-kunnr.
IF xkunnr = ''.
CONCATENATE wa_grid-snote 'Customer' wa_grid-kunnr 'tidak ada' INTO wa_grid-
snote SEPARATED BY space.
ENDIF.
IF xmatnr = ''.
CONCATENATE wa_grid-snote 'Material' wa_grid-matnr 'tidak ada' INTO wa_grid-
snote SEPARATED BY space.
ENDIF.
9.2.3.7. RUNBDC
FORM runbdc.
DATA : ssdate TYPE char10,
snetpr TYPE char15.
CLEAR opt.
opt-dismode = p_mode. " A FOREGROUND N BACKGROUND
opt-updmode = 'S'.
opt-defsize = 'X'.
opt-racommit = 'X'.
* opt-nobinpt = 'X'.
opt-nobiend = 'X'.
REFRESH bdc_message.
CALL TRANSACTION 'ZENOTA_TRAN'
USING bdc_data
MESSAGES INTO bdc_message
OPTIONS FROM opt.
IF wa_message IS INITIAL.
wa_mssg-mssg2 = ''.
CLEAR msg_count.
DESCRIBE TABLE bdc_message LINES msg_count.
CLEAR wa_message.
READ TABLE bdc_message INTO wa_message INDEX msg_count.
CLEAR v_message.
CONDENSE: wa_message-msgv1,
wa_message-msgv2,
wa_message-msgv3,
wa_message-msgv4.
CLEAR v_msgno.
v_msgno = wa_message-msgnr.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = wa_message-msgid
msgno = v_msgno
msgty = wa_message-msgtyp
msgv1 = wa_message-msgv1
msgv2 = wa_message-msgv2
msgv3 = wa_message-msgv3
msgv4 = wa_message-msgv4
IMPORTING
messg = v_message.
CONDENSE v_message-msgtx.
wa_mssg-mssg1 = wa_excel-scnum.
wa_mssg-mssg3 = v_message-msgtx.
APPEND wa_mssg TO it_mssg.
DATA:
gs_extract1 LIKE disextract,
gs_extract2 LIKE disextract.
START-OF-SELECTION.
PERFORM getdata.
DESCRIBE TABLE it_print LINES data_count.
IF data_count > 0.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Preparing report.......'.
***************************Form fbuild_fieldcat.
***************************What fields to expose
FORM f_build_fieldcat.
*****************************************************
REFRESH i_fieldcat.
* CLEAR wa_fieldcat.
* wa_fieldcat-fieldname = 'VBELN'.
* wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PR
INT'.
* wa_fieldcat-ref_tabname = 'VBAK'.
* wa_fieldcat-ref_fieldname = 'VBELN'.
* wa_fieldcat-just = 'L'.
* wa_fieldcat-seltext_L = 'Bussiness Area 1'. "ditambahkan jika title didefine
sendiri
* wa_fieldcat-ddictxt = 'L'. "ditambahkan jika title didefine sendiri
* wa_fieldcat-qfieldname = 'VRKME'. "untuk field bertipe quantity
* wa_fieldcat-cfieldname = 'WAERK'. "untuk field bertipe price
* wa_fieldcat-cfieldname = 'WAERK'. "untuk field bertipe price
* wa_fieldcat-do_sum = 'X'. "untuk sum
* wa_fieldcat-do_sum = 'C'. "untuk avg
* APPEND wa_fieldcat TO i_fieldcat.
ENDFORM. "f_build_field_cat
*Form f_layout_init
*Global settings for ALV worksheet, Change according to needs
FORM f_layout_init USING p_layout TYPE slis_layout_alv.
p_layout-detail_popup = yes.
p_layout-numc_sum = yes.
p_layout-colwidth_optimize = yes.
p_layout-zebra = no.
p_layout-get_selinfos = yes.
p_layout-coltab_fieldname = 'COLINFO'.
p_layout-subtotals_text = 'SubTotal'.
p_layout-totals_text = 'Total'.
* p_layout-box_fieldname = 'CHECK'.
*Form f_eventtab_build
*Event listing for ALV worksheet, Change according to needs
FORM f_eventtab_build USING p_events TYPE slis_t_event.
DATA:
ls_event TYPE slis_alv_event.
*Form f_print_control
*Global settings for print control???????????, Change according to needs
FORM f_print_control.
i_print-no_print_selinfos = yes.
i_print-no_print_listinfos = yes.
i_print-reserve_lines = 0.
i_print-no_change_print_params = yes.
ENDFORM. " f_print_control
*Form f_build_header_list
*As the name implies i guess (^_^;)
FORM f_build_header_list.
DATA: lwa_list_top LIKE LINE OF i_list_top,
lv_text LIKE sy-title,
gs_line TYPE slis_listheader,
vtime TYPE char12,
vtitle TYPE char50.
REFRESH i_list_top.
CLEAR lwa_list_top.
lwa_list_top-typ = 'H'.
lwa_list_top-key = no.
lwa_list_top-info = sy-title.
APPEND lwa_list_top TO i_list_top.
* REFRESH i_list_top.
CLEAR lwa_list_top.
lwa_list_top-typ = 'S'.
lwa_list_top-key = 'user:'.
lwa_list_top-info = sy-uname.
APPEND lwa_list_top TO i_list_top.
*Form f_build_sort
*Sort by blah blah blah
FORM f_build_sort .
DATA: l_sort TYPE slis_sortinfo_alv.
***************************Form fbuild_data.
***************************What The Heck Is This
FORM f_build_data TABLES lt_data STRUCTURE wa_print.
*DATA:
* wa_check TYPE zs_print,
* lp_prev_index TYPE i,
* wlt_data TYPE zs_print,
* c_indicator TYPE i VALUE 1.
*
* LOOP AT lt_data INTO wlt_data.
* IF sy-tabix > 1.
* lp_prev_index = sy-tabix - 1.
* READ TABLE lt_data INDEX lp_prev_index INTO wa_check.
* IF wlt_data-svbeln2 <> wa_check-svbeln2.
* c_indicator = c_indicator * -1.
* ENDIF.
* ENDIF.
* IF c_indicator = 1.
* REFRESH i_color.
* CLEAR i_color.
* i_color-color-col = cl_gui_resources=>list_col_negative.
* i_color-color-int = 0.
* ELSE.
* REFRESH i_color.
* CLEAR i_color.
* i_color-color-col = cl_gui_resources=>list_col_positive.
* i_color-color-int = 0.
* ENDIF.
*
* APPEND i_color.
* wlt_data-colinfo[] = i_color[].
* MODIFY lt_data FROM wlt_data.
* CLEAR wlt_data.
* ENDLOOP.
ENDFORM. " f_build_data
*&--------------------------------------------------------------------*
*&Form print_alv
*&--------------------------------------------------------------------*
FORM print_alv.
DATA:
i_save VALUE 'U'.
*&---------------------------------------------------------------------*
*&Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
FORM top_of_page. "#EC CALLED
DATA: lflg_grid TYPE c,
lv_text LIKE sy-title.
IMPORT lflg_grid FROM MEMORY ID 'ALV_GRID_TOP_OF_PAGE'.
IF lflg_grid = yes.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
i_logo = 'ENJOYSAP_LOGO'
it_list_commentary = i_list_top.
* I_END_OF_LIST_GRID = i_list_end.
ELSE.
PERFORM f_print_header USING text-100 lv_text space.
ENDIF.
ENDFORM. "TOP_OF_PAGE
*&---------------------------------------------------------------------*
*&Form PF_STATUS_SET
*&---------------------------------------------------------------------*
FORM pf_status_set USING rt_extab TYPE slis_t_extab.
*&---------------------------------------------------------------------*
*&Form USER_COMMAND
*&---------------------------------------------------------------------*
FORM user_command USING r_ucomm
i_selfield LIKE i_selfield.
DATA: t_answer TYPE char1.
* CLEAR ok_code.
* ok_code = r_ucomm.
* CLEAR sy-ucomm.
* CASE ok_code.
* WHEN 'EXIT'.
* LEAVE TO CURRENT TRANSACTION.
* WHEN '&IC1'.
*
* ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*&Form END_OF_PAGE
*&---------------------------------------------------------------------*
FORM end_of_page. "#EC CALLED
DATA: l_pos(3) TYPE n VALUE 0, l_foot(30) VALUE '*** END OF PAGE ***'.
l_pos = ( sy-linsz / 2 ) - ( strlen( l_foot ) / 2 ).
ULINE.
WRITE: /, AT l_pos l_foot.
ENDFORM. "END_OF_PAGE
*&---------------------------------------------------------------------*
*&Form END_OF_LIST
*&---------------------------------------------------------------------*
FORM end_of_list. "#EC CALLED
DATA: lv_page_count(3).
DATA: l_pos(3) TYPE n VALUE 0, l_foot(30) VALUE '*** END OF REPORT ***'.
l_pos = ( sy-linsz / 2 ) - ( strlen( l_foot ) / 2 ).
ULINE.
WRITE: /, AT l_pos l_foot.
CHECK sy-ucomm EQ '&RNT'.
v_total = sy-pagno.
DATA :
it_grid TYPE TABLE OF zs_grid,
wa_grid TYPE zs_grid.
***deklarasi ok_code
DATA :
ok_code TYPE sy-ucomm,
v_answer TYPE char1.
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS:HANDLE_BUTTON_CLICK FOR EVENT BUTTON_CLICK OF CL_GUI_ALV_GRID
IMPORTING ES_COL_ID ES_ROW_NO.
ENDCLASS. "lcl_event_handlers DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
METHOD HANDLE_BUTTON_CLICK.
DATA L_ROW TYPE C LENGTH 10.
DATA: LS_GOOD TYPE LVC_S_MODI.
DATA : LWA_MOD_CELL TYPE LVC_S_MODI,
LWA_MOD TYPE TY_MOD.
L_ROW = ES_ROW_NO-ROW_ID.
CASE ES_COL_ID-FIELDNAME.
WHEN 'SCNUM'.
CLEAR WA_GRID.
READ TABLE IT_GRID INDEX ES_ROW_NO-ROW_ID INTO WA_GRID.
* PERFORM BUTTON_SCNUM USING WA_GRID-SCNUM.
ENDCASE.
ENDMETHOD. "HANDLE_BUTTON_CLICK
ENDCLASS. "lcl_event_handlers IMPLEMENTATION
START-OF-SELECTION.
CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATU0100'.
SET TITLEBAR 'TITLE0100'.
PERFORM refresh.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
DATA :
wa_headerproposal TYPE bapihuhdrproposal,
it_return LIKE TABLE OF bapiret2.
ok_code = sy-ucomm.
CLEAR sy-ucomm.
CASE ok_code.
WHEN 'EXIT'.
CLEAR v_answer.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Quit Confirmation'
text_question = 'Do you want to quit ?'
icon_button_1 = 'ICON_OKAY'
icon_button_2 = 'ICON_CANCEL'
display_cancel_button = ''
popup_type = 'ICON_MESSAGE_WARNING'
IMPORTING
answer = v_answer.
IF v_answer = '1'.
LEAVE PROGRAM.
ELSEIF v_answer = '2'.
MESSAGE 'Exit attempt cancelled' TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
WHEN 'NEW'.
SUBMIT zenota_tran AND RETURN.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form exclude_tb_functions
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_EXCLUDE text
*----------------------------------------------------------------------*
FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
DATA ls_exclude TYPE ui_func.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO pt_exclude.
*&---------------------------------------------------------------------*
*& Form set_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM set_fieldcat .
REFRESH i_fieldcat.
END OF zs_grid.
DATA:
comm_grid TYPE zs_grid,"Comm_grid adalah wa untuk table control
it_grid TYPE TABLE OF zs_grid,"it_grid adalah itab detail data.
wa_grid TYPE zs_grid."it_grid adalah wa detail data.
*** deklarasi itab dan wa untuk proses getdata dan simpan data
*DATA :
* it_ztnota TYPE TABLE OF ztnota,
* wa_ztnota TYPE ztnota,
* it_ztnotad TYPE TABLE OF ztnotad,
* wa_ztnotad TYPE ztnotad.
**Paremeters / select-options
*PARAMETERS :
* p_scnum TYPE ztnota-scnum.
START-OF-SELECTION.
*** set value v_mode = 'NEW' jika parameters p_scnum = ''
*** jika tidak v_mode = 'OLD'
*** variable v_mode akan dipakai pada perform getdata.
PERFORM getdata.
CALL SCREEN 100.
*----------------------------------------------------------------------*
* MODULE set_screen_0100 OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE set_screen_0100 OUTPUT.
** menghitung jumlah record pada it_grid di simpan di tc_0100-lines
DESCRIBE TABLE it_grid LINES tc_0100-lines.
** mengkaktifkan fungsi scroll pada table control
tc_0100-v_scroll = 'X'.
*----------------------------------------------------------------------*
* MODULE fill_tc_0100 OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE fill_tc_0100 OUTPUT.
DATA:
tw_grid TYPE zs_grid.
CLEAR tw_grid.
READ TABLE it_grid INTO tw_grid INDEX tc_0100-current_line.
IF sy-subrc = 0.
MOVE tw_grid TO comm_grid.
** Mengatur attribut per cell
** loop at screen.
** if screen-name = 'COMM_GRID-MATNR'
** AND tw_grid-MENGE = 10.
** SCREEN-INPUT = '0'.
** ELSEIF screen-name = 'COMM_GRID-LINES' OR screen-name = 'COMM_GRID-
TOTAL'.
** SCREEN-INPUT = '0'.
** ELSE.
** SCREEN-INPUT = '1'.
** ENDIF.
** modify screen.
** endloop.
ELSE.
EXIT FROM STEP-LOOP.
ENDIF.
ENDMODULE. " fill_tc_0100 OUTPUT
*----------------------------------------------------------------------*
* MODULE status_0100 OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STAT0100'.
** IF v_mode = 'OLD'.
** SET TITLEBAR 'TITLE0100_B'.
** ELSE.
SET TITLEBAR 'TITLE0100_A'.
*----------------------------------------------------------------------*
* MODULE update_tc_0100 INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE update_tc_0100 INPUT.
MODIFY it_grid FROM comm_grid INDEX tc_0100-current_line.
ENDMODULE. " update_tc_0100 INPUT
*----------------------------------------------------------------------*
* MODULE user_command_0100 INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
IF v_answer = '1'.
LEAVE TO SCREEN 0.
ELSEIF v_answer = '2'.
MESSAGE 'Exit attempt cancelled' TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
** WHEN 'SAVE'.
** PERFORM simpan.
**
** WHEN 'SELECTALL'.
** CLEAR wa_grid.
** LOOP AT it_grid INTO wa_grid.
*----------------------------------------------------------------------*
* MODULE get_matnr INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE get_matnr INPUT.
** TYPES :
** BEGIN OF zs_matnr,
** maktx TYPE makt-maktx,
** matnr TYPE mara-matnr,
** END OF zs_matnr.
**
** DATA: it_matnr TYPE TABLE OF zs_matnr,
** wa_matnr TYPE zs_matnr.
**
** REFRESH: it_matnr.
** SELECT DISTINCT a~matnr b~maktx
** INTO CORRESPONDING FIELDS OF TABLE it_matnr
** FROM mara AS a
** INNER JOIN makt AS b
** ON ( a~matnr = b~matnr ).
*&---------------------------------------------------------------------*
*& Form simpan
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM simpan .
** IF v_mode = 'NEW'.
** CALL FUNCTION 'NUMBER_GET_NEXT'
** EXPORTING
** nr_range_nr = 'S1'
** object = 'ZSCNUM'
** IMPORTING
** number = v_scnum.
** ELSE.
** DELETE FROM ztnota WHERE scnum = v_scnum.
** DELETE FROM ztnotad WHERE scnum = v_scnum.
** ENDIF.
**
** CLEAR wa_ztnota.
** wa_ztnota-scnum = v_scnum.
*&---------------------------------------------------------------------*
*& Form do_refresh
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM do_refresh .
* IF v_scnum <> ''.
* p_scnum = v_scnum.
* v_mode = 'OLD'.
* ENDIF.
*
* CALL FUNCTION 'DEQUEUE_EZTNOTA'
* EXPORTING
* mode_ztnota = 'X'
* mandt = sy-mandt
* scnum = v_scnum
* x_scnum = ' '
* _scope = '3'
* _synchron = ' '
* _collect = ' '.
*
* PERFORM getdata.
ENDFORM. " DO_REFRESH
END OF zs_excel,
BEGIN OF zs_header, "data header nota
scnum TYPE ztnota-scnum,
END OF zs_header,
BEGIN OF zs_grid, "data grid
scnum TYPE ztnota-scnum,
snote TYPE string,
END OF zs_grid.
DATA :
it_excel TYPE TABLE OF zs_excel,
wa_excel TYPE zs_excel,
it_header TYPE TABLE OF zs_header,
wa_header TYPE zs_header,
it_grid TYPE TABLE OF zs_grid,
wa_grid TYPE zs_grid.
DATA :
bdc_data LIKE bdcdata OCCURS 0 WITH HEADER LINE,
bdc_message LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE,
opt TYPE ctu_params,
wa_message LIKE bdcmsgcoll,
v_msgno TYPE sy-msgno,
v_message LIKE message,
msg_count TYPE i.
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdc_data.
bdc_data-program = program.
bdc_data-dynpro = dynpro.
bdc_data-dynbegin = 'X'.
APPEND bdc_data.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdc_data.
bdc_data-fnam = fnam.
bdc_data-fval = fval.
APPEND bdc_data.
ENDFORM. "BDC_FIELD
*** Paramaters
SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
PARAMETERS:
filename TYPE localfile OBLIGATORY,
p_mode LIKE ctu_params-dismode DEFAULT 'N'.
SELECTION-SCREEN END OF SCREEN 101 .
START-OF-SELECTION.
CALL SCREEN 0100.
* EXIT.
FORM runbdc.
DATA : ssdate TYPE char10,
snetpr TYPE char15.
CLEAR opt.
opt-dismode = p_mode. " A FOREGROUND N BACKGROUND
opt-updmode = 'S'.
opt-defsize = 'X'.
opt-racommit = 'X'.
* opt-nobinpt = 'X'.
opt-nobiend = 'X'.
REFRESH bdc_message.
CALL TRANSACTION ' '
USING bdc_data
MESSAGES INTO bdc_message
OPTIONS FROM opt.
CLEAR v_message.
CONDENSE: wa_message-msgv1,
wa_message-msgv2,
wa_message-msgv3,
wa_message-msgv4.
CLEAR v_msgno.
v_msgno = wa_message-msgnr.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = wa_message-msgid
msgno = v_msgno
msgty = wa_message-msgtyp
msgv1 = wa_message-msgv1
msgv2 = wa_message-msgv2
msgv3 = wa_message-msgv3
msgv4 = wa_message-msgv4
IMPORTING
messg = v_message.
CONDENSE v_message-msgtx.
wa_mssg-mssg1 = wa_excel-scnum.
wa_mssg-mssg3 = v_message-msgtx.
APPEND wa_mssg TO it_mssg.
*&---------------------------------------------------------------------*
ENDFORM. "getdata
*&---------------------------------------------------------------------*
*& Form validasi_wa_grid
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM validasi_wa_grid.
*** Validasi data
ENDFORM. "validasi_wa_grid
*&---------------------------------------------------------------------*
*& Form baca
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM baca.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_field_seperator = 'X'
i_line_header = 'X'
i_tab_raw_data = i_tab_raw_data
i_filename = filename
TABLES
i_tab_converted_data = it_excel
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "baca
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STAT0100'.
SET TITLEBAR 'TITLE0100'.
PERFORM refresh.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form REFRESH
*&---------------------------------------------------------------------*
* text
CLEAR i_variant.
i_layout-stylefname = 'T_EDITCELL'.
i_layout-info_fname = 'LINE_COLOR'.
PERFORM set_fieldcat.
* SET HANDLER :
*g_event_receiver->catch_click FOR ob_grid,
* g_event_receiver->handle_grid_changed FOR ob_grid,
* g_event_receiver->handle_button_click FOR ob_grid.
*&---------------------------------------------------------------------*
*& Form exclude_tb_functions
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PT_EXCLUDE text
*----------------------------------------------------------------------*
FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
* CLEAR wa_fieldcat.
* wa_fieldcat-fieldname = 'SCNUMN'.
* wa_fieldcat-scrtext_l = wa_fieldcat-scrtext_m = wa_fieldcat-scrtext_l = 'New
SCNUM'.
* APPEND wa_fieldcat TO i_fieldcat.