天天看點

螢幕、選擇螢幕

傳回到上一螢幕

leave to screen 0.

報表事件塊

LOAD-OF-PROGRAM

INITIALIZATION

SELECTION-SCREEN OUTPUT (選擇螢幕PBO)

AT SELECTION SCREEN (ON XXX) (選擇螢幕PAI)

START-OF-SELECTION

END-OF-SELECTION

選擇螢幕元素屬性

required:0可選,1必輸且有錯誤檢查,2必輸但無檢查

invisible = 1,變*号

active = 0,不可見

傳回到選擇螢幕

LEAVE LIST-PROCESSING AND RETURN TO SCREEN 0.

調用選擇螢幕作為子螢幕 增加搜尋幫助

tables pa0001.

data:begin of itab OCCURS 0,

pernr like pa0001-pernr,

ename like pa0001-ename,

end of itab.

DATA SUB(4) VALUE '2001'.

data it_return type table of DDSHRETVAL WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF SCREEN 2001 as SUBSCREEN.

SELECT-OPTIONS pernr for pa0001-pernr no INTERVALS.

SELECTION-SCREEN END OF SCREEN 2001.

at SELECTION-SCREEN on VALUE-REQUEST FOR pernr-low.

SELECT pernr ename into table itab from pa0001.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

RETFIELD = 'PERNR'

DYNPPROG = sy-REPID

DYNPNR = sy-dynnr

DYNPROFIELD = 'PERNR-low'

VALUE_ORG = 'S'

MULTIPLE_CHOICE = 'X'

TABLES

VALUE_TAB = ITAB

* FIELD_TAB =

RETURN_TAB = it_return.

if sy-subrc = 0.                                              

loop at it_return.                                                                                          

* pernr-sign = 'i'.

* pernr-option = 'eq'.

pernr-low = it_return-fieldval.

append pernr.

ENDLOOP.

endif.

read table pernr index 1.

DIALOG調用選擇螢幕作為子螢幕

DATA gv_sub(4) value '0201' .                                                                                                                                                  

PROCESS BEFORE OUTPUT.

call subscreen sub1 including sy-repid gv_sub.   "其中SUB1是子螢幕區域名,SUB是子螢幕名

 MODULE STATUS_0100.

PROCESS AFTER INPUT.

 CALL SUBSCREEN SUB1.

 MODULE USER_COMMAND_0100.

其中選擇螢幕的處理直接寫在主程式中(可以寫在定義子螢幕語句後面),而不是寫在主螢幕的螢幕流中

at selection-screen output.

  if sy-dynnr = '0201'.

*修改

    loop at gt_qup where kbstat = 'Z1' or kbstat = 'Z3'.

      loop at screen.

        screen-input = 0.

        modify screen.

      endloop.

      exit.

    endloop.

  endif.

選擇螢幕元素屬性修改(MODIF ID)

SELECTION-SCREEN BEGIN OF BLOCK B1.

SELECT-OPTIONS:

ZNAMC FOR AFRU-ZNAMC MATCHCODE OBJECT ZH_BGRYMD MODIF ID G1,

ERSDA FOR AFRU-ERSDA MODIF ID G1.

PARAMETERS P1(128).

SELECTION-SCREEN SKIP.

SELECTION-SCREEN COMMENT 1(62) TEXT-001.

SELECTION-SCREEN PUSHBUTTON 63(10) TEXT-002 USER-COMMAND PB1.   "SELECTION-SCREEN PUSHBUTTON表示按鈕,63(10)位置和長度,TEXT-002按鈕顯示文本,USER-COMMAND PB1功能碼“PB1”

SELECTION-SCREEN END OF BLOCK B1.

  loop at screen.

    if screen-group1 = 'G1'.

      if p_create = 'X'.

        screen-active = 0.

      else.

        screen-active = 1.

      endif.

      modify screen.

    endif.

  endloop.

注:使用modify id 把screen屬性改為active時,螢幕這一行會自動沒了,如果使用screen-name,螢幕上會留下空行。

選擇螢幕字段顔色(藍色)

REPORT  ZLAN.

PARAMETERS P1 MODIF ID P.

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.

    IF SCREEN-GROUP1 = 'P'.

      SCREEN-INTENSIFIED = '1'. "增強的

      MODIFY SCREEN.

      ENDIF.

      ENDLOOP.

選擇螢幕文本

SELECTION-SCREEN ULINE /1(72).

SELECTION-SCREEN COMMENT /1(72) TEXT1.                 "其中 / 就有了SKIP的效果

SELECTION-SCREEN COMMENT /1(72) TEXT-002.

SELECTION-SCREEN COMMENT /1(72) TEXT-003.

選擇螢幕字段自定義文本描述和可見長度

selection-screen begin of line.

selection-screen comment (10) text-001 . "此時描述和字段之間是沒有橫線的

selection-screen comment (10) text-001 for field pernr.  "使用了FOR FIELD之後就有橫線了

select-options pernr for pa0001-pernr no intervals.

selection-screen end of line.

選擇螢幕字段動态描述文本

SELECTION-SCREEN COMMENT 1(12)  TEXT_001 FOR FIELD ZPZT.

INITIALIZATION.

text_001 = '查詢條件'.

選擇螢幕字段密碼顯示效果(DIALOG則在屬性中勾選“不可見的”)

AT SELECTION-SCREEN OUTPUT.

 LOOP AT SCREEN.

   IF screen-name = 'SPWD' .

     screen-invisible = '1'.

     MODIFY SCREEN.

   ENDIF.

 ENDLOOP.

選擇螢幕字段搜尋幫助

SELECT-OPTIONS ZNAMC FOR AFRU-ZNAMC MATCHCODE OBJECT ZH_BGRYMD.  

多頁簽螢幕

SELECTION-SCREEN BEGIN OF TABBED BLOCK BL1 FOR 5 LINES.                         "FOR N LINES :指明螢幕有幾行

SELECTION-SCREEN TAB (10) TEXT1 USER-COMMAND SCREEN1 DEFAULT SCREEN 2001.

SELECTION-SCREEN TAB (10) TEXT2 USER-COMMAND SCREEN2 DEFAULT SCREEN 2002.

SELECTION-SCREEN END OF BLOCK BL1.

SELECTION-SCREEN BEGIN OF SCREEN 2001 AS SUBSCREEN.

PARAMETERS P1.

SELECTION-SCREEN BEGIN OF SCREEN 2002 AS SUBSCREEN.

PARAMETER P2.

SELECTION-SCREEN END OF SCREEN 2002.

其中BL1是一個對象(結構),有各種屬性,例如BL1-DYNNR(目前螢幕号)

調用選擇螢幕做為彈出視窗

SELECTION-SCREEN BEGIN OF SCREEN 9001 AS WINDOW.

PARAMETERS:

  P_BUDAT LIKE ZMM005-BUDAT DEFAULT SY-DATUM,

  P_STGRD LIKE BKPF-STGRD. "沖銷原因

SELECTION-SCREEN END OF SCREEN 9001.

  call selection-screen 9001 starting at 30 10 ending at 120 20.

  check sy-subrc = 0.

starting at 列 行 ending at 列 行.

選擇螢幕功能按鈕(在執行按鈕右邊 FUNCTION KEY)

TABLES SSCRFIELDS.

SELECTION-SCREEN FUNCTION KEY 1.

PARAMETERS P1.

  SSCRFIELDS-FUNCTXT_01 = '開發說明'.

AT SELECTION-SCREEN.                     "選擇螢幕的AT SELECTION-SCREEN相當于DIALOG的PAI

  IF SY-UCOMM = 'FC01'.

    CALL TRANSACTION 'ZMM103_02'.

  ENDIF. 

隐藏function key

  data lt_exclude type table of rsexfcode with header line.

  if p_appro = ''.

    lt_exclude-fcode  = 'FC01'.

    append lt_exclude.

    call function 'RS_SET_SELSCREEN_STATUS'

      exporting

        p_status  = '%_00'

        p_program = 'RSSYSTDB'

      tables

        p_exclude = lt_exclude[].

SELECT-OPTION(RANGE表)

隻要輸入了HIGH字段,OPTION就會變成BETWEEN,BETWEEN時“*”不代表通配符,如輸入1*, 2*,SELECT效果等同于WHERE XX >= '1*' AND XX <='2*';即隻有在LOW輸入“*”且HIGH為空時“*”才表示通配符(此時OPTION為CP)

SIGN: I: 包含 E: 排除;注意隻有low單值的時候要輸入EQ,不能輸入BT

OPTION: NE不等于,EQ等于。可以EQ多個值,但不能NE多個值(是以如果要在I中NE多個值,可以寫成E中EQ多個值)

輸入起始日期的例子

  if sdate is not initial or edate is not initial.

    clear lv_char.

    if sdate is not initial.

      lv_char = 'IEQ'.

      lr_erdat = lv_char.

    if edate is not initial.

      lv_char = 'IBT'.

      lr_erdat-high = edate.

    lr_erdat-low = sdate.

    append lr_erdat.

動态RANGE類型

RSDSSELOPT

下拉框

選擇螢幕下拉框

使用函數

PARAMETERS P_ZFHZT(10) AS LISTBOX VISIBLE LENGTH 10.

*添加下拉框内表值

  DATA GT_VALUES TYPE VRM_VALUES WITH HEADER LINE.

  GT_VALUES-KEY = '1'.          "KEY值才是傳回到螢幕字段的值,TEXT為其顯示文本

  GT_VALUES-TEXT = '未完成'.

  APPEND GT_VALUES.

  GT_VALUES-KEY = '2'.

  GT_VALUES-TEXT = '已完成'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ZFHZT.

  CALL FUNCTION 'VRM_SET_VALUES'

    EXPORTING

      ID     = 'P_ZFHZT'            "螢幕字段名(不能亂填,否則有下拉效果但是沒值)

      VALUES = GT_VALUES[].     

直接在域中輸入VALUE RANGE,螢幕字段參考這個域

螢幕、選擇螢幕

下拉框最底下的空行可以通過設定字段必輸取消