쌓고 쌓다
[ABAP] SmartForms Loop 사용법과 집계 구하는법 본문
이번 글의 목표

LOOP문을 사용하여 품목 데이터를 찍어내고

페이지 하단에 페이지 번호도 표시하고

LOOP문을 돌때 품목이 너무 많아 다음 페이지로 갈때
판매오더, 총액과 같은 헤더 정보들이 나올 수 있도록,
그리고 항번, 자재, 자재명처럼 테이블의 컬럼정보가 다음페이지에서도 표시되도록,

마지막에는 합계를 구할 수 있도록 해보자.
1. LOOP문 품목 출력

생성한 루프문에 첫번째에 Internal Table 타입의 변수를
두번째에 WorkArea 변수를 작성한다.
IT_ITEM의 경우

서식 인터페이스에 이 스마트폼을 호출할때 넘겨받는 파라미터이고
GS_ITEM의 경우(WorkArea)

일반 프로그램의 TOP처럼 전역 변수를 작성할 수 있는 페이지에서
추가한 변수이다.

반복문내에 반복문을 돌며 출력할 템플릿을 하나 생성하고
그 안에 텍스트를 넣어주면 된다.

텍스트에 값은 루프문의 WorkArea인 GS_ITEM 변수를 이용해 출력하면 된다.
2. LOOP문 헤더 출력

위의 판매오더, 총액과 같은 정보
또는
항번, 자재와 같은 테이블 컬럼명인
LOOP문의 헤더를 출력해보자.

루프문의 이벤트 탭 페이지에서
헤더를 설정할 수 있다.
이 헤더는 페이지가 바뀔때 또는 테이블의 시작부분에서만 적용하는 기능이 있다.

템플릿에 헤더 정보들을 넣어 헤더를 구성할 수 있다.
3. 바닥글 및 집계(총계)

테이블 루프가 끝났을때 마지막 바닥글을 추가해보고
여기에 집계(총계) 기능을 넣어보자.

헤더와 마찬가지로 루프의 이벤트 탭 페이지에서 바닥글을 설정할 수 있다.
페이지 변경때마다 또는 테이블의 끝부분에만 넣을 수도 있다.

마찬가지로 바닥글을 위한 템플릿을 만들어 텍스트를 넣어주었다.

수량 또는 총금액 필드에 값을 넣어
바닥글에 집계 값을 넣어줄 수 있다.
그럼 이 집계 값은 어떻게 루프문을 통해 할당하고 계산하는가?

집계를 위한 전역 변수를 만든다.
하지만 이 변수에
금액의 통화, 수량 단위를 연결할 필요가 있다.

통화/수량 필드에서 통화/수량을 연결할 수 있다.
필드 이름 : TOP 전역변수에 생성한 이름
참조 필드 : TOP 전역변수의 통화/수량이 어디에 존재하는가?
참조 필드에 사용한 GS_ITEM는
LOOP문에 사용한 WorkArea의 변수명이다.
루프문의 WorkArea를 사용할 수 있다.

계산 탭 페이지에서 루프문들 돌때마다 값을 더하도록 설정해주면 된다.
필드 이름 : 값을 집계할 WorkArea의 필드명
대상 필드 이름 : 필드의 집계 결과를 저장할 필드명
4. 페이지 번호 출력하기

위처럼 다른 문자열과 결합하여 원하는 형식으로 페이지 번호를 출력할 수 있다.

페이지 번호를 위한 위도우와 텍스트인데

값을 위처럼
PO [ &IS_HEADER-VBELN& ] page &SFSY-PAGE&/&SFSY-FORMPAGES(4ZC)&
작성해주면된다.
스마트폼에서도 SY-DATUM처럼 시스템 변수를 사용할 수 있다.
스마트폼의 페이지 시스템 변수는 다음과 같다.
SFSY-PAGE : 현재 페이지
SFSY-FORMPAGES : 전체 페이지 수
뒤에 (4ZC)는 구글링하다 얼핏 봤는데
페이지 수가 많아서 잘려나올때 저 값을 넣어주면 안잘려나온다는것 같다.
위처럼 ( ) 괄호안에 출력 값에대한 출력 포맷을 처리할 수 있는데
Z는 숫자 앞에 붙는 0을 제거하고
C는 공백제거를해준다.
+ 텍스트 수정(편집기)시 Word말고 ABAP Edit 키는법

텍스트 요소의 편집기를 눌러 편집기를 키면 Word 가 켜질텐데
이 Word를 끄고

상단의 이동 - 편집기 변경을 통해

위와 같은 편집기를 킬 수 있다.
위의 편집기를 써야하는 상황이 있는데
워드에 변수 값을 출력하는 &&를 이용해 다음 사진처럼

변수 GV_TEST값을 출력하기위해 작성했지만

& 기호가 변수할당을 위한 & 기호가 아닌
문자 & 그자체로 인식되도록 (>&<)이 들어가 있다.
그래서 의도한것은 변수 값인데 문자 그대로 출력되는 무제가 발생할 수 있다.
+ 텍스트 변집기 Word 이상하게 나올때

Word를 통해 텍스트 편집할때 화면이 이상하게 나오는 경우가 있는데
아래에 저 디스플레이 타입을 바꾸면

잘 나온다.
+ SmartForm의 이미지 파일

스마트폼에서 사용하는 이미지는
T code : SE78에서 등록하여 사용할 수 있다.
+ 스마트폼 출력 포멧 옵션
페이지 번호 출력에서 보였던
&SFSY-FORMPAGES(4ZC)&
구문처럼 ( ) 괄호안에 값을 넣어 출력 값에대한 포멧을 설정할 수 있다.
| &field(Z)& | Numeric 타입 앞에 붙는 0처럼 앞의 0을 제거 |
| &field(C)& | 공백 제거 ( Z 옵션을 사용하면 0자리에 공백이 들어가는듯? 아닐 수 도 있음 그래서 ZC옵션을 붙여 사용했었음) |
| &field+<offset>& | offset만큼 스페이스바 넣고 출력 |
| &field(<length>)& | 출력 길이 지정 |
| &field(S)& | 부호 표시 안함 |
| &field(<)& | 부호 왼쪽 위치에 출력 |
| &field(.<nat.number>)& | 소수점 자리 제한 (QUAN, FLTP, DEC 전용) |
| &field(T)& |
천단위 , 표시 제거 |
| &field(F<filler>)& | 왼쪽 빈 자리 공백을 filter에 지정된 문자로 채움 |

기존에 NUMERIC 타입이 앞에 0이 붙어 제거하고자
루프로 BAPI Function을 태웠는데

0을 제거하고 공백을 제거함으로써 0을 제거할 수 있다.
+ 금액 필드 값 오른쪽으로 붙음 현상

금액 필드값과 통화 값을 연결하여
값을 넣어줬는데
금액이 오른쪽으로 붙어 출력되는 현상이 있다.
마찬가지로 다른 금액 필드도 오른쪽으로 붙어 출력되는 현상이 있다.
원래 금액 필드 값은 오른쪽으로 붙는게 기본값이나
왼쪽으로 붙이길 원한다

금액 필드에는 왼쪽에 자릿수의 빈 자리만큼 공백이 붙어있기에
공백을 제거함으로써 왼쪽으로 붙일 수 있다.

왼쪽으로 붙이는 단락형식과 글꼴을 적용해도
금액은 오른쪽에 붙기에 왼쪽의 공백을 제거하는 포맷을 적용하여 왼쪽으로 붙일 수 있다.
'SAP > ABAP' 카테고리의 다른 글
| [ABAP] 엑셀 업로드와 BDC 프로그램 (0) | 2025.09.15 |
|---|---|
| [ABAP] LEFT OUTER JOIN할때 IS INITIAL 사용시 주의사항 (1) | 2025.09.14 |
| [ABAP] ALV Cell Edit과 BAPI_PO_CHANGE (13) | 2025.08.28 |
| SELECTION SCREEN에서 ToolBar 버튼 추가 및 삭제 (1) | 2025.08.14 |
| SMW0 엑셀 템플릿을 이용한 Excel(OLE), PDF 다운로드 (6) | 2025.08.13 |