SAP选择屏幕搜索帮助多值输出问题完美解决

本文介绍了一个使用 ABAP 编写的报表示例,该示例通过参数化查询从 SAP 数据库中获取物料及描述信息,并展示了如何使用 DYNPRO 动态程序进行字段选择和值更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*&---------------------------------------------------------------------*
*& Report Z_15
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_15.
DATA: lt_ddshretval TYPE STANDARD TABLE OF ddshretval,
      lv_title(20),
      lw_ddshretval LIKE LINE OF lt_ddshretval,
      lt_dynpfields TYPE TABLE OF dynpread,
      lw_dynpfields TYPE dynpread.
DATA : BEGIN OF lt_tab OCCURS 0,
         matnr TYPE mara-matnr,
         maktx TYPE makt-maktx,
         spras TYPE makt-spras,
       END OF lt_tab.
PARAMETERS p_matnr TYPE mara-matnr.
PARAMETERS p_maktx TYPE makt-maktx.
PARAMETERS p_spras TYPE makt-spras.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr.
  PERFORM frm_get_kostl.


FORM frm_get_kostl.
  SELECT mara~matnr makt~maktx makt~spras
     FROM mara
      JOIN makt ON makt~matnr = mara~matnr
     INTO TABLE lt_tab UP TO 20 ROWS.
  IF lt_tab[] IS NOT INITIAL.
    SORT lt_tab BY matnr.
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        retfield         = 'MATNR'
        dynpprog         = sy-cprog
        dynpnr           = sy-dynnr
        window_title     = lv_title
        value_org        = 'S'
        callback_program = sy-repid
        callback_form    = 'CB_FORM'
      TABLES
        value_tab        = lt_tab
        return_tab       = lt_ddshretval
      EXCEPTIONS
        parameter_error  = 1
        no_values_found  = 2
        OTHERS           = 3.
    CLEAR lt_dynpfields.
    LOOP AT lt_ddshretval INTO lw_ddshretval.
      lw_dynpfields-fieldname = lw_ddshretval-retfield.
      lw_dynpfields-fieldvalue = lw_ddshretval-fieldval.
      APPEND lw_dynpfields TO lt_dynpfields.
    ENDLOOP.
    lw_dynpfields-fieldname = 'P_MATNR'.
    MODIFY lt_dynpfields FROM lw_dynpfields INDEX 1 TRANSPORTING fieldname.

    CALL FUNCTION 'DYNP_VALUES_UPDATE'
      EXPORTING
        dyname     = sy-repid
        dynumb     = sy-dynnr
      TABLES
        dynpfields = lt_dynpfields
*       EXCEPTIONS
*       INVALID_ABAPWORKAREA       = 1
*       INVALID_DYNPROFIELD        = 2
*       INVALID_DYNPRONAME         = 3
*       INVALID_DYNPRONUMMER       = 4
*       INVALID_REQUEST            = 5
*       NO_FIELDDESCRIPTION        = 6
*       UNDEFIND_ERROR             = 7
*       OTHERS     = 8
      .
    IF sy-subrc <> 0.
*       Implement suitable error handling here
    ENDIF.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*&      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) = '3'.
  interface-valfield = 'P_SPRAS'.
  APPEND interface TO shlp-interface.
  interface-shlpfield+4(1) = '2'.
  interface-valfield = 'P_MAKTX'.
  APPEND interface TO shlp-interface.

ENDFORM.                    "bo_callback_form

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值