SAP ABAP VK11/VK12 创建销售物料价格(附源码)
需求:
通过接口批量创建销售物料的价格(含阶梯价),对应事务码VK11/VK12
方法:(会在下面源码写出各个方法的优缺点,仅供参考)
- 通过函数 RV_CONDITION_COPY创建(目前最优)
- 通过函数 BAPI_PRICES_CONDITIONS
- 通过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