需求:
通過接口批量創建銷售物料的價格(含階梯價),對應事務碼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