Kadang susah untuk bisa sharing mengenai ABAP karena menjelaskannya dengan tulisan agak sulit. Nulisnya juga ga enak di blogspot, ga ada indentnya, ga ada syntax highlightingnya (banyak alasan). Gw penasaran, gimana sih caranya? Nanti kalo udah nemu caranya atau elo tau caranya tolong kasih tau gw ya. Biar kita bacanya bisa lebih enak dan otomatis sharing knowledgenya juga bisa lebih baik.
Latar Belakang
Dalam kesempatan ini, gw coba share mengenai Internal table (itab) dan work area (wa) dalam lingkungan SAP ABAP. Nah sekarang ape sih gunanya dua cecunguk itu? Nah coba kita flashback dari latar belakangnya dulu. Dalam pemrograman, ada kalanya kita berhadapan dengan pengolahan database. Ada kalanya kita membuat suatu report yang mengambil data dari beberapa table di database, kemudian kita join, atau lakukan beberapa perhitungan, kemudian ditampilkan di screen. Dalam melakukan perhitungan ini, kita butuh variable yang dapat menyimpan kumpulan data dari table tersebut. Nah disinilah kita gunakan internal table. Contoh praktisnya misalnya:
SELECT *
FROM kendaraan
INTO TABLE it_kendaraan.
Dari code diatas, dapat diartikan kita menyimpan semua data dari table kendaraan ke internal table it_kendaraan. Gimana? Udeh jelas kan mengenai internal table?
Pada saat kita sedang melakukan pengolahan data-data tersebut, kita biasanya butuh memprosesnya satu-satu. Untuk itulah kita butuh work area. Misal dari table kendaraan itu terdapat atribut: No kendaraan, nama kendaraan, jenis kendaraan, warna, harga. Nah misal kita ingin merubah semua harga kendaraan bertambah 10 rupiah. Gimana caranya?
Data yang ingin kita olah, dapat kita ambil / copy per rownya dari internal table. Nah 1 row ini kita letakan di work area. Setelah itu work area inilah yang kita olah, kita lakukan penjumlahan. Misalnya dalam kasus kita wa_kendaraan-harga. Selanjutnya bisa kita replace valuenya kembali ke internal table.
LOOP AT it_kendaraan TO wa_kendaraan.
wa_kendaraan-harga = wa_kendaraan-harga +10.
MODIFY it_kendaraan FROM wa_kendaraan.
ENDLOOP.
Dalam code diatas tiap row dari internal table kita loop, kita pindahkan dulu ke wa_kendaraan. Kemudian dari work area itu kita lakukan penjumlahan.Selanjutnya dari work area kita replace balik ke internal table.
Dari cerita ini, bisa kita simpulkan:
Work area (wa)
Mempunyai tipe data structure seperti pada pemrograman lainnya. Sebuah variable yang bisa mempunyai beberapa atribut.
Internal table (itab)
Gambarannya sama dengan table. Bedanya, kalo table ada secara fisik di database. Sedangkan itab hanya terbentuk di memory saat run-time program. Mungkin prinsipnya sama dengan structure yang punya lebih dari satu row.
Di ABAP kita bisa mendeklarasikan internal table (itab) dan mengisi itab itu dengan data yang kita masukan melalui work area. Data ini bisa berupa data hasil query database, atau dimasukan manual dengan cara kita tulis di codenya. Pada contoh dibawah ini diberikan cara memasukan data ke internal table secara manual.
Oke langsung praktek aje ye boss. Studi kasusnya gini:
Misal kita perlu menampilkan daftar nilai siswa. Data nilai dimasukan secara hardcode di program kemudian ditampilkan. Simple kan?? Nah, biar rada ribet dikit, kita coba iseng menggunakan 2 itab. itab A digunakan untuk memasukan data, kemudian dipindahkan ke itab B, selanjutnya dari itab B itu data ditampilkan.
Cukup jelas?
Kalo belom silahkan tunjuk tangan, dan kasih komentar di blog post ini.
Langsung gw jabarin source codenya:
Sori kalo ngga ga enak bacanya karna ga ada indent
REPORT ztestx.
*Test program to get data into internal table using work area
*************** Types and Data declaration ****************
*Types declaration
TYPES: BEGIN OF ty_a,
name(10) TYPE c,
mark TYPE i,
END OF ty_a.
*Data declaration based on types
DATA:
* Work area
wa_a TYPE ty_a,
* Internal table
it_a TYPE TABLE OF ty_a.
*************** Begin of program ****************
*Make sure internal table is empty
REFRESH it_a.
CLEAR it_a.
*Insert content to itab through work area
*and make sure the work area is empty for each insertion
CLEAR wa_a.
wa_a-name = 'Thomas'.
APPEND wa_a TO it_a.
CLEAR wa_a.
wa_a-name = 'Megan'.
APPEND wa_a TO it_a.
CLEAR wa_a.
wa_a-name = 'Fox'.
APPEND wa_a TO it_a.
*Loop itab and insert each mark fields
LOOP AT it_a INTO wa_a.
wa_a-mark = 90.
MODIFY it_a FROM wa_a.
ENDLOOP.
*Let say we want to move all the content in it_a to another internal
*table named it_b using work area. First we declare it_b and *wa_b
DATA:
wa_b LIKE wa_a,
it_b LIKE it_a.
*Insert all data in it_a to it_b using work area
LOOP AT it_a INTO wa_a.
CLEAR wa_b.
wa_b-name = wa_a-name.
wa_b-mark = wa_a-mark.
APPEND wa_b TO it_b.
ENDLOOP.
*Delete all content in it_a.
FREE it_a.
*Display all content from it_b.
LOOP AT it_b INTO wa_b.
WRITE:/ wa_b-name,
wa_b-mark.
ENDLOOP.
*************** End of program ****************
Kuncinya pertama pada saat deklarasi:
Kita buat tipe data structure dengan 2 atribut:
*Types declaration
TYPES: BEGIN OF ty_a,
name(10) TYPE c,
mark TYPE i,
END OF ty_a.
Kita buat data yang bertipe structure tadi.
*Data declaration based on types
DATA:
* Work area
wa_a TYPE ty_a,
Kita buat juga itab dengan tipe table dari tipe struktur tadi.
* Internal table
it_a TYPE TABLE OF ty_a.
Coba kita sedikit bahas melalui beberapa screen shoot. Ini adalah screenshoot pada saat debug. Dalam screen shoot ini, sebuah itab kita debug dan lihat valuenya pada saat runtime. Disini kita dapat melihat kondisi itab it_a ketika cursor melalui 1x loop pada pengisian mark (kondisi sekarang telah berada di loop kedua).
Ini adalah kondisi itab it_b ketika di assign data dari itab it_a. Disini diperlihatkan it_a sedang dalam loop ke 1. Kita dapat melihat itab it_b masih kosong pada baris ke 2 dan selanjutnya.
Dibawah ini adalah kondisi itab it_b ketika semua telah diisi data dari itab it_a.
Ini adalah kondisi itab it_b ketika di assign data dari itab it_a. Disini diperlihatkan loop pertama dari inserting data dari it_a ke it_b. Work area wa_b pada atribut name barusan di assign dari wa_a-name, yaitu "Thomas".
Gimana? Udah kebayang kan mengenai apa itu internal table dan apa itu work area di SAP - ABAP? Kalo belum ya boleh bertanya di comment. Kalo gw ngerti pasti gw jawab.
Source code juga bisa diambil dari sini.
bedanya append ama move itu apa?
ReplyDeleteAppend tu ia menambah data ke dalam internal table.
ReplyDeleteMove adalah copy data darisatu tempat ke tempat lain.
contoh move:-
move itab to wa.
*maksudnya ia copy data dari itab ke wa.
kalau caranya "loop at" tapi dimulai dari index terbawah sampe ke index teratas gmna pak caranya?
ReplyDeletethanks.
ga ada coding khusus buat itu, jadi kudu tricky.. jadi sebagaimana kamu mungkin udah kira2, disort descending dulu baru di loop..
ReplyDeletePerbanyak dong tulisan ttg ABAP nya biar agung di sini bisa belajar:)
ReplyDeletesedikit terbantu.... tapi tetep masih bingung.. haha..
ReplyDeletethanks,..,
Mantab Tomfreakz, lanjut gan....
ReplyDeletebutuh yang lebih, emang susah kalo dari sekedar katakata, harus ketemu sama penulisnya langsung nih ..
ReplyDelete*Delete all content in it_a.
ReplyDeleteFREE it_a.
kenapa harus di delete internal table it_a?