*&---------------------------------------------------------------------* *& Report ZFI_SAMPLE_POSTSING *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZFI_SAMPLE_POSTING MESSAGE-ID zfi NO STANDARD PAGE HEADING LINE-COUNT 65 LINE-SIZE 165. *--------------------------------------* * TYPES * *--------------------------------------* TYPES: BEGIN OF gty_bkpf, ref TYPE bkpf-awkey, bukrs TYPE bkpf-bukrs, belnr TYPE bkpf-belnr, gjahr TYPE bkpf-gjahr, waers TYPE bkpf-waers, wwert TYPE bkpf-wwert, weborder TYPE bkpf-xblnr, END OF gty_bkpf, BEGIN OF gty_bseg, bukrs TYPE bkpf-bukrs, belnr TYPE bkpf-belnr, gjahr TYPE bkpf-gjahr, hkont TYPE bseg-hkont, zuonr TYPE bseg-zuonr, prctr TYPE bseg-prctr, sgtxt TYPE bseg-sgtxt, shkzg TYPE bseg-shkzg, wrbtr TYPE bseg-wrbtr, buzei TYPE bseg-buzei, END OF gty_bseg. DATA: gt_detail TYPE TABLE OF gty_bseg. TYPES: BEGIN OF gty_t001k, bwkey TYPE t001k-bwkey, bukrs TYPE t001k-bukrs, land1 TYPE t001w-land1, END OF gty_t001k. TYPES: BEGIN OF gty_err, vbeln TYPE vbrk-vbeln, status TYPE char250, END OF gty_err, gtt_gl TYPE STANDARD TABLE OF bapiacgl09, gtt_amount TYPE STANDARD TABLE OF bapiaccr09, gtt_customer TYPE STANDARD TABLE OF bapiacar09, gtt_vendor TYPE STANDARD TABLE OF bapiacap09, gtt_tax TYPE STANDARD TABLE OF bapiactx09, gtt_suc TYPE STANDARD TABLE OF zfi_margin_pstng, gtt_ext TYPE STANDARD TABLE OF bapiparex, gtt_err TYPE STANDARD TABLE OF gty_err. *--------------------------------------* * GLOBAL DATA * *--------------------------------------* DATA: gv_bukrs TYPE bukrs, gv_kunnr TYPE likp-kunnr, gv_date TYPE datum, gv_hkont TYPE bseg-hkont, gv_auart TYPE vbak-auart, gv_no_data TYPE char1, gt_recheck TYPE TABLE OF zfi_margin_rechk, gt_posted TYPE TABLE OF zfi_margin_pstng, gt_bkpf_dv TYPE TABLE OF gty_bkpf, gt_bkpf_bi TYPE TABLE OF gty_bkpf, gt_bseg_dv TYPE TABLE OF gty_bseg, gt_bseg_bi TYPE TABLE OF gty_bseg, " gt_data TYPE TABLE OF gty_data, gt_suc TYPE TABLE OF zfi_margin_pstng, gt_err TYPE TABLE OF gty_err, gv_suc TYPE i, gv_err TYPE i, gv_all TYPE i. *--------------------------------------* * START-OF-SELECTION * *--------------------------------------* START-OF-SELECTION. * Clear Variables PERFORM clear_variables. * Post Documents PERFORM post_document. *--------------------------------------* * END-OF-SELECTION * *--------------------------------------* END-OF-SELECTION. * Output result PERFORM output_result. *&---------------------------------------------------------------------* *& Form CLEAR_VARIABLES *&---------------------------------------------------------------------* * Clear Variables *----------------------------------------------------------------------* FORM clear_variables . CLEAR: gv_bukrs, gv_kunnr, gv_date, gv_hkont, gv_auart, gv_no_data, gt_recheck[], gt_posted[], gt_bkpf_dv[], gt_bkpf_bi[], gt_bseg_dv[], gt_bseg_bi[], " gt_data[], gt_suc[], gt_err[], gv_suc, gv_err, gv_all. gv_date = sy-datum. ENDFORM. " CLEAR_VARIABLES *&---------------------------------------------------------------------* *& Form POST_DOCUMENT *&---------------------------------------------------------------------* * Post documents *----------------------------------------------------------------------* FORM post_document . DATA: lv_new TYPE char1, lt_t001k TYPE TABLE OF gty_t001k, ls_t001k_e TYPE gty_t001k, ls_t001k_a TYPE gty_t001k, ls_head TYPE bapiache09, lv_err TYPE char1, lt_suc TYPE gtt_suc, lt_err TYPE gtt_err, lt_rechk TYPE TABLE OF zfi_margin_rechk, ls_rechk TYPE zfi_margin_rechk, ls_err TYPE gty_err, lv_index TYPE i. SELECT t001k~bwkey t001k~bukrs t001w~land1 INTO TABLE lt_t001k FROM t001k INNER JOIN t001w ON t001k~bwkey = t001w~werks. SORT lt_t001k ASCENDING BY bwkey. CLEAR: ls_t001k_e, ls_t001k_a. READ TABLE lt_t001k INTO ls_t001k_a WITH KEY bwkey = '7001' BINARY SEARCH. READ TABLE lt_t001k INTO ls_t001k_e WITH KEY bwkey = '7001' BINARY SEARCH. lv_new = abap_true. IF lv_new = abap_true. CLEAR: ls_head, lv_err, lt_suc[], lt_err[]. * Set Header Info ls_head-bus_act = 'RFBU'. ls_head-username = 'BACKGROUND'. ls_head-header_txt = 'ZFI Sample Posting'. ls_head-comp_code = '101'. ls_head-doc_date = '20140806'. ls_head-pstng_date = '20140805'. ls_head-trans_date = '20140709'. ls_head-ref_doc_no = 'X140709003'. ls_head-doc_type = 'ZE'. CLEAR lv_new. ENDIF. ls_head-comp_code = '101'. * Posting sampledoc PERFORM post_sampledoc USING ls_head ls_t001k_e ls_t001k_a CHANGING lv_err lt_suc lt_err. IF lv_err IS NOT INITIAL. APPEND LINES OF lt_err TO gt_err. ELSE. "Update Add-on. PERFORM frm_update_add_on CHANGING lv_err lt_suc lt_err. ENDIF. "ENDLOOP. ENDFORM. " POST_DOCUMENT *&---------------------------------------------------------------------* *& Form CALL_BAPI *&---------------------------------------------------------------------* * Call BAPI *----------------------------------------------------------------------* FORM call_bapi USING is_head TYPE bapiache09 it_gl TYPE gtt_gl it_amt TYPE gtt_amount it_vendor TYPE gtt_vendor it_customer TYPE gtt_customer it_tax TYPE gtt_tax it_ext TYPE gtt_ext CHANGING ov_err TYPE char1 ov_message TYPE char255 ov_belnr TYPE bkpf-belnr. DATA: ls_return TYPE bapiret2, lt_return TYPE STANDARD TABLE OF bapiret2. CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' EXPORTING documentheader = is_head TABLES accountgl = it_gl accountreceivable = it_customer accountpayable = it_vendor accounttax = it_tax currencyamount = it_amt return = lt_return extension2 = it_ext. LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'. IF ls_return-id = 'RW' AND ls_return-number = '609'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ov_message = ls_return-message. ov_err = abap_true. EXIT. ENDIF. ENDLOOP. IF sy-subrc <> 0. READ TABLE lt_return INTO ls_return INDEX 1. ov_belnr = ls_return-message_v2+(10). ENDIF. ENDFORM. " CALL_BAPI *&---------------------------------------------------------------------* *& Form POST_SAMPLEDOC *&---------------------------------------------------------------------* * *----------------------------------------------------------------------* FORM post_sampledoc USING "is_data TYPE gty_data is_head TYPE bapiache09 is_t001k_e TYPE gty_t001k is_t001k_a TYPE gty_t001k CHANGING ov_err TYPE char1 et_suc TYPE gtt_suc et_err TYPE gtt_err. DATA: ls_head TYPE bapiache09, ls_master TYPE zfi_margin_mas, ls_detail TYPE gty_bseg, ls_gl TYPE bapiacgl09, lt_gl TYPE STANDARD TABLE OF bapiacgl09, ls_vendor TYPE bapiacap09, lt_vendor TYPE STANDARD TABLE OF bapiacap09, ls_customer TYPE bapiacar09, lt_customer TYPE TABLE OF bapiacar09, lt_tax TYPE TABLE OF bapiactx09, ls_tax TYPE bapiactx09, lt_ext TYPE TABLE OF bapiparex, ls_ext TYPE bapiparex, ls_amount TYPE bapiaccr09, lt_amount TYPE STANDARD TABLE OF bapiaccr09, ls_return TYPE bapiret2, lt_return TYPE STANDARD TABLE OF bapiret2, lv_no TYPE posnr_acc, lv_message TYPE char255, lv_belnr TYPE bkpf-belnr, ls_err TYPE gty_err, ls_suc TYPE zfi_margin_pstng, lv_sales TYPE bseg-wrbtr, lv_disc TYPE bseg-wrbtr, lv_admin TYPE bseg-wrbtr, lv_gst_e TYPE bseg-wrbtr, lv_gst_a TYPE bseg-wrbtr, lv_vendor TYPE bseg-wrbtr. CLEAR lv_no. "********************** CLEAR ls_gl. lv_no = 10. ls_gl-itemno_acc = lv_no. ls_gl-gl_account = '0000411140'. lv_sales = '272.73'. ls_gl-item_text = 'Transfer sales'. ls_gl-profit_ctr = '000000'. ls_gl-profit_ctr+6(4) = '1435'. ls_gl-comp_code = '101'. ls_gl-alloc_nmbr = 'X140709003'. ls_gl-tax_code = 'S9'. APPEND ls_gl TO lt_gl. "Amount CLEAR: ls_amount. ls_amount-itemno_acc = lv_no. ls_amount-currency = 'AUD'. ls_amount-amt_doccur = '272.73'. APPEND ls_amount TO lt_amount. " 2nd CLEAR ls_gl. lv_no = lv_no + 10. ls_gl-itemno_acc = lv_no. ls_gl-gl_account = '0000411120'. lv_disc = '45.45'. ls_gl-item_text = 'Transfer Sales discount'. ls_gl-profit_ctr = '000000'. ls_gl-profit_ctr+6(4) = '1435'. ls_gl-comp_code = '101'. ls_gl-alloc_nmbr = 'Line item Assignment'. ls_gl-tax_code = 'S9'. APPEND ls_gl TO lt_gl. "Amount CLEAR: ls_amount. ls_amount-itemno_acc = lv_no. ls_amount-currency = 'AUD'. ls_amount-amt_doccur = '45.45'. ls_amount-amt_doccur = ls_amount-amt_doccur * -1. APPEND ls_amount TO lt_amount. * GST(e-comme ) CLEAR ls_tax. lv_no = lv_no + 10. ls_tax-itemno_acc = lv_no. ls_tax-gl_account = '0000211410'. ls_tax-tax_code = 'S9'. ls_tax-tax_rate = '10.000'. APPEND ls_tax TO lt_tax. "Amount CLEAR: ls_amount. ls_amount-itemno_acc = lv_no. ls_amount-currency = 'AUD'. ls_amount-amt_doccur = '22.73'. lv_gst_e = ls_amount-amt_doccur. ls_amount-amt_base = '227.28'. APPEND ls_amount TO lt_amount. CLEAR ls_ext. ls_ext-structure = 'ZFI_POSTING'. " ls_ext-valuepart1 = lv_no. ls_ext-valuepart2+0(6) = '000000'. ls_ext-valuepart2+6(4) = '1435'. ls_ext-valuepart3 = 'Line item assignment'. ls_ext-valuepart4 = 'Transfer GST'. APPEND ls_ext TO lt_ext. * E Commerce Admin Fee CLEAR ls_gl. lv_no = lv_no + 10. ls_gl-itemno_acc = lv_no. ls_gl-gl_account = '0000411105'. ls_gl-profit_ctr = '0000001815'. ls_gl-comp_code = '101'. ls_gl-alloc_nmbr = 'Line item assignment'. ls_gl-tax_code = 'S9'. ls_gl-item_text = '10% Admin Fee on sales'. APPEND ls_gl TO lt_gl. "Amount CLEAR: ls_amount. ls_amount-itemno_acc = lv_no. ls_amount-currency = 'AUD'. ls_amount-amt_doccur = '22.73'. lv_admin = ls_amount-amt_doccur. ls_amount-amt_doccur = ls_amount-amt_doccur * -1. APPEND ls_amount TO lt_amount. CLEAR ls_tax. lv_no = lv_no + 10. ls_tax-itemno_acc = lv_no. ls_tax-gl_account = '0000211410'. ls_tax-tax_code = 'S9'. ls_tax-tax_rate = '10.000'. APPEND ls_tax TO lt_tax. "Amount CLEAR: ls_amount. ls_amount-itemno_acc = lv_no. ls_amount-currency = 'AUD'. ls_amount-amt_doccur = '2.27'. lv_gst_a = ls_amount-amt_doccur. ls_amount-amt_base = '22.73'. ls_amount-amt_doccur = ls_amount-amt_doccur * -1. ls_amount-amt_base = ls_amount-amt_base * -1. APPEND ls_amount TO lt_amount. CLEAR ls_ext. ls_ext-structure = 'ZFI_POSTING'. ls_ext-valuepart1 = lv_no. ls_ext-valuepart2 = '0000001815'. ls_ext-valuepart3 = 'X140709003'. ls_ext-valuepart4 = 'Transfer Tax'. APPEND ls_ext TO lt_ext. * customer CLEAR ls_customer. lv_no = lv_no + 10. "item 60 ls_customer-itemno_acc = lv_no. ls_customer-customer = 'F7001'. ls_customer-profit_ctr = '0000001815'. ls_customer-comp_code = '101'. ls_customer-alloc_nmbr = 'X140709003'. ls_customer-tax_code = 'S9'. ls_customer-item_text = 'share of sales'. APPEND ls_customer TO lt_customer. "Amount CLEAR: ls_amount. ls_amount-itemno_acc = lv_no. ls_amount-currency = 'AUD'. ls_amount-amt_doccur = '225.0100'. lv_vendor = ls_amount-amt_doccur. ls_amount-amt_doccur = ls_amount-amt_doccur * -1. APPEND ls_amount TO lt_amount. * Call BAPI PERFORM call_bapi USING is_head lt_gl lt_amount lt_vendor lt_customer lt_tax lt_ext CHANGING ov_err lv_message lv_belnr. IF ov_err IS INITIAL. " ls_suc-vbeln = is_data-vbeln. ls_suc-zcode = 'CB'. ls_suc-z_bukrs_new = is_head-comp_code. " ls_suc-z_belnr_new = lv_belnr. APPEND ls_suc TO et_suc. ELSE. " ls_err-vbeln = is_data-vbeln. ls_err-status = lv_message. APPEND ls_err TO et_err. RETURN. ENDIF. ENDFORM. " POST_SAMPLEDOC *&---------------------------------------------------------------------* *& Form FRM_UPDATE_ADD_ON *&---------------------------------------------------------------------* * Update Add-on *----------------------------------------------------------------------* FORM frm_update_add_on CHANGING ov_err TYPE char1 et_suc TYPE gtt_suc et_err TYPE gtt_err. DATA: ls_err TYPE gty_err. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. APPEND LINES OF et_suc TO gt_suc. ENDFORM. " FRM_UPDATE_ADD_ON *&---------------------------------------------------------------------* * Output result *----------------------------------------------------------------------* FORM output_result . DESCRIBE TABLE gt_err LINES gv_err. gv_suc = gv_all - gv_err. * Write spool PERFORM write_spool USING gv_suc gv_err gv_all. ENDFORM. " OUTPUT_RESULT *&---------------------------------------------------------------------* *& Form WRITE_SPOOL *&---------------------------------------------------------------------* * Write spool *----------------------------------------------------------------------* FORM write_spool USING value(iv_suc) TYPE i value(iv_err) TYPE i value(iv_all) TYPE i. DATA: ls_suc TYPE zfi_margin_pstng, ls_err TYPE gty_err. IF gv_no_data IS NOT INITIAL. WRITE AT /01: text-003. RETURN. ENDIF. LOOP AT gt_suc INTO ls_suc. WRITE AT:/03 ls_suc-z_bukrs_new, 20 ls_suc-z_belnr_new. ENDLOOP. ENDFORM. " WRITE_SPOOL