Monday, 22 September 2025

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

Belajar ABAP Part 3: Control Statements (IF, CASE, LOOP, WHILE)

Belajar ABAP Part 3: Control Statements (IF, CASE, LOOP, WHILE)

Belajar ABAP Part 3: Control Statements (IF, CASE, LOOP, WHILE)

Pada Part 2: Dasar-Dasar Pemrograman ABAP kita sudah membahas variabel, tipe data, dan perintah WRITE. Sekarang kita masuk ke Control Statements, yaitu perintah yang mengatur alur program di ABAP.

1. IF - ELSE - ENDIF

Digunakan untuk percabangan logika.


REPORT zif_example.

DATA gv_score TYPE i VALUE 80.

IF gv_score >= 75.
  WRITE: 'Lulus'.
ELSE.
  WRITE: 'Tidak Lulus'.
ENDIF.

Output: Lulus

2. CASE - WHEN - ENDCASE

Alternatif dari IF ketika ada banyak kondisi.


REPORT zcase_example.

DATA gv_grade TYPE c VALUE 'B'.

CASE gv_grade.
  WHEN 'A'.
    WRITE: 'Sangat Baik'.
  WHEN 'B'.
    WRITE: 'Baik'.
  WHEN 'C'.
    WRITE: 'Cukup'.
  WHEN OTHERS.
    WRITE: 'Tidak Diketahui'.
ENDCASE.

Output: Baik

3. LOOP - ENDLOOP

Digunakan untuk membaca isi internal table.


REPORT zloop_example.

DATA: lt_numbers TYPE TABLE OF i,
      lv_num     TYPE i.

DO 5 TIMES.
  APPEND sy-index TO lt_numbers.
ENDDO.

LOOP AT lt_numbers INTO lv_num.
  WRITE: / 'Angka:', lv_num.
ENDLOOP.

Output: Angka: 1 Angka: 2 Angka: 3 Angka: 4 Angka: 5

4. WHILE - ENDWHILE

Perulangan berdasarkan kondisi.


REPORT zwhile_example.

DATA gv_counter TYPE i VALUE 1.

WHILE gv_counter <= 3.
  WRITE: / 'Counter:', gv_counter.
  gv_counter = gv_counter + 1.
ENDWHILE.

Output: Counter: 1 Counter: 2 Counter: 3

5. EXIT, CONTINUE, CHECK

Statement tambahan untuk mengontrol alur loop.


REPORT zloop_control.

DATA: lt_data TYPE TABLE OF i,
      lv_val  TYPE i.

DO 5 TIMES.
  APPEND sy-index TO lt_data.
ENDDO.

LOOP AT lt_data INTO lv_val.
  IF lv_val = 2.
    CONTINUE. "skip nilai 2
  ENDIF.

  IF lv_val = 4.
    EXIT. "berhenti di angka 4
  ENDIF.

  WRITE: / 'Value:', lv_val.
ENDLOOP.

Output: Value: 1 Value: 3

Kesimpulan

Control statements adalah fondasi penting dalam pemrograman ABAP. Dengan memahami IF, CASE, LOOP, dan WHILE, kamu bisa mengatur alur program sesuai logika bisnis yang dibutuhkan.

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

Belajar ABAP Part 2: Dasar-Dasar Pemrograman ABAP

Belajar ABAP Part 2: Dasar-Dasar Pemrograman ABAP

Belajar ABAP Part 2: Dasar-Dasar Pemrograman ABAP

Setelah pada Part 1: Pengenalan ABAP kita mengenal apa itu ABAP dan membuat program pertama, sekarang kita akan masuk lebih dalam ke dasar pemrograman ABAP. Materi ini meliputi:

  • Deklarasi variabel
  • Tipe data di ABAP
  • Penggunaan WRITE statement

Deklarasi Variabel

Variabel digunakan untuk menyimpan data. Di ABAP, variabel biasanya dideklarasikan menggunakan keyword DATA.


REPORT zvariable_example.

DATA: gv_name TYPE string,
      gv_age  TYPE i.

gv_name = 'Andi'.
gv_age  = 25.

WRITE: / 'Nama :', gv_name,
       / 'Umur :', gv_age.

Pada contoh di atas:

  • gv_name adalah variabel bertipe string.
  • gv_age adalah variabel integer (bilangan bulat).
  • Keyword WRITE digunakan untuk menampilkan output.

Tipe Data di ABAP

ABAP memiliki berbagai tipe data yang bisa digunakan. Berikut beberapa tipe dasar:

Tipe Data Keterangan Contoh
C (Character) Teks dengan panjang tetap DATA gv_text TYPE c LENGTH 10.
N (Numeric) Angka dalam bentuk teks DATA gv_num TYPE n LENGTH 5.
I (Integer) Bilangan bulat DATA gv_int TYPE i.
D (Date) Tanggal (YYYYMMDD) DATA gv_date TYPE d.
F (Float) Bilangan desimal DATA gv_float TYPE f.
STRING Teks dengan panjang dinamis DATA gv_string TYPE string.

WRITE Statement

Perintah WRITE digunakan untuk menampilkan data ke layar. Contoh sederhana:


REPORT zwrite_example.

DATA gv_total TYPE i.

gv_total = 100 + 50.

WRITE: 'Total nilai adalah:', gv_total.

Output yang muncul di layar SAP adalah:

Total nilai adalah: 150

Kesimpulan

Di Part 2 ini kita sudah mempelajari dasar penting dalam ABAP yaitu cara mendeklarasikan variabel, mengenal tipe data, dan menampilkan data dengan WRITE. Pemahaman ini sangat penting karena akan menjadi dasar untuk materi berikutnya.

👉 Lanjut ke: Belajar ABAP Part 3: Control Statements (IF, CASE, LOOP)

Belajar ABAP Part 1: Pengenalan ABAP untuk Pemula

Belajar ABAP Part 1: Pengenalan ABAP untuk Pemula

Belajar ABAP Part 1: Pengenalan ABAP untuk Pemula

Selamat datang di seri Belajar ABAP dari Basic sampai Advance. Pada bagian pertama ini, kita akan membahas pengenalan dasar ABAP, sejarah singkat, dan menulis program pertama di SAP menggunakan ABAP.

Apa itu ABAP?

ABAP (Advanced Business Application Programming) adalah bahasa pemrograman yang digunakan untuk mengembangkan aplikasi pada sistem SAP. ABAP mendukung pemrograman prosedural maupun object-oriented, sehingga fleksibel digunakan untuk berbagai kebutuhan bisnis.

Sejarah Singkat ABAP

ABAP pertama kali dikembangkan oleh SAP pada tahun 1980-an untuk mendukung pembuatan laporan dan program aplikasi bisnis. Hingga saat ini, ABAP masih menjadi salah satu pilar utama dalam SAP ERP maupun SAP S/4HANA.

Kenapa Belajar ABAP?

  • Digunakan secara luas di perusahaan besar yang menggunakan SAP.
  • Mudah dipelajari bagi pemula yang sudah familiar dengan bahasa pemrograman dasar.
  • Banyak peluang karir di bidang SAP Development.
  • Mendukung integrasi dengan teknologi modern (CDS View, OData, HANA, dsb).

Tools yang Dibutuhkan

Untuk mulai belajar ABAP, ada dua tools utama yang biasanya digunakan:

  1. SAP GUI: digunakan untuk akses langsung ke sistem SAP.
  2. Eclipse dengan ABAP Development Tools (ADT): IDE modern untuk coding ABAP.

Program Pertama: Hello World

Sebagai latihan pertama, mari kita buat program sederhana di ABAP:


REPORT zhello_world.

WRITE: 'Hello, ABAP World!'.

Program di atas akan menampilkan teks sederhana Hello, ABAP World! ke layar SAP. Mudah kan? 😊

Kesimpulan

Pada artikel pertama ini, kita sudah mengenal dasar apa itu ABAP, sejarah singkatnya, alasan kenapa belajar ABAP penting, tools yang dibutuhkan, dan membuat program pertama. Di seri berikutnya, kita akan membahas lebih detail tentang dasar-dasar pemrograman ABAP seperti variabel, tipe data, dan perintah dasar.

👉 Lanjut ke: Belajar ABAP Part 2: Dasar-Dasar Pemrograman ABAP

SAP ABAP CDS View - Batch Characteristic Value

SAP ABAP CDS View - Batch Characteristic Value

SAP ABAP CDS View: Batch Characteristic Value

In modern SAP development, Core Data Services (CDS View) play a vital role in building reusable and optimized data models. This article demonstrates how to create a CDS View to retrieve Batch Characteristic Values from SAP standard tables.

Objective

The purpose of this CDS View is to extract batch characteristic data from standard SAP tables such as INOB, AUSP, CABN, and related tables. The result can be leveraged for reporting, analytics, or Fiori applications.

CDS View Script


@AbapCatalog.sqlViewName: 'ZV_BATCHCHAR'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'CDS View Batch Characteristic Value'
define view ZCDS_BATCH_CHARACTERISTIC as select from inob as a 
inner join ausp as b on a.cuobj = b.objek 
left outer join cabnt as c on c.atinn = b.atinn
left outer join cabn  as f on f.atinn = b.atinn
left outer join cawnt as d on b.atinn = d.atinn and b.atzhl = right(d.atzhl, 3) {
    b.objek as auspObjek,
    a.objek as obj,
    a.obtab,
    b.klart,
    cast(substring(a.objek, 1, 40) as char40 ) as Material,
    cast(substring(a.objek, 41, 50) as char10 ) as Batch,
    b.atinn,
    f.atnam,
    c.atbez,
    b.atzhl,
    b.atwrt,
    d.atwtb,
    b.atflv,
    b.date_from,
    b.dec_value_from
} where a.obtab = 'MCH1' and a.klart = '023' and c.spras = 'E'
    

Sample Output

Below is an example of the result set when running this CDS View in SAP HANA:

Material Batch Characteristic Description Value (Technical) Value (Text) Valid From
MAT-1001 BATCH001 COLOR Batch Color RED Red 2025-01-01
MAT-1001 BATCH001 EXP_DATE Expiration Date 20251231 31-Dec-2025 2025-01-01
MAT-1002 BATCH005 PURITY Purity Level 99.8 99.8 % 2025-02-15

Consuming CDS View in ABAP

To consume the CDS View in an ABAP program, you can use a simple SELECT statement referencing the CDS View entity name:


REPORT ztest_batchchar.

TYPES: BEGIN OF ty_batchchar,
         material     TYPE char40,
         batch        TYPE char10,
         atnam        TYPE char30,
         atbez        TYPE char60,
         atwrt        TYPE char30,
         atwtb        TYPE char60,
         date_from    TYPE dats,
       END OF ty_batchchar.

DATA lt_batchchar TYPE TABLE OF ty_batchchar.
DATA ls_batchchar TYPE ty_batchchar.

SELECT material,
       batch,
       atnam,
       atbez,
       atwrt,
       atwtb,
       date_from
  FROM zcds_batch_characteristic
  INTO TABLE @lt_batchchar
  UP TO 20 ROWS.

LOOP AT lt_batchchar INTO ls_batchchar.
  WRITE: / ls_batchchar-material,
           ls_batchchar-batch,
           ls_batchchar-atnam,
           ls_batchchar-atwrt.
ENDLOOP.
    

Field Explanation

  • Material → extracted from the object key (first 40 characters).
  • Batch → extracted from the object key (characters 41–50).
  • atnam → technical name of the characteristic.
  • atbez → description of the characteristic.
  • atwrt / atwtb → technical and descriptive values of the characteristic.
  • date_from → start of validity period.

Key Benefits

- Simplifies batch characteristic reporting without complex queries.
- Enables seamless integration with SAP Fiori apps and HANA analytics.
- Provides a reusable data model for multiple business scenarios.

Conclusion

This CDS View provides a clean and efficient way to retrieve batch and characteristic information in SAP ABAP. With this approach, reporting and analytics become much easier and faster to implement.

Feel free to adapt this CDS View and ABAP snippet for your own SAP implementation!

SAP Issue Unapproved Requisition could be converted to Purchase Order

Purchase Requisitions that have not been released/approved can be continued to become Purchase Order. If they have not been released/approved, they cannot be made into Purchase Order. 



If you found this Issue in your SAP S4 System try to implement this SAP Note
https://me.sap.com/notes/3300350/E

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