ABAP AT SELECTION-SCREEN ON VALUE-REQUEST / PROGRESS ON VALUE-REQUEST

本文介绍ABAP中动态输入处理及屏幕帮助的实现方法,包括多值填入功能、单值填入功能及屏幕搜索帮助的使用。通过具体代码示例展示了如何调用系统函数进行值请求及值读取,并利用屏幕帮助功能增强用户界面的友好性和易用性。

1.)  F4IF_INT_TABLE_VALUE_REQUEST  多值填入

 

 

REPORT Z_BARRY_TEST.
 
TYPES: shlp_descr_t TYPE shlp_descr .
DATA: BEGIN OF itab OCCURS 0 ,
        matnr LIKE mara-matnr ,
        maktx LIKE makt-maktx ,
      END OF itab.
DATA: return_tab TYPE ddshretval OCCURS 0 .
PARAMETERS: p_matnr LIKE itab-matnr ,
            p_maktx LIKE itab-maktx .

INITIALIZATION.
  SELECT matnr maktx INTO TABLE itab FROM makt UP TO 20 ROWS
    WHERE spras = '1'.
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr .
  PERFORM f4.
 
*&---------------------------------------------------------------------*
*&      Form  f4
*&---------------------------------------------------------------------*
FORM f4.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield         = 'MATNR'
      dynpprog         = sy-repid
      dynpnr           = sy-dynnr
      dynprofield      = 'P_MATNR'
      value_org        = 'S'
      callback_program = sy-repid
      callback_form    = 'CB_FORM'
    TABLES
      value_tab        = itab
      return_tab       = return_tab
    EXCEPTIONS
      parameter_error  = 1
      no_values_found  = 2
      OTHERS           = 3.
ENDFORM.                    "f4
 
*&---------------------------------------------------------------------*
*&      Form  cb_form
*&---------------------------------------------------------------------*
FORM cb_form TABLES record_tab STRUCTURE seahlpres
              CHANGING shlp TYPE shlp_descr_t
                       callcontrol LIKE ddshf4ctrl.
  DATA: interface LIKE LINE OF shlp-interface.
  READ TABLE shlp-interface INTO interface INDEX 1.
  interface-shlpfield+4(1) = '2'.
  interface-valfield = 'P_MAKTX'.
  APPEND interface TO shlp-interface.
ENDFORM.                    "bo_callback_form

 

 

 

2.)  DYNP_VALUES_READ   单值填入

 

  DATA : lt_dynpread TYPE STANDARD TABLE OF dynpread .
  DATA : lw_dynpread TYPE dynpread .

   lw_dynpread-fieldname = 'SO_CNTR-LOW' .
  APPEND lw_dynpread TO lt_dynpread .

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
       dyname                = sy-repid
       dynumb                = sy-dynnr
    TABLES
       dynpfields            = lt_dynpread
    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 .
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF .

  CLEAR lw_dynpread .

  LOOP AT lt_dynpread INTO lw_dynpread .

    IF lw_dynpread-fieldname EQ 'SO_CNTR-LOW' .
      IF lw_dynpread-fieldvalue NE space OR
          lw_dynpread-fieldvalue IS NOT INITIAL .
          so_cntr-low = lw_dynpread-fieldvalue .
          so_cntr-sign = 'I' .
          so_cntr-option = 'EQ' .
        APPEND so_cntr.
      ENDIF .

    ENDIF .

  ENDLOOP .

 

 

3)  Screen Srearch Help

 

 

FORM HELP_CHECK.
*-- Set up fields to retrieve data

  ltab_fields-tabname    = 'ZFI_PMNTADV'.
  ltab_fields-fieldname  = 'CHECT'.
  ltab_fields-selectflag = 'X'.
  APPEND ltab_fields.

  ltab_fields-tabname    = 'ZFI_PMNTADV'.
  ltab_fields-fieldname  = 'PMNT_ADV'.
  ltab_fields-selectflag = 'X'.
  APPEND ltab_fields.

  SORT ltab_fields.
  DELETE ADJACENT DUPLICATES FROM ltab_fields.

*-- Fill values
  SELECT chect
  INTO TABLE ltab_values
         FROM zfi_pmntadv
            WHERE pmnt_adv NE space.
  SORT ltab_values.
  DELETE ADJACENT DUPLICATES FROM ltab_values.

CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
     EXPORTING
          fieldname                 = 'chect'
          tabname                   = 'zfi_pmntadv'
          title_in_values_list      = 'Select a value'
     IMPORTING
          select_value              = so_chect
     TABLES
          fields                    = ltab_fields
          valuetab                  = ltab_values
     EXCEPTIONS
          field_not_in_ddic         = 01
          more_then_one_selectfield = 02
          no_selectfield            = 03.
 

ENDFORM.                    "fiscal_year

*&---------------------------------------------------------------------* *& Report ZPP1000F0024 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT zpp1000f0024. *--------------------------------------------------------------------*定义 TABLES: zppt004,sscrfields,proj. TYPES:BEGIN OF ts_data, werks TYPE zppt004-werks, "工厂 psphi TYPE zppt004-psphi, "项目号 matnr TYPE zppt004-matnr, "物料编号 rsnum TYPE zppt004-rsnum, "预留/相关需求的编号 rspos TYPE zppt004-rspos, "预留 / 相关需求的项目编号 zclxh TYPE zppt004-zclxh, "处理序号 zcfhh TYPE zppt004-zcfhh, "拆分行号 post1 TYPE proj-post1, "项目描述 astnr TYPE proj-astnr, "事业部代码 astna TYPE proj-astna, "事业部名称 zxqrq TYPE zppt004-zxqrq, "需求日期 wlylje TYPE bwert, "未领预留金额 fpkcje TYPE bwert, "分配库存金额 fpjskcje TYPE bwert, "分配寄售库存金额 fpfjskcje TYPE bwert, "分配寄售库存金额 zzmng TYPE zppt004-zzmng, "待发数量 peris TYPE p DECIMALS 4, "价格 zgysl TYPE zppt004-zgysl, "供应分配数量 zgylx TYPE zppt004-zgylx, "供应类型 zgydh TYPE zppt004-zgydh, "供应单号 pspid TYPE proj-pspid, "项目定义-24 pspel TYPE zppt004-pspel, "wbs box TYPE c, END OF ts_data. DATA:gt_data TYPE STANDARD TABLE OF ts_data. DATA:gt_fcat TYPE lvc_t_fcat. DATA:gs_layo TYPE lvc_s_layo. TYPES:BEGIN OF ts_coll, werks TYPE zppt004-werks, "工厂 * psphi TYPE zppt004-psphi, "项目号 pspid TYPE proj-pspid, "项目定义-24 post1 TYPE proj-post1, "项目描述 astnr TYPE proj-astnr, "事业部代码 astna TYPE proj-astna, "事业部名称 zxqrq TYPE zppt004-zxqrq, "需求日期 wlylje TYPE bwert, "未领预留金额 fpkcje TYPE bwert, "分配库存金额 fpjskcje TYPE bwert, "分配寄售库存金额 fpfjskcje TYPE bwert, "分配非寄售库存金额 END OF ts_coll. DATA:gt_coll TYPE STANDARD TABLE OF ts_coll, gs_coll TYPE ts_coll, gt_coll_01 TYPE STANDARD TABLE OF ts_coll, gs_coll_01 TYPE ts_coll. DATA:lv_line_psphi TYPE sy-tabix VALUE '1'. *--------------------------------------------------------------------*seletion SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS: *s_psphi FOR zppt004-psphi,"项目号 s_pspid FOR proj-pspid, "项目号 s_astnr FOR proj-astnr, "事业部代码 s_werks FOR proj-werks OBLIGATORY. "工厂 SELECTION-SCREEN END OF BLOCK b1. *AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_psphi-low. * PERFORM frm_help_psphi USING s_psphi-low. * *AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_psphi-high. * PERFORM frm_help_psphi USING s_psphi-high. START-OF-SELECTION. *--------------------------------------------------------------------*获取数据处理 SELECT a~werks psphi zxqrq zzmng zgysl matnr zgylx pspel rsnum rspos b~post1 astnr astna INTO CORRESPONDING FIELDS OF TABLE gt_data FROM zppt004 AS a INNER JOIN proj AS b ON pspnr = a~psphi WHERE b~pspid IN s_pspid * psphi IN s_psphi AND zgydh = '' AND astnr IN s_astnr AND a~werks IN s_werks AND a~psphi NE '' %_HINTS ORACLE 'INDEX(ZPPT004"Z1")'. IF gt_data[] IS INITIAL. MESSAGE '没有符合条件的数据' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. ENDIF. SORT gt_data BY werks psphi. DATA(gt_data_02) = gt_data. DELETE ADJACENT DUPLICATES FROM gt_data_02 COMPARING psphi. SELECT bwkey AS werks,matnr,vprsv,stprs,verpr,peinh INTO TABLE @DATA(gt_peris) FROM mbew FOR ALL ENTRIES IN @gt_data WHERE bwkey = @gt_data-werks AND matnr = @gt_data-matnr. SORT gt_peris BY werks matnr. *--项目库存价格 SELECT bwkey AS werks,matnr,vprsv,stprs,verpr,peinh,pspnr AS pspel INTO TABLE @DATA(gt_peris_qbew) FROM qbew FOR ALL ENTRIES IN @gt_data WHERE bwkey = @gt_data-werks AND matnr = @gt_data-matnr. * AND pspnr = @gt_data-pspel. SORT gt_peris_qbew BY werks matnr pspel. LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs_data>). CALL FUNCTION 'CONVERSION_EXIT_KONPD_OUTPUT' EXPORTING input = <fs_data>-psphi IMPORTING output = <fs_data>-pspid " PSELT = . AT END OF psphi. cl_progress_indicator=>progress_indicate( i_text = |正在处理 { lv_line_psphi }/{ lines( gt_data_02 ) }:{ <fs_data>-pspid }| i_output_immediately = abap_true i_processed = lv_line_psphi i_total = lines( gt_data_02 ) ). lv_line_psphi = lv_line_psphi + 1. ENDAT. READ TABLE gt_peris INTO DATA(ls_peris) WITH KEY werks = <fs_data>-werks matnr = <fs_data>-matnr BINARY SEARCH. IF sy-subrc = 0. CASE ls_peris-vprsv. WHEN 'S'. <fs_data>-peris = ls_peris-stprs / ls_peris-peinh. WHEN 'V'. <fs_data>-peris = ls_peris-verpr / ls_peris-peinh. WHEN OTHERS. ENDCASE. ENDIF. "库存价格获取失败,获取项目库存价格 IF <fs_data>-peris IS INITIAL . READ TABLE gt_peris_qbew INTO DATA(ls_peris_qbew) WITH KEY werks = <fs_data>-werks matnr = <fs_data>-matnr pspel = <fs_data>-pspel BINARY SEARCH. IF sy-subrc = 0. CASE ls_peris_qbew-vprsv. WHEN 'S'. <fs_data>-peris = ls_peris_qbew-stprs / ls_peris_qbew-peinh. WHEN 'V'. <fs_data>-peris = ls_peris_qbew-verpr / ls_peris_qbew-peinh. WHEN OTHERS. ENDCASE. * Add by nabap02 Start{ * 如果有Q移动平均价的取Q移动平均价,没有Q移动平均价取物料移动平均价,如果物料移动平均价也没有的去标准价格 * 此处增加,项目库存价格 wbs 为项目首层时按物料取 ELSE. READ TABLE gt_peris_qbew INTO ls_peris_qbew WITH KEY werks = <fs_data>-werks matnr = <fs_data>-matnr. IF sy-subrc = 0. CASE ls_peris_qbew-vprsv. WHEN 'S'. <fs_data>-peris = ls_peris_qbew-stprs / ls_peris_qbew-peinh. WHEN 'V'. <fs_data>-peris = ls_peris_qbew-verpr / ls_peris_qbew-peinh. WHEN OTHERS. ENDCASE. ENDIF. ENDIF. * }end ENDIF. "未领预留金额 * <fs_data>-wlylje = <fs_data>-zzmng * <fs_data>-peris. "分配寄售库存金额 IF <fs_data>-zgylx = '非限制寄售' . <fs_data>-fpjskcje = <fs_data>-zgysl * <fs_data>-peris. ENDIF. * 分配库存金额 <fs_data>-fpkcje = <fs_data>-zgysl * <fs_data>-peris . "分配非寄售库存金额 <fs_data>-fpfjskcje = <fs_data>-fpkcje - <fs_data>-fpjskcje. gs_coll = CORRESPONDING #( <fs_data> ). COLLECT gs_coll INTO gt_coll. ENDLOOP. SORT gt_data BY rsnum rspos . DELETE ADJACENT DUPLICATES FROM gt_data COMPARING rsnum rspos . LOOP AT gt_data INTO DATA(gs_data). gs_coll_01 = CORRESPONDING #( gs_data ). gs_coll_01-wlylje = gs_data-zzmng * gs_data-peris. COLLECT gs_coll_01 INTO gt_coll_01. ENDLOOP. SORT gt_coll_01 BY werks pspid astnr zxqrq. LOOP AT gt_coll ASSIGNING FIELD-SYMBOL(<f_coll>). READ TABLE gt_coll_01 INTO gs_coll_01 WITH KEY werks = <f_coll>-werks pspid = <f_coll>-pspid astnr = <f_coll>-astnr zxqrq = <f_coll>-zxqrq BINARY SEARCH. IF sy-subrc = 0. <f_coll>-wlylje = gs_coll_01-wlylje. ENDIF. ENDLOOP. *--------------------------------------------------------------------*alv "fcat gt_fcat = VALUE #( ( fieldname = 'WERKS' ref_field = '' ref_table = '' coltext = '工厂' ) ( fieldname = 'PSPID' ref_field = '' ref_table = '' coltext = '项目号' ) ( fieldname = 'POST1' ref_field = '' ref_table = '' coltext = '项目描述' ) ( fieldname = 'ASTNR' ref_field = '' ref_table = '' coltext = '事业部代码' ) ( fieldname = 'ASTNA' ref_field = '' ref_table = '' coltext = '事业部名称' ) ( fieldname = 'ZXQRQ' ref_field = '' ref_table = '' coltext = '需求日期' ) ( fieldname = 'WLYLJE' ref_field = '' ref_table = '' coltext = '未领预留金额' ) ( fieldname = 'FPKCJE' ref_field = '' ref_table = '' coltext = '分配库存金额' ) ( fieldname = 'FPJSKCJE' ref_field = '' ref_table = '' coltext = '分配寄售库存金额') ( fieldname = 'FPFJSKCJE' ref_field = '' ref_table = '' coltext = '分配非寄售库存金额') ). "layo gs_layo = VALUE #( zebra = abap_true sel_mode = 'A' cwidth_opt = 'X' ). "alv CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid it_fieldcat_lvc = gt_fcat i_default = abap_true is_layout_lvc = gs_layo i_save = 'A' TABLES t_outtab = gt_coll[] EXCEPTIONS program_error = 1 OTHERS = 2. *&---------------------------------------------------------------------* *& Form FRM_HELP_PSPHI *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_help_psphi USING u_psphi . DATA:lit_ddshretval TYPE TABLE OF ddshretval, lwa_ddshretval TYPE ddshretval. DATA:BEGIN OF lit_psphi OCCURS 0, psphi TYPE zppt004-psphi, post1 TYPE proj-post1, END OF lit_psphi. SELECT psphi post1 FROM zppt004 INTO TABLE lit_psphi ORDER BY psphi. DELETE ADJACENT DUPLICATES FROM lit_psphi. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'PSPHI' dynpprog = sy-cprog dynpnr = sy-dynnr dynprofield = 'S_PSPHI' window_title = '项目号' value_org = 'S' TABLES value_tab = lit_psphi return_tab = lit_ddshretval EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. 帮我详细解读这段代码
最新发布
08-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值