VK11\VK12\VK13 价格间隔拆分问题

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如果新增价格起止日期比当前起止日期范围大,达到的效果是会删除小的区间,保留最大区间。
前台会多出一个二次确认屏幕

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值