今天想谈谈本身在建立销售价格遇到的问题,以前一段时间客户要求可以批量执行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.