今天想談談本身在建立銷售價格遇到的問題,以前一段時間客戶要求可以批量執行VK11/VK12進行銷售價格的建立和修改。查閱了網上的資料和SAP的論壇,發現一個函數BAPI_PRICES_CONDITIONS彷佛能解決這個問題,這裏只要可以改變bapi函數的參數就能實現建立或者更改的操做,具體對應關係以下:api
從上面能夠看出009/005(建立)003(刪除)004(更改)。可是在實際運用中發現了問題,其一是009或者005不對日期進行檢查,相同的日期段能在AXXX價格表裏面存在二條,其二是日誌表CDHDR/CDPOS中不存在更改的記錄,不便於之後追尋問題。可是大數據期初建立價格條件時本人以爲這個函數仍是很好用的,速度比BDC快(本人不才,後面爲了需求的安全性考慮使用了該方法,各位ABAP大神有更好的方法請留言賜教)。附上刪除的代碼:安全
1 DATA: 2 gs_bapicondct TYPE bapicondct, 3 gs_bapicondhd TYPE bapicondhd, 4 gs_bapicondit TYPE bapicondit, 5 gs_bapiret2 TYPE bapiret2, 6 gt_bapicondct TYPE TABLE OF bapicondct, 7 gt_bapicondhd TYPE TABLE OF bapicondhd, 8 gt_bapicondit TYPE TABLE OF bapicondit, 9 gt_bapicondqs TYPE TABLE OF bapicondqs, 10 gt_bapicondvs TYPE TABLE OF bapicondvs, 11 gt_bapiknumhs TYPE TABLE OF bapiknumhs, 12 gt_mem_initial TYPE TABLE OF cnd_mem_initial, 13 gt_bapiret2 TYPE TABLE OF bapiret2. 14 CLEAR:gt_bapicondct,gt_bapicondhd,gt_bapicondit,gt_bapicondqs, 15 gt_bapicondvs,gt_bapiret2,gt_bapiknumhs,gt_mem_initial. 16 * 若是截止日期更改的話刪除原記錄再插入 17 IF gs_item-datbi <> gs_item-datbi_o. 18 gs_bapicondct-operation = '003'. 19 gs_bapicondct-cond_no = gs_item-knumh. 20 CONCATENATE gs_item-vkorg gs_item-vtweg gs_item-kunnr gs_item-matnr 21 INTO gs_bapicondct-varkey. 22 gs_bapicondct-applicatio = 'V'. 23 gs_bapicondct-cond_usage = 'A'. 24 gs_bapicondct-table_no = '305' . 25 gs_bapicondct-cond_type = 'ZA01'. 26 gs_bapicondct-valid_to = gs_item-datbi_o. 27 gs_bapicondct-valid_from = gs_item-datab_o. 28 APPEND gs_bapicondct TO gt_bapicondct. 29 30 " KONH 31 gs_bapicondhd-operation = '003'. 32 gs_bapicondhd-cond_no = gs_item-knumh. 33 gs_bapicondhd-varkey = gs_bapicondct-varkey. 34 gs_bapicondhd-applicatio = 'V'. 35 gs_bapicondhd-cond_usage = 'A'. 36 gs_bapicondhd-table_no = '305' . 37 gs_bapicondhd-cond_type = 'ZA01'. 38 gs_bapicondhd-valid_from = gs_bapicondct-valid_from. 39 gs_bapicondhd-valid_to = gs_bapicondct-valid_to. 40 APPEND gs_bapicondhd TO gt_bapicondhd. 41 42 " KONP tabel 43 gs_bapicondit-operation = '003'. 44 gs_bapicondit-cond_no = gs_item-knumh. 45 gs_bapicondit-cond_count = '01'. 46 gs_bapicondit-applicatio = 'V'. 47 gs_bapicondit-cond_type = 'ZA01'. 48 gs_bapicondit-scaletype = 'A'. 49 gs_bapicondit-calctypcon = 'C'. 50 gs_bapicondit-numconvert = '1'. 51 gs_bapicondit-denominato = '1'. 52 SELECT SINGLE meins FROM mara INTO gs_bapicondit-base_uom 53 WHERE matnr = gs_item-matnr. 54 gs_bapicondit-condcurren = gs_item-konwa. 55 gs_bapicondit-conditidx = '1'. 56 gs_bapicondit-cond_value = gs_item-kbetr. 57 gs_bapicondit-condcurr = gs_item-konwa. 58 gs_bapicondit-cond_p_unt = gs_item-kpein. 59 gs_bapicondit-cond_unit = gs_bapicondit-base_uom. 60 APPEND gs_bapicondit TO gt_bapicondit. 61 CALL FUNCTION 'BAPI_PRICES_CONDITIONS' 62 EXPORTING 63 pi_initialmode = '' 64 pi_physical_deletion = 'X' 65 TABLES 66 ti_bapicondct = gt_bapicondct[] 67 ti_bapicondhd = gt_bapicondhd[] 68 ti_bapicondit = gt_bapicondit[] 69 ti_bapicondqs = gt_bapicondqs[] 70 ti_bapicondvs = gt_bapicondvs[] 71 to_bapiret2 = gt_bapiret2[] 72 to_bapiknumhs = gt_bapiknumhs[] 73 to_mem_initial = gt_mem_initial[] 74 EXCEPTIONS 75 update_error = 1 76 OTHERS = 2.