본문 바로가기
ERP-SAP/ABAP

<ABAP> 스크린 필드 활성 - 불활성, 조건에 따라 스크린 필드 변경

by 행복한워니의 기록 2010. 12. 2.
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.

  FIELDgs_zfit0207-stcd2 MODULE check_numeric ON REQUEST,
         gs_zfit0207-kostl MODULE check_value   ON REQUEST.

  CHAIN.
    FIELDgs_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.  

************************************************************************************************

이제 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


***********************************************************************************************
이렇게 만들어 주면 스크린 필드를 활성화 불활성화 시킬 수 있다.
생각보다 간단하니 위 소스를 보고 참고하길 바란다.


728x90
반응형