BAPI_PRICES_CONDITIONS 修改价格存在BUG 不会自动拆分时间间隔,而是插入新的一条,导致同个有效期内有多条记录存在,VK13debug,
网上查了一下资料,有说明要程序中处理拆分多条间隔传入BAPI参数中,感觉比较麻烦,代码量也比较大容易出现BUG。
实践发现,当存在价格记录时,前台TCODE:VK11 创建会自动根据已有时间间隔拆分多间隔.
SO,价格创建修改都可以通过录屏VK11实现,但要注意如果起止日期一致,前台会多出一个确认的屏幕,所有最好提前进行校验,一致不触发更改
测试源码如下
REPORT yvk11.
DATA:lt_message TYPE STANDARD TABLE OF bdcmsgcoll,
ls_message TYPE bdcmsgcoll,
ls_options TYPE ctu_params.
DATA:lt_bapireturn TYPE STANDARD TABLE OF bapiret2.
DATA:gt_bdcdata TYPE STANDARD TABLE OF bdcdata. "BDC
PARAMETERS:
p_vkorg type vkorg,
p_vtweg type vtweg,
p_matnr TYPE matnr,
p_datab TYPE datab,
p_datbi TYPE datbi,
p_konda TYPE konda,
p_kbrte TYPE kbetr.
PERFORM bdc_dynpro USING 'SAPMV13A' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RV13A-KSCHL'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'RV13A-KSCHL' 'ZPBJ'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1032'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RV13A-DATBI(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'KOMG-VKORG' p_vkorg.
PERFORM bdc_field USING 'KOMG-VTWEG' p_vtweg.
PERFORM bdc_field USING 'KOMG-KONDA' p_konda.
PERFORM bdc_field USING 'KOMG-MATNR(01)' p_matnr.
DATA lv_kbrte TYPE string.
lv_kbrte = p_kbrte.
CONDENSE lv_kbrte NO-GAPS.
PERFORM bdc_field USING 'KONP-KBETR(01)' lv_kbrte.
PERFORM bdc_field USING 'RV13A-DATAB(01)' p_datab.
PERFORM bdc_field USING 'RV13A-DATBI(01))' p_datbi.
PERFORM bdc_dynpro USING 'SAPMV13A' '1032'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KOMG-MATNR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.
ls_options-nobinpt = 'X'.
ls_options-dismode = 'N'.
ls_options-updmode = 'S'.
CALL TRANSACTION 'VK11' USING gt_bdcdata
OPTIONS FROM ls_options
MESSAGES INTO lt_message.
CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
TABLES
imt_bdcmsgcoll = lt_message
ext_return = lt_bapireturn.
READ TABLE lt_bapireturn TRANSPORTING NO FIELDS WITH KEY type = 'E'.
IF sy-subrc = 0.
DATA msgtx TYPE string.
LOOP AT lt_bapireturn INTO DATA(ls_bapireturn) WHERE type = 'E'.
msgtx = msgtx && ls_bapireturn-message && '->'.
ENDLOOP.
ROLLBACK WORK.
WRITE: msgtx.
ELSE.
LOOP AT lt_bapireturn INTO ls_bapireturn .
msgtx = msgtx && ls_bapireturn-message && '->'.
ENDLOOP.
COMMIT WORK.
WRITE: msgtx.
ENDIF.
PS-2022-04-22新增
VK11如果新增价格起止日期比当前起止日期范围大,达到的效果是会删除小的区间,保留最大区间。
前台会多出一个二次确认屏幕