본문 바로가기
ERP-SAP/ABAP

<ABAP> Screen Dropdown Listbox 만들기!!! 스크린 드랍다운 리스트박스

by 행복한워니의 기록 2010. 12. 3.
728x90
반응형
드랍다운 리스트 박스를 어떻게 만들까?

이건 300번 스크린에서 스크린위저드로 만들어준 화면이다.
화면 구성내역중 저 드랍다운쪽을 보면...



이런식의 셋팅이 되어 있다. 임대/전대 필드를 보도록...

속성을 보면 저 필드의 이름은 gs_zfit0207-lease 이고 드롭다운이라는 필드에 드롭다운이라고 되어 있다.

잠깐? 그럼 임대/전대에 TEXT들은 어떻게 뿌려진걸까..?

지금부터 찾아보자..어디서 가져왔는지를.... 필드명을 잘 보자 "gs_zfit0207" 이다. 

우선 선언부를 확인해 보면...

*..... Screen layout
DATABEGIN OF gs_screen OCCURS 0,
        bukrs LIKE zfit0207-bukrs,     "회사코드
        gjahr LIKE zfit0207-gjahr,     "회계연도
        vtprd LIKE zfit0207-vtprd,     "부가세신고분기
        bupla LIKE zfit0207-bupla,     "사업장
        seqno LIKE zfit0207-seqno,     "일련번호
        mpbno LIKE zfit0207-mpbno,     "종사업자 일련번호
*
        budat LIKE bkpf-budat,         "전기일자
      END OF gs_screen,
      gs_zfit0207 LIKE zfit0207.   <- 이 부분이 만들어져있다. 이는 즉 table에 lease가 
                                      있다는 소리인데.....가보자 테이블로..
DATABEGIN OF gt_zfit0207 OCCURS 0.
        INCLUDE STRUCTURE zfit0207.
DATA:    mark,
      END OF gt_zfit0207.


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


테이블을 보니 Lease 필드가 있다. 

도메인까지 확인해보자.

도메인의 벨류레인지에 2가지 값을 넣어놨다.
그렇기에 여기서 값을 가지고 얘가 뿌려주고 있는 것이다.


간단하면서도 신기하지 않는가? .....
그럼 두번째! 어떻게 기본적으로 임대표시(S)가 나오는가? 
이건 스크린에서 초기값을 설정해주면 되는데

다시 200번 스크린을 보자.

**************************************************
PROCESS BEFORE OUTPUT.
  MODULE status.
  MODULE init_data.  <-요녀석을 확인해보자 
  MODULE modify_screen_layout.
*
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.
    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 init_data.을 살펴보면!!!

****************************************
MODULE init_data OUTPUT.

  CASE g_flag_init.  <- 이건 선언부에 "g_flag_init    VALUE 'X',   "First flag" 미리 해놨다.
    WHEN 'X'" 초기화 화면
      CLEARg_flag_initg_flag_chg.
      CLEARgs_zfit0207.

      MOVE-CORRESPONDING gs_screen TO gs_zfit0207. <- gs_screen의 값들을 gs_zfit0207로 옮긴다. 
                                                      값은 소스상에서 미리 들어와있는데 
                                                      무슨값인지 모른다면 위에 선언부 다시 확인해보자.
*-- 지상/지하
      gs_zfit0207-UGRND 'N'.  " ('N':지상, 'Y':지하)

*-- 임대/전대
      gs_zfit0207-lease 'L'.  " ('L':임대, 'S':전대)

*-- Default 정기예금이자율 4.30 %
      gs_zfit0207-zrate g_zrate.

    WHEN 'C'.  " 참조생성 화면
      CLEARg_flag_initg_flag_chg.
      MOVE-CORRESPONDING gs_screen TO gs_zfit0207.
  ENDCASE.

  PERFORM get_cost_center_descr USING    gs_zfit0207-kostl
                                CHANGING g_ktext.

ENDMODULE.                 " INIT_DATA  OUTPUT
****************************************************************
이 프로그램에서 기본적으로 참조생성과 생짜 새로 생성이 있으므로
초기가 x 면 새로 생성, C면 참조생성이다. 
참조생성은 아래 보시다시피 cost Center description  폼에서 데이터를 가져온다.
살짝 들여다보면...(물론 이 주제와는 어긋나지만..)

*&---------------------------------------------------------------------*
*&      Form  GET_COST_CENTER_DESCR
*&---------------------------------------------------------------------*
FORM get_cost_center_descr  USING    p_kostl
                            CHANGING p_ktext.

  CLEAR:
    p_ktext.

  SELECT SINGLE ktext
    INTO p_ktext
    FROM cskt
   WHERE spras EQ zcont_spras_ko
     AND kokrs EQ zcont_kokrs          "관리회계영역
     AND kostl EQ p_kostl              "코스트센터
     AND datbi GE sy-datum.            "효력만료일

ENDFORM.                    " GET_COST_CENTER_DESCR


이렇게 값을 가지고 관리회계영역의 텍스트를 가져온다. 

드랍다운 한번 만들려다가 참 길게도 설명했다.
이만!!!! 


728x90
반응형