SAP Kiểm soát bảng ABAP với các ví dụ
⚡ Tóm tắt thông minh
SAP ABAP Table Control hiển thị một bảng nội bộ dưới dạng lưới cuộn trên màn hình được xây dựng trong Screen. PainterTrang này giải thích các tính năng của nó, khai báo CONTROLS, xử lý con trỏ, vòng lặp PBO và PAI, và các thuộc tính cột.

Bảng điều khiển là gì? SAP ABAP?
Điều khiển bảng và vòng lặp bước là các đối tượng để hiển thị bảng màn hình mà bạn thêm vào màn hình trong Màn hình Painter.
Từ quan điểm lập trình, các điều khiển bảng và vòng lặp bước gần như giống hệt nhau. Điều khiển bảng chỉ đơn giản là các vòng lặp bước được cải tiến nhằm hiển thị dữ liệu với giao diện liên quan đến bảng trong ứng dụng máy tính để bàn.
Các tính năng của Điều khiển bảng ABAP
Với các điều khiển bảng, người dùng có thể:
- Cuộn qua bảng theo chiều dọc và chiều ngang
- Chỉnh lại kích thước chiều rộng của cột
- Cuộn trong một trường (khi nội dung trường rộng hơn trường)
- Chọn hàng hoặc cột của bảng
- Sắp xếp lại thứ tự các cột
- Lưu cài đặt hiển thị hiện tại để sử dụng sau này
Điều khiển bảng cũng cung cấp các tính năng định dạng đặc biệt (một số tự động, một số tùy chọn) giúp bảng dễ xem và sử dụng hơn. Kiểm soát bảng cung cấp –
- tự động thay đổi kích thước bảng (dọc và ngang) khi người dùng thay đổi kích thước cửa sổ
- đường phân cách giữa các hàng và giữa các cột (dọc và ngang)
- trường tiêu đề cột cho tất cả các cột
Nói chung, nhiều tính năng do bảng điều khiển cung cấp được xử lý cục bộ bởi hệ thống của bạn. SAPgui frontend nên bạn không cần phải tự mình lập trình chúng. Ngoại lệ đáng chú ý duy nhất cho điều này là cuộn dọc.
Ví dụ (Giao dịch TZ60)
Giao dịch TZ60 ở trên hiển thị kết quả cuối cùng: một lưới với tiêu đề cột, đường phân cách và cột lựa chọn. Sự khác biệt so với vòng lặp từng bước cũ được tóm tắt như sau.
Điều khiển bảng so với vòng lặp bước
Một đặc điểm của vòng lặp bước là các hàng trong bảng có thể trải rộng trên nhiều dòng trên màn hình. Ngược lại, một hàng của điều khiển bảng luôn phải nằm trên một dòng duy nhất (mặc dù vẫn có thể cuộn). Bảng dưới đây so sánh hai phần tử màn hình này.
| Tiêu chí | Kiểm soát bảng | Vòng lặp bước |
|---|---|---|
| Bố cục hàng | Mỗi hàng tương ứng với một dòng trên màn hình. | Một hàng có thể trải dài trên nhiều dòng màn hình. |
| Xử lý cột | Người dùng có thể thay đổi kích thước, sắp xếp lại thứ tự và ẩn các cột. | Bố cục cột cố định được xác định trên màn hình |
| Di chuyển | Cuộn ngang được thực hiện bởi giao diện người dùng, cuộn dọc được lập trình trong PAI. | Được lập trình hoàn toàn bằng mã ABAP. |
| Tờ khai | CÁC ĐIỀU KHIỂN … KIỂU TABLEVIEW SỬ DỤNG MÀN | Không có cấu trúc điều khiển nào trong chương trình. |
| Cài đặt hiển thị | Người dùng có thể lưu bố cục cá nhân. | Không có |
Vì điều khiển bảng là một yếu tố hiện đại, nên phần còn lại của trang này sẽ lập trình cho điều khiển đó.
Cách tạo và lập trình điều khiển bảng
Một điều khiển bảng cần có một phần tử màn hình, một cấu trúc điều khiển trong chương trình và một vòng lặp trong cả PBO và PAI. Các phần nhỏ bên dưới tuân theo thứ tự đó.
Khai báo quyền kiểm soát
Để xử lý các điều khiển bảng trong chương trình ABAP, bạn phải khai báo một điều khiển trong phần khai báo của chương trình cho mỗi điều khiển bảng bằng cách sử dụng câu lệnh sau:
CONTROLS <ctrl> TYPE TABLEVIEW USING SCREEN <scr>
Ở đâu là tên của bảng điều khiển trên màn hình trong chương trình ABAP. Điều khiển cho phép chương trình ABAP đọc các thuộc tính của điều khiển bảng và tác động đến điều khiển. Ở đây, là số màn hình nơi các giá trị ban đầu của bảng được tải.
Thiết lập và đọc vị trí con trỏ
Vị trí con trỏ để điều khiển bảng có thể được thiết lập theo những cách sau:
Tại PBO, bạn có thể đặt con trỏ trên một trường cụ thể của một hàng cụ thể của điều khiển bảng.
SET CURSOR FIELD <f> LINE <lin> [OFFSET <off>]
Bằng cách sử dụng phần bổ sung tùy chọn OFFSET, bạn có thể nhập độ lệch của con trỏ vào trường như được mô tả trong phần Đặt vị trí con trỏ.
Tại PAI bạn có thể đọc vị trí con trỏ hiện tại.
GET CURSOR FIELD <f> LINE <lin> ...
Ngoài thông tin được cung cấp trong phần Tìm hiểu vị trí con trỏ, trường chứa thông tin về hàng nào của bảng điều khiển con trỏ hiện đang bật. Bạn cũng có thể dùng
GET CURSOR LINE <lin>.
Để xác định hàng của điều khiển bảng. Lệnh SY-SUBRC cho phép bạn kiểm tra xem con trỏ có được đặt trong một hàng của điều khiển bảng hay không.
Đọc dòng bảng nội bộ tương ứng
Để có được dòng tương ứng của bảng nội bộ:
GET CURSOR line <lin>. ind = <table_control>-top_line + <lin> - 1. Read table <itab> index ind.
Biến hệ thống stepl – chứa chỉ mục dòng của bảng hiện tại trong một vòng lặp… endloop. Loopc - chứa số dòng hiển thị trong bảng
Tạo điều khiển trên màn hình Painter
Để tạo một điều khiển bảng
- Thêm phần tử điều khiển bảng vào màn hình của bạn.
- Đặt tên cho điều khiển bảng. Trong chương trình ABAP, khai báo một cấu trúc có cùng tên (CONTROLS). type TABLEVIEW USING SCREEN )
- Để tạo trường, hãy vào chức năng Trường từ điển/Chương trình.
- Nhập tên của cấu trúc có trường bạn muốn. (Nếu bạn muốn nó chọn nó từ từ điển của chương trình, hãy nhấp vào nút puh có liên quan).
- Trong danh sách trường, chọn trường bạn muốn và chọn ok.
- Bấm vào vùng điều khiển bảng
Nếu bạn muốn một cột lựa chọn, hãy đánh dấu vào hộp kiểm thích hợp trong các thuộc tính và đặt tên cho nó. Tạo trường trong chương trình ABAP.
Lập trình các vòng lặp PBO và PAI
Trong PBO bạn nên có tuyên bố
LOOP at <itab> USING CONTROL <cntrl_name>. ENDLOOP.
Trong PAI bạn nên có.
LOOP at <itab>. ENDLOOP.
Quá trình truyền dữ liệu giữa màn hình và bảng nội bộ diễn ra trong các vòng lặp. Khi bạn điền dữ liệu vào bảng nội bộ, hãy sử dụng lệnh DESCRIBE TABLE. LINES - dòng, để lưu trữ tổng số dòng trong điều khiển. Câu lệnh FIELD có thể được sử dụng để kiểm soát thời điểm truyền dữ liệu xảy ra.
⚠️ Cảnh báo: Vòng lặp PBO phải đặt tên cho điều khiển bằng USING CONTROL. Nếu không, điều khiển sẽ không biết có bao nhiêu dòng và chức năng cuộn dọc sẽ ngừng hoạt động.
Thay đổi thuộc tính cột trong quá trình thực thi
Để thay đổi thuộc tính của từng ô riêng lẻ, hãy tạm thời thay đổi bảng SCREEN trong PBO. Bạn có thể thay đổi các thuộc tính của cấu trúc được tạo bởi câu lệnh KIỂM SOÁT
<cntrl>-fixed_cols etc are the attributes of the control <cntrl>-cols-index etc are the attributes of the columns. <cntrl>-cols-screen-invisible etc are the screen attributes of each column.
💡 Mẹo: Lặp lại - Sử dụng `cols` trong PBO để ẩn hoặc bảo vệ một cột cho một vai trò người dùng nhất định, thay vì tạo màn hình thứ hai.

