ERP-SAP/ABAP

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

행복한워니의 기록 2010. 12. 2. 13:08
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
반응형