ABPA-報表開發-自定義選擇屏幕搜索幫助

1.定義選擇屏幕

例子:

*-----------------------------------------------------------------------*
*                           選擇屏幕
*-----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
  s_werks FOR afru-werks  OBLIGATORY NO INTERVALS  NO-EXTENSION ,"工廠
  s_date  FOR afru-ersda ," 
  s_arbpl FOR crhd-arbpl ."
SELECTION-SCREEN END OF BLOCK b1.

2.自定義搜索幫助

如果需要輸入字段後,帶出對應值,如選擇屏幕輸入工廠S_WERKS,搜索出工廠下的所有滿足條件的S_ARBPL,則需先獲取選擇屏幕輸入值,再根據條件查出對應字段在該條件下的所有數據存入內表。調用函數

F4IF_INT_TABLE_VALUE_REQUEST

進行展示。

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_arbpl-low. "搜索幫助
“獲取選擇屏幕值輸入的值
  DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE
  CLEAR: dynpfields, dynpfields[].
  dynpfields-fieldname = 'S_WERKS-LOW'. "填入需要讀值的字段名
  APPEND dynpfields.

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname               = sy-repid  "當前程序
      dynumb               = sy-dynnr"ABAP 系統字段:當前 Dynpro 編號
      translate_to_upper   = 'X'
    TABLES
      dynpfields           = dynpfields "返回輸入的數值
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      invalid_parameter    = 7
      undefind_error       = 8
      double_conversion    = 9
      stepl_not_found      = 10
      OTHERS               = 11.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
  CLEAR :s_werks[].
 "將輸入的值更新到RANGE表
  LOOP AT dynpfields.
    s_werks-sign = 'I'.
    s_werks-option = 'EQ'.
    s_werks-low = dynpfields-fieldvalue.
    APPEND s_werks.
  ENDLOOP.

 "選擇屏幕-查詢搜索幫助字段的值
  SELECT  crhd~werks,"工廠
          crhd~arbpl,"工作中心
          crtx~ktext "工作中心描述
     FROM crhd
     INNER JOIN afru
     ON afru~arbid = crhd~objid
     INNER JOIN  crtx
     ON crtx~objid = afru~arbid
     INTO TABLE @DATA(lt_arbpl)
     WHERE crhd~verwe = '0001'
     AND   crhd~werks IN @s_werks.

  SORT lt_arbpl BY werks arbpl.
  DELETE ADJACENT DUPLICATES FROM lt_arbpl  COMPARING werks arbpl.
“顯示搜索幫助
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'ARBPL' “字段名
      dynpprog        = sy-repid  “當前程序名
      dynpnr          = sy-dynnr
      dynprofield     = 'S_ARBPL' “選擇屏幕字段名
      value_org       = 'S'
    TABLES
      value_tab       = lt_arbpl  “搜索幫助查出的數據
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章