SAP ABAP - Mengisi Tabel Internal

Dalam tabel internal, mengisi termasuk fitur-fitur seperti seleksi, penyisipan dan penambahan. Bab ini berfokus pada pernyataan INSERT dan APPEND.

Pernyataan INSERT

Pernyataan INSERT digunakan untuk memasukkan satu baris atau sekelompok baris ke dalam tabel internal.

Berikut ini adalah sintaks untuk menambahkan satu baris ke tabel internal -

INSERT <work_area_itab> INTO <internal_tab> INDEX <index_num>.

Dalam sintaks ini, pernyataan INSERT menyisipkan baris baru di tabel internal internal_tab. Sebuah baris baru dapat disisipkan dengan menggunakan ekspresi INTO work_area_itab sebelum parameter internal_tab. Ketika ekspresi work_area_itab INTO digunakan, baris baru diambil dari area kerja work_area_itab dan dimasukkan ke dalam tabel internal_tab. Namun, ketika ekspresi work_area_itab INTO tidak digunakan untuk menyisipkan baris, baris tersebut diambil dari baris header tabel internal_tab.

Ketika baris baru disisipkan ke dalam tabel internal dengan menggunakan klausa INDEX, nomor indeks baris setelah baris yang disisipkan bertambah 1. Jika tabel internal berisi <index_num> - 1 baris, baris baru ditambahkan di ujung meja. Ketika sistem SAP berhasil menambahkan baris ke tabel internal, variabel SY-SUBRC disetel ke 0.

Contoh

Berikut adalah contoh program yang menggunakan pernyataan insert.

REPORT  ZCUSLIST1. 
DATA: BEGIN OF itable1 OCCURS 4,
      F1 LIKE SY-INDEX,
      END OF itable1.
	
   DO 4 TIMES.
      itable1-F1 = sy-index.
      APPEND itable1.
   ENDDO.
	
itable1-F1 = -96.  
INSERT itable1 INDEX 2.  

LOOP AT itable1.
   Write / itable1-F1.  
ENDLOOP.  

LOOP AT itable1 Where F1 ≥ 3.
   itable1-F1 = -78.
   INSERT itable1.
ENDLOOP.

Skip.
LOOP AT itable1.
   Write / itable1-F1.
ENDLOOP.

Kode di atas menghasilkan outp berikut -

1 
96- 
		2 
		3 
 4  
		1 
96- 
		2 
78- 
 3 
78- 
 4

Dalam contoh di atas, loop DO menambahkan 4 baris yang berisi angka 1 sampai 4 ke dalamnya. Komponen baris header itable1-F1 telah diberi nilai -96. Pernyataan Insert menyisipkan baris header sebagai baris baru ke dalam body sebelum baris 3. Baris 3 yang ada menjadi baris 4 setelah penyisipan. Pernyataan LOOP AT mengambil baris tersebut dari tabel internal yang memiliki nilai F1 lebih besar dari atau sama dengan 3. Sebelum setiap baris, pernyataan Sisipkan menyisipkan baris baru dari baris header. Sebelum penyisipan, komponen F1 telah diubah menjadi berisi -78.

Setelah setiap pernyataan penyisipan dijalankan, sistem akan mengindeks ulang semua baris di bawah yang disisipkan. Ini memperkenalkan overhead saat Anda menyisipkan baris di dekat bagian atas tabel internal yang besar. Jika Anda perlu memasukkan satu blok baris ke dalam tabel internal yang besar, persiapkan tabel lain dengan baris yang akan disisipkan dan gunakan sisipkan baris sebagai gantinya.

Saat menyisipkan baris baru di dalam itable1 di dalam loop di itable1, itu tidak mempengaruhi tabel internal secara instan. Ini benar-benar menjadi efektif pada loop pass berikutnya. Saat menyisipkan baris setelah baris saat ini, tabel diindeks ulang di ENDLOOP. Sy-tabix bertambah dan loop berikutnya memproses baris yang ditunjukkan oleh sy-tabix. Misalnya, jika Anda berada di loop kedua dan Anda memasukkan record sebelum baris 3. Ketika endloop dijalankan, baris baru menjadi baris 3 dan baris lama 3 menjadi baris 4 dan seterusnya. Sy-tabix bertambah 1, dan loop berikutnya memproses record yang baru disisipkan.

Pernyataan APPEND

Pernyataan APPEND digunakan untuk menambahkan satu baris atau baris ke tabel internal yang ada. Pernyataan ini menyalin satu baris dari area kerja dan menyisipkannya setelah baris terakhir yang ada di tabel internal. Area kerja dapat berupa garis header atau string bidang lainnya dengan struktur yang sama seperti garis tabel internal. Berikut ini adalah sintaks dari pernyataan APPEND yang digunakan untuk menambahkan satu baris dalam tabel internal -

APPEND <record_for_itab> TO <internal_tab>.

Dalam sintaks ini, ekspresi <record_for_itab> dapat diwakili oleh area kerja <work_area_itab>, yang dapat diubah menjadi tipe garis atau oleh klausa INITIAL LINE. Jika pengguna menggunakan area kerja <work_area_itab>, sistem SAP menambahkan baris baru ke tabel internal <internal_tab> dan mengisinya dengan konten area kerja. Klausa INITIAL LINE menambahkan baris kosong yang berisi nilai awal untuk setiap bidang struktur tabel. Setelah setiap pernyataan APPEND, variabel SY-TABIX berisi nomor indeks dari baris yang ditambahkan.

Menambahkan baris ke tabel standar dan diurutkan dengan kunci non-unik berfungsi terlepas dari apakah baris dengan kunci yang sama sudah ada di tabel. Dengan kata lain, entri duplikat dapat terjadi. Namun, kesalahan waktu proses terjadi jika pengguna mencoba menambahkan entri duplikat ke tabel yang diurutkan dengan kunci unik atau jika pengguna melanggar urutan tabel yang diurutkan dengan menambahkan baris ke dalamnya.

Contoh

REPORT  ZCUSLIST1. 
DATA: BEGIN OF linv Occurs 0,
      Name(20) TYPE C,
      ID_Number TYPE I,
END OF linv. 

DATA table1 LIKE TABLE OF linv. 
linv-Name = 'Melissa'. 
linv-ID_Number = 105467. 
APPEND linv TO table1. 
LOOP AT table1 INTO linv. 

Write: / linv-name, linv-ID_Number. 
ENDLOOP.

Kode di atas menghasilkan keluaran sebagai berikut -

Melissa		105467