ABAP MR21: BAPI_MATVAL_PRICE_CHANGE

发布于:2024-04-27 ⋅ 阅读:(26) ⋅ 点赞:(0)

文章目录


前言

MR21 发布物料价格,BAPI_MATVAL_PRICE_CHANGE

一、报错问题

BAPI报错:估价XXX  对于物料XXXXXXXXXXXXX没有被维护

解决办法:CKML_PRICE_SEND没有对应的评估范围数据,SM30:VCKML_PRICE_SEND维护即可(目前开发方面找到这种方式,具体配置不是很清楚),问题解决。

二、代码如下

 DATA: ls_price_date TYPE bapi_matval_pricedate.
  DATA: lt_prices  TYPE TABLE OF bapi_matval_prices,  " 物料价格
        ls_price   TYPE bapi_matval_prices,
        lt_returns TYPE TABLE OF bapiret2,
        ls_return  TYPE bapiret2,
        lv_bwtar   LIKE mbew-bwtar.
  DATA: lv_price_document TYPE bapi_pricechange_document.
  DATA: lv_mes  TYPE string,
        lv_mesg TYPE string.
  DATA:lt_log TYPE TABLE OF ztfi068.
  DATA:lt_log_c TYPE TABLE OF ztfi068_c.
  DATA:lv_bukrs   TYPE t001-bukrs VALUE '2450',
       lv_valutyp TYPE valutyp    VALUE '0',
       lv_curtp   TYPE curtp      VALUE '10'.

  SELECT SINGLE waers
    FROM t001
   WHERE bukrs = @lv_bukrs
    INTO @DATA(lv_waers).

  LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv>) WHERE sel = c_true.

*   校验价格不能为空
    IF <fs_alv>-netpr01 IS INITIAL.
      <fs_alv>-icon = c_red.
      <fs_alv>-message = '价格合计为空!'.
      CONTINUE.
    ENDIF.

*   价格改变日期
    ls_price_date-price_date      = sy-datum.
    ls_price_date-fisc_year       = sy-datum+0(4).
    ls_price_date-fisc_period     = sy-datum+4(2).
    ls_price_date-price_date_src  = sy-datum.
    ls_price_date-fisc_year_src   = sy-datum+0(4).
    ls_price_date-fisc_period_src = sy-datum+4(2).

*   价格
    ls_price-valuation_view = lv_valutyp. " 评估视图
    ls_price-curr_type      = lv_curtp.
    ls_price-price          = <fs_alv>-netpr03.
    ls_price-price_unit     = '1'.
    ls_price-currency       = lv_waers.
    APPEND ls_price TO lt_prices.
    CLEAR  ls_price.

    CALL FUNCTION 'BAPI_MATVAL_PRICE_CHANGE'
      EXPORTING
        material            = <fs_alv>-zzlbj
        valuationarea       = <fs_alv>-werks
        valuationtype       = lv_bwtar
        pricedate           = ls_price_date
      IMPORTING
        pricechangedocument = lv_price_document
      TABLES
        prices              = lt_prices
        return              = lt_returns.

    IF NOT line_exists( lt_returns[ type = 'E' ] ).
      CLEAR:lt_log,lt_log_c.
      APPEND INITIAL LINE TO lt_log ASSIGNING FIELD-SYMBOL(<fs_log>).
      <fs_log> = CORRESPONDING #( <fs_alv> ).
*     获取guid号
      TRY .
          <fs_log>-guid = cl_system_uuid=>create_uuid_x16_static( ).
        CATCH cx_uuid_error.
      ENDTRY.
      <fs_log>-crnam = sy-uname.
      <fs_log>-crdat = sy-datum.
      <fs_log>-crtim = sy-uzeit.
      IF lt_log IS NOT INITIAL.
        MODIFY ztfi068 FROM TABLE lt_log.
      ENDIF.
      APPEND INITIAL LINE TO lt_log_c ASSIGNING FIELD-SYMBOL(<fs_log_c>).
      <fs_log_c>-zzlbj = <fs_alv>-zzlbj.
      <fs_log_c>-werks = <fs_alv>-werks.
      <fs_log_c>-datum = sy-datum.
      <fs_log_c>-datum_c = sy-datum(6).
      IF lt_log_c IS NOT INITIAL.
        MODIFY ztfi068_c FROM TABLE lt_log_c.
      ENDIF.
*     成功
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      <fs_alv>-icon = c_green.
      <fs_alv>-message = '成功'.
    ELSE.
*     失败
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

      lv_mesg = '失败:'.

      LOOP AT lt_returns ASSIGNING FIELD-SYMBOL(<fs_return>) WHERE type = 'E' .
        CLEAR lv_mes.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            msgid               = <fs_return>-id
            msgnr               = <fs_return>-number
            msgv1               = <fs_return>-message_v1
            msgv2               = <fs_return>-message_v2
            msgv3               = <fs_return>-message_v3
            msgv4               = <fs_return>-message_v4
          IMPORTING
            message_text_output = lv_mes.
        lv_mesg = |{ lv_mesg };{ lv_mes }|.
      ENDLOOP.
      <fs_alv>-icon = c_red.
      <fs_alv>-message = lv_mesg.
    ENDIF.
    CLEAR:lt_prices,ls_price_date,lv_price_document,lt_returns,lv_mesg.
  ENDLOOP.

总结

MR21 发布物料价格,BAPI_MATVAL_PRICE_CHANGE


网站公告

今日签到

点亮在社区的每一天
去签到