文章目录
前言
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