销售价格建立/更改BAPI

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