REPORT ZTEST
.
"method ZBAPI_PO_CREATE_FUNCTION.
" DATA:EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH HEADER LINE.
DATA :wa_poheader TYPE STANDARD TABLE OF bapimepoheader INITIAL SIZE 10 WITH HEADER LINE ,
wa_poheaderx LIKE bapimepoheaderx OCCURS 0 WITH HEADER LINE ,
wa_exppurchaseorder LIKE bapimepoheader -po_number OCCURS 0 WITH HEADER LINE ,
wa_expheader LIKE bapimepoheader OCCURS 0 WITH HEADER LINE ,
it_bapiret2 LIKE bapiret2 OCCURS 0 WITH HEADER LINE ,
it_poitem LIKE bapimepoitem OCCURS 0 WITH HEADER LINE ,
it_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE ,
it_poschedule LIKE bapimeposchedule OCCURS 0 WITH HEADER LINE ,
it_poschedulex LIKE bapimeposchedulx OCCURS 0 WITH HEADER LINE ,
it_pocond LIKE bapimepocond OCCURS 0 WITH HEADER LINE ,
it_pocondx LIKE bapimepocondx OCCURS 0 WITH HEADER LINE ,
gt_potextitem LIKE bapimepotext OCCURS 0 WITH HEADER LINE .
DATA :loc_msg ( 200 ) .
DATA : c_item LIKE ekpo -ebelp .
DATA : p_margin LIKE zgrhd -zchben , "差额
p_dmbtr LIKE zgrhd -zchben . "舍入后成本
DATA : BEGIN OF gt_itab OCCURS 0 .
DATA : check .
DATA :meins LIKE mara -meins .
DATA :dmbtr LIKE zgrjg -dmbtr . "净价
DATA :zid_num TYPE i ,
werks LIKE ekpo -werks ,
lgort LIKE ekpo -lgort ,
emlif TYPE ekpo -emlif ,
name1 TYPE lfa1 -name1 ,
matnr LIKE ekpo -matnr ,
maktx LIKE zgrhd -maktx ,
charg LIKE mseg -charg ,
menge LIKE ekpo -menge ,
* MEINS LIKE MARA-MEINS,
zchben1 LIKE zgrhd -zchben1 , "不含税成本
zchben LIKE zgrhd -zchben , "含税成本
zccf LIKE zgrhd -zchben , "仓储费
zybf LIKE zgrhd -zchben , "运保费
zsumchben LIKE zgrhd -zchben , "成本合计
msehl LIKE t006a -msehl , "单位描述
chk TYPE c ,
zrat ( 12 ) TYPE p DECIMALS 8 ,
netpr TYPE ekpo -netpr ,
txz01 LIKE ekpo -txz01 .
* INCLUDE STRUCTURE ZGRHD.
*DATA:DMBTR LIKE ZGRJG-DMBTR. "市值成本
*DATA:DMBTR1 LIKE ZGRJG-DMBTR. "定价成本
*DATA:DMBTR2 LIKE ZGRJG-DMBTR. "结算成本
DATA : END OF gt_itab .
gt_itab -zchben = '12' .
gt_itab -matnr = 'GAU0950' .
gt_itab -menge = '12.00' .
gt_itab -emlif = '1000002' .
gt_itab -netpr = '1.00' .
wa_poheader -doc_type = 'NB' .
wa_poheader -vendor = '0001000002' .
wa_poheader -purch_org = '2000' .
wa_poheader -pur_group = '10' .
wa_poheader -comp_code = '2000' .
wa_poheaderx -doc_type = 'X' .
wa_poheaderx -purch_org = 'X' .
wa_poheaderx -pur_group = 'X' .
wa_poheaderx -vendor = 'X' .
wa_poheaderx -comp_code = 'X' .
"LOOP AT gt_itab WHERE check = 'X'.
* SELECT SINGLE CLABS
* INTO P_MENGE
* FROM MCHB
* WHERE CHARG EQ GT_ITAB-CHARG
* AND CLABS <> 0.
*****库存数为0的问题,如果库存数为0,则判断物料基本单位是否为PC,
******如是,库存数取条码中的件数字段值,否则,库存数取条码中的件重值
* IF P_MENGE = 0.
* CLEAR L_MEINS.
* SELECT SINGLE MEINS INTO L_MEINS FROM MARA WHERE MATNR = GT_ITAB-MATNR.
* IF L_MEINS = 'PC'.
* P_ZJSCB = GT_ITAB-DMBTR / GT_ITAB-ZNUMB.
* IT_POITEM-QUANTITY = GT_ITAB-ZNUMB.
* ELSE.
* P_ZJSCB = GT_ITAB-DMBTR / GT_ITAB-MENGE.
* IT_POITEM-QUANTITY = GT_ITAB-MENGE.
* ENDIF.
* ELSE.
* P_ZJSCB = GT_ITAB-DMBTR / P_MENGE.
* IT_POITEM-QUANTITY = P_MENGE.
* ENDIF.
*********
c_item = c_item + 10 .
it_poitem -po_item = c_item .
it_poitem -material = gt_itab -matnr .
it_poitem -plant = '2100' .
it_poitem -quantity = gt_itab -menge .
it_poitem -stge_loc = '0001' . "p_lgort'.
IF gt_itab -emlif IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gt_itab -emlif
IMPORTING
output = it_poitem -supp_vendor .
ENDIF .
IF gt_itab -emlif IS NOT INITIAL .
it_poitem -sc_vendor = 'X' .
ENDIF .
it_poitem -batch = gt_itab -charg .
it_poitem -calctype = ' ' .
it_poitem -net_price = gt_itab -netpr .
it_poitem -no_rounding = 'X' .
* IT_POITEM-CALCTYPE = 'E'.
* IT_POITEM-PO_PRICE = '2'.
IF gt_itab -chk = 'X' .
it_poitem -ret_item = 'X' .
ENDIF .
IF it_poitem -short_text IS NOT INITIAL .
it_poitem -short_text = gt_itab -txz01 .
ENDIF .
* IF CHK1 = 'X'.
* IT_POITEM-FREE_ITEM = 'X'.
* ENDIF.
APPEND it_poitem .
CLEAR it_poitem .
* IT_POITEM-NET_PRICE = gt_itab-
it_poitemx -po_item = c_item .
it_poitemx -material = 'X' .
it_poitemx -plant = 'X' .
it_poitemx -quantity = 'X' .
it_poitemx -stge_loc = 'X' .
it_poitemx -batch = 'X' .
it_poitemx -net_price = 'X' .
it_poitemx -no_rounding = 'X' .
* IT_POITEMX-CALCTYPE = 'X'.
* IT_POITEMX-PO_PRICE = 'X'.
IF gt_itab -chk = 'X' .
it_poitemx -ret_item = 'X' .
ENDIF .
IF it_poitem -short_text IS NOT INITIAL .
it_poitemx -short_text = 'X' .
ENDIF .
* IF CHK1 = 'X'.
* IT_POITEMX-FREE_ITEM = 'X'.
* ENDIF.
IF gt_itab -emlif IS NOT INITIAL .
it_poitemx -supp_vendor = 'X' .
ENDIF .
IF gt_itab -emlif IS NOT INITIAL .
it_poitemx -sc_vendor = 'X' .
ENDIF .
APPEND it_poitemx .
CLEAR it_poitemx .
"文本行
gt_potextitem -po_item = c_item .
gt_potextitem -text_id = 'F12' .
gt_potextitem -text_line = gt_itab -txz01 .
APPEND gt_potextitem .
CLEAR gt_potextitem .
***传差额(单价四舍五入之后产生的差额,传进条件类型ZB00)
p_dmbtr = gt_itab -menge * gt_itab -netpr .
p_margin = gt_itab -zchben - p_dmbtr .
IF p_margin IS NOT INITIAL .
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZB00' .
it_pocond -cond_value = p_margin .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
* IT_POCOND-CONBASEVAL = P_MARGIN.
it_pocond -change_id = 'I' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
* IT_POCONDX-CONBASEVAL = 'X'.
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
ENDIF .
***传仓储费、运保费
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZRB2' .
it_pocond -cond_value = gt_itab -zccf .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
it_pocond -change_id = 'U' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZOB2' .
it_pocond -cond_value = gt_itab -zybf .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
it_pocond -change_id = 'U' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
"ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = wa_poheader
poheaderx = wa_poheaderx
no_price_from_po = 'X'
IMPORTING
exppurchaseorder = wa_exppurchaseorder
expheader = wa_expheader
TABLES
return = it_bapiret2[]
poitem = it_poitem[]
poitemx = it_poitemx[]
pocond = it_pocond[]
pocondx = it_pocondx[]
potextitem = gt_potextitem[] .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X' .
DELETE it_bapiret2 WHERE type = 'W' OR id = 'BAPI' OR id = 'MEPO' OR id = 'RPUDB' .
READ TABLE it_bapiret2 WITH KEY type = 'E' .
IF sy -subrc EQ 0 .
loc_msg = it_bapiret2 - message .
MESSAGE e056 (zgmond ) WITH loc_msg .
ELSE .
READ TABLE it_bapiret2 WITH KEY type = 'S' .
IF sy -subrc EQ 0 .
CONCATENATE it_bapiret2 -message_v1 it_bapiret2 -message_v2 '已创建!' INTO loc_msg SEPARATED BY space .
MESSAGE s056 (zgmond ) WITH loc_msg .
ENDIF .
ENDIF .
CLEAR : loc_msg ,c_item .
REFRESH : gt_itab ,gt_itab[] . REPORT ZTEST .
"method ZBAPI_PO_CREATE_FUNCTION.
" DATA:EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH HEADER LINE.
DATA :wa_poheader TYPE STANDARD TABLE OF bapimepoheader INITIAL SIZE 10 WITH HEADER LINE ,
wa_poheaderx LIKE bapimepoheaderx OCCURS 0 WITH HEADER LINE ,
wa_exppurchaseorder LIKE bapimepoheader -po_number OCCURS 0 WITH HEADER LINE ,
wa_expheader LIKE bapimepoheader OCCURS 0 WITH HEADER LINE ,
it_bapiret2 LIKE bapiret2 OCCURS 0 WITH HEADER LINE ,
it_poitem LIKE bapimepoitem OCCURS 0 WITH HEADER LINE ,
it_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE ,
it_poschedule LIKE bapimeposchedule OCCURS 0 WITH HEADER LINE ,
it_poschedulex LIKE bapimeposchedulx OCCURS 0 WITH HEADER LINE ,
it_pocond LIKE bapimepocond OCCURS 0 WITH HEADER LINE ,
it_pocondx LIKE bapimepocondx OCCURS 0 WITH HEADER LINE ,
gt_potextitem LIKE bapimepotext OCCURS 0 WITH HEADER LINE .
DATA :loc_msg ( 200 ) .
DATA : c_item LIKE ekpo -ebelp .
DATA : p_margin LIKE zgrhd -zchben , "差额
p_dmbtr LIKE zgrhd -zchben . "舍入后成本
DATA : BEGIN OF gt_itab OCCURS 0 .
DATA : check .
DATA :meins LIKE mara -meins .
DATA :dmbtr LIKE zgrjg -dmbtr . "净价
DATA :zid_num TYPE i ,
werks LIKE ekpo -werks ,
lgort LIKE ekpo -lgort ,
emlif TYPE ekpo -emlif ,
name1 TYPE lfa1 -name1 ,
matnr LIKE ekpo -matnr ,
maktx LIKE zgrhd -maktx ,
charg LIKE mseg -charg ,
menge LIKE ekpo -menge ,
* MEINS LIKE MARA-MEINS,
zchben1 LIKE zgrhd -zchben1 , "不含税成本
zchben LIKE zgrhd -zchben , "含税成本
zccf LIKE zgrhd -zchben , "仓储费
zybf LIKE zgrhd -zchben , "运保费
zsumchben LIKE zgrhd -zchben , "成本合计
msehl LIKE t006a -msehl , "单位描述
chk TYPE c ,
zrat ( 12 ) TYPE p DECIMALS 8 ,
netpr TYPE ekpo -netpr ,
txz01 LIKE ekpo -txz01 .
* INCLUDE STRUCTURE ZGRHD.
*DATA:DMBTR LIKE ZGRJG-DMBTR. "市值成本
*DATA:DMBTR1 LIKE ZGRJG-DMBTR. "定价成本
*DATA:DMBTR2 LIKE ZGRJG-DMBTR. "结算成本
DATA : END OF gt_itab .
gt_itab -zchben = '12' .
gt_itab -matnr = 'GAU0950' .
gt_itab -menge = '12.00' .
gt_itab -emlif = '1000002' .
gt_itab -netpr = '1.00' .
wa_poheader -doc_type = 'NB' .
wa_poheader -vendor = '0001000002' .
wa_poheader -purch_org = '2000' .
wa_poheader -pur_group = '10' .
wa_poheader -comp_code = '2000' .
wa_poheaderx -doc_type = 'X' .
wa_poheaderx -purch_org = 'X' .
wa_poheaderx -pur_group = 'X' .
wa_poheaderx -vendor = 'X' .
wa_poheaderx -comp_code = 'X' .
"LOOP AT gt_itab WHERE check = 'X'.
* SELECT SINGLE CLABS
* INTO P_MENGE
* FROM MCHB
* WHERE CHARG EQ GT_ITAB-CHARG
* AND CLABS <> 0.
*****库存数为0的问题,如果库存数为0,则判断物料基本单位是否为PC,
******如是,库存数取条码中的件数字段值,否则,库存数取条码中的件重值
* IF P_MENGE = 0.
* CLEAR L_MEINS.
* SELECT SINGLE MEINS INTO L_MEINS FROM MARA WHERE MATNR = GT_ITAB-MATNR.
* IF L_MEINS = 'PC'.
* P_ZJSCB = GT_ITAB-DMBTR / GT_ITAB-ZNUMB.
* IT_POITEM-QUANTITY = GT_ITAB-ZNUMB.
* ELSE.
* P_ZJSCB = GT_ITAB-DMBTR / GT_ITAB-MENGE.
* IT_POITEM-QUANTITY = GT_ITAB-MENGE.
* ENDIF.
* ELSE.
* P_ZJSCB = GT_ITAB-DMBTR / P_MENGE.
* IT_POITEM-QUANTITY = P_MENGE.
* ENDIF.
*********
c_item = c_item + 10 .
it_poitem -po_item = c_item .
it_poitem -material = gt_itab -matnr .
it_poitem -plant = '2100' .
it_poitem -quantity = gt_itab -menge .
it_poitem -stge_loc = '0001' . "p_lgort'.
IF gt_itab -emlif IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gt_itab -emlif
IMPORTING
output = it_poitem -supp_vendor .
ENDIF .
IF gt_itab -emlif IS NOT INITIAL .
it_poitem -sc_vendor = 'X' .
ENDIF .
it_poitem -batch = gt_itab -charg .
it_poitem -calctype = ' ' .
it_poitem -net_price = gt_itab -netpr .
it_poitem -no_rounding = 'X' .
* IT_POITEM-CALCTYPE = 'E'.
* IT_POITEM-PO_PRICE = '2'.
IF gt_itab -chk = 'X' .
it_poitem -ret_item = 'X' .
ENDIF .
IF it_poitem -short_text IS NOT INITIAL .
it_poitem -short_text = gt_itab -txz01 .
ENDIF .
* IF CHK1 = 'X'.
* IT_POITEM-FREE_ITEM = 'X'.
* ENDIF.
APPEND it_poitem .
CLEAR it_poitem .
* IT_POITEM-NET_PRICE = gt_itab-
it_poitemx -po_item = c_item .
it_poitemx -material = 'X' .
it_poitemx -plant = 'X' .
it_poitemx -quantity = 'X' .
it_poitemx -stge_loc = 'X' .
it_poitemx -batch = 'X' .
it_poitemx -net_price = 'X' .
it_poitemx -no_rounding = 'X' .
* IT_POITEMX-CALCTYPE = 'X'.
* IT_POITEMX-PO_PRICE = 'X'.
IF gt_itab -chk = 'X' .
it_poitemx -ret_item = 'X' .
ENDIF .
IF it_poitem -short_text IS NOT INITIAL .
it_poitemx -short_text = 'X' .
ENDIF .
* IF CHK1 = 'X'.
* IT_POITEMX-FREE_ITEM = 'X'.
* ENDIF.
IF gt_itab -emlif IS NOT INITIAL .
it_poitemx -supp_vendor = 'X' .
ENDIF .
IF gt_itab -emlif IS NOT INITIAL .
it_poitemx -sc_vendor = 'X' .
ENDIF .
APPEND it_poitemx .
CLEAR it_poitemx .
"文本行
gt_potextitem -po_item = c_item .
gt_potextitem -text_id = 'F12' .
gt_potextitem -text_line = gt_itab -txz01 .
APPEND gt_potextitem .
CLEAR gt_potextitem .
***传差额(单价四舍五入之后产生的差额,传进条件类型ZB00)
p_dmbtr = gt_itab -menge * gt_itab -netpr .
p_margin = gt_itab -zchben - p_dmbtr .
IF p_margin IS NOT INITIAL .
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZB00' .
it_pocond -cond_value = p_margin .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
* IT_POCOND-CONBASEVAL = P_MARGIN.
it_pocond -change_id = 'I' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
* IT_POCONDX-CONBASEVAL = 'X'.
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
ENDIF .
***传仓储费、运保费
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZRB2' .
it_pocond -cond_value = gt_itab -zccf .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
it_pocond -change_id = 'U' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZOB2' .
it_pocond -cond_value = gt_itab -zybf .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
it_pocond -change_id = 'U' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
"ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = wa_poheader
poheaderx = wa_poheaderx
no_price_from_po = 'X'
IMPORTING
exppurchaseorder = wa_exppurchaseorder
expheader = wa_expheader
TABLES
return = it_bapiret2[]
poitem = it_poitem[]
poitemx = it_poitemx[]
pocond = it_pocond[]
pocondx = it_pocondx[]
potextitem = gt_potextitem[] .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X' .
DELETE it_bapiret2 WHERE type = 'W' OR id = 'BAPI' OR id = 'MEPO' OR id = 'RPUDB' .
READ TABLE it_bapiret2 WITH KEY type = 'E' .
IF sy -subrc EQ 0 .
loc_msg = it_bapiret2 - message .
MESSAGE e056 (zgmond ) WITH loc_msg .
ELSE .
READ TABLE it_bapiret2 WITH KEY type = 'S' .
IF sy -subrc EQ 0 .
CONCATENATE it_bapiret2 -message_v1 it_bapiret2 -message_v2 '已创建!' INTO loc_msg SEPARATED BY space .
MESSAGE s056 (zgmond ) WITH loc_msg .
ENDIF .
ENDIF .
CLEAR : loc_msg ,c_item .
REFRESH : gt_itab ,gt_itab[] .
"method ZBAPI_PO_CREATE_FUNCTION.
" DATA:EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH HEADER LINE.
DATA :wa_poheader TYPE STANDARD TABLE OF bapimepoheader INITIAL SIZE 10 WITH HEADER LINE ,
wa_poheaderx LIKE bapimepoheaderx OCCURS 0 WITH HEADER LINE ,
wa_exppurchaseorder LIKE bapimepoheader -po_number OCCURS 0 WITH HEADER LINE ,
wa_expheader LIKE bapimepoheader OCCURS 0 WITH HEADER LINE ,
it_bapiret2 LIKE bapiret2 OCCURS 0 WITH HEADER LINE ,
it_poitem LIKE bapimepoitem OCCURS 0 WITH HEADER LINE ,
it_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE ,
it_poschedule LIKE bapimeposchedule OCCURS 0 WITH HEADER LINE ,
it_poschedulex LIKE bapimeposchedulx OCCURS 0 WITH HEADER LINE ,
it_pocond LIKE bapimepocond OCCURS 0 WITH HEADER LINE ,
it_pocondx LIKE bapimepocondx OCCURS 0 WITH HEADER LINE ,
gt_potextitem LIKE bapimepotext OCCURS 0 WITH HEADER LINE .
DATA :loc_msg ( 200 ) .
DATA : c_item LIKE ekpo -ebelp .
DATA : p_margin LIKE zgrhd -zchben , "差额
p_dmbtr LIKE zgrhd -zchben . "舍入后成本
DATA : BEGIN OF gt_itab OCCURS 0 .
DATA : check .
DATA :meins LIKE mara -meins .
DATA :dmbtr LIKE zgrjg -dmbtr . "净价
DATA :zid_num TYPE i ,
werks LIKE ekpo -werks ,
lgort LIKE ekpo -lgort ,
emlif TYPE ekpo -emlif ,
name1 TYPE lfa1 -name1 ,
matnr LIKE ekpo -matnr ,
maktx LIKE zgrhd -maktx ,
charg LIKE mseg -charg ,
menge LIKE ekpo -menge ,
* MEINS LIKE MARA-MEINS,
zchben1 LIKE zgrhd -zchben1 , "不含税成本
zchben LIKE zgrhd -zchben , "含税成本
zccf LIKE zgrhd -zchben , "仓储费
zybf LIKE zgrhd -zchben , "运保费
zsumchben LIKE zgrhd -zchben , "成本合计
msehl LIKE t006a -msehl , "单位描述
chk TYPE c ,
zrat ( 12 ) TYPE p DECIMALS 8 ,
netpr TYPE ekpo -netpr ,
txz01 LIKE ekpo -txz01 .
* INCLUDE STRUCTURE ZGRHD.
*DATA:DMBTR LIKE ZGRJG-DMBTR. "市值成本
*DATA:DMBTR1 LIKE ZGRJG-DMBTR. "定价成本
*DATA:DMBTR2 LIKE ZGRJG-DMBTR. "结算成本
DATA : END OF gt_itab .
gt_itab -zchben = '12' .
gt_itab -matnr = 'GAU0950' .
gt_itab -menge = '12.00' .
gt_itab -emlif = '1000002' .
gt_itab -netpr = '1.00' .
wa_poheader -doc_type = 'NB' .
wa_poheader -vendor = '0001000002' .
wa_poheader -purch_org = '2000' .
wa_poheader -pur_group = '10' .
wa_poheader -comp_code = '2000' .
wa_poheaderx -doc_type = 'X' .
wa_poheaderx -purch_org = 'X' .
wa_poheaderx -pur_group = 'X' .
wa_poheaderx -vendor = 'X' .
wa_poheaderx -comp_code = 'X' .
"LOOP AT gt_itab WHERE check = 'X'.
* SELECT SINGLE CLABS
* INTO P_MENGE
* FROM MCHB
* WHERE CHARG EQ GT_ITAB-CHARG
* AND CLABS <> 0.
*****库存数为0的问题,如果库存数为0,则判断物料基本单位是否为PC,
******如是,库存数取条码中的件数字段值,否则,库存数取条码中的件重值
* IF P_MENGE = 0.
* CLEAR L_MEINS.
* SELECT SINGLE MEINS INTO L_MEINS FROM MARA WHERE MATNR = GT_ITAB-MATNR.
* IF L_MEINS = 'PC'.
* P_ZJSCB = GT_ITAB-DMBTR / GT_ITAB-ZNUMB.
* IT_POITEM-QUANTITY = GT_ITAB-ZNUMB.
* ELSE.
* P_ZJSCB = GT_ITAB-DMBTR / GT_ITAB-MENGE.
* IT_POITEM-QUANTITY = GT_ITAB-MENGE.
* ENDIF.
* ELSE.
* P_ZJSCB = GT_ITAB-DMBTR / P_MENGE.
* IT_POITEM-QUANTITY = P_MENGE.
* ENDIF.
*********
c_item = c_item + 10 .
it_poitem -po_item = c_item .
it_poitem -material = gt_itab -matnr .
it_poitem -plant = '2100' .
it_poitem -quantity = gt_itab -menge .
it_poitem -stge_loc = '0001' . "p_lgort'.
IF gt_itab -emlif IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gt_itab -emlif
IMPORTING
output = it_poitem -supp_vendor .
ENDIF .
IF gt_itab -emlif IS NOT INITIAL .
it_poitem -sc_vendor = 'X' .
ENDIF .
it_poitem -batch = gt_itab -charg .
it_poitem -calctype = ' ' .
it_poitem -net_price = gt_itab -netpr .
it_poitem -no_rounding = 'X' .
* IT_POITEM-CALCTYPE = 'E'.
* IT_POITEM-PO_PRICE = '2'.
IF gt_itab -chk = 'X' .
it_poitem -ret_item = 'X' .
ENDIF .
IF it_poitem -short_text IS NOT INITIAL .
it_poitem -short_text = gt_itab -txz01 .
ENDIF .
* IF CHK1 = 'X'.
* IT_POITEM-FREE_ITEM = 'X'.
* ENDIF.
APPEND it_poitem .
CLEAR it_poitem .
* IT_POITEM-NET_PRICE = gt_itab-
it_poitemx -po_item = c_item .
it_poitemx -material = 'X' .
it_poitemx -plant = 'X' .
it_poitemx -quantity = 'X' .
it_poitemx -stge_loc = 'X' .
it_poitemx -batch = 'X' .
it_poitemx -net_price = 'X' .
it_poitemx -no_rounding = 'X' .
* IT_POITEMX-CALCTYPE = 'X'.
* IT_POITEMX-PO_PRICE = 'X'.
IF gt_itab -chk = 'X' .
it_poitemx -ret_item = 'X' .
ENDIF .
IF it_poitem -short_text IS NOT INITIAL .
it_poitemx -short_text = 'X' .
ENDIF .
* IF CHK1 = 'X'.
* IT_POITEMX-FREE_ITEM = 'X'.
* ENDIF.
IF gt_itab -emlif IS NOT INITIAL .
it_poitemx -supp_vendor = 'X' .
ENDIF .
IF gt_itab -emlif IS NOT INITIAL .
it_poitemx -sc_vendor = 'X' .
ENDIF .
APPEND it_poitemx .
CLEAR it_poitemx .
"文本行
gt_potextitem -po_item = c_item .
gt_potextitem -text_id = 'F12' .
gt_potextitem -text_line = gt_itab -txz01 .
APPEND gt_potextitem .
CLEAR gt_potextitem .
***传差额(单价四舍五入之后产生的差额,传进条件类型ZB00)
p_dmbtr = gt_itab -menge * gt_itab -netpr .
p_margin = gt_itab -zchben - p_dmbtr .
IF p_margin IS NOT INITIAL .
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZB00' .
it_pocond -cond_value = p_margin .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
* IT_POCOND-CONBASEVAL = P_MARGIN.
it_pocond -change_id = 'I' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
* IT_POCONDX-CONBASEVAL = 'X'.
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
ENDIF .
***传仓储费、运保费
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZRB2' .
it_pocond -cond_value = gt_itab -zccf .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
it_pocond -change_id = 'U' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZOB2' .
it_pocond -cond_value = gt_itab -zybf .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
it_pocond -change_id = 'U' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
"ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = wa_poheader
poheaderx = wa_poheaderx
no_price_from_po = 'X'
IMPORTING
exppurchaseorder = wa_exppurchaseorder
expheader = wa_expheader
TABLES
return = it_bapiret2[]
poitem = it_poitem[]
poitemx = it_poitemx[]
pocond = it_pocond[]
pocondx = it_pocondx[]
potextitem = gt_potextitem[] .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X' .
DELETE it_bapiret2 WHERE type = 'W' OR id = 'BAPI' OR id = 'MEPO' OR id = 'RPUDB' .
READ TABLE it_bapiret2 WITH KEY type = 'E' .
IF sy -subrc EQ 0 .
loc_msg = it_bapiret2 - message .
MESSAGE e056 (zgmond ) WITH loc_msg .
ELSE .
READ TABLE it_bapiret2 WITH KEY type = 'S' .
IF sy -subrc EQ 0 .
CONCATENATE it_bapiret2 -message_v1 it_bapiret2 -message_v2 '已创建!' INTO loc_msg SEPARATED BY space .
MESSAGE s056 (zgmond ) WITH loc_msg .
ENDIF .
ENDIF .
CLEAR : loc_msg ,c_item .
REFRESH : gt_itab ,gt_itab[] . REPORT ZTEST .
"method ZBAPI_PO_CREATE_FUNCTION.
" DATA:EMPTAB TYPE STANDARD TABLE OF EMP INITIAL SIZE 10 WITH HEADER LINE.
DATA :wa_poheader TYPE STANDARD TABLE OF bapimepoheader INITIAL SIZE 10 WITH HEADER LINE ,
wa_poheaderx LIKE bapimepoheaderx OCCURS 0 WITH HEADER LINE ,
wa_exppurchaseorder LIKE bapimepoheader -po_number OCCURS 0 WITH HEADER LINE ,
wa_expheader LIKE bapimepoheader OCCURS 0 WITH HEADER LINE ,
it_bapiret2 LIKE bapiret2 OCCURS 0 WITH HEADER LINE ,
it_poitem LIKE bapimepoitem OCCURS 0 WITH HEADER LINE ,
it_poitemx LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE ,
it_poschedule LIKE bapimeposchedule OCCURS 0 WITH HEADER LINE ,
it_poschedulex LIKE bapimeposchedulx OCCURS 0 WITH HEADER LINE ,
it_pocond LIKE bapimepocond OCCURS 0 WITH HEADER LINE ,
it_pocondx LIKE bapimepocondx OCCURS 0 WITH HEADER LINE ,
gt_potextitem LIKE bapimepotext OCCURS 0 WITH HEADER LINE .
DATA :loc_msg ( 200 ) .
DATA : c_item LIKE ekpo -ebelp .
DATA : p_margin LIKE zgrhd -zchben , "差额
p_dmbtr LIKE zgrhd -zchben . "舍入后成本
DATA : BEGIN OF gt_itab OCCURS 0 .
DATA : check .
DATA :meins LIKE mara -meins .
DATA :dmbtr LIKE zgrjg -dmbtr . "净价
DATA :zid_num TYPE i ,
werks LIKE ekpo -werks ,
lgort LIKE ekpo -lgort ,
emlif TYPE ekpo -emlif ,
name1 TYPE lfa1 -name1 ,
matnr LIKE ekpo -matnr ,
maktx LIKE zgrhd -maktx ,
charg LIKE mseg -charg ,
menge LIKE ekpo -menge ,
* MEINS LIKE MARA-MEINS,
zchben1 LIKE zgrhd -zchben1 , "不含税成本
zchben LIKE zgrhd -zchben , "含税成本
zccf LIKE zgrhd -zchben , "仓储费
zybf LIKE zgrhd -zchben , "运保费
zsumchben LIKE zgrhd -zchben , "成本合计
msehl LIKE t006a -msehl , "单位描述
chk TYPE c ,
zrat ( 12 ) TYPE p DECIMALS 8 ,
netpr TYPE ekpo -netpr ,
txz01 LIKE ekpo -txz01 .
* INCLUDE STRUCTURE ZGRHD.
*DATA:DMBTR LIKE ZGRJG-DMBTR. "市值成本
*DATA:DMBTR1 LIKE ZGRJG-DMBTR. "定价成本
*DATA:DMBTR2 LIKE ZGRJG-DMBTR. "结算成本
DATA : END OF gt_itab .
gt_itab -zchben = '12' .
gt_itab -matnr = 'GAU0950' .
gt_itab -menge = '12.00' .
gt_itab -emlif = '1000002' .
gt_itab -netpr = '1.00' .
wa_poheader -doc_type = 'NB' .
wa_poheader -vendor = '0001000002' .
wa_poheader -purch_org = '2000' .
wa_poheader -pur_group = '10' .
wa_poheader -comp_code = '2000' .
wa_poheaderx -doc_type = 'X' .
wa_poheaderx -purch_org = 'X' .
wa_poheaderx -pur_group = 'X' .
wa_poheaderx -vendor = 'X' .
wa_poheaderx -comp_code = 'X' .
"LOOP AT gt_itab WHERE check = 'X'.
* SELECT SINGLE CLABS
* INTO P_MENGE
* FROM MCHB
* WHERE CHARG EQ GT_ITAB-CHARG
* AND CLABS <> 0.
*****库存数为0的问题,如果库存数为0,则判断物料基本单位是否为PC,
******如是,库存数取条码中的件数字段值,否则,库存数取条码中的件重值
* IF P_MENGE = 0.
* CLEAR L_MEINS.
* SELECT SINGLE MEINS INTO L_MEINS FROM MARA WHERE MATNR = GT_ITAB-MATNR.
* IF L_MEINS = 'PC'.
* P_ZJSCB = GT_ITAB-DMBTR / GT_ITAB-ZNUMB.
* IT_POITEM-QUANTITY = GT_ITAB-ZNUMB.
* ELSE.
* P_ZJSCB = GT_ITAB-DMBTR / GT_ITAB-MENGE.
* IT_POITEM-QUANTITY = GT_ITAB-MENGE.
* ENDIF.
* ELSE.
* P_ZJSCB = GT_ITAB-DMBTR / P_MENGE.
* IT_POITEM-QUANTITY = P_MENGE.
* ENDIF.
*********
c_item = c_item + 10 .
it_poitem -po_item = c_item .
it_poitem -material = gt_itab -matnr .
it_poitem -plant = '2100' .
it_poitem -quantity = gt_itab -menge .
it_poitem -stge_loc = '0001' . "p_lgort'.
IF gt_itab -emlif IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gt_itab -emlif
IMPORTING
output = it_poitem -supp_vendor .
ENDIF .
IF gt_itab -emlif IS NOT INITIAL .
it_poitem -sc_vendor = 'X' .
ENDIF .
it_poitem -batch = gt_itab -charg .
it_poitem -calctype = ' ' .
it_poitem -net_price = gt_itab -netpr .
it_poitem -no_rounding = 'X' .
* IT_POITEM-CALCTYPE = 'E'.
* IT_POITEM-PO_PRICE = '2'.
IF gt_itab -chk = 'X' .
it_poitem -ret_item = 'X' .
ENDIF .
IF it_poitem -short_text IS NOT INITIAL .
it_poitem -short_text = gt_itab -txz01 .
ENDIF .
* IF CHK1 = 'X'.
* IT_POITEM-FREE_ITEM = 'X'.
* ENDIF.
APPEND it_poitem .
CLEAR it_poitem .
* IT_POITEM-NET_PRICE = gt_itab-
it_poitemx -po_item = c_item .
it_poitemx -material = 'X' .
it_poitemx -plant = 'X' .
it_poitemx -quantity = 'X' .
it_poitemx -stge_loc = 'X' .
it_poitemx -batch = 'X' .
it_poitemx -net_price = 'X' .
it_poitemx -no_rounding = 'X' .
* IT_POITEMX-CALCTYPE = 'X'.
* IT_POITEMX-PO_PRICE = 'X'.
IF gt_itab -chk = 'X' .
it_poitemx -ret_item = 'X' .
ENDIF .
IF it_poitem -short_text IS NOT INITIAL .
it_poitemx -short_text = 'X' .
ENDIF .
* IF CHK1 = 'X'.
* IT_POITEMX-FREE_ITEM = 'X'.
* ENDIF.
IF gt_itab -emlif IS NOT INITIAL .
it_poitemx -supp_vendor = 'X' .
ENDIF .
IF gt_itab -emlif IS NOT INITIAL .
it_poitemx -sc_vendor = 'X' .
ENDIF .
APPEND it_poitemx .
CLEAR it_poitemx .
"文本行
gt_potextitem -po_item = c_item .
gt_potextitem -text_id = 'F12' .
gt_potextitem -text_line = gt_itab -txz01 .
APPEND gt_potextitem .
CLEAR gt_potextitem .
***传差额(单价四舍五入之后产生的差额,传进条件类型ZB00)
p_dmbtr = gt_itab -menge * gt_itab -netpr .
p_margin = gt_itab -zchben - p_dmbtr .
IF p_margin IS NOT INITIAL .
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZB00' .
it_pocond -cond_value = p_margin .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
* IT_POCOND-CONBASEVAL = P_MARGIN.
it_pocond -change_id = 'I' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
* IT_POCONDX-CONBASEVAL = 'X'.
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
ENDIF .
***传仓储费、运保费
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZRB2' .
it_pocond -cond_value = gt_itab -zccf .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
it_pocond -change_id = 'U' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
it_pocond -itm_number = c_item .
it_pocond -cond_type = 'ZOB2' .
it_pocond -cond_value = gt_itab -zybf .
it_pocond -cond_p_unt = '' .
it_pocond - currency = 'CNY' .
it_pocond -change_id = 'U' .
APPEND it_pocond .
CLEAR it_pocond .
it_pocondx -itm_number = c_item .
it_pocondx -cond_type = 'X' .
it_pocondx -cond_value = 'X' .
it_pocondx -cond_p_unt = 'X' .
it_pocondx - currency = 'X' .
it_pocondx -change_id = 'X' .
APPEND it_pocondx .
CLEAR it_pocondx .
"ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = wa_poheader
poheaderx = wa_poheaderx
no_price_from_po = 'X'
IMPORTING
exppurchaseorder = wa_exppurchaseorder
expheader = wa_expheader
TABLES
return = it_bapiret2[]
poitem = it_poitem[]
poitemx = it_poitemx[]
pocond = it_pocond[]
pocondx = it_pocondx[]
potextitem = gt_potextitem[] .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X' .
DELETE it_bapiret2 WHERE type = 'W' OR id = 'BAPI' OR id = 'MEPO' OR id = 'RPUDB' .
READ TABLE it_bapiret2 WITH KEY type = 'E' .
IF sy -subrc EQ 0 .
loc_msg = it_bapiret2 - message .
MESSAGE e056 (zgmond ) WITH loc_msg .
ELSE .
READ TABLE it_bapiret2 WITH KEY type = 'S' .
IF sy -subrc EQ 0 .
CONCATENATE it_bapiret2 -message_v1 it_bapiret2 -message_v2 '已创建!' INTO loc_msg SEPARATED BY space .
MESSAGE s056 (zgmond ) WITH loc_msg .
ENDIF .
ENDIF .
CLEAR : loc_msg ,c_item .
REFRESH : gt_itab ,gt_itab[] .