Sunteți pe pagina 1din 162

SAP Abap Training

Contents :

1.Tipe data ABAP..................................................................................................................................2


1.1. Built-in Elementary Data Types..............................................................................................................2
1.2.User-Defined Data Types........................................................................................................................2
1.2.1.Elementary Types............................................................................................................................2
1.2.2.Complex types.................................................................................................................................2
1.2.2.1. Structure..................................................................................................................................2
1.2.2.2. Table........................................................................................................................................2
2.ABAP Dictionary (SE11).....................................................................................................................2
2.1. Domain..................................................................................................................................................3
2.2. Data Element.........................................................................................................................................3
2.3. Structure................................................................................................................................................4
2.4. Table......................................................................................................................................................5
2. 5. View......................................................................................................................................................5
3.Abap Programing...............................................................................................................................6
3.1. ABAP statement :...................................................................................................................................6
3.2. Abap Editor (SE38).................................................................................................................................8
3.2.1. Tcode SE38......................................................................................................................................8
3.2.1 Membuat program baru..................................................................................................................9
3.2.3 ABAP Debugger...............................................................................................................................9
4. Data Retreival.................................................................................................................................10
4.1.Paramater dan select-options..............................................................................................................10
4.2. Get Data..............................................................................................................................................10
4.3.Function Module (SE37).......................................................................................................................11
4.4.Class in abap editor..............................................................................................................................12
5.ALV (Abap List Viewer)....................................................................................................................12
5.1. ALV Template Program.........................................................................................................................12
5.2.Crystal Report Layout...........................................................................................................................13
6.SmartForm.......................................................................................................................................14

By Eclectic Consulting Page |1


SAP Abap Training

6.1. Tcode Smartforms................................................................................................................................15


6.2. Form Attribute.....................................................................................................................................15
6.3. Form Interface.....................................................................................................................................15
6.4. Global Definition..................................................................................................................................15
6.6. Create Template..................................................................................................................................18
7.Dialog Program................................................................................................................................19
7.1.Skenario................................................................................................................................................19
7.2.Data dictionary.....................................................................................................................................19
7.3.Deklarasi type, data, parameter dan start of selection.........................................................................20
7.4.Create screen........................................................................................................................................20
7.4.1.Field & text element......................................................................................................................20
7.4.2. Table Control TC_0100..................................................................................................................20
7.4.3. Create Button...............................................................................................................................22
................................................................................................................................................................... 22
7.5.Flow Logic.............................................................................................................................................22
7.6.GUI Status dan GUI Title.......................................................................................................................23
7.6.1.Create GUI Status..........................................................................................................................23
7.6.2.Create GUI Title.............................................................................................................................24
7.7.Subroutine............................................................................................................................................25
7.7.1.Handle Function Code...................................................................................................................25
7.7.2.Getdata..........................................................................................................................................25
7.8. Program Testing...................................................................................................................................26
8.Advaced Dialog Program.................................................................................................................27
8.1.Skenario................................................................................................................................................27
8.2.Deklarasi type, data, parameter dan start of selection.........................................................................28
8.3.Create screen........................................................................................................................................28
8.4.Flow Logic.............................................................................................................................................28
8.5.Subroutine............................................................................................................................................31
8.5.1.REFRESH........................................................................................................................................31
8.5.2.GETDATA........................................................................................................................................31
8.5.3.SET_FIELDCAT................................................................................................................................31

By Eclectic Consulting Page |2


SAP Abap Training

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

By Eclectic Consulting Page |3


SAP Abap Training

1. Tipe data ABAP


Abap Data Type

Built-in Elementary User-Difined Data


Data Type Type

Elementary Data Complex Data Type


Type

View Tables

1.1. Built-in Elementary Data Types

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 :

1.2. User-Defined Data Types

By Eclectic Consulting Page |4


SAP Abap Training

User-define data types memungkinkan untuk melakukan deklarasi data types yang specific sesuai
dengan kebutuhan.

1.2.1. Elementary Types

Elementary Types merupakan data type sederhana yang mengacu terhadap data type yang lainya
yang sudah dideklarasikan, bukan mengacu ke Built-in Elementary.

Elementary Types terdiri dari dua jenis :

1. Local> data type yang dideklarasikan di dalam program itu sendiri

2. Globa> data type yang dideklarasikan di dalam Program Include atau di ABAP Dictionay ( Domain,
Data Element , dsb )

Contoh Domain :

By Eclectic Consulting Page |5


SAP Abap Training

Contoh :

>> Kode Sintak

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. Complex types


Complex types merupakan data type yang terdiri dari beberapa data types.

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.

>> Kode Sintak

*Cara Pertama
types : begin of ty_wa,
a type i,

By Eclectic Consulting Page |6


SAP Abap Training

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.

>> Kode Sintak

TYPES :
BEGIN OF ty_wa,
a TYPE i,
b TYPE i,
hasil TYPE p DECIMALS 2,
END OF ty_wa.

* Deklarasi Internal Table


DATA : gi_itab TYPE STANDARD TABLE OF ty_wa WITH HEADER LINE.

2. ABAP Dictionary (SE11)

SAP Menu > Tools > ABAP Workbench > Development > ABAP Dictionary

Domain

Data Element Structure

Table View

By Eclectic Consulting Page |7


SAP Abap Training

2.1. Domain

Domain merupakan bagian dari Elementary Types dengan type global, yang dapat digunakan
diseluruh Data Element.

Langkah-langkah membuat Domain

1. Buka t-code se11

2. Aktifkan Radio Button

3. Isikan nama Domain, harus diawali huruf Z atau Y

4. Klik tombol

5. Isi Short Description. Kemudian isi Data Type, No. Characters, Decimal places dan Output length
seperti dibawah ini.

By Eclectic Consulting Page |8


SAP Abap Training

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.

9. Klik tombol untuk mengaktifkan Domain

2.2. Data Element

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.

Langkah-langkah membuat Data Element

1. Buka t-code se11

2. Aktifkan Radio Button

3. Isikan nama Data Element, harus diawali huruf Z atau Y

4. Klik tombol

By Eclectic Consulting Page |9


SAP Abap Training

5. Pilih Data Element, kemudian 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.

11. Klik tombol untuk mengaktifkan Data Element

2.3. Structure

Structure merupakan bagian dari Complex Types dengan type global structures, yang dapat digunakan
sebagai reference data type diseluruh program ABAP.

Langkah-langkah membuat Structure

1. Buka t-code se11

2. Aktifkan Radio Button

3. Isikan nama Structure, harus diawali huruf Z atau Y

4. Klik tombol

5. Pilih Structure, kemudian klik tombol

By Eclectic Consulting P a g e | 11
SAP Abap Training

6. Isi Short Description.

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.

11. Klik tombol untuk mengaktifkan Sturcture

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.

Langkah-langkah membuat Table

1. Buka t-code se11

2. Aktifkan Radio Button

3. Isikan nama Table, harus diawali huruf Z atau Y

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.

11. Klik tombol

12. Isi Data Class dan Size Category seperti dibawah ini.

By Eclectic Consulting P a g e | 22
SAP Abap Training

13. Klik tombol

14. Klik tombol , untuk kembali kelayar utama.

15. Klik tombol untuk mengaktifkan Table

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.

Langkah-langkah membuat View

1. Buka t-code se11

2. Aktifkan Radio Button

By Eclectic Consulting P a g e | 23
SAP Abap Training

3. Isikan nama Structure, harus diawali huruf Z atau Y

4. Klik tombol

5. Pilih Database view, kemudian klik tombol

6. Isi Short Description.

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.

12. Klik tombol untuk mengaktifkan View

3. Abap Programing

3.1. ABAP statement :


Statement adalah baris-baris kode yang menginstruksikan suatu perintah. Dalam ABAP, setiap
statement selalu diakhiri dengan tanda titik (.).
Berikut ini adalah contoh statement : write 'Hello, World !!'.

Berikut ini adalah beberapa reference statement dalam pemrograman ABAP :


1. Deklarasi Tipe & Data
Statement ini digunakan untuk mendefinisi suatu data type atau object sebagai variable yang
digunakan didalam program.
Syntax :
TYPES <variable_name> TYPE <type>.
DATA <variable_name> TYPE <type>.

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.

DATA :lh_norec TYPE i,


lh_total(5) TYPE c,
lwa_del TYPE ty_mod,

4. Paremeters and Selection-option


Syntax :
PARAMETERS: <name> type <DataType>.
SELECT-OPTIONS: <name> FOR <DataType>.

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

3.2. Abap Editor (SE38).

3.2.1. Tcode SE38.


SAP Menu > Tools > ABAP Workbench > Development > ABAP Editor

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

Menu-menu utama dalam ABAP Editor yang sering digunakan adalah :

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.

3. Direct Processing (F8), digunakan untuk menjalankan program ABAP.

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.

6. Set/Delete Bfreakpoint (Ctrl+Shift+F12), digunakan untuk mengaktifkan dan mendelete breakpoint


pada syntax di line tertentu.

3.2.1 Membuat program baru


1. buka tcode se38.

By Eclectic Consulting P a g e | 28
SAP Abap Training

2. masukan nama program dengan awalan huruf z atau Y.

3.pilih tombol create.


4. masukan title program dan pilih “executable program” di kolom type.

5. Tekan tombol save.


6. Field package disisi agar progam yang dibuat bisa ditransport. Untuk sementara kosongkan kolom
ini.

By Eclectic Consulting P a g e | 29
SAP Abap Training

7. Tekan tombol local object.


8. Lalu muncul tampilan abap editor.

3.2.3 ABAP Debugger


ABAP Debugger merupakan salah satu fitur SAP yang sering digunakan ABAP'er untuk menganalisa
program/report yang dibuat menggunakan ABAP.
Menu-menu utama dalam ABAP Debugger yang sering digunakan adalah :
1. Si
n
gl
e
St
e
By Eclectic Consulting P a g e | 30
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

4.1. Paramater dan select-options.


Pada saat pertama program dijalankan akan menampilkan screen parameter sebagai inputan awal.
Sreen ini otomatis dibuat oleh system. Berikut contoh penulisan parameters.

REPORT z_eic_parameter.

DATA word(20).
TYPES :
BEGIN OF zs_makt,
maktx TYPE makt-maktx,
matnr TYPE makt-matnr,
END OF zs_makt.

DATA it_makt TYPE TABLE OF zs_makt.

TABLES : mara,toa01,bkpf,vbak.

***** Berikut Contoh default value dan Frame with Title :


****&-------------------------------------------------------------*
****SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK groupbox1 WITH FRAME TITLE text_101.
PARAMETERS :
p_werks TYPE t001w-werks MATCHCODE OBJECT h_t001w_new OBLIGATORY ,
number(4) TYPE p DEFAULT '999'.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS :
so_word FOR word DEFAULT 'SPRING' TO 'SUMMER',
p_matnr FOR mara-matnr MATCHCODE OBJECT mat1.
SELECTION-SCREEN END OF BLOCK groupbox1.
****SELECTION-SCREEN END OF SCREEN 101 .

AT SELECTION-SCREEN OUTPUT.
text_101 = 'Selection Parameter'.

**** Berikut Contoh ON VALUE REQUEST


****&----------------------------------------------------------*
***SELECTION-SCREEN SKIP 1.
***PARAMETERS : " pada saat select jika kosong tidak mempengaruhi select
*** pmatnr TYPE mara-matnr. " goto - text element - selection text
***
***SELECT-OPTIONS: " pada saat select jika kosong maka akan diselect semua.
*** pmatnr1 FOR mara-matnr,
*** p_vbeln FOR vbak-vbeln.
***
****Isi data ke listbox p_werks1
***AT SELECTION-SCREEN ON VALUE-REQUEST FOR pmatnr.
**** ambil data
*** REFRESH it_makt.
*** SELECT DISTINCT maktx matnr

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.

**** Berikut contoh CHECKBOX :


****&----------------------------------------------------------*
** SELECTION-SCREEN BEGIN OF BLOCK selection1 WITH FRAME.
** SELECT-OPTIONS s_vbeln FOR vbak-vbeln.
** SELECTION-SCREEN SKIP.
** SELECTION-SCREEN BEGIN OF LINE.
** PARAMETERS p_chkbox AS CHECKBOX DEFAULT 'X'.
** SELECTION-SCREEN COMMENT 4(15) text-001.
** SELECTION-SCREEN END OF LINE.
** SELECTION-SCREEN END OF BLOCK selection1.

**** Berikut contoh LISTBOX :


****&----------------------------------------------------------*
** PARAMETERS:
** listbox(1) AS LISTBOX VISIBLE LENGTH 10 DEFAULT 'N'.
**
**AT SELECTION-SCREEN OUTPUT.
** DATA:
** name TYPE vrm_id,
** list TYPE vrm_values,
** value TYPE vrm_value.
** name = 'LISTBOX'. " Name should be in UPPER CASE
**
** value-key = '1'.
** value-text = 'Text 1'.
** APPEND value TO list.
** value-key = '2'.
** value-text = 'Text 2'.
** APPEND value TO list.
**
** CALL FUNCTION 'VRM_SET_VALUES'
** EXPORTING
** id = name
** values = list
** EXCEPTIONS
** id_illegal_name = 0.

SELECT-OPTIONS p_vbeln FOR vbak-vbeln.

** Untuk set text pada frame title :


at selection-screen output.
text_101 = 'Selection Parameter'.

By Eclectic Consulting P a g e | 39
SAP Abap Training

START-OF-SELECTION.
* call screen 100.
PERFORM get_data.

4.2. Get Data


• ITAB ( internal tabel), merupakan temporari table (multiple record).
• WA (work area) , temporari structure (single record).
• Untuk mengosongkan ITAB menggunakan command “REFRESH”
• Untuk mengosongkan WA menggunakan command “CLEAR”
• Pada “where” syntax untuk select option menggunakan “IN”
• Pada “where” syntax untuk parameter menggunakan “=”

** 1) Select into itab


REFRESH it_vbak.
SELECT *
FROM vbak
INTO TABLE it_vbak
WHERE audat IN p_audat. "bisa ditambahkan AND - OR - ORDER BY

** 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.

**5) select single data di masukkan langsung ke variable


CLEAR: vcust, vaudat.
SELECT SINGLE kunnr audat
FROM vbak
INTO (vcust, vaudat)
WHERE vbeln = p_vbeln.

Berikut contoh form getdata :


By Eclectic Consulting P a g e | 40
SAP Abap Training

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.

* Cara pertama menggunakan FOR ALL ENTRIES


IF it_ekko IS NOT INITIAL. " khusus FOR ALL ENTRIES harus dicek, jika tidak akan di keluark
an semua record
REFRESH: it_ekpo.
SELECT * FROM ekpo
INTO TABLE it_ekpo
FOR ALL ENTRIES IN it_ekko
WHERE ebeln = it_ekko-ebeln.
ENDIF.

* Cara Kedua menggunakan APPENDING TABLE

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.

*** get material description.


REFRESH: it_makt.
SELECT matnr maktx
FROM makt
INTO CORRESPONDING FIELDS OF TABLE it_makt
FOR ALL ENTRIES IN it_ekpo
WHERE matnr = it_ekpo-matnr
AND spras = 'E'.

*** remove duplicate record berdasarkan kode material


SORT it_makt BY matnr. " sebelumnya harus di sort berdasarkan matnr
DELETE ADJACENT DUPLICATES FROM it_makt COMPARING matnr. " remove duplicate

*** TEKNIK PEMBENTUKAN DATA


REFRESH it_print. "kosongkan it_print sebelum di isi.
LOOP AT it_ekko INTO wa_ekko. " loop untuk setiap record dari it_ekko ditampung pada wa_ekko
*** Get vendor name
CLEAR : v_name1, v_name2.
SELECT SINGLE name1 name2
FROM lfa1
INTO (v_name1, v_name2)
WHERE lifnr = wa_ekko-lifnr.

* 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

*** isi data untuk masing2 fields pada wa_print :

wa_print-ebeln = wa_ekko-ebeln."masukkan data ebeln dari wa_ekko ke wa_print.


wa_print-lifnr = wa_ekko-lifnr."masukkan data lifnr dari wa_ekko ke wa_print.

** menggabungkan v_name1 v_name2 kedalam wa_print-namev dengan karakter pemisah ' '
CONCATENATE v_name1 v_name2 INTO wa_print-namev SEPARATED BY space.

wa_print-ebelp = wa_ekpo-ebelp. "masukkan data ebelp dari wa_ekpo ke wa_print.


wa_print-matnr = wa_ekpo-matnr. "masukkan data matnr dari wa_ekpo ke wa_print.

IF wa_ekpo-matnr <> ''. "jika matnr tidak kosong


*** mencari data material pada it_makt dengan kondisi matnr = wa_ekpo-matnr
READ TABLE it_makt INTO wa_makt WITH KEY matnr = wa_ekpo-matnr.
wa_print-maktx = wa_makt-maktx. " masukkan data maktx dari wa_makt ke wa_print.
ELSE. " jika kosong di isi dari wa_ekpo-txz01
wa_print-maktx = wa_ekpo-txz01.
ENDIF.

wa_print-menge = wa_ekpo-menge. " masukkan data menge dari wa_ekpo ke wa_print.


wa_print-netpr = wa_ekpo-netpr. " masukkan data netpr dari wa_ekpo ke wa_print.
wa_print-waers = wa_ekko-waers. " masukkan data waers dari wa_ekko ke wa_print.

*** insert record wa_print ke dalam it_print :


APPEND wa_print TO it_print.
CLEAR wa_ekpo."clear data wa_ekpo untuk loop berikutnya

By Eclectic Consulting P a g e | 42
SAP Abap Training
ENDLOOP.
CLEAR wa_ekko. "clear data wa_ekko untuk loop berikutnya
ENDLOOP.

LOOP AT it_print INTO wa_print.


PERFORM hit_amt
USING wa_print-menge wa_print-netpr
CHANGING wa_print-total.
MODIFY it_print FROM wa_print TRANSPORTING total.
ENDLOOP.
ENDFORM. "getdata

*&---------------------------------------------------------------------*
*& 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

4.3. Function Module (SE37).


1. Create Function group.
Tcode se37. Goto Function Group  Create Group

By Eclectic Consulting P a g e | 43
SAP Abap Training

2. Create Function module.

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.

Pada Tab Export isikan parameter p_amt seperti diatas.

Pada tab source code ketik : P_AMT = P_MENGE * P_NETPR.

Save dan aktifkan.

Call Function module pada abap editor :

By Eclectic Consulting P a g e | 45
SAP Abap Training

Buat form hit_fm seperti di atas.


Letakkan kursor di bawah loop dan tekan tombol pattern.

Masukkan funtion name dan klik .

Lengkapi parameters untuk exporting dan importing.


Lakukan debug program untuk melihat hasilnya.

By Eclectic Consulting P a g e | 46
SAP Abap Training

4.4. Class in abap editor

*----------------------------------------------------------------------* CLASS hitung


DEFINITION

CLASS hitung DEFINITION.


PUBLIC SECTION.
METHODS: hit_amt IMPORTING m_netpr TYPE ekpo-netpr
m_menge TYPE ekpo-menge
EXPORTING m_amt TYPE ekpo-netpr.
ENDCLASS. "hitung DEFINITION

*Implement the class.


CLASS hitung IMPLEMENTATION.
METHOD hit_amt.
m_amt = m_netpr * m_menge.
ENDMETHOD. "hit_amt
ENDCLASS. "hitung IMPLEMENTATION

form hit_class.
*** contoh menggunakan class
*Create the object.
DATA obj TYPE REF TO hitung.
CREATE OBJECT obj.

LOOP AT it_data INTO wa_data.


CALL METHOD obj->hit_amt
EXPORTING
m_netpr = wa_data-netpr
m_menge = wa_data-menge
IMPORTING
m_amt = wa_data-amount.

MODIFY it_data FROM wa_data TRANSPORTING amount.

CLEAR wa_data.
ENDLOOP.
endform.

By Eclectic Consulting P a g e | 47
SAP Abap Training

5. ALV (Abap List Viewer).


5.1. ALV Template Program.

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.

Tahapannya adalah mengkopi template program “ZEIC_ALV_TEMPLATE” dan melengkapi bagian-


bagian yang dianggap perlu, yaitu :
1. Struktur data ZS_print .
Lihat bagian yang di cetak tebal tambahkan pada deklarasi struktur ZS_print seperti terlihat
sebagai berikut :
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,
colinfo TYPE lvc_t_scol,
END OF zs_print.

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.

* ebeln TYPE ekpo-ebeln,


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'EBELN'.
wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PRINT'.
wa_fieldcat-ref_tabname = 'EKKO'.
wa_fieldcat-ref_fieldname = 'EBELN'.
APPEND wa_fieldcat TO i_fieldcat.

* lifnr TYPE ekko-lifnr,


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'LIFNR'.
wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PRINT'.
wa_fieldcat-ref_tabname = 'EKKO'.
wa_fieldcat-ref_fieldname = 'LIFNR'.
APPEND wa_fieldcat TO i_fieldcat.

* namev TYPE char70,


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'NAMEV'.
wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PRINT'.
wa_fieldcat-just = 'L'.
wa_fieldcat-seltext_l = 'Vendor Name'. "ditambahkan jika title didefine sendiri
wa_fieldcat-ddictxt = 'L'. "ditambahkan jika title didefine sendiri
APPEND wa_fieldcat TO i_fieldcat.

* ebelp TYPE ekpo-ebelp,


CLEAR wa_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.

* matnr TYPE ekpo-matnr,


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MATNR'.
wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PRINT'.
wa_fieldcat-ref_tabname = 'EKPO'.
wa_fieldcat-ref_fieldname = 'MATNR'.
APPEND wa_fieldcat TO i_fieldcat.

* maktx TYPE makt-maktx,


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MAKTX'.
wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PRINT'.
wa_fieldcat-ref_tabname = 'MAKT'.
wa_fieldcat-ref_fieldname = 'MAKTX'.
APPEND wa_fieldcat TO i_fieldcat.

* menge TYPE ekpo-menge,


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MENGE'.
wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PRINT'.
wa_fieldcat-ref_tabname = 'EKPO'.
wa_fieldcat-ref_fieldname = 'MENGE'.
wa_fieldcat-qfieldname = 'MEINS'. "untuk field bertipe quantity
APPEND wa_fieldcat TO i_fieldcat.

* netpr TYPE ekpo-netpr,


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'NETPR'.
wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PRINT'.
wa_fieldcat-ref_tabname = 'EKPO'.
wa_fieldcat-ref_fieldname = 'NETPR'.
wa_fieldcat-cfieldname = 'WAERS'. "untuk field bertipe quantity
APPEND wa_fieldcat TO i_fieldcat.

* netpr TYPE ekpo-netpr,


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'WAERS'.
wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PRINT'.
wa_fieldcat-ref_tabname = 'EKKO'.
wa_fieldcat-ref_fieldname = 'WAERS'.
APPEND wa_fieldcat TO i_fieldcat.

* total TYPE ekpo-netpr,


CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'TOTAL'.
wa_fieldcat-tabname = wa_fieldcat-ctabname = wa_fieldcat-qtabname = 'IT_PRINT'.
wa_fieldcat-seltext_l = 'Amount'. "ditambahkan jika title didefine sendiri
wa_fieldcat-ddictxt = 'R'. "ditambahkan jika title didefine sendiri
wa_fieldcat-cfieldname = 'WAERS'. "untuk field bertipe quantity
APPEND wa_fieldcat TO i_fieldcat.

ENDFORM. "f_build_field_cat

5. Check dan tes program.


By Eclectic Consulting P a g e | 50
SAP Abap Training

Program Check
Active Program

Execute program

5.2. Crystal Report Layout.


Berikut tahapan merubah layout menjadi Cystal Report :

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 :

6.1. Tcode Smartforms


Buka tcode SmartForms, isi nama form misal ZEIC_lat_XX dan tekan tombol create.

By Eclectic Consulting P a g e | 54
SAP Abap Training

6.2. Form Attribute

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.

6.3. Form Interface

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.

6.4. Global Definition.


Pada global definition kita dapat mendifiniskan data, type serta membuat procedure getdata.

A. Global data, mendifinisikan semua data yg di perlukan pada proses getdata.

B. Types, pada tab ini kita mendifinisikan type untuk ZS_PRINT.

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.

Berikut program get data bisa di copy paste sebagai contoh :


REFRESH it_ekpo.
SELECT ebeln ebelp matnr menge meins netpr
FROM ekpo
INTO CORRESPONDING FIELDS OF TABLE it_ekpo
WHERE ebeln = p_ebeln.

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.

APPEND wa_print TO it_print.


CLEAR wa_print.
ENDLOOP.

read table it_print into wa_print index 1.

6.5. Create Table Layout.


Kita akan membuat table layout untuk menampilkan data Item PO, klik kanan pada main window 
Create  Table

Maka akan ter-create tabel seperti tampak dibawah :

Pada tab Data masukkan internal table it_print into wa_print.

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.

Berikut hasil edit cell :

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 :

Berikut seting attribute untuk masing-masing text .


Text Name General Attributes
C_EBELP &WA_PRINT-EBELP(CZ)&

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)&

Berikut contoh seting attribute :

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.

6.6. Create Template.


Template untuk menampilkan header data seperti Nomer PO, Vendor, Currency.

By Eclectic Consulting P a g e | 62
SAP Abap Training

Klik kanan pada main window  table  template.

Kita buat 4 line header dengan lebar kolom seperti diatas

Kemudian kita buat 5 text .

By Eclectic Consulting P a g e | 63
SAP Abap Training

Berinama untuk masing-masing sebagai berikut NAMA_FORM, NAMA_PERUSAHAAN, PO_NUMBER,


VENDOR, CURRENY.

Set attribut untuk masing-masing text :

Text Name General Attributes Line Column


NAMA_FORM Purchase Order 1 2
NAMA_PERUSAHAAN PT. AAA 2 2
PO_NUMBER PO Number : &WA_PRINT-EBELN(CZ)& 3 1
VENDOR Vendor : &WA_PRINT-NAME1(CZ)& 4 1
CURRENY Currency : &WA_PRINT-WAERS(CZ)& 3 2

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.

Berikut tampilan screen program :

7.2. Data dictionary


Data header dan detail akan di simpan pada transparant table yang harus di siapkan pada Data
Dictionary (SE11).

Berikut structure Table ZTNOTA :


Initia Data Data
Field Key l Element Type Length Decimals Short Description
MANDT X X MANDT CLNT 3 0 Client
ZSCNU
SCNUM X X M NUMC 10 0 Nomer Nota
SDATE DATS 8 0 Tanggal Nota

By Eclectic Consulting P a g e | 65
SAP Abap Training

KUNNR KUNNR CHAR 10 0 Customer Number


WAERS WAERS CUKY 5 0 Currency Key
TOTAL DMBRT CURR 13 2 Gross Amount in Local Currency

Berikut structure Table ZTNOTAD :

Initia Data Data Decimal


Field Key l Element Type Length s Short Description
MANDT X X MANDT CLNT 3 0 Client
SCNUM X X ZSCNUM NUMC 10 0 Nomer Nota
LINES X X NUMC 3 0 Lines
MATNR MATNR CHAR 18 0 Material Number
MENGE MENGE_D QUAN 13 3 Quantity
MEINS MEINS UNIT 3 0 Base Unit of Measure
QTDEL MENGE_D QUAN 13 3 Quantity
NETPR NETPR CURR 11 2 Net price
WAERS WAERS CUKY 5 0 Currency Key
Untuk bahan latihan buat tabel untuk masing abaper dengan nama table yang berbeda.

7.3. Deklarasi type, data, parameter dan start of selection.


Berikut deklarasi yang perlu disiapkan untuk program ini :

*** deklarasi table control TC_0100


CONTROLS tc_0100 TYPE TABLEVIEW USING SCREEN 100.
DATA: tc_0100_col LIKE LINE OF tc_0100-cols.

*** deklarasi variable untuk user command


DATA :
v_mode TYPE char3,
ok_code TYPE sy-ucomm,
v_answer TYPE char1.
DATA :
d_area TYPE char30,
d_field TYPE char30,
d_line TYPE char30.

*** Deklarasi struktur,itab dan wa untuk data


TYPES :
BEGIN OF zs_grid,
check TYPE char1,
scnum TYPE ztnotad-scnum,
lines TYPE ztnotad-scnum,
matnr TYPE ztnotad-matnr,
menge TYPE ztnotad-menge,
meins TYPE ztnotad-meins,
qtdel TYPE ztnotad-qtdel,
netpr TYPE ztnotad-netpr,

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.

** variable screen input/output object.


DATA :
v_scnum TYPE ztnota-scnum,
v_sdate TYPE ztnota-sdate,
v_kunnr TYPE ztnota-kunnr,
v_total TYPE ztnota-total,
v_waers TYPE ztnota-waers,
v_lines TYPE ztnotad-lines,
v_matnr TYPE ztnotad-matnr,
v_menge TYPE ztnotad-menge,
v_meins TYPE ztnotad-meins,
v_netpr TYPE ztnotad-netpr,
v_iline TYPE i.

**Paremeters / select-options
PARAMETERS :
p_scnum TYPE ztnota-scnum.

START-OF-SELECTION.
CALL SCREEN 100.

Lakukan save dan cek syntax.

7.4. Create screen.


Tahap berikutnya adalah membuat screen 100. Dengan cara double pada angka 100 dari
“CALL SCREEN 100.” Muncul window confirmation untuk screate object screen 100, klik YES.

By Eclectic Consulting P a g e | 67
SAP Abap Training

7.4.1. Field & text element.


Masukkan screen description misal “Screen 100”, kemudian klik layout diatas.

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

7.4.2. Table Control TC_0100

Name TC_0100 sesuai deklarasi tabel control :


CONTROLS tc_0100 TYPE TABLEVIEW USING SCREEN 100.

SelColumn di isi COMM_GRID-CHECK sesuai deklarasi struktur zs_grid :


TYPES :
BEGIN OF zs_grid,
check TYPE char1,

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

1. Klik pada text element.


2. Drag&Drop pada Header table control.
3. Isi name “COMM_GRID-LINES”.
4. Isi text “Lines”.

Lakukan hal yang sama seperti diatas untuk kolom berikutnya :


Name element Reff. Field (Khusus Field Element) Text (khusus text Element)
COMM_GRID-LINES ZTNOTAD-LINES Lines
COMM_GRID-MATNR ZTNOTAD-MATNR Material
COMM_GRID-MENGE ZTNOTAD-MENGE Quantity
COMM_GRID-MEINS ZTNOTAD-MIENS UoM
COMM_GRID-PRICE ZTNOTAD-NETPR Price
COMM_GRID-TOTAL ZTNOTAD-TOTAL Amount

Berikut tampilan screen akan menjadi :

By Eclectic Consulting P a g e | 72
SAP Abap Training

7.4.3. Create Button.


Tahap berikutnya adalah membuat button INSERT, SELECT ALL, DESELECT ALL dan DELETE.

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.

Buat untuk button berikutnya : BTNSELECTALL, BTNDESELECT, BTNDELETE.


Name Text Icon name FCrCode
BTN_INSERT Insert ICON_INSERT_ROW INSERT
BTNSELECTALL Select_All_ ICON_SELECT_ALL SELECTALL
BTNDESELECT Deselect ICON_DESELECT_ALL DESELECT
BTNDELETE Delete ICON_DELETE_ROW DELETE

Tampilan akan tampak seperti diatas, lakukan SAVE dan BACK.

By Eclectic Consulting P a g e | 73
SAP Abap Training

Berikutnya adalah edit flow logic.

7.5. Flow Logic.


Terlihat tampilan tab Flow Logic pada screen 100 :

Edit program flow logic dengan sytax sebagai berikut :

PROCESS BEFORE OUTPUT."Proses sebelum layar ditampilkan


MODULE set_screen_0100."Mengatur tampilan layar
LOOP WITH CONTROL tc_0100.
MODULE fill_tc_0100. "Membaca IT_grid dan memasukan data ke table
"control
ENDLOOP.
MODULE status_0100."Mengaktifkan screen Status dan Title.

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

*PROCESS ON VALUE-REQUEST. " untuk tombol bantuan (F4)


* FIELD v_meins MODULE get_meins.
* FIELD v_waers MODULE get_waers.

• 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

System akan men-generate syntax sebagai berikut :


*&---------------------------------------------------------------------*
*& Module SET_SCREEN_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module SET_SCREEN_0100 output.
*** isi
endmodule. " SET_SCREEN_0100 OUTPUT
Berikut syntax program module SET_SCREEN_0100 output :
*&---------------------------------------------------------------------*
*& Module SET_SCREEN_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
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'.

*** contoh mengatur attribut pada table control.


LOOP AT tc_0100-cols INTO tc_0100_col.
IF tc_0100_col-screen-name = 'COMM_GRID-LINES'
OR tc_0100_col-screen-name = 'COMM_GRID-TOTAL'.
tc_0100_col-screen-input = '0'.
ELSE.
tc_0100_col-screen-input = '1'.
ENDIF.
MODIFY tc_0100-cols FROM tc_0100_col INDEX sy-tabix.
CLEAR tc_0100_col.
ENDLOOP.

*** contoh mengatur attribut pada text dan field element.


LOOP AT SCREEN.
IF screen-name = 'V_LINES'.
screen-invisible = 1.
ENDIF.

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

Berikut syntax program module USER_COMMAND_0100 output :


module USER_COMMAND_0100 input.
GET CURSOR FIELD d_field AREA d_area LINE d_line.
ok_code = sy-ucomm.
CLEAR sy-ucomm.
CASE ok_code.
WHEN 'BACK'.
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 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

7.6. GUI Status dan GUI Title.

7.6.1. Create GUI Status


Pada tahapan ini kita akan membuat GUI Status dan GUI Title.

GUI Status : merupakan tempat dimana kita bisa mendifinisikan menu dan toolbar, ada 3 jenis
yaitu :

1. Menu Bar

2. Application Toolbar

3. Standard Toolbar

Berikut tahapan pembuatan GUI Status

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 …

Kemudian simpan dan Akatifkan.

7.6.2. Create GUI Title.

Yang dimaksud title dari title program seperti tampak diatas.


Berikut tahapan pembuatan GUI Title.

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.

7.7.1. Handle Function Code


Pada bagian ini kita akan membahas bagaimana program merespon fuction code yang di kirim oleh
screen. Pada module PAI  USER_COMMAND_0100 kursor program akan berjalan.

By Eclectic Consulting P a g e | 80
SAP Abap Training

Pada “module USER_COMMAND_0100 input” terdapat system variabel “sy-ucomm” yang


menyimpan funtion code. Function yang ada pada program training ini antara lain :

Tambahkan WHEN command sesuai function code pada module user_command_0100.

Berikut list program untuk user_command_0100 :


module USER_COMMAND_0100 input.
GET CURSOR FIELD d_field AREA d_area LINE d_line.
ok_code = sy-ucomm.
CLEAR sy-ucomm.
CASE ok_code.
WHEN 'BACK'.
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 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 .

endform. " GETDATA

Masukkan syntax berikut ini pada form getdata :


FORM getdata .
*** Kosongkan semua variabel, wa dan itab
CLEAR : v_scnum, v_sdate, v_kunnr, v_total, v_waers,
v_lines, v_matnr, v_menge, v_meins, v_netpr.
REFRESH it_grid.

IF v_mode <> 'NEW'.


*** Lock tabel ztnota untuk scnum = p_scnum
CALL FUNCTION 'ENQUEUE_EZTNOTA'
EXPORTING
mode_ztnota = 'X'
mandt = sy-mandt
scnum = p_scnum
x_scnum = ' '
_scope = '2'

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.

CALL FUNCTION 'POPUP_TO_INFORM'


EXPORTING
titel = 'Data lock'
txt1 = 'Data lock by another user ... !'
txt2 = wa_enq-guname
* TXT3 = ' '

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.

ENDFORM. " SIMPAN

*&---------------------------------------------------------------------*

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.

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

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

7.8. Program Testing.


Cek program dan aktivkan. Dan execute program, isikan data seperti gambar dibawah berikut dan save.

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

8. Advaced Dialog Program.


8.1. Skenario
Skenarionya kita akan membuat program untuk menampilkan data nota yang sudah di entry atau
akan memasukkan data baru. Ada fasilitas untuk melakukan pencarian data berdasarkan parameters
ataupun selection option.

Berikut tampilan program list nota:

By Eclectic Consulting P a g e | 88
SAP Abap Training

8.2. Deklarasi type, data, parameter dan start of selection.


Berikut syntax untuk deklarasi type, data, class dan parameters:

*** Deklarasi untuk data grid


TYPES :
BEGIN OF zs_grid,
scnum TYPE ztnota-scnum,
sdate TYPE ztnota-sdate,
kunnr TYPE ztnota-kunnr,
total TYPE p DECIMALS 2,

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.

*** Deklarasi untuk ALV


DATA: i_layout TYPE lvc_s_layo,
i_variant LIKE disvariant,
i_print TYPE lvc_s_prnt,
r_ucomm TYPE sy-ucomm,
i_selfield TYPE slis_selfield,
i_save VALUE 'A',
i_events TYPE slis_t_event,
i_fieldcat TYPE lvc_t_fcat,
wa_fieldcat LIKE LINE OF i_fieldcat,
i_list_top1 TYPE lvc_t_head,
i_events1 TYPE lvc_t_evts.

*** deklarasi container dan class alv grid


DATA : ob_custom TYPE REF TO cl_gui_custom_container ,
ob_grid TYPE REF TO cl_gui_alv_grid.

*** deklarsi exclude alv button


DATA: lt_exclude TYPE ui_functions.

*** deklarasi untuk class alv


TYPES :
BEGIN OF ty_mod,
row TYPE i,
END OF ty_mod.
DATA :
i_mod TYPE STANDARD TABLE OF ty_mod,
i_del TYPE STANDARD TABLE OF ty_mod,
i_add TYPE STANDARD TABLE OF ty_mod.
DATA :
LH_NOREC TYPE I,
LH_TOTAL(5) TYPE C,
LH_SUCC(40) TYPE C,
LWA_DEL TYPE TY_MOD,
LWA_MOD TYPE TY_MOD,
LH_TOTDEL TYPE I,
LH_FLAG TYPE CHAR1.

*** class definition dan implemetation


CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.
DATA:

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

***Deklarasi table untuk select-option.


TABLES kna1.

*** Parameters dan select-option ditapmpilkan dalam subscreen 101


*** screen 101 akan tercreate otomatis
SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN. “PARAMETERS :
p_scnum TYPE ztnota-scnum.
SELECTION-SCREEN SKIP 1.
SELECT-OPTIONS :
p_sdate FOR sy-datum,
p_kunnr FOR kna1-kunnr MATCHCODE OBJECT debi.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN END OF SCREEN 101 .

START-OF-SELECTION.
CALL SCREEN 0100.

By Eclectic Consulting P a g e | 91
SAP Abap Training

8.3. Create screen.


Tahap berikutnya adalah membuat screen 100. Dengan cara double pada angka 100 dari
“CALL SCREEN 100.” Muncul window confirmation untuk screate object screen 100, klik YES.

Berikutnya kita akan membuat sub screen pada screen 100, berikut tahapannya :

Berikut tahapan untuk membuat container pada screen 100 :

By Eclectic Consulting P a g e | 92
SAP Abap Training

Save screen dan back.

8.4. Flow Logic.


Pada tab isi syntax berikut ini :

PROCESS BEFORE OUTPUT.


*** Set status
MODULE status_0100.
*** Mengaitkan sub1 dengan screen 101 (Parameters)
CALL SUBSCREEN sub1 INCLUDING sy-repid '0101'.

PROCESS AFTER INPUT.


*** module user command
MODULE user_command_0100.
*** memanggil sub screen.
CALL SUBSCREEN sub1.

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

Tahap berikutnya adalah membuat GUI status dan GUI title :

Berikut tahapan pembuatan GUI Status

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

Buat tombol refresh pada application toolbar :

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.

Berikut nya buat tombol NEW

By Eclectic Consulting P a g e | 95
SAP Abap Training

Berikutnya buat tombol upload.

Berikut aktifkan tombol exit:

By Eclectic Consulting P a g e | 96
SAP Abap Training

Pada function key, masukkan “EXIT ” kemudian save dan aktikan.

Tahap berikutnya membuat gui title.

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

Berikut cara mengaktifkan title :

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

6. Lengkapi listing program pada module user_command_0100.


Berikut listing programnya:
*&---------------------------------------------------------------------*
*& 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

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.

Berikut listing program untuk form refresh :


*&---------------------------------------------------------------------*
*& Form REFRESH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM refresh .
*** kosong kan it_grid.
REFRESH it_grid.

*** perform getdata untuk isi table it_grid.


PERFORM getdata.

*** Create Object containner dan alv grid


IF ob_custom IS INITIAL.
* This will create a container
CREATE OBJECT ob_custom
EXPORTING
container_name = 'CONTAINER'.
CREATE OBJECT ob_grid
EXPORTING
i_parent = ob_custom.
* CREATE OBJECT g_event_receiver.
ENDIF.

By Eclectic Consulting P a g e | 100


SAP Abap Training
** Seting layout alv
* i_layout-cwidth_opt = 'X'.
i_layout-zebra = 'X'.
i_layout-numc_total = 'X'.
* i_layout-grid_title = 'Good Issue'.
i_layout-smalltitle = 'X'.
i_layout-stylefname = 'CELLTAB'.
i_layout-no_rowmark = 'X'.
i_layout-cwidth_opt = 'X'.
i_layout-sel_mode = 'A'.
i_layout-zebra = 'X'.
* gs_layout-cwidth_opt = 'X'.
* w_layo-grid_title = w_title.
* w_layo-zebra = c_x. "Alternating
line color (striped)
* w_layo-cwidth_opt = c_x. "Optimize co
lumn width
* w_layo-sel_mode = 'A'. "Selection M
ode

*** Seting variant ALV


i_variant-report = sy-repid. "<<<<
i_variant-username = sy-uname. "<<<<

*** Perform set_fieldcat, untuk menentukan field kolom yg di tampilkan


*** disimpan pada i_fieldcat
PERFORM set_fieldcat.

*** perform exclude_tb_functions untuk menentukan alv button yang di hide.


*** disimpan pada lt_exclude
PERFORM exclude_tb_functions CHANGING lt_exclude.

*** Call alv grid


CALL METHOD ob_grid->set_table_for_first_display
EXPORTING
* i_structure_name = 'EBAN'
is_layout = i_layout
is_variant = i_variant
* it_event = i_events1[]
i_save = 'A' "i_save'
* is_print = i_print
it_toolbar_excluding = lt_exclude
CHANGING
it_outtab = it_grid
it_fieldcatalog = i_fieldcat.

DATA: t_editcell TYPE lvc_t_styl,


fs_editcell LIKE LINE OF t_editcell.

***Register metode yang dipakai


SET HANDLER :
**g_event_receiver->catch_click FOR ob_grid,
* g_event_receiver->handle_data_changed FOR ob_grid,

By Eclectic Consulting P a g e | 101


SAP Abap Training
g_event_receiver->handle_button_click FOR ob_grid.

*** Refresh alv grid


CALL METHOD ob_grid->refresh_table_display.

*** Set alv grid agar bisa di insert


** CALL METHOD ob_grid->set_ready_for_input
** EXPORTING
** i_ready_for_input = 1.

*** Set alv grid agar bisa di edit


** CALL METHOD ob_grid->register_edit_event
** EXPORTING
** i_event_id = cl_gui_alv_grid=>mc_evt_modified.
ENDFORM. " REFRESH

8.5.2. GETDATA.
Perform GETDATA dipanggil dari form REFRESH :
FORM refresh .
*** kosong kan it_grid.
REFRESH it_grid.

*** perform getdata untuk isi table it_grid.


PERFORM getdata.

Berikut listing program untuk perform getdata :


*&---------------------------------------------------------------------*
*& Form GETDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM getdata .
REFRESH it_grid.
IF p_scnum <> ''.
SELECT *
FROM ztnota
INTO CORRESPONDING FIELDS OF TABLE it_grid
WHERE scnum = p_scnum.
ELSE.
SELECT *
FROM ztnota
INTO CORRESPONDING FIELDS OF TABLE it_grid
WHERE sdate IN p_sdate
AND kunnr IN p_kunnr.
ENDIF.
ENDFORM. " GETDATA

By Eclectic Consulting P a g e | 102


SAP Abap Training

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.

* SCNUM type ztnota-SCNUM,


* SDATE type ztnota-SDATE,
* KUNNR type ztnota-KUNNR,
* Total type p decimals 2,
* WAERS type ztnota-WAERS,
* mark(1) TYPE c,

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.

ENDFORM. " SET_FIELDCAT

By Eclectic Consulting P a g e | 103


SAP Abap Training

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

By Eclectic Consulting P a g e | 104


SAP Abap Training
*----------------------------------------------------------------------*
* -->P_WA_GRID_SCNUM text
*----------------------------------------------------------------------*
FORM button_scnum USING p_wa_grid_scnum.
SUBMIT zenota_obaja USING SELECTION-SCREEN '1000'
WITH p_scnum = p_wa_grid_scnum
AND RETURN.
PERFORM refresh.
ENDFORM. " BUTTON_SCNUM

8.6. Program Testing.


Save dan aktifkan program kemudian execute program.

9. BDC (Batch Data Communication).


Kita bisa melakukan input data secara masal dengan mengunakan template file excel atau text file.
Data tersebut akan di entry ke system melalui Tcode yang sesuai dengan data tersebut. Jadi seakan-
akan dientry manual oleh user ke SAP. Tahapannnya adalah membuat recoding (SHDB) bagaimana
memasukkan datanya. Kemudian membuat program untuk menjalankan hasil recording tadi.
Skenarionya pada program List Nota  Upload (application toolbar), jika di klik maka akan memanggil
program upload data. Dimana program tersebut akan membaca file excel kemudian akan menjalankan
entry data nota berdasarkan recording yang sudah dibuat.

9.1. SHDB (Transaction Recording).


Sebelum membuat recoding pastikan udah ada tcode yang memanggil program znota. Berikut cara
membuat tcode menggunakan SE93 :

Masukkan kode Tcode misal ZENOTA_TRAN, kemudian tekan tombol Create.

By Eclectic Consulting P a g e | 105


SAP Abap Training

Entry short text dan pilih option yang ke 2. Kemudian klik OK.

Masukkan nama program dan centang untuk GUI support.


Kemudian simpan.

Berikutnya kita akan gunakan tcode SHDB untuk recording, Berikut tahapannya :

By Eclectic Consulting P a g e | 106


SAP Abap Training

Klik New Recording, masukkan nama program dan klik ok button.


Maka akan ditampilkan layar parameters untuk program zenota_tran.

Klik execute .

By Eclectic Consulting P a g e | 107


SAP Abap Training

Masukkan Material, quantity, uom dan price


Kemudian tekan ENTER
Dilanjutkan dengan menekan insert.
Kemudian tekan tombol save dia atas.

Maka akn muncul tampilan seperti diatas. Tekan tombol save dan back.

Berikutnya kita akan malihat program hasil recording. Berikut caranya :

By Eclectic Consulting P a g e | 108


SAP Abap Training

Pilih recording yang baru dibuat dengan diblock


Klik program, maka akan muncul windows generate program.
Isi program name
Pilih transfer from recording
Klik tombol OK

Isi program title dan klik source code.

By Eclectic Consulting P a g e | 109


SAP Abap Training

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'.

*** Tampil screen 100, kemudian isi date, customer, currency


*** diikuti tombol enter
perform bdc_dynpro using 'ZENOTA_TRAN' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=ENTER'.
perform bdc_field using 'BDC_CURSOR'
'V_WAERS'.
perform bdc_field using 'V_SDATE'
'20.01.2010'.
perform bdc_field using 'V_KUNNR'
'3509'.
perform bdc_field using 'V_WAERS'
'IDR'.

*** masukkan material, quantity, uom dan price


*** diikuti tombol enter
perform bdc_dynpro using 'ZENOTA_TRAN' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=ENTER'.
perform bdc_field using 'BDC_CURSOR'
'V_NETPR'.

*** diabaikan karena sudah diisi sebelumnya.


**perform bdc_field using 'V_SDATE'
** '20.01.2010'.
**perform bdc_field using 'V_KUNNR'
** '3509'.
**perform bdc_field using 'V_WAERS'
** 'IDR'.

*** entry data material, quantity, uom dan price


perform bdc_field using 'V_MATNR'
'1500-520'.
perform bdc_field using 'V_MENGE'
'7,000'.
perform bdc_field using 'V_MEINS'
'PC'.
perform bdc_field using 'V_NETPR'

By Eclectic Consulting P a g e | 110


SAP Abap Training
' 10.000,00'.

** tekan tombol insert


perform bdc_dynpro using 'ZENOTA_TRAN' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=INSERT'.
perform bdc_field using 'BDC_CURSOR'
'V_SDATE'.
*** diabaikan karena sudah diisi sebelumnya.
**perform bdc_field using 'V_SDATE'
** '20.01.2010'.
**perform bdc_field using 'V_KUNNR'
** '3509'.
**perform bdc_field using 'V_WAERS'
** 'IDR'.
**perform bdc_field using 'V_MATNR'
** '1500-520'.
**perform bdc_field using 'V_MENGE'
** '7,000'.
**perform bdc_field using 'V_MEINS'
** 'PC'.
**perform bdc_field using 'V_NETPR'
** '10.000,00'.

*** tekan tombol save


perform bdc_dynpro using 'ZENOTA_TRAN' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=SAVE'.
perform bdc_field using 'BDC_CURSOR'
'V_SDATE'.

*** diabaikan karena sudah diisi sebelumnya.


**perform bdc_field using 'V_SDATE'
** '20.01.2010'.
**perform bdc_field using 'V_KUNNR'
** '3509'.
**perform bdc_field using 'V_WAERS'
** 'IDR'.
**perform bdc_field using 'V_MATNR'
** '1500-520'.
**perform bdc_field using 'V_MENGE'
** '7,000'.
**perform bdc_field using 'V_MEINS'
** 'PC'.
**perform bdc_field using 'V_NETPR'
** '10.000,00'.

By Eclectic Consulting P a g e | 111


SAP Abap Training

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'.

*** Tampil screen 100, kemudian isi date, customer, currency


*** diikuti tombol enter
perform bdc_dynpro using 'ZENOTA_TRAN' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=ENTER'.
perform bdc_field using 'BDC_CURSOR'
'V_WAERS'.
perform bdc_field using 'V_SDATE'
'20.01.2010'.
perform bdc_field using 'V_KUNNR'
'3509'.
perform bdc_field using 'V_WAERS'
'IDR'.

*** masukkan material, quantity, uom dan price


*** diikuti tombol enter
perform bdc_dynpro using 'ZENOTA_TRAN' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=ENTER'.
perform bdc_field using 'BDC_CURSOR'
'V_NETPR'.
perform bdc_field using 'V_MATNR'
'1500-520'.
perform bdc_field using 'V_MENGE'
'7,000'.
perform bdc_field using 'V_MEINS'
'PC'.
perform bdc_field using 'V_NETPR'
' 10.000,00'.

** tekan tombol insert


perform bdc_dynpro using 'ZENOTA_TRAN' '0100'.
perform bdc_field using 'BDC_OKCODE'

By Eclectic Consulting P a g e | 112


SAP Abap Training
'=INSERT'.
perform bdc_field using 'BDC_CURSOR'
'V_SDATE'.

*** tekan tombol save


perform bdc_dynpro using 'ZENOTA_TRAN' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=SAVE'.
perform bdc_field using 'BDC_CURSOR'
'V_SDATE'.

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 :

LOOP AT IT_EXCEL INTO WA_EXCEL.


*** masukkan material, quantity, uom dan price
*** diikuti tombol enter
perform bdc_dynpro using 'ZENOTA_TRAN' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=ENTER'.
perform bdc_field using 'BDC_CURSOR'
'V_NETPR'.
perform bdc_field using 'V_MATNR'
'1500-520'.
perform bdc_field using 'V_MENGE'
'7,000'.
perform bdc_field using 'V_MEINS'
'PC'.
perform bdc_field using 'V_NETPR'
' 10.000,00'.

** tekan tombol insert


perform bdc_dynpro using 'ZENOTA_TRAN' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=INSERT'.
perform bdc_field using 'BDC_CURSOR'
'V_SDATE'.
ENDLOOP

Berikutnya kita akan membuat dialog program untuk upload data.

9.2. Dialog program untuk BDC.


Berikut tampilan program yang akan kita buat.

By Eclectic Consulting P a g e | 113


SAP Abap Training

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.

Berikut isi data excel :

scnum sdate Kunnr waers matnr menge meins netpr


1 20.01.2014 3509 IDR 3007-01 10 PC 20000
1 20.01.2014 3509 IDR 3007-03 20 PC 10000
2 20.01.2014 3509 IDR 3007-01 10 PC 20000
2 20.01.2014 3509 IDR 3007-03 20 PC 10000
2 20.01.2014 3509 IDR 3007-03 20 PC 10000
Data data diatas terdapat 2 nomer nota (scnum 1 dan 2). Yang pertama terdiri dari 2 item dan yang
kedua terdiri dari 3 item

9.2.1. Deklarasi type, data, parameter dan start of selection.


Buat program baru misal dengan nama “ZEBDC_NOTA”.

*** Deklarasi data nota


TYPES:
BEGIN OF zs_excel, " sesuai kolom pada excel
scnum TYPE ztnota-scnum,
sdate TYPE ztnota-sdate,
kunnr TYPE ztnota-kunnr,
waers TYPE ztnota-waers,
matnr TYPE ztnotad-matnr,
menge TYPE ztnotad-menge,
meins TYPE ztnotad-meins,
netpr TYPE ztnotad-netpr,
END OF zs_excel,
BEGIN OF zs_header, "data header nota
scnum TYPE ztnota-scnum,
sdate TYPE ztnota-sdate,

By Eclectic Consulting P a g e | 114


SAP Abap Training
kunnr TYPE ztnota-kunnr,
waers TYPE ztnota-waers,
END OF zs_header,
BEGIN OF zs_grid, "data grid
scnum TYPE ztnota-scnum,
sdate TYPE ztnota-sdate,
kunnr TYPE ztnota-kunnr,
waers TYPE ztnota-waers,
matnr TYPE ztnotad-matnr,
menge TYPE ztnotad-menge,
meins TYPE ztnotad-meins,
netpr TYPE ztnotad-netpr,
scnumn 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.

**deklarasi BDC Related


TYPES:
BEGIN OF zs_mssg,
mssg1 TYPE string, "Shipment
mssg2 TYPE flag, "Flag
mssg3 TYPE string, "Message
END OF zs_mssg.

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.

By Eclectic Consulting P a g e | 115


SAP Abap Training
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

***Deklarasi terkait alv


DATA :
ok_code TYPE sy-ucomm,
v_answer TYPE char1.

DATA: i_layout TYPE lvc_s_layo,


i_variant LIKE disvariant,
i_print TYPE lvc_s_prnt,
r_ucomm TYPE sy-ucomm,
i_selfield TYPE slis_selfield,
i_save VALUE 'A',
i_events TYPE slis_t_event,
i_fieldcat TYPE lvc_t_fcat,
i_fieldcat500 TYPE lvc_t_fcat,
wa_fieldcat LIKE LINE OF i_fieldcat,
i_list_top1 TYPE lvc_t_head,
i_events1 TYPE lvc_t_evts.

DATA : ob_custom TYPE REF TO cl_gui_custom_container ,


ob_grid TYPE REF TO cl_gui_alv_grid.

DATA: lt_exclude TYPE ui_functions.

*** Deklarasi terkait read excel file


TYPE-POOLS: truxs.
DATA: i_tab_converted_data TYPE STANDARD TABLE OF zs_excel,
w_tab_converted_data TYPE zs_excel,
i_tab_raw_data TYPE truxs_t_text_data.
DATA: desktop_directory TYPE string.
DATA: it_file_table TYPE STANDARD TABLE OF file_table,
wa_file_table TYPE file_table,
rc TYPE i.

*** Paramaters
SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
PARAMETERS:

By Eclectic Consulting P a g e | 116


SAP Abap Training
filename TYPE localfile OBLIGATORY,
p_mode LIKE ctu_params-dismode DEFAULT 'N'.
SELECTION-SCREEN END OF SCREEN 101 .

*** event handle untuk parameters


AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.

CALL METHOD cl_gui_frontend_services=>get_desktop_directory


CHANGING
desktop_directory = desktop_directory
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

CALL METHOD cl_gui_frontend_services=>file_open_dialog


EXPORTING
window_title = 'Select Excel File'
default_extension = 'XLS'
file_filter = 'Excel files (*.XLS)|*.XLS| Excel files (*.XLSX)|
*.XLSX|' "cl_gui_frontend_services=>filetype_excel
initial_directory = desktop_directory
CHANGING
file_table = it_file_table
rc = rc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSEIF sy-subrc = 0 AND rc = 1.
READ TABLE it_file_table INTO wa_file_table INDEX 1 .
filename = wa_file_table-filename.
ENDIF.

START-OF-SELECTION.
CALL SCREEN 0100.

9.2.2. Create screen.


Untuk create screen karena screen sama dengan screen 100 dari program ZENOTA_LIST maka kita bisa
lakukan copy screen antar program. Berikut tahapannya :

1. Buka program ZENOTA_LIST


2. Klik kanan pada screen  0100, pilih copy.

By Eclectic Consulting P a g e | 117


SAP Abap Training

3. Isi program name tujuan dan screen number misal ZEBDC_NOTA. Kemudian tekan tombol OK .

Screen layout dan flow logic akan di copy ke program ZEBDC_NOTA.


4. Lengkapi syntax untuk MODULE status_0100.
Berikut syntaxnya :
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STAT0100'.
SET TITLEBAR 'TITLE0100'.
PERFORM refresh.
ENDMODULE. " STATUS_0100 OUTPUT

5. Lengkapi syntax untuk MODULE user_command_0100.


Berikut syntaxnya :
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text

By Eclectic Consulting P a g e | 118


SAP Abap Training
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
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 'BACA'.
PERFORM getdata.
WHEN 'PROCESS'.
CLEAR wa_grid.
LOOP AT it_grid INTO wa_grid WHERE scnumn <> ''.
EXIT.
ENDLOOP.

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

6. Create GUI Status

By Eclectic Consulting P a g e | 119


SAP Abap Training

Create application toolbar untuk Function Code ‘BACA’ dan ‘PROCESS’.


Aktifkan function key ‘EXIT’.

7. Create GUI Title.

9.2.3. Subroutine.

9.2.3.1. REFRESH.
*&---------------------------------------------------------------------*
*& Form REFRESH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM refresh .
IF ok_code <> 'EXIT'.

By Eclectic Consulting P a g e | 120


SAP Abap Training
IF ob_custom IS INITIAL.
* This will create a container
CREATE OBJECT ob_custom
EXPORTING
container_name = 'CONTAINER'.
CREATE OBJECT ob_grid
EXPORTING
i_parent = ob_custom.
* CREATE OBJECT g_event_receiver.
ENDIF.

** Display first ALV


* i_layout-cwidth_opt = 'X'.
CLEAR i_layout.
i_layout-cwidth_opt = 'X'.
i_layout-zebra = 'X'.
i_layout-no_rowins = 'X'.
* i_layout-no_rowmark = 'X'.
* i_layout-no_toolbar = 'X'.
* gs_layout-cwidth_opt = 'X'.
* w_layo-grid_title = w_title.
* w_layo-zebra = c_x. "Alternating
line color (striped)
* w_layo-cwidth_opt = c_x. "Optimize co
lumn width
* w_layo-sel_mode = 'A'. "Selection M
ode
* i_variant-report = sy-repid. "<<<<
* i_variant-username = sy-uname. "<<<<

CLEAR i_variant.
i_layout-stylefname = 'T_EDITCELL'.
i_layout-info_fname = 'LINE_COLOR'.
PERFORM set_fieldcat.

PERFORM exclude_tb_functions CHANGING lt_exclude.

CALL METHOD ob_grid->set_table_for_first_display


EXPORTING
* i_structure_name = 'EBAN'
is_layout = i_layout
is_variant = i_variant
* it_event = i_events1[]
i_save = 'X' "i_save'
* is_print = i_print
it_toolbar_excluding = lt_exclude
CHANGING
it_outtab = it_grid
it_fieldcatalog = i_fieldcat.

DATA: t_editcell TYPE lvc_t_styl,


fs_editcell LIKE LINE OF t_editcell.

* SET HANDLER :

By Eclectic Consulting P a g e | 121


SAP Abap Training
*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.

CALL METHOD ob_grid->refresh_table_display.


CALL METHOD ob_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.

* CALL METHOD ob_grid->register_edit_event


* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_modified.
*
* DATA index_rows TYPE lvc_t_col.
* CALL METHOD ob_grid->set_selected_columns
* EXPORTING
* it_col_table = index_rows.
ENDIF.
ENDFORM. " REFRESH

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.

By Eclectic Consulting P a g e | 122


SAP Abap Training

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.

ENDFORM. " SET_FIELDCAT

By Eclectic Consulting P a g e | 123


SAP Abap Training

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.

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

9.2.3.4. GETDATA
*&---------------------------------------------------------------------*
*& Form getdata
*&---------------------------------------------------------------------*
FORM getdata.

By Eclectic Consulting P a g e | 124


SAP Abap Training
PERFORM baca.
LOOP AT it_excel INTO wa_excel.
CLEAR : wa_grid, wa_header.
MOVE-CORRESPONDING wa_excel TO wa_grid.
MOVE-CORRESPONDING wa_excel TO wa_header.
APPEND wa_grid TO it_grid.
APPEND wa_header TO it_header.
CLEAR wa_excel.
ENDLOOP.

DELETE ADJACENT DUPLICATES FROM it_header .

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,

By Eclectic Consulting P a g e | 125


SAP Abap Training
xmatnr TYPE ztnotad-matnr.

CLEAR wa_grid-snote.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_grid-kunnr
IMPORTING
output = wa_grid-kunnr.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


EXPORTING
input = wa_grid-matnr
IMPORTING
output = wa_grid-matnr.

CLEAR : xkunnr, xmatnr .


SELECT SINGLE kunnr FROM kna1 INTO xkunnr WHERE kunnr = wa_grid-kunnr.
SELECT SINGLE matnr FROM mara INTO xmatnr WHERE matnr = wa_grid-matnr.

IF xkunnr = ''.
CONCATENATE wa_grid-snote 'Customer' wa_grid-kunnr 'tidak ada' INTO wa_grid-
snote SEPARATED BY space.
ENDIF.

IF wa_grid-snote <> ''.


CONCATENATE wa_grid-snote '|' 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.

MODIFY it_grid FROM wa_grid.


ENDFORM. "validasi_wa_grid

9.2.3.7. RUNBDC
FORM runbdc.
DATA : ssdate TYPE char10,
snetpr TYPE char15.

LOOP AT it_header INTO wa_header.


REFRESH bdc_data.
*** Screen parameter
PERFORM bdc_dynpro USING 'ZENOTA_TRAN' '1000'.
PERFORM bdc_field USING 'BDC_CURSOR'
'P_SCNUM'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=ONLI'.
*** Isi data header nota
PERFORM bdc_dynpro USING 'ZENOTA_TRAN' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'

By Eclectic Consulting P a g e | 126


SAP Abap Training
'/00'.
PERFORM bdc_field USING 'BDC_CURSOR'
'V_WAERS'.
WRITE wa_header-sdate TO ssdate.
PERFORM bdc_field USING 'V_SDATE'
ssdate.
PERFORM bdc_field USING 'V_KUNNR'
wa_header-kunnr.
PERFORM bdc_field USING 'V_WAERS'
wa_header-waers.

*** loop untuk isi detail item


LOOP AT it_excel INTO wa_excel WHERE scnum = wa_header-scnum.
PERFORM bdc_dynpro USING 'ZENOTA_TRAN' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'BDC_CURSOR'
'V_NETPR'.
PERFORM bdc_field USING 'V_MATNR'
wa_excel-matnr.
WRITE wa_excel-menge TO snetpr.
PERFORM bdc_field USING 'V_MENGE'
snetpr.
PERFORM bdc_field USING 'V_MEINS'
wa_excel-meins.
WRITE wa_excel-netpr TO snetpr.
PERFORM bdc_field USING 'V_NETPR'
snetpr.
PERFORM bdc_dynpro USING 'ZENOTA_TRAN' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=INSERT'.
ENDLOOP.
*** ketika di tekan tombol save
PERFORM bdc_dynpro USING 'ZENOTA_TRAN' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SAVE'.
PERFORM bdc_field USING 'BDC_CURSOR'
'V_SDATE'.

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.

By Eclectic Consulting P a g e | 127


SAP Abap Training
IF bdc_message[] IS NOT INITIAL.
CLEAR wa_message.
READ TABLE bdc_message INTO wa_message
WITH KEY msgtyp = 'I'
msgid = '00'
msgnr = '001'.
CONDENSE: wa_message-msgv1,
wa_message-msgv2,
wa_message-msgv3,
wa_message-msgv4 NO-GAPS.

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.

*** UPDATE IT_GRID.


LOOP AT it_grid INTO wa_grid WHERE scnum = wa_excel-scnum.
wa_grid-snote = v_message-msgtx.
MODIFY it_grid FROM wa_grid.
ENDLOOP.
ELSE.
wa_mssg-mssg2 = 'X'.
*** UPDATE IT_GRID.
LOOP AT it_grid INTO wa_grid WHERE scnum = wa_excel-scnum.
wa_grid-scnumn = wa_message-msgv1.

By Eclectic Consulting P a g e | 128


SAP Abap Training
MODIFY it_grid FROM wa_grid.
ENDLOOP.
ENDIF.
ENDIF.
CLEAR: wa_mssg.
CLEAR wa_grid.
ENDLOOP.
ENDFORM. "runbdc

10. Program Template


10.1. ALV Template
REPORT zeic_alv_template.
*** SLIS ALV RELATED
TYPE-POOLS:slis.
INCLUDE: <icon>.
CONSTANTS:
yes VALUE 'X',
no VALUE space,
c_vrsio(3) VALUE '000'.

*Common Mandatory and Non Mandatory ALV Variables


DATA:
i_layout TYPE slis_layout_alv,
i_events TYPE slis_t_event,
i_fieldcat TYPE slis_t_fieldcat_alv,
i_print TYPE slis_print_alv,
i_list_top TYPE slis_t_listheader,
i_list_end TYPE slis_t_listheader,
i_sort TYPE slis_t_sortinfo_alv,
i_color TYPE lvc_t_scol WITH HEADER LINE,
wa_fieldcat LIKE LINE OF i_fieldcat,
i_variant LIKE disvariant,
i_selfield TYPE slis_selfield,
fcode TYPE TABLE OF sy-ucomm,
ok_code TYPE sy-ucomm,
data_count TYPE i,
header_count TYPE i,
v_total TYPE sy-pagno.

DATA:
gs_extract1 LIKE disextract,
gs_extract2 LIKE disextract.

*** Data RELATED


TYPES:
BEGIN OF zs_print,

colinfo TYPE lvc_t_scol,


END OF zs_print.
DATA :
it_print TYPE TABLE OF zs_print,

By Eclectic Consulting P a g e | 129


SAP Abap Training
wa_print TYPE zs_print.
INITIALIZATION.
CALL FUNCTION 'REUSE_ALV_EXTRACT_AT_INIT'
CHANGING
cs_extract1 = gs_extract1
cs_extract2 = gs_extract2.

*** PARAMETERS and SELECT-OPTIONS


*PARAMETERS :
*SELECT-OPTIONS

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.......'.

PERFORM f_layout_init USING i_layout.


PERFORM f_eventtab_build USING i_events[].
i_variant-report = sy-repid.
PERFORM f_print_control.
PERFORM f_build_header_list.
PERFORM f_build_sort.
PERFORM f_build_fieldcat.
PERFORM f_build_data TABLES it_print.
PERFORM print_alv.
ELSE.
MESSAGE i000(z02).
ENDIF.

***************************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.

By Eclectic Consulting P a g e | 130


SAP Abap Training

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'.

ENDFORM. " f_layout_init

*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.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'


EXPORTING
i_list_type = 0
IMPORTING
et_events = p_events.

READ TABLE p_events WITH KEY name = slis_ev_top_of_page INTO ls_event.


IF sy-subrc = 0.
MOVE slis_ev_top_of_page TO: ls_event-form, ls_event-name.
APPEND ls_event TO p_events.
ENDIF.

READ TABLE p_events WITH KEY name = slis_ev_end_of_page INTO ls_event.


IF sy-subrc = 0.
MOVE slis_ev_end_of_page TO: ls_event-form, ls_event-name.
APPEND ls_event TO p_events.
ENDIF.

* READ TABLE p_events WITH KEY name = slis_ev_end_of_list INTO ls_event.


* IF sy-subrc = 0.
* MOVE slis_ev_end_of_list TO: ls_event-form, ls_event-name.
* APPEND ls_event TO p_events.
* ENDIF.

READ TABLE p_events WITH KEY name = slis_ev_top_of_list INTO ls_event.


IF sy-subrc = 0.
MOVE slis_ev_top_of_list TO: ls_event-form, ls_event-name.
APPEND ls_event TO p_events.
ENDIF.

By Eclectic Consulting P a g e | 131


SAP Abap Training
* READ TABLE p_events WITH KEY name = slis_ev_pf_status_set INTO ls_event.
* IF sy-subrc = 0.
* MOVE slis_ev_pf_status_set TO: ls_event-form, ls_event-name.
* APPEND ls_event TO p_events.
* ENDIF.

READ TABLE p_events WITH KEY name = slis_ev_user_command INTO ls_event.


IF sy-subrc = 0.
MOVE slis_ev_user_command TO: ls_event-form, ls_event-name.
APPEND ls_event TO p_events.
ENDIF.

ENDFORM. " f_eventtab_build

*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.

ENDFORM. " f_build_header_list

*Form f_build_sort
*Sort by blah blah blah
FORM f_build_sort .
DATA: l_sort TYPE slis_sortinfo_alv.

By Eclectic Consulting P a g e | 132


SAP Abap Training
DEFINE def_sort.
clear l_sort.
*Sort position
l_sort-spos = &1.
l_sort-fieldname = &2.
*Sort by ascending
l_sort-up = yes.
*Subtot key
l_sort-subtot = no.
*Separate Line between Group
l_sort-group = 'UL'.
append l_sort to i_sort.
END-OF-DEFINITION.
* def_Sort '01' 'RACCT'.
* DEF_SORT '01' 'COUNT'.
ENDFORM. " f_build_sort

***************************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

By Eclectic Consulting P a g e | 133


SAP Abap Training

*&--------------------------------------------------------------------*
*&Form print_alv
*&--------------------------------------------------------------------*
FORM print_alv.
DATA:
i_save VALUE 'U'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
i_callback_program = gs_extract1-report
is_layout = i_layout
it_fieldcat = i_fieldcat
i_save = i_save
is_variant = i_variant
it_events = i_events[]
it_sort = i_sort
is_print = i_print
TABLES
t_outtab = it_print
EXCEPTIONS
program_error = 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. "

*&---------------------------------------------------------------------*
*&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.

SET PF-STATUS 'STATALV' EXCLUDING fcode.


SET TITLEBAR 'TITLEALV'.

By Eclectic Consulting P a g e | 134


SAP Abap Training
ENDFORM. "PF_STATUS_SET

*&---------------------------------------------------------------------*
*&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.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'


EXPORTING
i_logo = 'ENJOYSAP_LOGO'
i_end_of_list_grid = i_list_end.
ENDFORM. "END_OF_LIST
*&---------------------------------------------------------------------*
*&Form f_print_header
*&---------------------------------------------------------------------*
FORM f_print_header USING p_title1 LIKE sy-title
p_title2 LIKE sy-title
p_title3 LIKE sy-title.

By Eclectic Consulting P a g e | 135


SAP Abap Training
DATA: l_post1 TYPE i, l_post2 TYPE i, l_post3 TYPE i, l_post4 TYPE i, l_posin TYP
E i.

p_title1 = 'PT. Nama Perusahaan'.


p_title2 = sy-title.

l_post1 = ( sy-linsz / 2 ) - ( strlen( p_title1 ) / 2 ).


l_post2 = ( sy-linsz / 2 ) - ( strlen( p_title2 ) / 2 ).
l_post3 = ( sy-linsz / 2 ) - ( strlen( p_title3 ) / 2 ).
l_post4 = l_post1 - 9.
l_posin = sy-linsz - 22.

WRITE: / 'Report :', sy-cprog.


WRITE AT l_post1 p_title1.
WRITE AT l_posin 'Date :'.
WRITE sy-datum.

WRITE: / 'Cli/Sys :', sy-mandt, '/', sy-sysid.


WRITE AT l_post2 p_title2.
WRITE AT: l_posin 'Time :'.
WRITE sy-uzeit.

WRITE: / 'UserID :', sy-uname.


WRITE AT l_posin 'Page :'.

IF v_total IS NOT INITIAL.


WRITE: (3) sy-pagno NO-ZERO, 'of', (3) v_total.
ELSE.
WRITE (3) sy-pagno NO-ZERO.
ENDIF.
ENDFORM. "f_print_header
*&---------------------------------------------------------------------*
*& Form GETDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM getdata .

ENDFORM. " GETDATA

10.2. Dialog Template.

10.2.1. Class ALV for List transaction.


*&---------------------------------------------------------------------*
*& Report ZENOTA_LIST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

By Eclectic Consulting P a g e | 136


SAP Abap Training
REPORT z_list_template.
*** Deklarasi untuk data grid
TYPES :
BEGIN OF zs_grid,
*** scnum TYPE ztnota-scnum,
*** sdate TYPE ztnota-sdate,
*** kunnr TYPE ztnota-kunnr,
*** total TYPE p DECIMALS 2,
*** 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.

*** Deklarasi untuk ALV


DATA: i_layout TYPE lvc_s_layo,
i_variant LIKE disvariant,
i_print TYPE lvc_s_prnt,
r_ucomm TYPE sy-ucomm,
i_selfield TYPE slis_selfield,
i_save VALUE 'A',
i_events TYPE slis_t_event,
i_fieldcat TYPE lvc_t_fcat,
wa_fieldcat LIKE LINE OF i_fieldcat,
i_list_top1 TYPE lvc_t_head,
i_events1 TYPE lvc_t_evts.

*** deklarasi container dan class alv grid


DATA : ob_custom TYPE REF TO cl_gui_custom_container ,
ob_grid TYPE REF TO cl_gui_alv_grid.

*** deklarsi exclude alv button


DATA: lt_exclude TYPE ui_functions.

*** deklarasi untuk class alv


TYPES :
BEGIN OF ty_mod,
row TYPE i,
END OF ty_mod.
DATA :
i_mod TYPE STANDARD TABLE OF ty_mod,
i_del TYPE STANDARD TABLE OF ty_mod,
i_add TYPE STANDARD TABLE OF ty_mod.
DATA :
LH_NOREC TYPE I,
LH_TOTAL(5) TYPE C,
LH_SUCC(40) TYPE C,

By Eclectic Consulting P a g e | 137


SAP Abap Training
LWA_DEL TYPE TY_MOD,
LWA_MOD TYPE TY_MOD,
LH_TOTDEL TYPE I,
LH_FLAG TYPE CHAR1.

*** class definition dan implemetation


CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.
DATA:
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

***Deklarasi table untuk select-option.


TABLES kna1.
*** Parameters dan select-option ditapmpilkan dalam subscreen 101
SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
****PARAMETERS :
**** p_scnum TYPE ztnota-scnum.
****SELECTION-SCREEN SKIP 1.
****SELECT-OPTIONS :
**** p_sdate FOR sy-datum,
**** p_kunnr FOR kna1-kunnr MATCHCODE OBJECT debi.
****SELECTION-SCREEN SKIP 1.

By Eclectic Consulting P a g e | 138


SAP Abap Training
SELECTION-SCREEN END OF SCREEN 101 .

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

By Eclectic Consulting P a g e | 139


SAP Abap Training
*&---------------------------------------------------------------------*
*& Form REFRESH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM refresh .
*** kosong kan it_grid.
REFRESH it_grid.

*** perform getdata untuk isi table it_grid.


PERFORM getdata.

*** Create Object containner dan alv grid


IF ob_custom IS INITIAL.
* This will create a container
CREATE OBJECT ob_custom
EXPORTING
container_name = 'CONTAINER'.
CREATE OBJECT ob_grid
EXPORTING
i_parent = ob_custom.
CREATE OBJECT g_event_receiver.
ENDIF.

** Seting layout alv


* i_layout-cwidth_opt = 'X'.
i_layout-zebra = 'X'.
i_layout-numc_total = 'X'.
* i_layout-grid_title = 'Good Issue'.
i_layout-smalltitle = 'X'.
i_layout-stylefname = 'CELLTAB'.
i_layout-no_rowmark = 'X'.
i_layout-cwidth_opt = 'X'.
i_layout-sel_mode = 'A'.
i_layout-zebra = 'X'.
* gs_layout-cwidth_opt = 'X'.
* w_layo-grid_title = w_title.
* w_layo-zebra = c_x. "Alternating
line color (striped)
* w_layo-cwidth_opt = c_x. "Optimize col
umn width
* w_layo-sel_mode = 'A'. "Selection Mo
de

*** Seting variant ALV


i_variant-report = sy-repid. "<<<<
i_variant-username = sy-uname. "<<<<

*** Perform set_fieldcat, untuk menentukan field kolom yg di tampilkan


*** disimpan pada i_fieldcat
PERFORM set_fieldcat.

By Eclectic Consulting P a g e | 140


SAP Abap Training

*** perform exclude_tb_functions untuk menentukan alv button yang di hide.


*** disimpan pada lt_exclude
PERFORM exclude_tb_functions CHANGING lt_exclude.

*** Call alv grid


CALL METHOD ob_grid->set_table_for_first_display
EXPORTING
* i_structure_name = 'EBAN'
is_layout = i_layout
is_variant = i_variant
* it_event = i_events1[]
i_save = 'A' "i_save'
* is_print = i_print
it_toolbar_excluding = lt_exclude
CHANGING
it_outtab = it_grid
it_fieldcatalog = i_fieldcat.

DATA: t_editcell TYPE lvc_t_styl,


fs_editcell LIKE LINE OF t_editcell.

***Register metode yang dipakai


SET HANDLER :
**g_event_receiver->catch_click FOR ob_grid,
* g_event_receiver->handle_data_changed FOR ob_grid,
g_event_receiver->handle_button_click FOR ob_grid.

*** Refresh alv grid


CALL METHOD ob_grid->refresh_table_display.

*** Set alv grid agar bisa di insert


** CALL METHOD ob_grid->set_ready_for_input
** EXPORTING
** i_ready_for_input = 1.

*** Set alv grid agar bisa di edit


** CALL METHOD ob_grid->register_edit_event
** EXPORTING
** i_event_id = cl_gui_alv_grid=>mc_evt_modified.
ENDFORM. " REFRESH

*&---------------------------------------------------------------------*
*& 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.

By Eclectic Consulting P a g e | 141


SAP Abap Training
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

*&---------------------------------------------------------------------*
*& Form set_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM set_fieldcat .
REFRESH i_fieldcat.

* SCNUM type ztnota-SCNUM,


* SDATE type ztnota-SDATE,
* KUNNR type ztnota-KUNNR,
* Total type p decimals 2,
* WAERS type ztnota-WAERS,
* mark(1) TYPE c,

*** CLEAR wa_fieldcat.


*** wa_fieldcat-fieldname = 'SCNUM'.
*** wa_fieldcat-ref_table = 'ZTNOTA'.
*** wa_fieldcat-ref_field = 'SCNUM'.
*** wa_fieldcat-icon = 'X'.

By Eclectic Consulting P a g e | 142


SAP Abap Training
*** wa_fieldcat-style = cl_gui_alv_grid=>mc_style_button.
*** APPEND wa_fieldcat TO i_fieldcat.

ENDFORM. " SET_FIELDCAT


*&---------------------------------------------------------------------*
*& Form GETDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM getdata .
*** REFRESH it_grid.
*** IF p_scnum <> ''.
*** SELECT *
*** FROM ztnota
*** INTO CORRESPONDING FIELDS OF TABLE it_grid
*** WHERE scnum = p_scnum.
*** ELSE.
*** SELECT *
*** FROM ztnota
*** INTO CORRESPONDING FIELDS OF TABLE it_grid
*** WHERE sdate IN p_sdate
*** AND kunnr IN p_kunnr.
*** ENDIF.
ENDFORM. " GETDATA
*&---------------------------------------------------------------------*
*& Form BUTTON_SCNUM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_GRID_SCNUM text
*----------------------------------------------------------------------*
FORM button_scnum USING p_wa_grid_scnum.
*** SUBMIT zenota_obaja USING SELECTION-SCREEN '1000'
*** WITH p_scnum = p_wa_grid_scnum
*** AND RETURN.
*** PERFORM refresh.
ENDFORM. " BUTTON_SCNUM

** Flow logic screen 100


*PROCESS BEFORE OUTPUT.
**** Set status
* MODULE status_0100.
**** Mengaitkan sub1 dengan screen 101 (Parameters)
* CALL SUBSCREEN sub1 INCLUDING sy-repid '0101'.
*
*PROCESS AFTER INPUT.
**** module user command
* MODULE user_command_0100.
**** memanggil sub screen.
* CALL SUBSCREEN sub1.

By Eclectic Consulting P a g e | 143


SAP Abap Training

10.2.2. Dialog Table Control Template


*** deklarasi table control TC_0100
CONTROLS tc_0100 TYPE TABLEVIEW USING SCREEN 100.
DATA: tc_0100_col LIKE LINE OF tc_0100-cols.

*** deklarasi variable untuk user command


DATA :
v_mode TYPE char3,
ok_code TYPE sy-ucomm,
v_answer TYPE char1.
DATA :
d_area TYPE char30,
d_field TYPE char30,
d_line TYPE char30.

*** Deklarasi struktur,itab dan wa untuk data


TYPES :
BEGIN OF zs_grid,
check TYPE char1,

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.

** variable screen input/output object.


*DATA :
* v_scnum TYPE ztnota-scnum,

**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.

By Eclectic Consulting P a g e | 144


SAP Abap Training
* IF p_scnum = ''.
* v_mode = 'NEW'.
* ELSE.
* v_mode = 'OLD'.
* ENDIF.

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'.

***** contoh mengatur attribut pada table control.


** READ TABLE it_grid INTO wa_grid INDEX sy-tabix.
**
** LOOP AT tc_0100-cols INTO tc_0100_col.
** IF tc_0100_col-screen-name = 'COMM_GRID-LINES'
** OR tc_0100_col-screen-name = 'COMM_GRID-TOTAL'.
** tc_0100_col-screen-input = '0'.
** ELSE.
**
** IF tc_0100_col-screen-name = 'COMM_GRID-MATNR' AND wa_grid-menge =
10.
** tc_0100_col-screen-input = '0'.
** ELSE.
** tc_0100_col-screen-input = '1'.
** ENDIF.
** ENDIF.
**
** MODIFY tc_0100-cols FROM tc_0100_col INDEX sy-tabix.
** CLEAR tc_0100_col.
** ENDLOOP.
**
**
***** contoh mengatur attribut pada text dan field element.
** LOOP AT SCREEN.
** IF screen-name = 'V_LINES'.
** screen-invisible = 1.
** ENDIF.
** IF screen-name = 'V_SCNUM'.
** screen-input = 0.

By Eclectic Consulting P a g e | 145


SAP Abap Training
** ENDIF.
** MODIFY SCREEN.
** ENDLOOP.
ENDMODULE. " set_screen_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.
** 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'.

By Eclectic Consulting P a g e | 146


SAP Abap Training
** ENDIF.
ENDMODULE. " status_0100 OUTPUT

*----------------------------------------------------------------------*
* 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.

GET CURSOR FIELD d_field AREA d_area LINE d_line.


ok_code = sy-ucomm.
CLEAR sy-ucomm.
CASE ok_code.
WHEN 'BACK'.
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 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.

By Eclectic Consulting P a g e | 147


SAP Abap Training
** 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.
** 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.
ENDCASE.
ENDMODULE. " user_command_0100 INPUT

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

By Eclectic Consulting P a g e | 148


SAP Abap Training
**
** CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
** EXPORTING
** retfield = 'P_MATNR'
** value_org = 'S'
** dynprofield = 'P_MATNR'
** dynpnr = '100'
** dynpprog = 'ZNOTA_DIALOG'
** TABLES
** value_tab = it_matnr
** EXCEPTIONS
** parameter_error = 1
** no_values_found = 2
** OTHERS = 3.
**
** CALL FUNCTION 'SAPGUI_SET_FUNCTIONCODE'
** EXPORTING
** functioncode = 'ENTR'
** EXCEPTIONS
** function_not_supported = 0
** OTHERS = 0.
ENDMODULE. " get_matnr INPUT
*&---------------------------------------------------------------------*
*& Form GETDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM getdata .
** CLEAR : v_scnum, v_sdate, v_kunnr, v_total, v_waers,
** v_lines, v_matnr, v_menge, v_meins, v_netpr.
** REFRESH it_grid.
**
** IF v_mode <> 'NEW'.
** CALL FUNCTION 'ENQUEUE_EZTNOTA'
** EXPORTING
** mode_ztnota = 'X'
** mandt = sy-mandt
** scnum = p_scnum
** x_scnum = ' '
** _scope = '2'
** _wait = ' '
** _collect = ' '
** EXCEPTIONS
** foreign_lock = 1
** system_failure = 2

By Eclectic Consulting P a g e | 149


SAP Abap Training
** OTHERS = 3.
** IF sy-subrc <> 0.
*** Implement suitable error handling here
** ENDIF.
**
** IF sy-subrc = 0.
***** jika tidak di lock
** SELECT SINGLE * FROM ztnota INTO wa_ztnota WHERE scnum = p_scnum.
** SELECT * FROM ztnotad INTO CORRESPONDING FIELDS OF TABLE it_grid WH
ERE 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.
** 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 SM12
** 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.
**
** CALL FUNCTION 'POPUP_TO_INFORM'
** EXPORTING
** titel = 'Data lock'
** txt1 = 'Data lock by another user ... !'
** txt2 = wa_enq-guname

By Eclectic Consulting P a g e | 150


SAP Abap Training
*** TXT3 = ' '
*** TXT4 = ' '
** .
** LEAVE PROGRAM.
** ENDIF.
** ENDIF.
ENDFORM. " GETDATA
*&---------------------------------------------------------------------*
*& Form SIMPAN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
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

*&---------------------------------------------------------------------*
*& 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.

By Eclectic Consulting P a g e | 151


SAP Abap Training
** 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.
ENDFORM. " SIMPAN

*&---------------------------------------------------------------------*
*& 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

By Eclectic Consulting P a g e | 152


SAP Abap Training

****Flow Logic screen 100


***PROCESS BEFORE OUTPUT.
*** MODULE set_screen_0100.
*** LOOP WITH CONTROL tc_0100.
*** MODULE fill_tc_0100.
*** ENDLOOP.
*** MODULE status_0100.
***
***PROCESS AFTER INPUT.
*** LOOP WITH CONTROL tc_0100.
*** MODULE update_tc_0100.
*** ENDLOOP.
*** MODULE user_command_0100.
****=====================PBO
***
****PROCESS ON VALUE-REQUEST.
**** FIELD v_matnr MODULE get_matnr.

10.3. BDC template


*** Deklarasi data nota
TYPES:
BEGIN OF zs_excel, " sesuai kolom pada excel
scnum TYPE ztnota-scnum,

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.

**deklarasi BDC Related


TYPES:
BEGIN OF zs_mssg,
mssg1 TYPE string, "Shipment
mssg2 TYPE flag, "Flag
mssg3 TYPE string, "Message
END OF zs_mssg.

By Eclectic Consulting P a g e | 153


SAP Abap Training
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.
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

***Deklarasi terkait alv


DATA :
ok_code TYPE sy-ucomm,
v_answer TYPE char1.

DATA: i_layout TYPE lvc_s_layo,


i_variant LIKE disvariant,
i_print TYPE lvc_s_prnt,
r_ucomm TYPE sy-ucomm,
i_selfield TYPE slis_selfield,
i_save VALUE 'A',
i_events TYPE slis_t_event,
i_fieldcat TYPE lvc_t_fcat,
i_fieldcat500 TYPE lvc_t_fcat,
wa_fieldcat LIKE LINE OF i_fieldcat,
i_list_top1 TYPE lvc_t_head,

By Eclectic Consulting P a g e | 154


SAP Abap Training
i_events1 TYPE lvc_t_evts.

DATA : ob_custom TYPE REF TO cl_gui_custom_container ,


ob_grid TYPE REF TO cl_gui_alv_grid.

DATA: lt_exclude TYPE ui_functions.

*** Deklarasi terkait read excel file


TYPE-POOLS: truxs.
DATA: i_tab_converted_data TYPE STANDARD TABLE OF zs_excel,
w_tab_converted_data TYPE zs_excel,
i_tab_raw_data TYPE truxs_t_text_data.
DATA: desktop_directory TYPE string.
DATA: it_file_table TYPE STANDARD TABLE OF file_table,
wa_file_table TYPE file_table,
rc TYPE i.

*** 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 .

*** event handle untuk parameters


AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.

CALL METHOD cl_gui_frontend_services=>get_desktop_directory


CHANGING
desktop_directory = desktop_directory
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

CALL METHOD cl_gui_frontend_services=>file_open_dialog


EXPORTING
window_title = 'Select Excel File'
default_extension = 'XLS'
file_filter = 'Excel files (*.XLS)|*.XLS| Excel files (*.XLSX)|
*.XLSX|' "cl_gui_frontend_services=>filetype_excel
initial_directory = desktop_directory
CHANGING
file_table = it_file_table
rc = rc
EXCEPTIONS
file_open_dialog_failed = 1

By Eclectic Consulting P a g e | 155


SAP Abap Training
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSEIF sy-subrc = 0 AND rc = 1.
READ TABLE it_file_table INTO wa_file_table INDEX 1 .
filename = wa_file_table-filename.
ENDIF.

START-OF-SELECTION.
CALL SCREEN 0100.

* EXIT.

FORM runbdc.
DATA : ssdate TYPE char10,
snetpr TYPE char15.

* LOOP AT it_header INTO wa_header.


REFRESH bdc_data.

* LOOP AT it_excel INTO wa_excel WHERE scnum = wa_header-scnum.


*
* ENDLOOP.

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.

IF bdc_message[] IS NOT INITIAL.


CLEAR wa_message.
READ TABLE bdc_message INTO wa_message
WITH KEY msgtyp = ''
msgid = ''
msgnr = ''.
CONDENSE: wa_message-msgv1,
wa_message-msgv2,
wa_message-msgv3,
wa_message-msgv4 NO-GAPS.

By Eclectic Consulting P a g e | 156


SAP Abap Training
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.

*** UPDATE IT_GRID.


LOOP AT it_grid INTO wa_grid WHERE scnum = wa_excel-scnum.
* wa_grid-snote = v_message-msgtx.
MODIFY it_grid FROM wa_grid.
ENDLOOP.
ELSE.
wa_mssg-mssg2 = 'X'.
*** UPDATE IT_GRID.
LOOP AT it_grid INTO wa_grid WHERE scnum = wa_excel-scnum.
* wa_grid-scnumn = wa_message-msgv1.
MODIFY it_grid FROM wa_grid.
ENDLOOP.
ENDIF.
ENDIF.
CLEAR: wa_mssg.
CLEAR wa_grid.
* ENDLOOP.
ENDFORM. "runbdc

*&---------------------------------------------------------------------*

By Eclectic Consulting P a g e | 157


SAP Abap Training
*& Form getdata
*&---------------------------------------------------------------------*
FORM getdata.
PERFORM baca.
*** siapkan it_grid

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

By Eclectic Consulting P a g e | 158


SAP Abap Training
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM refresh .
IF ok_code <> 'EXIT'.
IF ob_custom IS INITIAL.
* This will create a container
CREATE OBJECT ob_custom
EXPORTING
container_name = 'CONTAINER'.
CREATE OBJECT ob_grid
EXPORTING
i_parent = ob_custom.
* CREATE OBJECT g_event_receiver.
ENDIF.

** Display first ALV


* i_layout-cwidth_opt = 'X'.
CLEAR i_layout.
i_layout-cwidth_opt = 'X'.
i_layout-zebra = 'X'.
i_layout-no_rowins = 'X'.
* i_layout-no_rowmark = 'X'.
* i_layout-no_toolbar = 'X'.
* gs_layout-cwidth_opt = 'X'.
* w_layo-grid_title = w_title.
* w_layo-zebra = c_x. "Alternating
line color (striped)
* w_layo-cwidth_opt = c_x. "Optimize col
umn width
* w_layo-sel_mode = 'A'. "Selection Mo
de
* i_variant-report = sy-repid. "<<<<
* i_variant-username = sy-uname. "<<<<

CLEAR i_variant.
i_layout-stylefname = 'T_EDITCELL'.
i_layout-info_fname = 'LINE_COLOR'.
PERFORM set_fieldcat.

PERFORM exclude_tb_functions CHANGING lt_exclude.

CALL METHOD ob_grid->set_table_for_first_display


EXPORTING
* i_structure_name = 'EBAN'
is_layout = i_layout
is_variant = i_variant
* it_event = i_events1[]
i_save = 'X' "i_save'
* is_print = i_print
it_toolbar_excluding = lt_exclude
CHANGING
it_outtab = it_grid

By Eclectic Consulting P a g e | 159


SAP Abap Training
it_fieldcatalog = i_fieldcat.

DATA: t_editcell TYPE lvc_t_styl,


fs_editcell LIKE LINE OF t_editcell.

* 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.

CALL METHOD ob_grid->refresh_table_display.


CALL METHOD ob_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.

* CALL METHOD ob_grid->register_edit_event


* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_modified.
*
* DATA index_rows TYPE lvc_t_col.
* CALL METHOD ob_grid->set_selected_columns
* EXPORTING
* it_col_table = index_rows.
ENDIF.
ENDFORM. " REFRESH
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
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 'BACA'.
** PERFORM getdata.
** WHEN 'PROCESS'.

By Eclectic Consulting P a g e | 160


SAP Abap Training
** CLEAR wa_grid.
** LOOP AT it_grid INTO wa_grid WHERE scnumn <> ''.
** EXIT.
** ENDLOOP.
**
** 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

*&---------------------------------------------------------------------*
*& 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.

By Eclectic Consulting P a g e | 161


SAP Abap Training
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


*&---------------------------------------------------------------------*
*& Form SET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_fieldcat .
REFRESH i_fieldcat.

* 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.

ENDFORM. " SET_FIELDCAT

*** Flow logic screen 100


**PROCESS BEFORE OUTPUT.
**MODULE STATUS_0100.
** call subscreen sub1 including sy-repid '0101'.
***
**PROCESS AFTER INPUT.
**MODULE USER_COMMAND_0100.
** call subscreen sub1.

By Eclectic Consulting P a g e | 162

S-ar putea să vă placă și