*-----프로그램 호출을 위한 데이터 선언.
DATA : LT_TMP TYPE TABLE OF 'ALV 스트럭쳐',
LT_RSPAR_A TYPE TABLE OF RSPARAMS. <----호출될 프로그램에서 조회하고 싶은 정보를 여기에 담아 넘김
CONSTANTS : LC_VBELN TYPE RSSCR_NAME VALUE 'S_VBELN', <----호출될 프로그램에서 선언된 셀렉션 스크린 변수값 넣기
LC_WERKS TYPE RSSCR_NAME VALUE 'S_WERKS',
LC_WADAT TYPE RSSCR_NAME VALUE 'S_WADAT',
LC_B TYPE RSSCR_NAME VALUE 'P_B', <----호출될 프로그램에서 선언된 라디오 버튼
LC_C TYPE RSSCR_NAME VALUE 'P_C'.
CLEAR : LT_TMP, LT_RSPAR_A.
*-----선택한 라인이 없을 경우 Error 표시.
PERFORM SELECTED_LINE_CHECK TABLES LT_TMP.
CHECK SY-SUBRC EQ 0.
*-----선택한 라인 제외 삭제.
DELETE LT_TMP WHERE CBBOX EQ ABAP_FALSE.
SORT LT_TMP BY VBELN WERKS WADAT.
*-----데이터 구성.
LOOP AT LT_TMP INTO DATA(LS_TMP).
"초기값 할당.
IF LT_RSPAR_A[] IS INITIAL.
APPEND VALUE #( SELNAME = LC_WERKS <----호출될 프로그램의 셀렉션 스크린 필드 'S_WERKS'
KIND = GC_S <----셀렉트 옵션이면 'S', 파라미터면 'P'
SIGN = GC_I <----포함이면 'I', 미포함이면 'E'
OPTION = GC_CP <----EQ,BT등 자기가 원하는 조건넣기. CP는 LIKE같은 역할
LOW = '*' <----ALV에서 넘겨줄 값
) TO LT_RSPAR_A.
ENDIF.
APPEND VALUE #( SELNAME = LC_B <----이 부분이 중요! 만약 호출될 프로그램에 디폴트 값으로 체크되어 있는
KIND = GC_P 라디오 버튼말고 다른 조건으로 조회하고 싶을 경우, 그 값을 지워줘야함
LOW = '' ) TO LT_RSPAR_A.
APPEND VALUE #( SELNAME = LC_C
KIND = GC_P
LOW = GC_X ) TO LT_RSPAR_A.
APPEND VALUE #( SELNAME = LC_WADAT
KIND = GC_S
SIGN = GC_I
OPTION = GC_EQ
LOW = LS_TMP-WADAT ) TO LT_RSPAR_A.
APPEND VALUE #( SELNAME = LC_VBELN
KIND = GC_S
SIGN = GC_I
OPTION = GC_EQ
LOW = LS_TMP-VBELN ) TO LT_RSPAR_A.
CLEAR LS_TMP.
ENDLOOP.
*-----LT_RSPAR_A 중복제거.
SORT LT_RSPAR_A BY SELNAME.
DELETE ADJACENT DUPLICATES FROM LT_RSPAR_A COMPARING SELNAME LOW.
*-----프로그램 호출.
SUBMIT 호출할 프로그램 WITH SELECTION-TABLE LT_RSPAR_A AND RETURN.
반응형
'ABAP' 카테고리의 다른 글
[ABAP] SELECT WHERE 조건 CASE문 사용 (0) | 2024.02.14 |
---|---|
[ABAP] CASE 구문 신버전 COND # (0) | 2024.02.14 |
[ABAP] SELECT할 때 변수 각각 넣어주기 (0) | 2024.01.18 |
[ABAP] 인터널 테이블 라인 수 (0) | 2024.01.18 |
[ABAP] Field-Symbol을 사용해 동적으로 구성하기 (0) | 2023.04.06 |