Bapi Internet
Bapi Internet
************************************************************************
REPORT zfiapcc0001_post_document
NO STANDARD PAGE HEADING
LINE-SIZE 255
LINE-COUNT 65
MESSAGE-ID zfi.
************************************************************************
* D A T A D E F I N I T I O N
************************************************************************
************************************************************************
* C O N S T A N T S
************************************************************************
CONSTANTS:
gc_blart LIKE vbkpf-blart VALUE 'KE'.
************************************************************************
* S E L E C T I O N S C R E E N
************************************************************************
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE text-006.
PARAMETERS: p_bukrs LIKE vbkpf-bukrs,
p_belnr LIKE vbkpf-belnr,
p_gjahr LIKE vbkpf-gjahr.
SELECTION-SCREEN: END OF BLOCK blk1.
************************************************************************
* I N T E R N A L S T R U C T U R E S & T A B L E S
************************************************************************
DATA:
gs_vbkpf TYPE vbkpf ,
gt_vbsegs TYPE STANDARD TABLE OF vbsegs WITH HEADER LINE,
gt_vbsegk TYPE STANDARD TABLE OF vbsegk WITH HEADER LINE,
* gt_rseg TYPE STANDARD TABLE OF rseg WITH HEADER LINE,
gt_with_item TYPE STANDARD TABLE OF with_item WITH HEADER LINE,
gt_mwdat TYPE STANDARD TABLE OF rtax1u15 WITH HEADER LINE,
************************************************************************
* V A R I A B L E S
************************************************************************
DATA: g_invoicedocnumber LIKE bapi_incinv_fld-inv_doc_no,
g_fiscalyear LIKE bapi_incinv_fld-fisc_year,
g_compcode LIKE bkpf-bukrs.
************************************************************************
* E V E N T P R O C E S S I N G
************************************************************************
INITIALIZATION.
START-OF-SELECTION.
PERFORM a100_get_data_from_db.
PERFORM a150_process_data.
PERFORM a200_post_document.
END-OF-SELECTION.
PERFORM a300_display_output.
TOP-OF-PAGE.
************************************************************************
* S U B R O U T I N E S
************************************************************************
*&---------------------------------------------------------------------*
*& Form A100_GET_DATA_FROM_DB
*&---------------------------------------------------------------------*
* Get data from Database
*----------------------------------------------------------------------*
FORM a100_get_data_from_db .
IF sy-subrc EQ 0.
***-----------------------------------------------------***
*** In case of PO Invoice , there will be no entries in ***
*** VBSEGS table as there is no line in that parked ***
*** document. To get the PO related information we need ***
*** to search through RSEG Table. ***
***-----------------------------------------------------***
***--- PO Invoice -------*
IF gs_vbkpf-awtyp EQ 'RMRP' AND
gs_vbkpf-awkey IS NOT INITIAL.
g_flag_po = 'X'.
g_belnr = gs_vbkpf-awkey+0(10) .
g_gjahr = gs_vbkpf-awkey+10(4) .
ELSE.
*---GL Line----------*
SELECT * FROM vbsegs
INTO TABLE gt_vbsegs
WHERE bukrs EQ p_bukrs
AND belnr EQ p_belnr
AND gjahr EQ p_gjahr.
ENDIF.
ELSE.
*-- Error Message--------*
MESSAGE s000 WITH 'Invalid Accounting Document !'(001) DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM. " A100_GET_DATA_FROM_DB
*&---------------------------------------------------------------------*
*& Form A150_PROCESS_DATA
*&---------------------------------------------------------------------*
* Process Data for BAPI
*----------------------------------------------------------------------*
FORM a150_process_data .
IF gt_return[] IS INITIAL.
MOVE-CORRESPONDING gs_inv_header_in TO gs_inv_header.
gs_inv_header-doc_type = gc_blart .
gs_inv_header-header_txt = p_belnr. "Storing Referrence of Old Doc
gs_inv_header-gross_amount = gs_inv_header_in-gross_amnt.
CLEAR gs_inv_header-inv_doc_no.
LOOP AT gt_item_in.
MOVE-CORRESPONDING gt_item_in TO gt_item.
APPEND gt_item.
ENDLOOP.
IF gs_inv_header-calc_tax_ind NE 'X'.
LOOP AT gt_tax_in.
MOVE-CORRESPONDING gt_tax_in TO gt_tax.
APPEND gt_tax.
ENDLOOP.
ENDIF.
LOOP AT gt_vsplit_in.
MOVE-CORRESPONDING gt_vsplit_in TO gt_vsplit.
APPEND gt_vsplit.
ENDLOOP.
LOOP AT gt_withtax_in.
MOVE-CORRESPONDING gt_withtax_in TO gt_withtax.
APPEND gt_withtax.
ENDLOOP.
ENDIF.
ELSE.
l_itemno = l_itemno + 10 .
gt_accpay-itemno_acc = l_itemno.
gt_accpay-vendor_no = gt_vbsegk-lifnr.
gt_accpay-bus_area = gt_vbsegk-gsber.
gt_accpay-pmnttrms = gt_vbsegk-zterm.
gt_accpay-pymt_meth = gt_vbsegk-zlsch.
gt_accpay-pmnt_block = gt_vbsegk-zlspr.
gt_accpay-tax_code = gt_vbsegk-mwskz.
gt_accpay-item_text = gt_vbsegk-sgtxt.
APPEND gt_accpay.
IF gt_vbsegk-shkzg EQ 'H'.
gt_vbsegk-wrbtr = ( -1 ) * gt_vbsegk-wrbtr.
gt_vbsegk-wmwst = ( -1 ) * gt_vbsegk-wmwst.
ENDIF.
CLEAR gt_amnt.
gt_amnt-itemno_acc = l_itemno.
gt_amnt-curr_type = '00' . "Document Currency
gt_amnt-currency = gs_vbkpf-waers. " gt_vbsegk-swaer.
gt_amnt-amt_doccur = gt_vbsegk-wrbtr.
gt_amnt-tax_amt = gt_vbsegk-wmwst.
APPEND gt_amnt.
gt_wtax-itemno_acc = l_itemno.
gt_wtax-wt_type = gt_with_item-witht.
gt_wtax-wt_code = gt_with_item-wt_withcd.
APPEND gt_wtax.
ENDLOOP.
ENDLOOP.
gt_acctgl-itemno_acc = l_itemno .
gt_acctgl-gl_account = gt_vbsegs-saknr.
gt_acctgl-item_text = gt_vbsegs-sgtxt.
gt_acctgl-acct_type = gt_vbsegs-koart.
gt_acctgl-bus_area = gt_vbsegs-gsber.
gt_acctgl-plant = gt_vbsegs-werks.
gt_acctgl-tax_code = gt_vbsegs-mwskz.
gt_acctgl-taxjurcode = gt_vbsegs-txjcd.
gt_acctgl-costcenter = gt_vbsegs-kostl.
* gt_acctgl-acttype = gt_vbsegs-lstar.
* gt_acctgl-profit_ctr = gt_vbsegs-prctr.
* gt_acctgl-wbs_element = gt_vbsegs-ps_psp_pnr.
APPEND gt_acctgl.
APPEND gt_extn.
IF gt_vbsegs-shkzg EQ 'H'.
gt_vbsegs-wrbtr = ( -1 ) * gt_vbsegs-wrbtr.
ENDIF.
l_wrbtr = gt_vbsegs-wrbtr.
l_itemno_hold = l_itemno.
IF gs_vbkpf-xmwst EQ 'X'.
*---- Calculate Tax-------------------*
CLEAR l_wrbtr.
LOOP AT gt_mwdat.
CLEAR gt_amnt.
gt_tax_nonpo-itemno_acc = l_itemno.
* gt_tax_nonpo-GL_ACCOUNT = gt_vbsegs-saknr.
gt_tax_nonpo-cond_key = gt_mwdat-kschl.
gt_tax_nonpo-acct_key = gt_mwdat-ktosl.
gt_tax_nonpo-tax_code = gt_vbsegs-mwskz.
* TAX_RATE
* TAX_DATE
* TAXJURCODE
APPEND gt_tax_nonpo.
ENDLOOP.
ENDIF.
ENDIF.
APPEND gt_amnt.
ENDLOOP.
ENDIF.
FORM a200_post_document .
IF g_flag_po EQ 'X'.
***----Non-PO Invoices--------------*
g_invoicedocnumber = l_obj_key+0(10).
g_fiscalyear = l_obj_key+14(4).
g_compcode = l_obj_key+10(4).
ENDIF.
SKIP 1.
WRITE:/ 'Other Messages'(005).
LOOP AT gt_return.
WRITE:/ gt_return-type,
gt_return-id,
gt_return-number,
gt_return-message.
* gt_return-LOG_NO,
* gt_return-LOG_MSG_NO,
* gt_return-MESSAGE_V1,
* gt_return-MESSAGE_V2,
* gt_return-MESSAGE_V3,
* gt_return-MESSAGE_V4.
ENDLOOP.
ENDIF.
*** E N D O F R E P O R T ****************************************