Tuesday, 23 September 2025

Belajar ABAP Part 8: Enhancement & BADI

Belajar ABAP Part 8: Enhancement & BADI — Customisasi Tanpa Modify SAP

Belajar ABAP Part 8: Enhancement & BADI — Customisasi Tanpa Modify SAP

Enhancement & BADI adalah cara menambahkan logic/custom behavior tanpa mengubah source code SAP standar. Hal ini sangat penting agar sistem tetap upgrade safe.

Apa itu Enhancement?

Enhancement memungkinkan menancapkan kode tambahan pada titik tertentu di program SAP.

  • User Exit — function modules siap pakai.
  • Customer Exit — menambah field/logic via CMOD.
  • Implicit Enhancement — otomatis tersedia di awal/akhir program.
  • Explicit Enhancement — titik yang ditentukan oleh SAP developer.

Apa itu BADI?

BADI adalah framework enhancement berbasis OOP. Bisa multiple implementation, scalable, cocok di S/4HANA.

Contoh Implicit Enhancement


ENHANCEMENT 1 ZENH_MIGO_LOG.  
  WRITE: / 'MIGO Posting date updated by user:', sy-uname.
ENDENHANCEMENT.
    

Contoh Implementasi BADI


METHOD if_ex_me_process_po_cust~process_item.

  DATA: ls_item TYPE mepoitem.

  CALL METHOD im_item->get_data
    RECEIVING re_data = ls_item.

  IF ls_item-matnr IS INITIAL.
    MESSAGE e001(zmsg) WITH 'Material must be filled'.
  ENDIF.

ENDMETHOD.
    

Step by Step Implementasi BADI

  1. Buka transaksi SE18 untuk melihat definisi BADI.
  2. Pelajari interface & methods yang tersedia.
  3. Buat implementasi baru di SE19.
  4. Isi logic di method yang relevan sesuai kebutuhan bisnis.
  5. Aktifkan & transport agar bisa digunakan di sistem lain.

Real Case: Validasi Nilai PO Minimal


METHOD if_ex_me_process_po_cust~process_header.

  DATA: ls_header TYPE mepoheader,
        lt_items  TYPE mepoitem_tab,
        lv_total  TYPE ekpo-netwr.

  CALL METHOD im_header->get_data RECEIVING re_data = ls_header.
  CALL METHOD im_header->get_items RECEIVING re_items = lt_items.

  LOOP AT lt_items INTO DATA(ls_item).
    lv_total = lv_total + ls_item-netwr.
  ENDLOOP.

  IF lv_total < 1000000.
    MESSAGE e001(zmsg) WITH 'PO value must be at least 1,000,000 IDR'.
  ENDIF.

ENDMETHOD.
    

ABAP Unit Test untuk BADI


CLASS ltc_badi_me_process_po_cust DEFINITION FINAL FOR TESTING
  DURATION SHORT
  RISK LEVEL HARMLESS.

  PRIVATE SECTION.
    DATA: mo_badi TYPE REF TO zcl_impl_me_process_po.

    METHODS: setup.
    METHODS: test_valid_po FOR TESTING.
    METHODS: test_invalid_po FOR TESTING.
ENDCLASS.

CLASS ltc_badi_me_process_po_cust IMPLEMENTATION.

  METHOD setup.
    CREATE OBJECT mo_badi.
  ENDMETHOD.

  METHOD test_valid_po.
    " PO 1.500.000 harus lolos
    DATA: lt_items TYPE mepoitem_tab,
          ls_item TYPE mepoitem,
          ls_header TYPE mepoheader.

    ls_item-netwr = 1500000.
    APPEND ls_item TO lt_items.

    TRY.
        mo_badi->if_ex_me_process_po_cust~process_header(
          im_header = NEW cl_po_header( ls_header )
        ).
        cl_abap_unit_assert=>assert_true( act = abap_true ).
      CATCH cx_root INTO DATA(lx).
        cl_abap_unit_assert=>fail( msg = lx->get_text( ) ).
    ENDTRY.
  ENDMETHOD.

  METHOD test_invalid_po.
    " PO 500.000 harus gagal
    DATA: lt_items TYPE mepoitem_tab,
          ls_item TYPE mepoitem,
          ls_header TYPE mepoheader.

    ls_item-netwr = 500000.
    APPEND ls_item TO lt_items.

    TRY.
        mo_badi->if_ex_me_process_po_cust~process_header(
          im_header = NEW cl_po_header( ls_header )
        ).
        cl_abap_unit_assert=>fail( msg = 'Invalid PO should not pass' ).
      CATCH cx_sy_message_illegal_text INTO DATA(lx).
        cl_abap_unit_assert=>assert_true( act = abap_true ).
    ENDTRY.
  ENDMETHOD.

ENDCLASS.
    

Kesimpulan

- Enhancement & BADI memungkinkan customisasi tanpa modify SAP standard.
- Gunakan BADI untuk sistem modern (S/4HANA).
- Tambahkan unit test agar logic bisa diuji otomatis.
- Dokumentasikan & gunakan transport request agar terkontrol.

👉 Lanjut ke: Belajar ABAP Part 9: ALV (ABAP List Viewer)

Belajar ABAP: Data Dictionary (DDIC) untuk Pemula

Belajar ABAP: Data Dictionary (DDIC) untuk Pemula

Belajar ABAP: Data Dictionary (DDIC) untuk Pemula

Sebelum melanjutkan ke level advance, penting bagi pemula memahami Data Dictionary (DDIC) di SAP ABAP. Data Dictionary adalah tempat di mana semua definisi struktur data disimpan dan dikelola, sehingga developer tidak perlu mendefinisikan ulang data secara manual di program.

Apa itu Data Dictionary?

Data Dictionary di ABAP berfungsi untuk mendefinisikan, mengelola, dan memelihara objek data di SAP. Semua tabel database, field, data element, domain, view, dan search help dikelola di sini.

Fungsi Utama Data Dictionary

  • Definisi tabel database (transparent, cluster, pooled).
  • Mendefinisikan domain (tipe data dan nilai valid).
  • Mendefinisikan data element (field dengan semantic meaning).
  • Membuat view untuk kombinasi tabel.
  • Membuat search help (F4 Help).
  • Memastikan konsistensi data di seluruh sistem.

Jenis Objek di Data Dictionary

  1. Domain → menentukan tipe data teknis (char, num, length, value range).
  2. Data Element → field dengan definisi semantik (misalnya Material Number, Customer ID).
  3. Table → menyimpan data di database (transparent, pooled, cluster).
  4. View → representasi virtual dari satu atau lebih tabel.
  5. Search Help → menyediakan fasilitas pencarian (F4 help).

Hubungan Domain, Data Element, dan Table

Supaya lebih jelas, berikut ilustrasi alur Data Dictionary di ABAP:

+---------+        +--------------+        +------------+
| Domain  | -----> | Data Element | -----> |   Table    |
+---------+        +--------------+        +------------+

Contoh:
Domain: ZSTU_ID (NUMC 5)
   ↓
Data Element: ZSTU_ID (Student ID)
   ↓
Table: ZSTUDENT (Field: ID menggunakan Data Element ZSTU_ID)

Atau bisa juga digambarkan dalam bentuk tabel hierarki:

Domain Data Element Table Field
ZSTU_ID
(NUMC 5)
ZSTU_ID
(Student ID)
ID (Primary Key)
ZSTU_NAME
(CHAR 50)
ZSTU_NAME
(Student Name)
NAME
ZSTU_AGE
(NUMC 2)
ZSTU_AGE
(Age)
AGE
ZSTU_CLASS
(CHAR 10)
ZSTU_CLASS
(Class Code)
CLASS

Contoh Membuat Tabel di Data Dictionary

Misalnya kita ingin membuat tabel ZSTUDENT untuk menyimpan data mahasiswa:


Tabel: ZSTUDENT
-----------------------------------------
Field        Data Element   Domain   Key
-----------------------------------------
ID           ZSTU_ID        NUMC(5)  X
NAME         ZSTU_NAME      CHAR(50)
AGE          ZSTU_AGE       NUMC(2)
CLASS        ZSTU_CLASS     CHAR(10)

Contoh Query ABAP dengan Tabel ZSTUDENT


REPORT zddic_example.

DATA: lt_student TYPE TABLE OF zstudent,
      ls_student TYPE zstudent.

" Ambil semua data mahasiswa
SELECT * FROM zstudent INTO TABLE lt_student.

" Tampilkan hasil
LOOP AT lt_student INTO ls_student.
  WRITE: / ls_student-id, ls_student-name, ls_student-age, ls_student-class.
ENDLOOP.

Perbandingan Tipe Table di Data Dictionary

Di SAP ABAP, ada tiga jenis tabel utama di Data Dictionary. Berikut perbandingannya:

Jenis Tabel Deskripsi Contoh Kapan Digunakan
Transparent Table 1:1 dengan tabel database fisik. Nama tabel di SAP sama dengan tabel di database. Digunakan untuk menyimpan data aplikasi. ZSTUDENT, MARA, BKPF - Data master (Material, Vendor, Customer).
- Data transaksi (Document Header, Item).
Pooled Table Banyak tabel logis di SAP digabung ke dalam satu tabel fisik di database. Cocok untuk tabel kecil dengan data administratif. ATAB, TSTC - Data konfigurasi atau kontrol.
- Tabel internal SAP yang tidak besar.
Cluster Table Beberapa tabel logis disimpan dalam satu tabel fisik berbasis cluster. Data disimpan dalam bentuk compressed. BSEG (Accounting Document Segment) - Data dengan volume besar.
- Data dengan hubungan kompleks (misalnya FI/CO).

Note: Di SAP versi terbaru (S/4HANA), Pooled dan Cluster table sudah tidak direkomendasikan lagi. Mayoritas objek disimpan sebagai Transparent Table agar lebih efisien dan kompatibel dengan HANA Database.

Keuntungan Menggunakan Data Dictionary

  • Semua developer pakai definisi data yang sama → konsistensi.
  • Mengurangi redudansi kode.
  • Integrasi otomatis dengan Open SQL.
  • Dapat digunakan di semua program ABAP.

Kesimpulan

Data Dictionary adalah pondasi utama di SAP ABAP. Tanpa pemahaman DDIC, developer akan kesulitan membuat tabel, field, maupun struktur data yang reusable di berbagai program.

👉 Lanjut ke: Belajar ABAP Part 8: Enhancement & BADI

Monday, 22 September 2025

Belajar ABAP Part 7: ALV Report (ABAP List Viewer)

Belajar ABAP Part 7: ALV Report (ABAP List Viewer)

Belajar ABAP Part 7: ALV Report (ABAP List Viewer)

Setelah mempelajari Part 6: Open SQL, sekarang kita masuk ke tahap yang lebih keren: menampilkan data dengan ALV Report. ALV (ABAP List Viewer) adalah fitur standar SAP untuk menampilkan tabel data dengan tampilan grid yang interaktif, lengkap dengan sorting, filter, dan export Excel.

Mengapa ALV?

  • Standar tampilan SAP → konsisten di semua modul.
  • Sudah built-in fitur filter, sort, dan export.
  • Menghemat waktu developer → tidak perlu coding manual untuk UI list.

Cara Membuat ALV Report

Ada 2 cara populer untuk membuat ALV:

  1. Menggunakan function module REUSE_ALV_GRID_DISPLAY (cara klasik).
  2. Menggunakan class CL_SALV_TABLE (cara modern, OOP style).

Contoh ALV dengan REUSE_ALV_GRID_DISPLAY


REPORT zalv_classic.

TABLES: mara.

DATA: lt_mara TYPE TABLE OF mara,
      ls_mara TYPE mara.

" Ambil data material
SELECT * FROM mara UP TO 20 ROWS INTO TABLE lt_mara.

" Tampilkan pakai ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_structure_name = 'MARA'
  TABLES
    t_outtab         = lt_mara
  EXCEPTIONS
    program_error    = 1
    OTHERS           = 2.

IF sy-subrc <> 0.
  WRITE: / 'Error ALV'.
ENDIF.

Hasilnya: tabel MARA ditampilkan dalam grid interaktif ALV.

Contoh ALV dengan CL_SALV_TABLE (Modern OOP)


REPORT zalv_salv.

DATA: lt_mara TYPE TABLE OF mara.

" Ambil data material
SELECT * FROM mara UP TO 20 ROWS INTO TABLE lt_mara.

" Buat ALV pakai class SALV
DATA(lo_alv) = cl_salv_table=>factory( lt_mara ).
lo_alv->display( ).

Keunggulan CL_SALV_TABLE:

  • Lebih singkat, lebih bersih (OOP style).
  • Mudah dikembangkan (misalnya custom fungsi, filter, dll).

Fitur Tambahan ALV

  • Export ke Excel/CSV.
  • Sort dan filter otomatis.
  • Subtotals dan totals.
  • Toolbar interaktif.

Kesimpulan

ALV adalah standar SAP untuk menampilkan data tabel. Untuk kode lama biasanya dipakai REUSE_ALV_GRID_DISPLAY, tapi untuk kode baru disarankan pakai CL_SALV_TABLE yang lebih modern.

👉 Lanjut ke: Belajar ABAP Part 8: Enhancement & BADI

Belajar ABAP Part 6: Open SQL (SELECT, INSERT, UPDATE, DELETE)

Belajar ABAP Part 6: Open SQL (SELECT, INSERT, UPDATE, DELETE)

Belajar ABAP Part 6: Open SQL (SELECT, INSERT, UPDATE, DELETE)

Setelah mempelajari Part 5: Internal Table, sekarang kita masuk ke salah satu inti dari ABAP: Open SQL. Dengan Open SQL kita bisa berinteraksi dengan database SAP, misalnya membaca data master (MARA, MARC, VBAK, dsb.) atau melakukan update.

Apa itu Open SQL?

Open SQL adalah subset SQL yang dipakai di SAP ABAP agar query bisa berjalan di semua jenis database yang digunakan SAP (Oracle, HANA, MSSQL, dll).

Perintah Dasar Open SQL

  • SELECT → membaca data dari database.
  • INSERT → menambahkan data baru.
  • UPDATE → memperbarui data.
  • DELETE → menghapus data.

Contoh SELECT


REPORT zsql_select.

DATA: lt_mara TYPE TABLE OF mara,
      ls_mara TYPE mara.

" Ambil data material terbatas 5 row
SELECT * FROM mara UP TO 5 ROWS INTO TABLE lt_mara.

" Loop hasil
LOOP AT lt_mara INTO ls_mara.
  WRITE: / ls_mara-matnr, ls_mara-mtart, ls_mara-mbrsh.
ENDLOOP.

Contoh SELECT dengan WHERE


REPORT zsql_select_where.

DATA: lt_mara TYPE TABLE OF mara,
      ls_mara TYPE mara.

SELECT * FROM mara
  INTO TABLE lt_mara
  WHERE mtart = 'FERT'.

LOOP AT lt_mara INTO ls_mara.
  WRITE: / ls_mara-matnr, ls_mara-mtart.
ENDLOOP.

Contoh INSERT

Biasanya untuk INSERT kita pakai custom table (Z-table). Contoh berikut insert ke tabel zstudent.


REPORT zsql_insert.

DATA: ls_stu TYPE zstudent.

ls_stu-id   = '001'.
ls_stu-name = 'Andi'.
INSERT zstudent FROM ls_stu.

IF sy-subrc = 0.
  WRITE: / 'Insert berhasil'.
ELSE.
  WRITE: / 'Insert gagal'.
ENDIF.

Contoh UPDATE


REPORT zsql_update.

DATA: ls_stu TYPE zstudent.

ls_stu-id   = '001'.
ls_stu-name = 'Budi'.

UPDATE zstudent SET name = ls_stu-name
  WHERE id = ls_stu-id.

IF sy-subrc = 0.
  WRITE: / 'Update berhasil'.
ELSE.
  WRITE: / 'Update gagal'.
ENDIF.

Contoh DELETE


REPORT zsql_delete.

DELETE FROM zstudent WHERE id = '001'.

IF sy-subrc = 0.
  WRITE: / 'Delete berhasil'.
ELSE.
  WRITE: / 'Delete gagal'.
ENDIF.

Contoh JOIN

Kita bisa menggabungkan 2 tabel database, misalnya MARA dan MARC.


REPORT zsql_join.

DATA: lt_data TYPE TABLE OF mara,
      ls_data TYPE mara.

SELECT a~matnr a~mtart b~werks
  FROM mara AS a
  INNER JOIN marc AS b
    ON a~matnr = b~matnr
  INTO TABLE @DATA(lt_result)
  UP TO 10 ROWS.

LOOP AT lt_result INTO DATA(ls_result).
  WRITE: / ls_result-matnr, ls_result-mtart, ls_result-werks.
ENDLOOP.

Kesimpulan

Dengan Open SQL, kita bisa berinteraksi langsung dengan database SAP tanpa peduli apa DBMS yang digunakan. Di level lanjut, Open SQL juga mendukung fitur-fitur modern seperti INLINE DATA, FILTER, dan GROUP BY.

👉 Lanjut ke: Belajar ABAP Part 7: ALV Report

Belajar ABAP Part 5: Internal Tables Lengkap (Standard, Sorted, Hashed)

Belajar ABAP Part 5: Internal Tables Lengkap (Standard, Sorted, Hashed)

Belajar ABAP Part 5: Internal Tables Lengkap (Standard, Sorted, Hashed)

Di Part 4: Modularisasi Program kita sudah bahas modularisasi. Sekarang kita akan mendalami Internal Table, struktur data paling penting di ABAP. Ada 3 jenis utama: Standard Table, Sorted Table, dan Hashed Table. Kita bedah satu-satu dengan contoh coding.

1. Standard Table

Standard Table adalah jenis default internal table. Data disimpan berurutan sesuai urutan APPEND. Cocok digunakan jika data tidak terlalu banyak dan pencarian dilakukan dengan index.


REPORT zstandard_table.

TYPES: BEGIN OF ty_emp,
         id   TYPE i,
         name TYPE string,
       END OF ty_emp.

DATA: lt_emp TYPE STANDARD TABLE OF ty_emp WITH DEFAULT KEY,
      ls_emp TYPE ty_emp.

" Isi data
ls_emp-id = 1. ls_emp-name = 'Andi'. APPEND ls_emp TO lt_emp.
ls_emp-id = 2. ls_emp-name = 'Budi'. APPEND ls_emp TO lt_emp.
ls_emp-id = 3. ls_emp-name = 'Citra'. APPEND ls_emp TO lt_emp.

" Loop data
WRITE: / '--- Standard Table ---'.
LOOP AT lt_emp INTO ls_emp.
  WRITE: / ls_emp-id, ls_emp-name.
ENDLOOP.

" Akses dengan index
READ TABLE lt_emp INTO ls_emp INDEX 2.
WRITE: / 'Index 2 adalah:', ls_emp-name.

Output: --- Standard Table --- 1 Andi 2 Budi 3 Citra Index 2 adalah: Budi

2. Sorted Table

Sorted Table otomatis menyimpan data dalam keadaan terurut berdasarkan key. Cocok untuk data besar karena pencarian lebih cepat daripada Standard Table.


REPORT zsorted_table.

TYPES: BEGIN OF ty_city,
         code TYPE i,
         name TYPE string,
       END OF ty_city.

DATA: lt_city TYPE SORTED TABLE OF ty_city
                WITH UNIQUE KEY code,
      ls_city TYPE ty_city.

" Isi data (acak urutannya)
ls_city-code = 30. ls_city-name = 'Surabaya'. APPEND ls_city TO lt_city.
ls_city-code = 10. ls_city-name = 'Jakarta'.  APPEND ls_city TO lt_city.
ls_city-code = 20. ls_city-name = 'Bandung'.  APPEND ls_city TO lt_city.

" Loop data akan otomatis urut berdasarkan KEY
WRITE: / '--- Sorted Table ---'.
LOOP AT lt_city INTO ls_city.
  WRITE: / ls_city-code, ls_city-name.
ENDLOOP.

" Akses dengan key
READ TABLE lt_city INTO ls_city WITH KEY code = 20.
WRITE: / 'Kota dengan code 20 adalah:', ls_city-name.

Output: --- Sorted Table --- 10 Jakarta 20 Bandung 30 Surabaya Kota dengan code 20 adalah: Bandung

3. Hashed Table

Hashed Table menyimpan data dengan struktur hash, mirip dictionary/map. Sangat cepat untuk pencarian berdasarkan key, tapi tidak bisa diakses dengan index.


REPORT zhashed_table.

TYPES: BEGIN OF ty_mat,
         matnr TYPE i,
         desc  TYPE string,
       END OF ty_mat.

DATA: lt_mat TYPE HASHED TABLE OF ty_mat
                WITH UNIQUE KEY matnr,
      ls_mat TYPE ty_mat.

" Isi data
ls_mat-matnr = 500. ls_mat-desc = 'Material A'. APPEND ls_mat TO lt_mat.
ls_mat-matnr = 200. ls_mat-desc = 'Material B'. APPEND ls_mat TO lt_mat.
ls_mat-matnr = 300. ls_mat-desc = 'Material C'. APPEND ls_mat TO lt_mat.

" Loop data (tidak berurutan karena sifat hash)
WRITE: / '--- Hashed Table ---'.
LOOP AT lt_mat INTO ls_mat.
  WRITE: / ls_mat-matnr, ls_mat-desc.
ENDLOOP.

" Akses dengan key
READ TABLE lt_mat INTO ls_mat WITH KEY matnr = 300.
WRITE: / 'Material 300 adalah:', ls_mat-desc.

Output (urutan bisa berbeda): --- Hashed Table --- 200 Material B 300 Material C 500 Material A Material 300 adalah: Material C

Perbandingan 3 Jenis Internal Table

Jenis Kelebihan Kekurangan Cocok untuk
Standard Table Mudah digunakan, akses via index Pencarian lambat untuk data besar Data kecil, sederhana
Sorted Table Data otomatis terurut, pencarian cepat Butuh key untuk akses efisien Data besar yang sering dicari berdasarkan key
Hashed Table Pencarian super cepat via key Tidak bisa pakai index, urutan tidak terjamin Data sangat besar, lookup by key

Kesimpulan

Internal Table adalah pondasi utama ABAP. Pilih jenis sesuai kebutuhan:

  • Pakai Standard Table untuk data kecil/sederhana.
  • Pakai Sorted Table untuk data besar yang perlu urut + pencarian cepat.
  • Pakai Hashed Table untuk pencarian super cepat berdasarkan key.

👉 Lanjut ke: Belajar ABAP Part 6: Open SQL di ABAP

Belajar ABAP Part 5: Internal Tables & Work Area

Belajar ABAP Part 5: Internal Tables & Work Area

Belajar ABAP Part 5: Internal Tables & Work Area

Setelah membahas Part 4: Modularisasi Program, sekarang kita masuk ke salah satu konsep terpenting di ABAP yaitu Internal Table & Work Area. Internal table digunakan untuk menyimpan banyak data di memory, sementara Work Area dipakai sebagai wadah untuk membaca/menulis data baris demi baris.

Apa itu Internal Table?

Internal Table adalah tabel sementara yang hanya ada di memory saat program berjalan. Biasanya dipakai untuk:

  • Menyimpan hasil query dari database.
  • Melakukan perhitungan atau transformasi data.
  • Mengolah data sebelum ditampilkan ke user.

Jenis Internal Table

  1. Standard Table: urutan sesuai data dimasukkan.
  2. Sorted Table: otomatis terurut berdasarkan key.
  3. Hashed Table: akses cepat menggunakan key.

Contoh Membuat Internal Table & Work Area


REPORT zitab_example.

TYPES: BEGIN OF ty_student,
         id   TYPE i,
         name TYPE string,
       END OF ty_student.

DATA: lt_students TYPE TABLE OF ty_student, "Internal Table
      ls_student TYPE ty_student.           "Work Area

" Tambah data ke internal table
ls_student-id = 1.
ls_student-name = 'Andi'.
APPEND ls_student TO lt_students.

ls_student-id = 2.
ls_student-name = 'Budi'.
APPEND ls_student TO lt_students.

ls_student-id = 3.
ls_student-name = 'Citra'.
APPEND ls_student TO lt_students.

" Baca data dengan LOOP
LOOP AT lt_students INTO ls_student.
  WRITE: / 'ID:', ls_student-id, 'Nama:', ls_student-name.
ENDLOOP.

Output: ID: 1 Nama: Andi ID: 2 Nama: Budi ID: 3 Nama: Citra

Perintah Dasar Internal Table

  • APPEND → menambah data ke internal table.
  • LOOP AT → membaca data baris demi baris.
  • READ TABLE → membaca data berdasarkan index atau key.
  • MODIFY → mengubah data di internal table.
  • DELETE → menghapus data.
  • CLEAR → membersihkan isi variabel/work area.

Contoh READ, MODIFY, DELETE


REPORT zitab_ops.

TYPES: BEGIN OF ty_num,
         num TYPE i,
       END OF ty_num.

DATA: lt_nums TYPE TABLE OF ty_num,
      ls_num TYPE ty_num.

DO 5 TIMES.
  ls_num-num = sy-index.
  APPEND ls_num TO lt_nums.
ENDDO.

" READ data ke-3
READ TABLE lt_nums INTO ls_num INDEX 3.
WRITE: / 'Data index 3:', ls_num-num.

" MODIFY data ke-2
ls_num-num = 99.
MODIFY lt_nums FROM ls_num INDEX 2.

" DELETE data ke-4
DELETE lt_nums INDEX 4.

" LOOP hasil akhir
WRITE: / '--- Data setelah update ---'.
LOOP AT lt_nums INTO ls_num.
  WRITE: / ls_num-num.
ENDLOOP.

Output: Data index 3: 3 --- Data setelah update --- 1 99 3 5

Kesimpulan

Internal Table & Work Area adalah fondasi penting dalam ABAP. Hampir semua program yang berhubungan dengan database atau report akan memanfaatkan internal table untuk menyimpan dan mengolah data.

👉 Lanjut ke: Belajar ABAP Part 6: Open SQL di ABAP

👉 Baca Juga: Internal Table Lanjutan

👉 Baca Juga: Belajar Data Dictionary

Belajar ABAP Part 4: Modularisasi Program (FORM, Function Module, Include)

Belajar ABAP Part 4: Modularisasi Program (FORM, Function Module, Include)

Belajar ABAP Part 4: Modularisasi Program (FORM, Function Module, Include)

Setelah mempelajari Part 3: Control Statements, sekarang kita akan masuk ke konsep penting berikutnya yaitu Modularisasi Program. Modularisasi digunakan agar program lebih terstruktur, mudah dibaca, serta kode bisa dipakai ulang (reusable).

Kenapa Modularisasi Penting?

  • Memecah program besar menjadi bagian kecil.
  • Meningkatkan keterbacaan kode.
  • Memudahkan maintenance.
  • Memungkinkan penggunaan ulang fungsi yang sama di berbagai program.

1. FORM dan PERFORM

FORM digunakan untuk membuat subroutine, dan dipanggil dengan PERFORM.


REPORT zform_example.

DATA gv_name TYPE string.

gv_name = 'Andi'.

PERFORM display_name.

FORM display_name.
  WRITE: / 'Hello,', gv_name.
ENDFORM.

Output: Hello, Andi

2. Function Module

Function Module (FM) adalah blok modular yang disimpan di Function Group dan bisa dipanggil dari program lain.

Contoh pembuatan Function Module: Z_HELLO_WORLD


FUNCTION z_hello_world.
*"----------------------------------------------------------------------
*"*"Lokasi: Function Group ZFG_HELLO
*"----------------------------------------------------------------------
  WRITE: / 'Hello from Function Module!'.
ENDFUNCTION.

Pemanggilan Function Module di program:


REPORT zcall_fm.

CALL FUNCTION 'Z_HELLO_WORLD'.

Output: Hello from Function Module!

3. Include Program

Include digunakan untuk memecah kode menjadi file terpisah. Biasanya dipakai untuk menyimpan deklarasi data, form, atau implementasi logika tertentu.


" File utama: ZINCLUDE_MAIN
REPORT zinclude_main.

INCLUDE zinclude_sub.

START-OF-SELECTION.
  PERFORM say_hello.

" File include: ZINCLUDE_SUB
FORM say_hello.
  WRITE: / 'Hello from Include!'.
ENDFORM.

Output: Hello from Include!

Kesimpulan

Dengan modularisasi, program ABAP menjadi lebih rapi dan terstruktur. FORM cocok untuk subroutine sederhana, Function Module untuk logika reusable lintas program, dan Include untuk memisahkan kode ke file terpisah.

👉 Lanjut ke: Belajar ABAP Part 5: Internal Tables & Work Area

SAP ABAP - Upload Count PID dengan BAPI

Upload Count PID dengan BAPI di ABAP — Contoh Program YMMC100 Upload Count PID dengan BAPI di ABAP — Progr...