728x90
반응형
현재 아래와 같은 스크린을 만든 상태.
화면에 보면 임대보중금과 임차보증금 필드가 보일 것이다.
임차 보증금은 빌려준걸 다시 빌려주고 받은 보증금이라는 소리이고
임대보증금 - 임차보증금 을 해줘야 과세표준-임대보증금이 나온다.
원래 그냥 임대보증금만 있으면 되지만 업장에서 임대한걸 다시 재 임대 (전대) 할 수 있기 때문에 만든 필드이다.
설명은 끝.
문제는 임대/ 전대필드의 드랍다운 리스트박스 선택에 따라서 임차보증금 필드 (GS_ZFIT0207-REDEP)가
활성 - 불활성 되게 만들 예정이다.
뭐 기본적으로 SCREEN INTPUT 을 조정해주는건 조금이라도 남의 소스를 본 사람은 알것이니...
스크린 200번 소스를 보자.
******************************************************************************************
PROCESS BEFORE OUTPUT.
MODULE status.
MODULE init_data.
MODULE modify_screen_layout. <-원래 이부분에 스크린을 조작해주는게 있었다.
* 1. 위 소스부터
PROCESS AFTER INPUT.
MODULE exit_cancel AT EXIT-COMMAND.
FIELD: gs_zfit0207-stcd2 MODULE check_numeric ON REQUEST,
gs_zfit0207-kostl MODULE check_value ON REQUEST.
CHAIN.
FIELD: gs_zfit0207-name,
gs_zfit0207-stcd2,
GS_ZFIT0207-KUNNR,
gs_zfit0207-mpbno,
gs_zfit0207-block,
gs_zfit0207-ugrnd,
gs_zfit0207-floor,
gs_zfit0207-zunit,
gs_zfit0207-zspace,
gs_zfit0207-indat,
gs_zfit0207-lease,
gs_zfit0207-depst,
GS_ZFIT0207-REDEP,
gs_zfit0207-mrent,
gs_zfit0207-zrate,
gs_zfit0207-bzins,
gs_screen-budat,
gs_zfit0207-outdat.
MODULE MODIFY_SCREEN_LAYOUT2 ON CHAIN-REQUEST. <- 2. 여기는 만들어주었다.
MODULE calc_rental_value ON CHAIN-REQUEST.
MODULE change_status_flag ON CHAIN-REQUEST.
ENDCHAIN.
FIELD gs_zfit0207-belnr MODULE call_docu_overview AT CURSOR-SELECTION.
MODULE user_command.
*
PROCESS ON VALUE-REQUEST.
FIELD gs_zfit0207-vtprd MODULE f4_vtprd.
FIELD GS_ZFIT0207-KUNNR MODULE F4_KUNNR.
FIELD GS_ZFIT0207-INDAT MODULE F4_CAL.
FIELD GS_ZFIT0207-OUTDAT MODULE F4_CAL.
MODULE status.
MODULE init_data.
MODULE modify_screen_layout. <-원래 이부분에 스크린을 조작해주는게 있었다.
* 1. 위 소스부터
PROCESS AFTER INPUT.
MODULE exit_cancel AT EXIT-COMMAND.
FIELD: gs_zfit0207-stcd2 MODULE check_numeric ON REQUEST,
gs_zfit0207-kostl MODULE check_value ON REQUEST.
CHAIN.
FIELD: gs_zfit0207-name,
gs_zfit0207-stcd2,
GS_ZFIT0207-KUNNR,
gs_zfit0207-mpbno,
gs_zfit0207-block,
gs_zfit0207-ugrnd,
gs_zfit0207-floor,
gs_zfit0207-zunit,
gs_zfit0207-zspace,
gs_zfit0207-indat,
gs_zfit0207-lease,
gs_zfit0207-depst,
GS_ZFIT0207-REDEP,
gs_zfit0207-mrent,
gs_zfit0207-zrate,
gs_zfit0207-bzins,
gs_screen-budat,
gs_zfit0207-outdat.
MODULE MODIFY_SCREEN_LAYOUT2 ON CHAIN-REQUEST. <- 2. 여기는 만들어주었다.
MODULE calc_rental_value ON CHAIN-REQUEST.
MODULE change_status_flag ON CHAIN-REQUEST.
ENDCHAIN.
FIELD gs_zfit0207-belnr MODULE call_docu_overview AT CURSOR-SELECTION.
MODULE user_command.
*
PROCESS ON VALUE-REQUEST.
FIELD gs_zfit0207-vtprd MODULE f4_vtprd.
FIELD GS_ZFIT0207-KUNNR MODULE F4_KUNNR.
FIELD GS_ZFIT0207-INDAT MODULE F4_CAL.
FIELD GS_ZFIT0207-OUTDAT MODULE F4_CAL.
*************************************************************************************************
우선 1번부터 보자.
*&---------------------------------------------------------------------*
*& Module MODIFY_SCREEN_LAYOUT OUTPUT
*&---------------------------------------------------------------------*
* Screen Layout을 지정
*----------------------------------------------------------------------*
MODULE modify_screen_layout OUTPUT. "ZFIR0207O01-> 당연 pbo에 넣기..
LOOP AT SCREEN.
CHECK screen-group1 EQ 'G01'.
CASE g_flag_stat.
WHEN '%INST' OR '%EDIT'. "등록/변경
screen-input = 1.
WHEN OTHERS.
screen-input = 0.
ENDCASE. <-- 여기까지는 원래 있던 소스
"임대/전대에 따라 임차보증금 입력필드
"수정 내가 만든 소스
IF SCREEN-NAME = 'GS_ZFIT0207-REDEP'. "임차보증금 필드일 때
case gs_zfit0207-lease. "드랍다운 리스트박스 필드가
when 'L'. "임대일 때
screen-input = 0. "스크린 비 활성화
* screen-required = 0.
WHEN 'S'. "전대 일 때 (Sub Lease)
screen-input = 1. "스크린 활성화
* screen-required = 1. "이 명령어는 Obiligatory설정, 1이면 필수
ENDCASE.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE.
*& Module MODIFY_SCREEN_LAYOUT OUTPUT
*&---------------------------------------------------------------------*
* Screen Layout을 지정
*----------------------------------------------------------------------*
MODULE modify_screen_layout OUTPUT. "ZFIR0207O01-> 당연 pbo에 넣기..
LOOP AT SCREEN.
CHECK screen-group1 EQ 'G01'.
CASE g_flag_stat.
WHEN '%INST' OR '%EDIT'. "등록/변경
screen-input = 1.
WHEN OTHERS.
screen-input = 0.
ENDCASE. <-- 여기까지는 원래 있던 소스
"임대/전대에 따라 임차보증금 입력필드
"수정 내가 만든 소스
IF SCREEN-NAME = 'GS_ZFIT0207-REDEP'. "임차보증금 필드일 때
case gs_zfit0207-lease. "드랍다운 리스트박스 필드가
when 'L'. "임대일 때
screen-input = 0. "스크린 비 활성화
* screen-required = 0.
WHEN 'S'. "전대 일 때 (Sub Lease)
screen-input = 1. "스크린 활성화
* screen-required = 1. "이 명령어는 Obiligatory설정, 1이면 필수
ENDCASE.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE.
************************************************************************************************
이제 PAI 부분, 2번을 보자.,
*************************************************************************************************
MODULE MODIFY_SCREEN_LAYOUT2 ON CHAIN-REQUEST. -> 바로 이부분을 들어가면
아래 소스가 나온다.
*&---------------------------------------------------------------------*
*& Module MODIFY_SCREEN_LAYOUT2 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module MODIFY_SCREEN_LAYOUT2 input.
CASE GS_ZFIT0207-LEASE. "맨 위에 스크린 명령에서 체인을 걸어준 상태인데
WHEN 'L'. "리스가 L일 때 (임대)
LOOP AT SCREEN. "스크린을 돌면서
CHECK screen-group1 EQ 'G01'. "스크린 그룹이 G01 인것만
IF SCREEN-NAME = 'GS_ZFIT0207-REDEP'. "스크린 네임이 GS_ZFIT0207-REDEP면
screen-input = 0. "불활성화
ENDIF.
MODIFY SCREEN. "수정하고
ENDLOOP.
WHEN 'S'. "전대이면
LOOP AT SCREEN.
CHECK screen-group1 EQ 'G01'.
IF SCREEN-NAME = 'GS_ZFIT0207-REDEP'.
screen-input = 1. "활성화시켜라
* screen-required = 1.
ENDIF.
MODIFY SCREEN. "스크린 수정해라.
ENDLOOP.
ENDCASE.
endmodule. " MODIFY_SCREEN_LAYOUT2 INPUT
*& Module MODIFY_SCREEN_LAYOUT2 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module MODIFY_SCREEN_LAYOUT2 input.
CASE GS_ZFIT0207-LEASE. "맨 위에 스크린 명령에서 체인을 걸어준 상태인데
WHEN 'L'. "리스가 L일 때 (임대)
LOOP AT SCREEN. "스크린을 돌면서
CHECK screen-group1 EQ 'G01'. "스크린 그룹이 G01 인것만
IF SCREEN-NAME = 'GS_ZFIT0207-REDEP'. "스크린 네임이 GS_ZFIT0207-REDEP면
screen-input = 0. "불활성화
ENDIF.
MODIFY SCREEN. "수정하고
ENDLOOP.
WHEN 'S'. "전대이면
LOOP AT SCREEN.
CHECK screen-group1 EQ 'G01'.
IF SCREEN-NAME = 'GS_ZFIT0207-REDEP'.
screen-input = 1. "활성화시켜라
* screen-required = 1.
ENDIF.
MODIFY SCREEN. "스크린 수정해라.
ENDLOOP.
ENDCASE.
endmodule. " MODIFY_SCREEN_LAYOUT2 INPUT
***********************************************************************************************
이렇게 만들어 주면 스크린 필드를 활성화 불활성화 시킬 수 있다.
생각보다 간단하니 위 소스를 보고 참고하길 바란다.
728x90
반응형
'ERP-SAP > ABAP' 카테고리의 다른 글
<ABAP> ALV - CLASS 로 만들기. ALV GRID CONTROL (0) | 2010.12.03 |
---|---|
<ABAP> Screen Dropdown Listbox 만들기!!! 스크린 드랍다운 리스트박스 (0) | 2010.12.03 |
<ABAP> EXCEL UPLOAD 만들기 (3) | 2010.12.02 |
<ABAP> Selection Screen 만들 시 조건에 따라 출력 필드 다르게 하기 (0) | 2010.12.02 |
<ABAP> 데이터 마이그레이션(Migration)이 잘못 되었을 때 사용하는 Mass! (0) | 2010.10.26 |