SAP ABAP - Sao chép bảng nội bộ

Khi chúng tôi đọc một bản ghi từ một bảng nội bộ có dòng tiêu đề, bản ghi đó sẽ được chuyển từ chính bảng đó vào dòng tiêu đề. Sau đó, nó là dòng tiêu đề mà chương trình của chúng tôi hoạt động. Điều tương tự cũng áp dụng trong khi tạo bản ghi mới. Đây là dòng tiêu đề mà bạn làm việc với và từ đó bản ghi mới được gửi đến chính nội dung bảng.

Để sao chép các bản ghi, chúng ta có thể sử dụng câu lệnh SELECT để chọn tất cả các bản ghi từ bảng và sau đó sử dụng câu lệnh MOVE sẽ di chuyển các bản ghi từ bảng gốc vào bảng nội bộ mới vào các trường có tên tương ứng.

Sau đây là cú pháp cho câu lệnh MOVE:

MOVE <table_field> TO <internal_tab_field>.

Thí dụ

REPORT  ZCUSLIST1. 
TABLES: ZCUSTOMERS1. 
DATA: BEGIN OF itab01 Occurs 0,
      name LIKE ZCUSTOMERS1-name,
      dob LIKE ZCUSTOMERS1-dob, 
END OF itab01. 

Select * FROM ZCUSTOMERS1. 
MOVE ZCUSTOMERS1-name TO itab01-name. 
MOVE ZCUSTOMERS1-dob TO itab01-dob. 
ENDSELECT.
 
Write: / itab01-name, itab01-dob.

Đoạn mã trên tạo ra kết quả sau:

MARGARET  		02.11.1994

Vòng lặp chọn lấp đầy từng trường một, sử dụng câu lệnh MOVE để di chuyển dữ liệu từ trường của bảng này sang trường của bảng khác. Trong ví dụ trên, câu lệnh MOVE được sử dụng để di chuyển nội dung của bảng ZCUSTOMERS1 đến các trường tương ứng trong bảng nội bộ. Bạn có thể thực hiện hành động này chỉ với một dòng mã. Bạn có thể sử dụng câu lệnh MOVECORRESPONDING.

Sau đây là cú pháp cho câu lệnh MOVE-CORRESPONDING -

MOVE-CORRESPONDING <table_name> TO <internal_tab>.

Nó yêu cầu hệ thống di chuyển dữ liệu từ các trường của ZCUSTOMERS1 sang các trường tương ứng của chúng trong itab01.

Thí dụ

REPORT  ZCUSTOMERLIST. 
TABLES: ZCUSTOMERS1. 
DATA: Begin of itab01 occurs 0,
      customer LIKE ZCUSTOMERS1-customer,
      name LIKE ZCUSTOMERS1-name,
      title LIKE ZCUSTOMERS1-title,
      dob LIKE ZCUSTOMERS1-dob, 
END OF itab01. 

SELECT * from ZCUSTOMERS1. 
MOVE-Corresponding ZCUSTOMERS1 TO itab01. 
APPEND itab01. 
ENDSELECT. 
LOOP AT itab01. 
Write: / itab01-name, itab01-dob. 
ENDLOOP.

Đoạn mã trên tạo ra kết quả sau:

MARK           21.05.1981 
JAMES          14.08.1977 
AURIELE        19.06.1990 
STEPHEN        22.07.1985 
MARGARET       02.11.1994

Điều này được thực hiện bởi thực tế là cả hai đều có tên trường phù hợp. Khi sử dụng câu lệnh này, bạn cần đảm bảo rằng cả hai trường đều có kiểu dữ liệu và độ dài phù hợp. Nó đã được thực hiện ở đây với câu lệnh LIKE trước đó.