SAP 예제가 포함된 ABAP 테이블 제어
⚡ 스마트 요약
SAP ABAP 테이블 컨트롤은 Screen에서 생성된 화면에 내부 테이블을 스크롤 가능한 그리드 형태로 표시합니다. Painter이 페이지에서는 해당 기능, CONTROLS 선언, 커서 처리, PBO 및 PAI 루프, 그리고 열 속성에 대해 설명합니다.

테이블 컨트롤이란 무엇인가요? SAP 아밥?
테이블 컨트롤과 단계 루프는 스크린에서 스크린에 추가하는 스크린 테이블 표시용 객체입니다. Painter.
프로그래밍 관점에서 볼 때 테이블 컨트롤과 단계 루프는 거의 동일합니다. 테이블 컨트롤은 데스크톱 애플리케이션의 테이블과 관련된 모양과 느낌으로 데이터를 표시하는 향상된 단계 루프입니다.
ABAP 테이블 제어의 특징
테이블 컨트롤을 사용하여 사용자는 다음을 수행할 수 있습니다.
- 테이블을 수직 및 수평으로 스크롤
- 열 너비 크기 조정
- 필드 내에서 스크롤(필드 내용이 필드보다 넓은 경우)
- 표 행 또는 열 선택
- 열 순서 다시 정렬
- 나중에 사용할 수 있도록 현재 디스플레이 설정을 저장합니다.
또한 표 컨트롤은 표를 더 쉽게 보고 사용할 수 있도록 하는 특수 서식 기능(일부는 자동, 일부는 선택 사항)을 제공합니다. 테이블 제어 기능은 다음과 같습니다.
- 사용자가 창 크기를 조정할 때 자동 테이블 크기 조정(세로 및 가로)
- 행과 열 사이의 구분선(세로 및 가로)
- 모든 열의 열 헤더 필드
일반적으로 테이블 컨트롤이 제공하는 많은 기능은 시스템의 로컬에서 처리됩니다. SAPgui 프론트엔드이므로 직접 프로그래밍할 필요가 없습니다. 이에 대한 유일한 예외는 수직 스크롤입니다..
예(트랜잭션 TZ60)
위의 트랜잭션 TZ60은 최종 결과를 보여줍니다. 열 머리글, 구분선 및 선택 열이 있는 그리드가 표시됩니다. 이전 단계 루프와의 차이점은 다음과 같습니다.
테이블 제어 vs 스텝 루프
스텝 루프의 특징 중 하나는 테이블 행이 화면에서 여러 줄에 걸쳐 표시될 수 있다는 것입니다. 반면 테이블 컨트롤의 행은 항상 한 줄에 포함되어야 합니다(스크롤은 가능하지만). 아래 표는 두 화면 요소를 비교합니다.
| 기준 | 테이블 컨트롤 | 스텝 루프 |
|---|---|---|
| 행 레이아웃 | 한 줄은 항상 화면상의 한 줄입니다. | 한 줄이 여러 화면 줄에 걸쳐 있을 수 있습니다. |
| 컬럼 처리 | 사용자는 열의 크기를 조정하거나 순서를 변경하거나 숨길 수 있습니다. | 화면에 정의된 고정 열 레이아웃 |
| 스크롤 | 프런트엔드에서 가로 스크롤링을, PAI에서 세로 스크롤링을 프로그래밍했습니다. | ABAP 코드로 완전히 작성되었습니다. |
| 선언 | 컨트롤 … 화면을 사용하여 테이블뷰 유형 지정 | 프로그램에 제어 구조가 없습니다. |
| 화면 설정 | 사용자는 개인 레이아웃을 저장할 수 있습니다. | 사용할 수 없음 |
테이블 컨트롤은 최신 요소이므로 이 페이지의 나머지 부분은 테이블 컨트롤을 프로그래밍하는 내용입니다.
테이블 컨트롤을 생성하고 프로그래밍하는 방법
테이블 컨트롤을 구현하려면 화면 요소, 프로그램 내의 제어 구조, 그리고 PBO와 PAI 모두에서 루프가 필요합니다. 아래 하위 섹션들은 이러한 순서대로 설명합니다.
제어를 선언합니다
ABAP 프로그램에서 테이블 컨트롤을 처리하려면 다음 명령문을 사용하여 각 테이블 컨트롤에 대한 프로그램의 선언 부분에서 컨트롤을 선언해야 합니다.
CONTROLS <ctrl> TYPE TABLEVIEW USING SCREEN <scr>
어디 ABAP 프로그램 화면의 테이블 컨트롤 이름입니다. 컨트롤을 사용하면 ABAP 프로그램이 테이블 컨트롤의 속성을 읽고 컨트롤에 영향을 미칠 수 있습니다. 테이블의 초기값을 불러오는 화면 번호입니다.
커서 위치 설정 및 읽기
테이블 컨트롤의 커서 위치는 다음과 같은 방법으로 설정할 수 있습니다.
PBO에서는 테이블 컨트롤의 특정 행의 특정 필드에 커서를 설정할 수 있습니다.
SET CURSOR FIELD <f> LINE <lin> [OFFSET <off>]
선택적 추가 OFFSET을 사용하면 커서 위치 설정에 설명된 대로 필드에 커서 오프셋을 입력할 수 있습니다.
PAI에서는 현재 커서 위치를 읽을 수 있습니다.
GET CURSOR FIELD <f> LINE <lin> ...
커서 위치 찾기에 제공된 정보 외에도 다음 필드를 입력하십시오. 커서가 현재 테이블 컨트롤의 어느 행에 있는지에 대한 정보를 포함합니다. 당신은 또한 사용할 수 있습니다
GET CURSOR LINE <lin>.
테이블 컨트롤의 행을 확인합니다. SY-SUBRC를 사용하면 커서가 테이블 컨트롤의 행에 있는지 확인할 수 있습니다.
해당 내부 테이블 행을 읽습니다.
해당 라인을 얻으려면 내부 테이블:
GET CURSOR line <lin>. ind = <table_control>-top_line + <lin> - 1. Read table <itab> index ind.
시스템 변수 stepl – 루프 endloop의 현재 테이블 행 인덱스를 포함합니다. Loopc – 테이블에 표시되는 행 수를 포함합니다.
화면에 컨트롤 생성하기 Painter
테이블 컨트롤을 만들려면
- 화면에 테이블 컨트롤 요소를 추가합니다.
- 테이블 컨트롤에 이름을 지정하세요. ABAP 프로그램에서 동일한 이름의 구조체(CONTROLS)를 선언하세요. 화면을 사용하여 테이블뷰를 입력하세요 )
- 필드를 생성하려면 사전/프로그램 필드 기능으로 이동하십시오.
- 원하는 필드가 있는 구조의 이름을 입력하세요. (프로그램 사전에서 선택하려면 관련 푸시버튼을 클릭하세요.)
- 필드 목록에서 원하는 필드를 선택하고 확인을 선택합니다.
- 테이블 제어 영역을 클릭하세요.
선택 열이 필요한 경우 속성에서 해당 확인란을 선택하고 이름을 지정합니다. 필드를 만듭니다. ABAP 프로그램.
PBO 및 PAI 루프 코딩
의회예산처에는 다음과 같은 성명이 있어야 합니다.
LOOP at <itab> USING CONTROL <cntrl_name>. ENDLOOP.
PAI에는 있어야 합니다.
LOOP at <itab>. ENDLOOP.
화면과 내부 테이블 간의 데이터 전송은 루프 내에서 이루어집니다. 내부 테이블을 채울 때는 DESCRIBE TABLE을 사용하십시오. LINE에스 -라인은 컨트롤에 저장된 전체 라인 수를 저장하는 데 사용됩니다. FIELD 문은 데이터 전송 시점을 제어하는 데 사용할 수 있습니다.
⚠️ 경고: PBO 루프는 반드시 `USING CONTROL` 구문을 사용하여 컨트롤의 이름을 지정해야 합니다. 그렇지 않으면 컨트롤이 행 수를 알 수 없어 세로 스크롤이 작동하지 않습니다.
런타임 시 열 속성 변경
개별 셀의 속성을 변경하려면 PBO의 SCREEN 테이블을 일시적으로 변경하세요. CONTROLS 문으로 생성된 구조의 속성을 변경할 수 있습니다.
<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.
💡 팁: 루프 오버 별도의 화면을 만들 필요 없이, PBO에서 `-cols` 옵션을 사용하여 특정 사용자 역할에 대해 열을 숨기거나 보호할 수 있습니다.

