Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- FUNCTION zmm_wf_mmfi_invoice.
- *"----------------------------------------------------------------------
- *"*"Lokalny interfejs:
- *" IMPORTING
- *" VALUE(I_HEADERDATA) TYPE ZFI_BAPI_INCINV_CREATE_HEADER OPTIONAL
- *" VALUE(I_TAXDATA) TYPE ZMM_T_BAPI_INCINV_CREATE_TAX OPTIONAL
- *" VALUE(I_ITEMDATA) TYPE ZMM_T_BAPI_INCINV_CREATE_ITEMS OPTIONAL
- *" VALUE(I_EXTENSIONIN) TYPE ZMM_T_EXTENSIONIN OPTIONAL
- *" VALUE(I_ACCOUNTINGDATA) TYPE ZMM_T_BAPI_INCINV_CREATE_ACC_T
- *" OPTIONAL
- *" VALUE(I_GLACCOUNTDATA) TYPE ZMM_T_API_INCINV_CREAT_GLACC_T
- *" OPTIONAL
- *" VALUE(I_MATERIALDATA) TYPE ZMM_T_BAPI_INCINV_CREATE_MAT_T
- *" OPTIONAL
- *" EXPORTING
- *" VALUE(E_NR_DOC) TYPE CHAR25
- *" VALUE(E_NR_FI_DOC) TYPE CHAR25
- *" VALUE(E_STATUS) TYPE CHAR1
- *" VALUE(E_ERROR_TYPE) TYPE CHAR25
- *" VALUE(E_ERROR_MESSAGE) TYPE BAPI_MSG
- *" VALUE(LINIE) TYPE ZCA_T_WF_ERROR_LINE_T
- *"----------------------------------------------------------------------
- DATA:
- ls_bapiache09 TYPE bapiache09,
- lv_ebeln TYPE ebeln,
- lt_ekbe TYPE TABLE OF ekbe,
- ls_ekbe TYPE ekbe,
- ls_accountingdata TYPE LINE OF zmm_t_bapi_incinv_create_acc_t,
- lt_accountingdata TYPE zmm_t_bapi_incinv_create_acc_t,
- ls_glaccountdata TYPE LINE OF zmm_t_api_incinv_creat_glacc_t,
- lt_bapiret2 TYPE TABLE OF bapiret2,
- ls_bapiret2 TYPE bapiret2,
- ls_ext TYPE LINE OF zmm_t_extensionin,
- tmp_amount LIKE i_headerdata-gross_amount,
- line TYPE LINE OF zfi_t_wf_error_line_t,
- counter TYPE int2,
- ls_tax LIKE LINE OF i_taxdata,
- bapi_incinv_create_item TYPE TABLE OF bapi_incinv_create_item,
- bapi_incinv_create_header TYPE bapi_incinv_create_header,
- invoicedocnumber TYPE bapi_incinv_fld-inv_doc_no,
- fiscalyear TYPE bapi_incinv_fld-fisc_year,
- ls_if_inv_prop TYPE zmm_ibc_if_inv_p,
- dbmtr LIKE ls_ekbe-dmbtr,
- menge LIKE ls_ekbe-menge,
- additionalheaderdata LIKE bapi_incinv_save_header_backgr,
- ls_bapi_incinv_create_item TYPE bapi_incinv_create_item,
- ls_zca_ibc_status TYPE zca_ibc_status,
- lt_ekkn TYPE TABLE OF ekkn,
- ls_ekkn TYPE ekkn.
- DATA:
- struct_converter TYPE REF TO cl_abap_conv_in_ce.
- DATA:
- uname TYPE uname,
- datavat TYPE datum,
- spos_fakt TYPE char10.
- DATA:
- lt_log_data TYPE zmm_t_ibc_if_edi_sdata_t,
- ls_rbkp TYPE rbkp,
- lt_ekpo TYPE TABLE OF ekpo,
- ls_ekpo TYPE ekpo,
- ls_if_fv_dupl TYPE zmm_ibc_if_fv_du,
- ls_log_data TYPE LINE OF zmm_t_ibc_if_edi_sdata_t.
- DATA lt_items TYPE zmm_t_bapi_incinv_create_items.
- DATA lt_itemsok TYPE TABLE OF bapi_incinv_create_item.
- FIELD-SYMBOLS:
- <fs> TYPE any,
- <fs_i_accountingdata> TYPE LINE OF zmm_t_bapi_incinv_create_acc_t,
- <fs_i_glaccountdata> TYPE LINE OF zmm_t_api_incinv_creat_glacc_t.
- * <fs_I_ITEMDATA> TYPE LINE OF ZMM_T_BAPI_INCINV_CREATE_ITEMS.
- DATA:
- text(4) TYPE c VALUE 'ABC',
- int TYPE i VALUE 258.
- DATA:
- lv_zterm TYPE dzterm,
- lv_zbd1t TYPE dzbdet,
- buffer1 TYPE xstring,
- buffer2 TYPE xstring,
- lt_if_inv_prop TYPE TABLE OF zmm_ibc_if_inv_p,
- del_costs TYPE bapi_beznk,
- lt_rbkp TYPE TABLE OF rbkp,
- lt_rbkp_del TYPE TABLE OF rbkp,
- " lv_egroup TYPE ztrmd_group,
- nr_fv TYPE string,
- days TYPE int2,
- "ls_tax like line of I_TAXDATA,
- conv TYPE REF TO cl_abap_conv_out_ce,
- view TYPE REF TO cl_abap_view_offlen.
- DATA:
- lt_ekbe_tmp TYPE TABLE OF ekbe,
- lt_ekbe_dupl TYPE TABLE OF ekbe,
- ls_ekbe_tmp TYPE ekbe.
- DATA :
- wart TYPE dmbtr,
- lv_pz TYPE menge_d,
- lv_pzk TYPE menge_d,
- wal TYPE waers.
- FIELD-SYMBOLS <poz> TYPE zfi_bapi_incinv_create_items.
- MOVE-CORRESPONDING i_headerdata TO bapi_incinv_create_header.
- IF bapi_incinv_create_header-repcountry IS NOT INITIAL AND bapi_incinv_create_header-vat_reg_no IS INITIAL.
- SELECT SINGLE stceg
- FROM lfas
- INTO bapi_incinv_create_header-vat_reg_no
- WHERE lifnr = bapi_incinv_create_header-diff_inv AND
- land1 = bapi_incinv_create_header-repcountry.
- ENDIF.
- lt_items[] = i_itemdata[].
- LOOP AT lt_items ASSIGNING <poz>.
- IF <poz>-quantity = 0. " ilośc zerowa- czyli mamy korekte wartościową
- <poz>-de_cre_ind = 'X'.
- * obliczamy ilośc fakturowaną netto
- SELECT SUM( menge ) INTO lv_pz FROM ekbe WHERE ebeln = <poz>-po_number
- AND ebelp = <poz>-po_item
- AND vgabe = '2'
- AND shkzg = 'S'.
- SELECT SUM( menge ) INTO lv_pzk FROM ekbe WHERE ebeln = <poz>-po_number
- AND ebelp = <poz>-po_item
- AND vgabe = '2'
- AND shkzg = 'H'.
- <poz>-quantity = lv_pz - lv_pzk.
- ENDIF.
- IF <poz>-item_amount < 0. " jeśli ujemna watość - to odwracamy znak i sterujemy wskaźnikiem DE_CRE_IND
- <poz>-item_amount = <poz>-item_amount * ( -1 ).
- IF <poz>-de_cre_ind = 'X'.
- <poz>-de_cre_ind = ''.
- ELSE.
- <poz>-de_cre_ind = 'X'.
- ENDIF.
- ENDIF.
- SELECT SINGLE * FROM ekpo INTO ls_ekpo WHERE ebeln = <poz>-po_number
- AND ebelp = <poz>-po_item.
- IF sy-subrc = 0.
- IF ls_ekpo-meins <> ls_ekpo-bprme.
- IF <poz>-po_pr_uom IS INITIAL.
- <poz>-po_pr_uom = ls_ekpo-bprme.
- READ TABLE i_accountingdata ASSIGNING <fs_i_accountingdata> WITH KEY invoice_doc_item = <poz>-invoice_doc_item.
- IF sy-subrc = 0.
- <fs_i_accountingdata>-po_pr_uom = ls_ekpo-bprme.
- ENDIF.
- ENDIF.
- ENDIF.
- ENDIF.
- ENDLOOP.
- lt_itemsok[] = lt_items[].
- LOOP AT i_extensionin INTO ls_ext.
- CASE ls_ext-structure.
- WHEN 'ZAMOWIENIE'.
- lv_ebeln = ls_ext-valuepart1.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = lv_ebeln
- IMPORTING
- output = lv_ebeln.
- WHEN 'UZYTKOWNIK'.
- uname = ls_ext-valuepart1.
- WHEN 'DATAVAT'.
- datavat = ls_ext-valuepart1.
- * CONCATENATE ls_ext-valuepart1+6(2) ls_ext-valuepart1+4(2) ls_ext-valuepart1(4) INTO datavat.
- CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
- EXPORTING
- date = datavat
- EXCEPTIONS
- plausibility_check_failed = 1
- OTHERS = 2.
- IF sy-subrc <> 0.
- CLEAR datavat.
- ENDIF.
- WHEN 'SPOSOB_PRZETWARZANIA'.
- spos_fakt = ls_ext-valuepart1.
- WHEN 'KWOTA_DODATKOWA'.
- del_costs = ls_ext-valuepart1.
- WHEN 'NR_FV '.
- nr_fv = ls_ext-valuepart1.
- ENDCASE.
- ENDLOOP.
- SELECT * FROM zmm_ibc_if_inv_p INTO TABLE lt_if_inv_prop.
- SELECT belnr
- bwart
- buzei
- xblnr
- gjahr
- shkzg
- vgabe
- dmbtr
- FROM ekbe INTO CORRESPONDING FIELDS OF TABLE lt_ekbe WHERE ebeln = lv_ebeln.
- lt_ekbe_dupl = lt_ekbe.
- DELETE lt_ekbe_dupl WHERE vgabe NE 'P' AND vgabe = '1'.
- * CALL FUNCTION 'ZMM_IBC_IF_PO_SUM'
- * EXPORTING
- * ebeln = lv_ebeln
- * IMPORTING
- * wart = wart
- * wal = wal
- * TABLES
- * it_ekbe = lt_ekbe.
- " and ( VGABE = 'P' OR
- " VGABE = '2' ).
- " ).
- IF sy-subrc EQ 0.
- IF lines( lt_ekbe_dupl ) > 0.
- SELECT belnr gjahr rbstat FROM rbkp INTO CORRESPONDING FIELDS OF TABLE lt_rbkp FOR ALL ENTRIES IN lt_ekbe_dupl
- WHERE belnr = lt_ekbe_dupl-belnr AND gjahr = lt_ekbe_dupl-gjahr AND
- xblnr = i_headerdata-ref_doc_no.
- IF sy-subrc EQ 0.
- LOOP AT lt_rbkp INTO ls_rbkp.
- * "FV do usunięcia
- * IF ls_rbkp-rbstat EQ 'A' OR ls_rbkp-rbstat EQ 'D'.
- * APPEND ls_rbkp TO lt_rbkp_del.
- * CLEAR lt_bapiret2.
- * ENDIF.
- CLEAR ls_rbkp.
- READ TABLE lt_if_inv_prop INTO ls_if_inv_prop WITH KEY klucz = 'DUPLICATE_CHECK'.
- IF ls_if_inv_prop-wart EQ 'X'.
- IF ls_rbkp-rbstat EQ '5'.
- e_status = 'E'.
- e_error_type = 'VALIDATE_ERROR'.
- e_error_message = 'Istnieje już zaksięgowana faktura o danym ID'.
- RETURN.
- ENDIF.
- ENDIF.
- ENDLOOP.
- ENDIF.
- ENDIF.
- ENDIF.
- SELECT SINGLE zterm zbd1t FROM ekko INTO (lv_zterm , lv_zbd1t) WHERE ebeln = lv_ebeln.
- " tego nie musimy już dodawać bo otrzymujemy pozycje.
- * SELECT ebeln ebelp meins matnr bprme mtart mwskz netpr menge mwskz FROM ekpo INTO CORRESPONDING FIELDS OF TABLE lt_ekpo WHERE ebeln = lv_ebeln.
- * IF sy-subrc EQ 0.
- *
- * tmp_amount = i_headerdata-gross_amount.
- * LOOP AT i_taxdata INTO ls_tax.
- * tmp_amount = tmp_amount - ls_tax-tax_amount. "liczymy netto
- * ENDLOOP.
- * tmp_amount = tmp_amount + del_costs. " uwzględnenie kwoty dodatkowej
- * IF tmp_amount < 0. " jezeli ujemne to 0
- * tmp_amount = 0.
- *
- * " wywalamy FV z ujemnymi wartościami
- * bapi_incinv_create_header-gross_amount = 0.
- * del_costs = 0.
- * ENDIF.
- *
- * counter = 1.
- *
- * LOOP AT lt_ekpo INTO ls_ekpo.
- *
- * ls_bapi_incinv_create_item-invoice_doc_item = counter.
- * ls_bapi_incinv_create_item-po_number = ls_ekpo-ebeln.
- * ls_bapi_incinv_create_item-quantity = ls_ekpo-menge.
- * ls_bapi_incinv_create_item-po_item = ls_ekpo-ebelp.
- * ls_bapi_incinv_create_item-item_amount = ls_ekpo-netpr.
- * ls_bapi_incinv_create_item-po_unit = ls_ekpo-meins.
- * ls_bapi_incinv_create_item-po_unit_iso = ls_ekpo-meins.
- * ls_bapi_incinv_create_item-po_unit = ls_ekpo-meins.
- * ls_bapi_incinv_create_item-po_unit_iso = ls_ekpo-meins.
- * ls_bapi_incinv_create_item-po_pr_uom = ls_ekpo-bprme.
- * ls_bapi_incinv_create_item-po_pr_uom_iso = ls_ekpo-bprme.
- * ls_bapi_incinv_create_item-tax_code = ls_ekpo-mwskz.
- *
- * if ls_bapi_incinv_create_item-tax_code is initial.
- * READ TABLE I_TAXDATA into ls_tax index 1.
- * if sy-subrc eq 0.
- * ls_bapi_incinv_create_item-tax_code = ls_tax-tax_code.
- * endif.
- * endif.
- *
- * APPEND ls_bapi_incinv_create_item TO bapi_incinv_create_item.
- * ENDLOOP.
- * ENDIF.
- "loop at
- "bapi_incinv_create_header-planning_level = 'F3'.
- * bapi_incinv_create_header-del_costs = del_costs.
- bapi_incinv_create_header-person_ext = uname .
- * bapi_incinv_create_header-inv_rec_date = sy-datum.
- bapi_incinv_create_header-pmnttrms = lv_zterm.
- bapi_incinv_create_header-person_ext = uname .
- bapi_incinv_create_header-paymt_ref = nr_fv.
- IF bapi_incinv_create_header-pmnttrms IS NOT INITIAL.
- days = bapi_incinv_create_header-dsct_days1.
- CLEAR bapi_incinv_create_header-dsct_days1.
- ENDIF.
- IF
- bapi_incinv_create_header-bline_date EQ 0.
- bapi_incinv_create_header-bline_date = bapi_incinv_create_header-doc_date.
- ENDIF.
- * bapi_incinv_create_header-RET_DUE_PROP = '00000000'.
- IF lv_zbd1t IS NOT INITIAL.
- days = lv_zbd1t.
- ENDIF.
- * IF bapi_incinv_create_header-INV_REC_DATE = ''.
- *
- * bapi_incinv_create_header-INV_REC_DATE = '00000000'.
- *
- * ENDIF.
- "bapi_incinv_create_header-planning_date = bapi_incinv_create_header-bline_date + days.
- " dodawanie zer wiodących
- LOOP AT i_accountingdata ASSIGNING <fs_i_accountingdata>.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_accountingdata>-gl_account
- IMPORTING
- output = <fs_i_accountingdata>-gl_account.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_accountingdata>-costcenter
- IMPORTING
- output = <fs_i_accountingdata>-costcenter.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_accountingdata>-asset_no
- IMPORTING
- output = <fs_i_accountingdata>-asset_no.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_accountingdata>-orderid
- IMPORTING
- output = <fs_i_accountingdata>-orderid.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_accountingdata>-bus_area
- IMPORTING
- output = <fs_i_accountingdata>-bus_area.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_accountingdata>-profit_ctr
- IMPORTING
- output = <fs_i_accountingdata>-profit_ctr.
- *CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- * EXPORTING
- * input = <fs_i_accountingdata>-PROFIT_CTR
- * IMPORTING
- * output = <fs_i_accountingdata>-PROFIT_CTR.
- ENDLOOP.
- LOOP AT i_glaccountdata ASSIGNING <fs_i_glaccountdata>.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_glaccountdata>-gl_account
- IMPORTING
- output = <fs_i_glaccountdata>-gl_account.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_glaccountdata>-costcenter
- IMPORTING
- output = <fs_i_glaccountdata>-costcenter.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_glaccountdata>-orderid
- IMPORTING
- output = <fs_i_glaccountdata>-orderid.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_glaccountdata>-profit_ctr
- IMPORTING
- output = <fs_i_glaccountdata>-profit_ctr.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_glaccountdata>-bus_area
- IMPORTING
- output = <fs_i_glaccountdata>-bus_area.
- ENDLOOP.
- * LOOP AT I_ITEMDATA ASSIGNING <fs_I_ITEMDATA>.
- IF lines( lt_itemsok ) > 0.
- SELECT ek~ebeln ek~ebelp ek~menge ek~sakto ek~kostl ek~paobjnr ek~zekkn ek~vproz
- FROM ekkn AS ek
- INNER JOIN ekpo AS ep
- ON ek~ebeln = ep~ebeln
- AND ek~ebelp = ep~ebelp
- INTO CORRESPONDING FIELDS OF TABLE lt_ekkn
- FOR ALL ENTRIES IN lt_itemsok
- WHERE ek~ebeln = lt_itemsok-po_number AND
- ek~ebelp = lt_itemsok-po_item AND
- ep~vrtkz = '1'.
- ENDIF.
- LOOP AT lt_itemsok ASSIGNING FIELD-SYMBOL(<fs_i_itemdata>).
- CLEAR ls_accountingdata.
- CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
- EXPORTING
- input = <fs_i_itemdata>-po_unit
- language = sy-langu
- IMPORTING
- output = <fs_i_itemdata>-po_unit.
- CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
- EXPORTING
- input = <fs_i_itemdata>-po_unit_iso
- language = sy-langu
- IMPORTING
- output = <fs_i_itemdata>-po_unit_iso.
- IF sy-subrc <> 0.
- * Implement suitable error handling here
- ENDIF.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_itemdata>-po_number
- IMPORTING
- output = <fs_i_itemdata>-po_number.
- IF <fs_i_itemdata>-ref_doc IS NOT INITIAL.
- CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
- EXPORTING
- input = <fs_i_itemdata>-ref_doc
- IMPORTING
- output = <fs_i_itemdata>-ref_doc.
- ENDIF.
- ls_accountingdata-invoice_doc_item = <fs_i_itemdata>-invoice_doc_item.
- * ls_accountingdata-xunpl = 'X'. " to ma być zawsze X to zaznaczamy tylko w przypadku gyd mamy jakąś nieplanowana dekretacje
- ls_accountingdata-tax_code = <fs_i_itemdata>-tax_code.
- * ls_accountingdata-ITEM_AMOUNT = <fs_i_itemdata>-item_amount.
- ls_accountingdata-po_unit = <fs_i_itemdata>-po_unit.
- " dodajemy segment z dekretacją.
- LOOP AT lt_ekkn INTO ls_ekkn WHERE ebeln = <fs_i_itemdata>-po_number AND
- ebelp = <fs_i_itemdata>-po_item.
- ls_accountingdata-serial_no = ls_ekkn-zekkn.
- ls_accountingdata-quantity = ls_ekkn-menge.
- TRY.
- ls_accountingdata-item_amount = ( <fs_i_itemdata>-item_amount * ls_ekkn-vproz ) / 100.
- CATCH cx_sy_zerodivide.
- * write:/5 'Divide by zero caught'.
- ENDTRY.
- ls_accountingdata-gl_account = ls_ekkn-sakto.
- ls_accountingdata-costcenter = ls_ekkn-kostl.
- ls_accountingdata-profit_segm_no = ls_ekkn-paobjnr.
- APPEND ls_accountingdata TO lt_accountingdata.
- ENDLOOP.
- ENDLOOP.
- IF lines( i_accountingdata ) = 0.
- APPEND LINES OF lt_accountingdata TO i_accountingdata.
- ENDIF.
- READ TABLE lt_bapiret2 TRANSPORTING NO FIELDS WITH KEY type = 'E'.
- IF ( sy-subrc EQ 0 OR spos_fakt = 'PARK' ).
- " if lines( lt_rbkp_del ) eq 0. "jeżeli odnaleziono duplikat to nie zachowuj FV w przypadku błedu
- * if spos_fakt NE 'PARK'.
- * E_NR_DOC = '0'.
- * E_STATUS = 'E'.
- * E_ERROR_TYPE = 'LOGIC_ERROR'.
- * E_ERROR_MESSAGE = ''.
- * endif.
- LOOP AT lt_bapiret2 INTO ls_bapiret2.
- line-e_status = ls_bapiret2-id.
- line-e_error_type = ls_bapiret2-number.
- line-e_error_message = ls_bapiret2-message.
- APPEND line TO linie.
- ENDLOOP.
- CLEAR lt_bapiret2[].
- CLEAR invoicedocnumber.
- CLEAR fiscalyear.
- bapi_incinv_create_header-person_ext = uname .
- * bapi_incinv_create_header-header_txt = 'WF_SYSTEM'. " znacznik na podstawie którego w Enhancement determinowany jest
- " czy faktura ma być "PARKED" czy "HELD" -
- "BAPI_INCINV_CREATE_HEADER-ITEM_TXT = '
- " Dodajemy status D żeby faktura się zachowała.
- DATA: lv_INVOICESTATUS TYPE BAPI_INCINV_CREATE_STATUS-RBSTAT VALUE 'D'.
- CLEAR ls_accountingdata.
- READ TABLE i_accountingdata INTO ls_accountingdata INDEX 1.
- IF ls_accountingdata-invoice_doc_item IS NOT INITIAL.
- READ TABLE i_glaccountdata INTO ls_glaccountdata INDEX 1.
- IF ls_glaccountdata-gl_account IS NOT INITIAL.
- IF lines( i_accountingdata ) < 999 . " jeżeli mamy mniej niż 999 pozycji
- CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
- EXPORTING
- headerdata = bapi_incinv_create_header
- * ADDRESSDATA =
- IMPORTING
- invoicedocnumber = invoicedocnumber
- fiscalyear = fiscalyear
- TABLES
- itemdata = lt_itemsok "LT_ITEMS "I_ITEMDATA
- accountingdata = i_accountingdata
- glaccountdata = i_glaccountdata
- "materialdata = i_materialdata
- taxdata = i_taxdata
- * WITHTAXDATA =
- * VENDORITEMSPLITDATA =
- return = lt_bapiret2
- . "extensionin = i_extensionin
- ELSE.
- CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE1'
- EXPORTING
- headerdata = bapi_incinv_create_header
- INVOICESTATUS = lv_INVOICESTATUS
- * ADDRESSDATA =
- IMPORTING
- invoicedocnumber = invoicedocnumber
- fiscalyear = fiscalyear
- TABLES
- itemdata = lt_itemsok "LT_ITEMS "I_ITEMDATA
- accountingdata = i_accountingdata
- glaccountdata = i_glaccountdata
- "materialdata = i_materialdata
- taxdata = i_taxdata
- * WITHTAXDATA =
- * VENDORITEMSPLITDATA =
- return = lt_bapiret2
- . "extensionin = i_extensionin
- ENDIF.
- ELSE.
- IF lines( i_accountingdata ) < 999 .
- CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
- EXPORTING
- headerdata = bapi_incinv_create_header
- * ADDRESSDATA =
- IMPORTING
- invoicedocnumber = invoicedocnumber
- fiscalyear = fiscalyear
- TABLES
- itemdata = lt_itemsok "LT_ITEMS "I_ITEMDATA
- accountingdata = i_accountingdata
- "glaccountdata = i_glaccountdata
- "materialdata = i_materialdata
- taxdata = i_taxdata
- * WITHTAXDATA =
- * VENDORITEMSPLITDATA =
- return = lt_bapiret2
- . "extensionin = i_extensionin
- ELSE.
- CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE1'
- EXPORTING
- headerdata = bapi_incinv_create_header
- INVOICESTATUS = lv_INVOICESTATUS
- * ADDRESSDATA =
- IMPORTING
- invoicedocnumber = invoicedocnumber
- fiscalyear = fiscalyear
- TABLES
- itemdata = lt_itemsok "LT_ITEMS "I_ITEMDATA
- accountingdata = i_accountingdata
- "glaccountdata = i_glaccountdata
- "materialdata = i_materialdata
- taxdata = i_taxdata
- * WITHTAXDATA =
- * VENDORITEMSPLITDATA =
- return = lt_bapiret2
- . "extensionin = i_extensionin
- ENDIF.
- ENDIF.
- ELSE.
- IF lines( i_accountingdata ) < 999 .
- CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
- EXPORTING
- headerdata = bapi_incinv_create_header
- * ADDRESSDATA =
- IMPORTING
- invoicedocnumber = invoicedocnumber
- fiscalyear = fiscalyear
- TABLES
- itemdata = lt_itemsok " LT_ITEMS "I_ITEMDATA
- "accountingdata = i_accountingdata
- "glaccountdata = i_glaccountdata
- "materialdata = i_materialdata
- taxdata = i_taxdata
- * WITHTAXDATA =
- * VENDORITEMSPLITDATA =
- return = lt_bapiret2
- . "extensionin = i_extensionin
- ELSE.
- CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE1'
- EXPORTING
- headerdata = bapi_incinv_create_header
- INVOICESTATUS = lv_INVOICESTATUS
- * ADDRESSDATA =
- IMPORTING
- invoicedocnumber = invoicedocnumber
- fiscalyear = fiscalyear
- TABLES
- itemdata = lt_itemsok " LT_ITEMS "I_ITEMDATA
- "accountingdata = i_accountingdata
- "glaccountdata = i_glaccountdata
- "materialdata = i_materialdata
- taxdata = i_taxdata
- * WITHTAXDATA =
- * VENDORITEMSPLITDATA =
- return = lt_bapiret2
- . "extensionin = i_extensionin
- ENDIF.
- ENDIF.
- "E_NR_DOC = INVOICEDOCNUMBER && FISCALYEAR .
- CONCATENATE invoicedocnumber fiscalyear INTO e_nr_doc.
- IF spos_fakt NE 'PARK'.
- "E_NR_DOC = '0'.
- e_status = 'E'.
- e_error_type = 'LOGIC_ERROR'.
- e_error_message = 'Problem z księgowaniem SAP'.
- ELSE.
- READ TABLE lt_bapiret2 TRANSPORTING NO FIELDS WITH KEY type = 'E'.
- IF sy-subrc EQ 0.
- e_status = 'E'.
- e_error_type = 'LOGIC_ERROR'.
- LOOP AT lt_bapiret2 INTO ls_bapiret2.
- line-e_status = ls_bapiret2-id.
- line-e_error_type = ls_bapiret2-number.
- line-e_error_message = ls_bapiret2-message.
- APPEND line TO linie.
- ENDLOOP.
- ELSE.
- IF invoicedocnumber IS INITIAL.
- e_status = 'E'.
- e_error_type = 'VALIDATE_ERROR'.
- LOOP AT lt_bapiret2 INTO ls_bapiret2.
- line-e_status = ls_bapiret2-id.
- line-e_error_type = ls_bapiret2-number.
- line-e_error_message = ls_bapiret2-message.
- APPEND line TO linie.
- ENDLOOP.
- ELSE.
- e_status = 'S'.
- ENDIF.
- ENDIF.
- ENDIF.
- "endif.
- ELSE.
- CONCATENATE invoicedocnumber fiscalyear INTO e_nr_doc.
- e_status = 'S'.
- ENDIF.
- IF invoicedocnumber IS NOT INITIAL.
- "kasowanie FV
- * LOOP AT lt_rbkp_del INTO ls_rbkp.
- * CALL FUNCTION 'BAPI_INCOMINGINVOICE_DELETE'
- * EXPORTING
- * invoicedocnumber = ls_rbkp-belnr
- * fiscalyear = ls_rbkp-gjahr
- * TABLES
- * return = lt_bapiret2.
- * ENDLOOP.
- ls_if_fv_dupl-ebeln = lv_ebeln.
- ls_if_fv_dupl-xbelnr = i_headerdata-ref_doc_no.
- MODIFY zmm_ibc_if_fv_du FROM ls_if_fv_dupl .
- CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
- * EXPORTING
- * WAIT =
- * IMPORTING
- * RETURN =
- .
- "Zmiana numeru zwracanaego na numer dokumentu FI w przyapdku gdy wszysto się powiodło
- DATA:
- ls_bkpf TYPE bkpf,
- * ls_rbkp TYPE rbkp,
- lv_scc TYPE char1.
- DO 9 TIMES.
- SELECT SINGLE bukrs
- belnr
- gjahr
- usnam
- cpudt FROM bkpf INTO CORRESPONDING FIELDS OF
- ls_bkpf WHERE
- awtyp = 'RMRP'
- AND awkey = e_nr_doc.
- IF sy-subrc EQ 0.
- "tylko w wypadku powodzenia - w przeciwnym zostaje numer faktry
- CONCATENATE ls_bkpf-bukrs ls_bkpf-belnr ls_bkpf-gjahr INTO e_nr_fi_doc.
- "e_nr_doc = ls_bkpf-belnr.
- CLEAR ls_zca_ibc_status.
- ls_zca_ibc_status-mandt = sy-mandt.
- ls_zca_ibc_status-awkey = ls_bkpf-awkey.
- ls_zca_ibc_status-nr_dok = ls_bkpf-belnr.
- ls_zca_ibc_status-bukrs = ls_bkpf-bukrs.
- ls_zca_ibc_status-gjahr = ls_bkpf-gjahr.
- ls_zca_ibc_status-referencja = i_headerdata-ref_doc_no.
- ls_zca_ibc_status-usnam = ls_bkpf-usnam.
- ls_zca_ibc_status-status = '1'.
- ls_zca_ibc_status-bldat = ls_bkpf-cpudt.
- ls_zca_ibc_status-sys_source = sy-sysid.
- ls_zca_ibc_status-belnr_mm = invoicedocnumber.
- ls_zca_ibc_status-gjahr_mm = fiscalyear.
- ls_zca_ibc_status-vatdate = datavat.
- ls_zca_ibc_status-barcode = bapi_incinv_create_header-header_txt.
- MODIFY zca_ibc_status FROM ls_zca_ibc_status.
- CALL FUNCTION 'ZMM_WF_IF_FI_CHANGE' "STARTING NEW TASK sy-uzeit
- EXPORTING
- i_bukrs = ls_bkpf-bukrs
- i_belnr = ls_bkpf-belnr
- i_gjahr = ls_bkpf-gjahr
- i_fv = nr_fv
- datavat = datavat
- uname = uname
- IMPORTING
- rv_success = lv_scc.
- EXIT.
- ELSE.
- WAIT UP TO 1 SECONDS.
- ENDIF.
- ENDDO.
- ENDIF.
- "zmiana w sposobie zwracania numerów
- IF ls_bkpf IS INITIAL AND invoicedocnumber IS NOT INITIAL AND fiscalyear IS NOT INITIAL.
- SELECT SINGLE *
- INTO CORRESPONDING FIELDS OF ls_rbkp
- FROM rbkp
- WHERE belnr = invoicedocnumber AND
- gjahr = fiscalyear.
- IF sy-subrc = 0.
- CLEAR ls_zca_ibc_status.
- ls_zca_ibc_status-mandt = sy-mandt.
- ls_zca_ibc_status-nr_dok = ls_rbkp-belnr.
- * ls_ZCA_IBC_STATUS-BUKRS = ls_bkpf-bukrs.
- CONCATENATE invoicedocnumber fiscalyear INTO ls_zca_ibc_status-awkey.
- ls_zca_ibc_status-gjahr = ls_rbkp-gjahr.
- ls_zca_ibc_status-referencja = ls_rbkp-xblnr.
- ls_zca_ibc_status-usnam = ls_rbkp-usnam.
- ls_zca_ibc_status-status = '1'.
- ls_zca_ibc_status-bldat = ls_rbkp-cpudt.
- ls_zca_ibc_status-sys_source = sy-sysid.
- ls_zca_ibc_status-belnr_mm = invoicedocnumber.
- ls_zca_ibc_status-gjahr_mm = fiscalyear.
- ls_zca_ibc_status-vatdate = datavat.
- ls_zca_ibc_status-barcode = bapi_incinv_create_header-header_txt.
- MODIFY zca_ibc_status FROM ls_zca_ibc_status.
- ENDIF.
- ENDIF.
- CONCATENATE invoicedocnumber fiscalyear INTO e_nr_doc.
- "e_nr_doc =
- "logowanie komunikatu przychodzącego
- conv = cl_abap_conv_out_ce=>create(
- encoding = 'UTF-8'
- endian = 'L' ).
- view = cl_abap_view_offlen=>create_legacy_view( i_headerdata ).
- conv->convert_struc( EXPORTING data = i_headerdata
- view = view
- IMPORTING buffer = buffer1 ).
- ls_log_data-name = 'I_HEADERDATA'.
- ls_log_data-sdata = buffer1.
- APPEND ls_log_data TO lt_log_data.
- view = cl_abap_view_offlen=>create_legacy_view( ls_tax ).
- LOOP AT i_taxdata INTO ls_tax.
- conv->convert_struc( EXPORTING data = ls_tax
- view = view
- IMPORTING buffer = buffer1 ).
- ls_log_data-name = 'I_TAXDATA'.
- ls_log_data-sdata = buffer1.
- APPEND ls_log_data TO lt_log_data.
- ENDLOOP.
- view = cl_abap_view_offlen=>create_legacy_view( ls_ext ).
- LOOP AT i_extensionin INTO ls_ext.
- conv->convert_struc( EXPORTING data = ls_ext
- view = view
- IMPORTING buffer = buffer1 ).
- ls_log_data-name = 'I_EXTENSIONIN'.
- ls_log_data-sdata = buffer1.
- APPEND ls_log_data TO lt_log_data.
- ENDLOOP.
- .
- view = cl_abap_view_offlen=>create_legacy_view( ls_bapiret2 ).
- LOOP AT lt_bapiret2 INTO ls_bapiret2.
- conv->convert_struc( EXPORTING data = ls_bapiret2
- view = view
- IMPORTING buffer = buffer1 ).
- ls_log_data-name = 'BAPIRET2'.
- ls_log_data-sdata = buffer1.
- APPEND ls_log_data TO lt_log_data.
- ENDLOOP.
- CALL FUNCTION 'ZMM_IBC_IF_LOG_MSG' STARTING NEW TASK sy-uzeit
- TABLES
- log_tab = lt_log_data.
- "koniec logowania
- ENDFUNCTION.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement