Sie sind auf Seite 1von 4

FUNCTION zsd_post_gr_invoice_from_bill.

*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(VBRK) TYPE VBRK OPTIONAL
*" REFERENCE(I_VBELN) TYPE VBRK-VBELN
*" TABLES
*" T_RETURN STRUCTURE BAPIRET2 OPTIONAL
*" VBRP STRUCTURE VBRP OPTIONAL
*"----------------------------------------------------------------------
DATA: lv_bstnk TYPE vbak-bstnk.
DATA: wa_header TYPE bapi2017_gm_head_01.
DATA: wa_item TYPE bapi2017_gm_item_create.
DATA: tbl_item TYPE TABLE OF bapi2017_gm_item_create.
DATA: wa_vbrp TYPE vbrp.
DATA: tbl_vbrp TYPE TABLE OF vbrp.
DATA: wa_ekpo TYPE ekpo.
DATA: tbl_ekpo TYPE TABLE OF ekpo.
DATA: lv_lifnr TYPE ekko-lifnr.
DATA: tbl_lips TYPE TABLE OF lips.
DATA: wa_lips TYPE lips.
DATA: lv_vbelv TYPE vbrp-vbelv.
DATA: wa_park TYPE bapi_incinv_create_header.
DATA: wa_line TYPE bapi_incinv_create_item.
DATA: tbl_line TYPE TABLE OF bapi_incinv_create_item.
DATA: lv_doc TYPE bapi2017_gm_head_ret-mat_doc.
DATA: lv_year TYPE bapi2017_gm_head_ret-doc_year.
DATA: wa_zsd0001 TYPE zsd0001_it.
DATA: lv_adoc LIKE bapi_incinv_fld-inv_doc_no.
DATA: t_return1 LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: lv_message TYPE string.
wa_zsd0001-vbeln = i_vbeln.
IF vbrp[] IS INITIAL.
WHILE tbl_vbrp[] IS INITIAL.
SELECT *
FROM vbrp
INTO CORRESPONDING FIELDS OF TABLE tbl_vbrp
WHERE vbeln = i_vbeln.
ENDWHILE.
ENDIF.
READ TABLE tbl_vbrp INTO wa_vbrp INDEX 1.
SELECT SINGLE bstnk
FROM vbak
INTO lv_bstnk
WHERE vbeln = wa_vbrp-aubel.
SELECT *
FROM ekpo
INTO TABLE tbl_ekpo
WHERE ebeln = lv_bstnk.
SELECT SINGLE lifnr
FROM ekko
INTO lv_lifnr
WHERE ebeln = lv_bstnk.
IF tbl_vbrp[] IS NOT INITIAL.
SELECT *
FROM lips
INTO TABLE tbl_lips
FOR ALL ENTRIES IN tbl_vbrp
WHERE vbeln = tbl_vbrp-vgbel.
ENDIF.
LOOP AT tbl_ekpo INTO wa_ekpo.
READ TABLE tbl_vbrp INTO wa_vbrp WITH KEY matnr = wa_ekpo-matnr.
IF sy-subrc = 0.
READ TABLE tbl_lips INTO wa_lips WITH KEY vbeln = wa_vbrp-vgbel
posnr = wa_vbrp-vgpos.
wa_item-material = wa_ekpo-matnr.
wa_item-plant = wa_ekpo-werks.
wa_item-batch = wa_lips-charg.
wa_item-prod_date = wa_lips-hsdat.
wa_item-move_type = '101'.
wa_item-vendor = lv_lifnr.
wa_item-po_number = wa_ekpo-ebeln.
wa_item-po_item = wa_ekpo-ebelp.
wa_item-entry_uom = wa_vbrp-vrkme.
wa_item-entry_qnt = wa_vbrp-fkimg.
wa_item-mvt_ind = 'B'.
wa_item-prod_date = sy-datum.
APPEND wa_item TO tbl_item .
ENDIF.
ENDLOOP.
wa_header-pstng_date = sy-datum.
wa_header-doc_date = sy-datum.
wa_header-ref_doc_no = wa_lips-vbeln.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = wa_header
goodsmvt_code = '01'
IMPORTING
materialdocument = lv_doc
matdocumentyear = lv_year
TABLES
goodsmvt_item = tbl_item
return = t_return1.
IF lv_doc IS NOT INITIAL.
CONCATENATE 'GR Document' lv_doc 'has been posted in year' lv_year INTO lv_m
essage SEPARATED BY space.
t_return-message = lv_message.
t_return-number = 1.
APPEND t_return.
wa_zsd0001-mblnr = lv_doc.
wa_zsd0001-mjahr = lv_year.
wa_zsd0001-message = lv_message.
ELSE.
LOOP AT t_return1.
lv_message = t_return1-message.
REPLACE FIRST OCCURRENCE OF '&' IN lv_message WITH t_return-message_v1 .
REPLACE FIRST OCCURRENCE OF '&' IN lv_message WITH t_return-message_v2 .
REPLACE FIRST OCCURRENCE OF '&' IN lv_message WITH t_return-message_v3 .
REPLACE FIRST OCCURRENCE OF '&' IN lv_message WITH t_return-message_v4 .
t_return-number = t_return1-number.
t_return-message = lv_message.
t_return-type = 'E'.
wa_zsd0001-message = lv_message.
APPEND t_return.
ENDLOOP.
ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
IF lv_doc IS INITIAL.
MODIFY zsd0001_it FROM wa_zsd0001.
T_RETURN-MESSAGE = 'Please run program ZSD_POSTING_GR_IT to see error'.
T_RETURN-NUMBER = 2.
T_RETURN-TYPE = 'E'.
APPEND T_RETURN.
ENDIF.
CHECK lv_doc IS NOT INITIAL.
wa_park-invoice_ind = 'X'.
wa_park-doc_type = 'RE'.
wa_park-doc_date = sy-datum.
wa_park-pstng_date = sy-datum.
wa_park-comp_code = 'K000'.
wa_park-currency = 'EUR'.
wa_park-bline_date = sy-datum.
LOOP AT tbl_ekpo INTO wa_ekpo.
READ TABLE tbl_vbrp INTO wa_vbrp WITH KEY matnr = wa_ekpo-matnr.
IF sy-subrc = 0.
wa_line-invoice_doc_item = sy-tabix.
wa_park-ref_doc_no = wa_ekpo-ebeln.
wa_line-po_number = wa_ekpo-ebeln.
wa_line-po_item = wa_ekpo-ebelp.
wa_line-tax_code = 'E1'.
wa_line-item_amount = wa_vbrp-netwr.
wa_line-quantity = wa_vbrp-fkimg.
wa_line-po_unit = wa_vbrp-vrkme.
wa_park-gross_amount = wa_park-gross_amount + wa_vbrp-netwr.
APPEND wa_line TO tbl_line.
ENDIF.
ENDLOOP.
CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'
EXPORTING
headerdata = wa_park
IMPORTING
invoicedocnumber = lv_adoc
fiscalyear = lv_year
TABLES
itemdata = tbl_line
return = t_return1.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
IF lv_adoc IS NOT INITIAL.
DELETE zsd0001_it FROM wa_zsd0001.
CONCATENATE 'Verification Document' lv_adoc 'has been posted in year' lv_yea
r INTO lv_message SEPARATED BY space.
t_return-number = 3.
t_return-message = lv_message.
APPEND t_return.
ELSE.
LOOP AT t_return1.
lv_message = t_return1-message.
REPLACE FIRST OCCURRENCE OF '&' IN lv_message WITH t_return-message_v1 .
REPLACE FIRST OCCURRENCE OF '&' IN lv_message WITH t_return-message_v2 .
REPLACE FIRST OCCURRENCE OF '&' IN lv_message WITH t_return-message_v3 .
REPLACE FIRST OCCURRENCE OF '&' IN lv_message WITH t_return-message_v4 .
t_return-number = t_return1-number.
t_return-message = lv_message.
t_return-type = 'E'.
APPEND t_return.
ENDLOOP.
wa_zsd0001-mblnr = lv_doc.
wa_zsd0001-mjahr = lv_year.
wa_zsd0001-message = lv_message.
MODIFY zsd0001_it FROM wa_zsd0001.
ENDIF.
ENDFUNCTION.

Das könnte Ihnen auch gefallen