SAP ABAP VK11/VK12 创建销售物料价格(附源码)

该文章已生成可运行项目,

需求:

通过接口批量创建销售物料的价格(含阶梯价),对应事务码VK11/VK12

方法:(会在下面源码写出各个方法的优缺点,仅供参考)

  1. 通过函数RV_CONDITION_COPY创建(目前最优)
  2. 通过函数BAPI_PRICES_CONDITIONS
  3. 通过BDC录屏使用VK11事务码进行创建

分析:

通过测试可发现,VK11不仅可以创建,还可以修改,存在期间冲突还可以自动切割有效期间,如:

正常有效期:2025-05-01~2025-05-20

修改有效期:2025-05-10~2025-05-15

使用VK11修改后应该会生成三个有效期间,分别是:

  • 2025-05-01~2025-05-09
  • 2025-05-10~2025-05-15
  • 2025-05-16~2025-05-20

VK12不会自行切割区间,只能根据某个日期的基准值对单个区间进行修改,如

基准值为2025-05-10

对应的正常有效期:2025-05-01~2025-05-20

修改有效期:2025-05-10~2025-05-15

使用VK12修改后应该只在原基础上修改,结果是:

2025-05-10~2025-05-15

通过上述测试后,所以对我们此次需求来说VK12无法满足,所以只能使用VK11的录屏

方法一:使用BDC录屏创建(VK11)

DATA:   GT_BDCDATA LIKE BDCDATA    OCCURS 0 WITH HEADER LINE.
DATA:   GT_MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE. 

DATA:LS_OPTIONS TYPE CTU_PARAMS.
DATA: LV_KPEIN  TYPE CHAR20.
DATA: LV_KSTBM  TYPE CHAR20.
DATA: LV_KBETR  TYPE CHAR20.

      "利用BDC 录屏方法创建阶梯价
      "---- 屏幕1录屏
      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' LS_INPUT-KSCHL."条件类型
      IF LS_INPUT-KSTBM01 IS INITIAL AND LS_INPUT-KBETR01 IS INITIAL."销售价不含阶梯价
        "---- 屏幕2录屏
        PERFORM BDC_DYNPRO      USING 'SAPMV13A' '1005'.
        PERFORM BDC_FIELD       USING 'BDC_CURSOR' 'RV13A-DATBI(01)'.
        PERFORM BDC_FIELD       USING 'BDC_OKCODE' '=SICH'.
        PERFORM BDC_FIELD       USING 'KOMG-VKORG' LS_INPUT-VKORG."销售组织
        PERFORM BDC_FIELD       USING 'KOMG-VTWEG' LS_INPUT-VTWEG."分销
        PERFORM BDC_FIELD       USING 'KOMG-KUNNR' LS_INPUT-KUNNR."客户
        PERFORM BDC_FIELD       USING 'KOMG-MATNR(01)' LS_INPUT-MATNR."物料

        WRITE LS_INPUT-KBETR TO LV_KBETR.
        CONDENSE LV_KBETR NO-GAPS.
        PERFORM BDC_FIELD       USING 'KONP-KBETR(01)' LV_KBETR."金额
        CLEAR LV_KBETR.
        PERFORM BDC_FIELD       USING 'KONP-KONWA(01)' LS_INPUT-KONWA."币别
        "---类型转换
        WRITE LS_INPUT-KPEIN TO LV_KPEIN.
        CONDENSE LV_KPEIN NO-GAPS.
        PERFORM BDC_FIELD       USING 'KONP-KPEIN(01)' LV_KPEIN."价格单位
        CLEAR LV_KPEIN.
*      PERFORM BDC_FIELD       USING 'RV13A-KRECH(01)' 'C'."有效期自
        PERFORM BDC_FIELD       USING 'RV13A-DATAB(01)' LS_INPUT-DATAB."有效期自
        PERFORM BDC_FIELD       USING 'RV13A-DATBI(01)' LS_INPUT-DATBI."截止日期
      ELSE.                 "销售价含阶梯价
        "---- 屏幕2录屏
        PERFORM BDC_DYNPRO      USING 'SAPMV13A' '1005'.
*      PERFORM BDC_FIELD       USING 'BDC_CURSOR' 'RV13A-KRECH(01)'.
        PERFORM BDC_FIELD       USING 'BDC_CURSOR' 'RV13A-DATBI(01)'.
        PERFORM BDC_FIELD       USING 'BDC_OKCODE' '/00'.
        PERFORM BDC_FIELD       USING 'KOMG-VKORG' LS_INPUT-VKORG."销售组织
        PERFORM BDC_FIELD       USING 'KOMG-VTWEG' LS_INPUT-VTWEG."分销
        PERFORM BDC_FIELD       USING 'KOMG-KUNNR' LS_INPUT-KUNNR."客户
        PERFORM BDC_FIELD       USING 'KOMG-MATNR(01)' LS_INPUT-MATNR."物料

        WRITE LS_INPUT-KBETR TO LV_KBETR.
        CONDENSE LV_KBETR NO-GAPS.
        PERFORM BDC_FIELD       USING 'KONP-KBETR(01)' LV_KBETR."金额
        CLEAR LV_KBETR.
        PERFORM BDC_FIELD       USING 'KONP-KONWA(01)' LS_INPUT-KONWA."币别
        "---类型转换
        WRITE LS_INPUT-KPEIN TO LV_KPEIN.
        CONDENSE LV_KPEIN NO-GAPS.
        PERFORM BDC_FIELD       USING 'KONP-KPEIN(01)' LV_KPEIN."价格单位
        CLEAR LV_KPEIN.
        PERFORM BDC_FIELD       USING 'RV13A-DATAB(01)' LS_INPUT-DATAB."有效期自
        PERFORM BDC_FIELD       USING 'RV13A-DATBI(01)' LS_INPUT-DATBI."截止日期

        "---- 屏幕3录屏
        PERFORM BDC_DYNPRO      USING 'SAPMV13A' '1005'.
        PERFORM BDC_FIELD       USING 'BDC_CURSOR' 'KOMG-MATNR(01)'.
        PERFORM BDC_FIELD       USING 'BDC_OKCODE' '=PSTF'.
*      PERFORM BDC_FIELD       USING 'KOMG-KUNNR' LS_INPUT-KUNNR."客户
*      PERFORM BDC_FIELD       USING 'KOMG-MATNR(01)' LS_INPUT-MATNR."物料
*    PERFORM BDC_FIELD       USING 'KONP-KBETR(01)' LS_INPUT-KBETR."金额

        "---- 屏幕4录屏
        PERFORM BDC_DYNPRO      USING 'SAPMV13A' '0303'.

        PERFORM FILD_VALUE USING LV_FIELD LS_INPUT.
        PERFORM BDC_FIELD       USING 'BDC_CURSOR' LV_FIELD.
        PERFORM BDC_FIELD       USING 'BDC_OKCODE' '/00'.
        PERFORM BDC_FIELD       USING 'RV13A-DATAB' LS_IN
本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值