"SUBMIT" 이란 ABAP 프로그램에서 다른 Report 프로그램을 호출할 때 사용하는 명령어이다.
SUBMIT으로 호출하는 프로그램은 TYPE 1 ( Executable Program )이어야 한다.
SUBMIT 명령어의 상세 옵션이나 예제는 아래 링크 또는 F1 키를 눌러 참고 바란다.
오늘 주로 다룰 내용은 스탠다드 프로그램 호출 시 동적 선택 부분을 제어하려고 한다.
" 동적 선택 Dynamic Select-Option " 이란
대표적으로 아래 G/L계정 개별 항목 조회 : FBL3N을 조회해 보면 화면에 보이는 조회조건뿐만 아니라, 동적으로 다른 필드의 조건을 입력해 줄 수 있다.
※ 빨간색으로 체크한 " 동적 선택 " 버튼을 누르면 아래와 같이 추가 필드에 대한 조건 값을 넣을 수 있다.
동적 선택 버튼을 누르면 "GL A/C 마스터, 회사코드, 전표에 대해 추가로 조건 값을 입력해 줄 수 있는 다양한 필드들이 있다.
여기서 조건을 넣고 싶은 항목을 선택하고, 검은색 화살표를 클릭하면 우측 화면으로 이동하여 조건 값을 넣을 수 있다.
예시로 " 전표유형 " 항목에 조건 값을 추가하기 위해 우측 화면으로 이동시켜 보겠다.
위 화면을 보면 전표유형에 대한 추가 조건을 입력할 수 있다.
이제 이쯤에서 동적 선택에 대한 간단한 설명을 마치고, ABAP 프로그램에서 동적 선택을 제어하는 방법을 알아보자.
" SUBMIT 호출 시 동적 Select-Option 조건 주기 "
- Step 01 : WITH FREE SELECTIONS의 구조 알아보기
SUBMIT으로 타 프로그램 호출 시 아래 소스를 통해 다양한 옵션의 조건을 동적으로 입력할 수 있다.
" T-CODE : FBL3N 호출
SUBMIT RFITEMGL
WITH SELECTION-TABLE LT_SELTAB
WITH FREE SELECTIONS GT_DYN_SELTAB
AND RETURN.
※ 여기서 WITH SELECTION-TABLE 옵션은 이전 글을 참고하고,
2023.09.18 - [SAP/ABAP] - ABAP SUBMIT & Dynamic Select-Option #1
동적 조건을 주기 위한 WITH FREE SELECITONS 옵션을 알아보자.
파라미터의 구조를 살펴보면 "테이블 명"과 "조건 저장 itab ( RANGE 타입 )" 구조를 가진다.
TYPES: RSDS_EXPR_TAB LIKE RSDSEXPR OCCURS 10.
TYPES: BEGIN OF RSDS_EXPR,
TABLENAME LIKE RSDSTABS-PRIM_TAB, " 테이블 이름
EXPR_TAB TYPE RSDS_EXPR_TAB, " 조건 ( RANGE 타입 )
END OF RSDS_EXPR.
※ "TABNAME"의 테이블 명의 "어떤 필드"에 어떤 값을 조건으로 줄 것인지 동적 지정이 가능하다.
위 조건을 보면 BLART(전표유형) 중 FG or FF인 경우 제외하겠다는 의미다.
사실 이 구조에 데이터를 채워주는 것은 CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_EX' 함수에서 리턴 받기 때문에 이 정도 구조로 들어간다는 것만 알고 있으면 될 것 같다.
- Step 02 : 동적 OPTION 넣기
※ FBL3N G/L 계정 개별 항목 조회 시 전표유형을 동적으로 선택하여 조회하는 로직을 짜보자.
값을 넣기에 앞서 구조를 살펴보면 필드 이름과 조건을 넣을 ITAB, 테이블과 조건을 넣을 ITAB 두 개가 필요하다.
TYPE-POOLS RSDS.
DATA:
GS_FRANGE TYPE RSDS_FRANGE, "필드명과 조건 RANGE
GS_TRANGE TYPE RSDS_RANGE, "테이블명과 조건 RANGE
GS_SELOPT TYPE RSDSSELOPT, "필드명, 테이블명의 RAGNE 값
GT_TRANGE LIKE TABLE OF GS_TRANGE.
TYPE-POOLS RSDS의 타입을 사용해 테이블과 필드의 조건을 넣고, 최종적으로 GT_TRANGE iTAB 에 값을 넣는다.
글로 읽으면 어렵지만 아래 표를 보면 조금 이해하기 쉬울 것이다.
이런 식으로 DEEP-STRUCTURE구조에 DEEP-STRUCTURE가 들어간 구조이다.
"TABNAME"에 FIELD 조건 → "FIELDNAME"에 SELECT-OPTION 조건 → "FIELDNAME"에 대한 RANGE 옵션 정의
풀어보면 "BSIS" 테이블의 필드 중 "BLART" 필드에 "FF" , "FG" 값을 포함한다. 라는 조건을 넣은 것이다.
이 내용을 소스코드로 보면 아래와 같다.
소스를 참고해서 직접 작성해 보고 디버깅해 보면 이해가 될 것 같다...
" 테이블 명
GS_TRANGE-TABLENAME = 'BSIS'.
" 필드명
GS_FRANGE-FIELDNAME = 'BLART'.
" 필드의 RANGE 값
GS_SELOPT-SIGN = 'I'.
GS_SELOPT-OPTION = 'EQ'.
GS_SELOPT-LOW = 'FG'.
APPEND GS_SELOPT TO GS_FRANGE-SELOPT_T.
CLEAR GS_SELOPT.
GS_SELOPT-SIGN = 'I'.
GS_SELOPT-OPTION = 'EQ'.
GS_SELOPT-LOW = 'FF'.
APPEND GS_SELOPT TO GS_FRANGE-SELOPT_T.
CLEAR GS_SELOPT.
APPEND GS_FRANGE TO GS_TRANGE-FRANGE_T.
CLEAR GS_FRANGE.
APPEND GS_TRANGE TO GT_TRANGE.
CLEAR GS_TRANGE.
- Step 03 : CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_EX' 함수를 호출해 동적 조건 만들기
CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_EX'
EXPORTING
FIELD_RANGES = GT_TRANGE
IMPORTING
EXPRESSIONS = GT_DYN_SELTAB.
위에서 만든 데이터를 파라미터로 던져주면, GT_DYN_SELTAB 파라미터로 동적 조건이 생성되어 나온다.
GT_DYN_SELTAB도 DEEP-STRUCTURE에 DEEP-STRUCTURE 구조를 가진다..
- Step 04 : SUBMIT으로 FBL3N 프로그램을 호출해 동적 조건 확인하기
" T-CODE : FBL3N 호출
SUBMIT RFITEMGL
WITH FREE SELECTIONS GT_DYN_SELTAB
VIA SELECTION-SCREEN " 조회 화면 보이기
AND RETURN.
※ 동적 조건을 넣어줬기 때문에 체크한 부분에 "1 활성" ( 동적 조건 1개 활성 )이 표시된다.
※ 전표유형 2 건이 들어간 것을 볼 수 있다.
- Step 05 : 전체 소스코드
*&---------------------------------------------------------------------*
*& Report Z_SUBMIT_TEST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z_SUBMIT_TEST.
TYPES: RSDS_EXPR_TAB LIKE RSDSEXPR OCCURS 10.
TYPE-POOLS RSDS.
DATA:
GS_FRANGE TYPE RSDS_FRANGE, "필드명과 조건 RANGE
GS_TRANGE TYPE RSDS_RANGE, "테이블명과 조건 RANGE
GS_SELOPT TYPE RSDSSELOPT, "필드명, 테이블명의 RAGNE R
GT_TRANGE LIKE TABLE OF GS_TRANGE.
DATA:
GT_DYN_SELTAB TYPE TABLE OF RSDS_EXPR.
TYPES: BEGIN OF RSDS_EXPR,
TABLENAME TYPE RSDSTABS-PRIM_TAB, " 테이블 이름
EXPR_TAB TYPE RSDS_EXPR_TAB, " 조건 ( RANGE 타입 )
END OF RSDS_EXPR.
" 테이블 명
GS_TRANGE-TABLENAME = 'BSIS'.
" 필드명
GS_FRANGE-FIELDNAME = 'BLART'.
" 필드의 RANGE 값
GS_SELOPT-SIGN = 'I'.
GS_SELOPT-OPTION = 'EQ'.
GS_SELOPT-LOW = 'FG'.
APPEND GS_SELOPT TO GS_FRANGE-SELOPT_T.
CLEAR GS_SELOPT.
GS_SELOPT-SIGN = 'I'.
GS_SELOPT-OPTION = 'EQ'.
GS_SELOPT-LOW = 'FF'.
APPEND GS_SELOPT TO GS_FRANGE-SELOPT_T.
CLEAR GS_SELOPT.
APPEND GS_FRANGE TO GS_TRANGE-FRANGE_T.
CLEAR GS_FRANGE.
APPEND GS_TRANGE TO GT_TRANGE.
CLEAR GS_TRANGE.
CALL FUNCTION 'FREE_SELECTIONS_RANGE_2_EX'
EXPORTING
FIELD_RANGES = GT_TRANGE
IMPORTING
EXPRESSIONS = GT_DYN_SELTAB.
" T-CODE : FBL3N 호출
SUBMIT RFITEMGL
WITH FREE SELECTIONS GT_DYN_SELTAB
VIA SELECTION-SCREEN " 조회 화면 보이기
AND RETURN.
※ 뭔가 장황하게 쓴 거 같지만... 소스 코드를 참고해서 직접 디버깅해 보면 이해가 될 것 같다..
'SAP > ABAP' 카테고리의 다른 글
ABAP SUBMIT & Dynamic Select-Option #1 (0) | 2023.09.18 |
---|---|
ALV ICON에 Tooltip 넣기 (0) | 2023.09.08 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!