销售价格创建/更改BAPI

今天想谈谈自己在创建销售价格遇到的问题,之前一段时间客户要求能够批量执行VK11/VK12进行销售价格的创建和修改。查阅了网上的资料和SAP的论坛,发现一个函数BAPI_PRICES_CONDITIONS似乎能解决这个问题,这里只要能够改变bapi函数的参数就能实现创建或者更改的操作,具体对应关系如下:

从上面可以看出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.

猜你喜欢

转载自www.cnblogs.com/tangcy1110/p/9035348.html