Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- FUNCTION z_fieb_902_algorithm.
- *"----------------------------------------------------------------------
- *"*"Lokalny interfejs:
- *" IMPORTING
- *" REFERENCE(I_NOTE_TO_PAYEE) TYPE STRING OPTIONAL
- *" REFERENCE(I_COUNTRY) TYPE LAND1 OPTIONAL
- *" TABLES
- *" T_AVIP_IN STRUCTURE AVIP OPTIONAL
- *" T_AVIP_OUT STRUCTURE AVIP
- *" T_FILTER1 OPTIONAL
- *" T_FILTER2 OPTIONAL
- *"----------------------------------------------------------------------
- DATA: l_note_to_payee TYPE string,
- BEGIN OF kidno_tab OCCURS 10,
- nummer LIKE febep-kidno,
- END OF kidno_tab,
- dbtable TYPE char45,
- maxlength TYPE int2,
- charkey TYPE char45,
- keyname TYPE char45,
- s_bsik TYPE STANDARD TABLE OF bsik,
- s_bsid TYPE STANDARD TABLE OF bsid,
- h_bsik TYPE bsik,
- h_bsid TYPE bsid,
- exception TYPE sy-subrc,
- lv_off TYPE i,
- lv_off1 TYPE i,
- lv_note TYPE string,
- lv_ref TYPE string,
- lv_lines TYPE i,
- lv_vat_amt TYPE fm_fipex,
- ls_zibc_debug TYPE zibc_debug,
- lv_moff TYPE i,
- lv_mlen TYPE i,
- lt_str TYPE TABLE OF string,
- lv_str TYPE string.
- FIELD-SYMBOLS: <resultstring> TYPE any,
- <febep> TYPE febep,
- <febko> TYPE febko.
- " DEBUG
- SELECT SINGLE *
- FROM zibc_debug
- INTO CORRESPONDING FIELDS OF ls_zibc_debug
- WHERE fname EQ 'Z_FIEB_902_ALGORITHM'.
- WHILE ls_zibc_debug-xdebug EQ abap_true.
- SELECT SINGLE *
- FROM zibc_debug
- INTO CORRESPONDING FIELDS OF ls_zibc_debug
- WHERE fname EQ 'Z_FIEB_902_ALGORITHM'.
- WAIT UP TO 5 SECONDS.
- ENDWHILE.
- *break: pbednarski, mkapala.
- TRY.
- ASSIGN ('(RFEBBU10)FEBEP') TO <febep>.
- ASSIGN ('(RFEBBU10)FEBKO') TO <febko>.
- CATCH cx_root.
- ENDTRY.
- l_note_to_payee = i_note_to_payee.
- IF NOT l_note_to_payee IS INITIAL.
- *reference information is free form, put it into good shape
- IF i_country = 'NO'.
- CALL FUNCTION 'FIEB_EXTRACT_MINUS_NUMBERS'
- EXPORTING
- i_note_to_payee = l_note_to_payee
- TABLES
- e_numbers = kidno_tab.
- ELSE.
- * call function 'FIEB_EXTRACT_NUMBERS'
- * exporting
- * i_note_to_payee = l_note_to_payee
- * tables
- * e_numbers = kidno_tab.
- REFRESH lt_str.
- SPLIT i_note_to_payee AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_str.
- LOOP AT lt_str INTO lv_str.
- lv_note = lv_note && lv_str.
- ENDLOOP.
- IF 1 = 2.
- FIND FIRST OCCURRENCE OF '<REF>' IN l_note_to_payee MATCH OFFSET lv_off.
- IF sy-subrc = 0.
- FIND FIRST OCCURRENCE OF '</REF>' IN l_note_to_payee MATCH OFFSET lv_off1.
- IF sy-subrc = 0.
- lv_off = lv_off + 5.
- lv_off1 = lv_off1 - lv_off.
- lv_ref = l_note_to_payee+lv_off(lv_off1).
- APPEND lv_ref TO kidno_tab.
- ENDIF.
- ENDIF.
- ENDIF.
- FIND FIRST OCCURRENCE OF '<REF>' IN lv_note MATCH OFFSET lv_off.
- IF sy-subrc = 0.
- FIND FIRST OCCURRENCE OF '</REF>' IN lv_note MATCH OFFSET lv_off1.
- IF sy-subrc = 0.
- lv_off = lv_off + 5.
- lv_off1 = lv_off1 - lv_off.
- lv_ref = lv_note+lv_off(lv_off1).
- APPEND lv_ref TO kidno_tab.
- ENDIF.
- ENDIF.
- DELETE ADJACENT DUPLICATES FROM kidno_tab.
- ENDIF.
- ELSE.
- *reference information is already structured
- LOOP AT t_avip_in WHERE sfeld = 'KIDNO'.
- kidno_tab-nummer = t_avip_in-swert.
- APPEND kidno_tab.
- ENDLOOP.
- ENDIF. "structured or unstructured reference
- REFRESH t_avip_out.
- LOOP AT kidno_tab.
- CALL FUNCTION 'FI_PAYREF_CHECK'
- EXPORTING
- i_kidno = kidno_tab-nummer
- i_land1 = i_country
- EXCEPTIONS
- kidno_invalid = 1.
- IF sy-subrc = 0.
- dbtable = 'BSID'.
- ASSIGN s_bsid TO <resultstring>.
- maxlength = 11.
- charkey = kidno_tab-nummer.
- keyname = 'KIDNO'.
- PERFORM search_with_leading_zeroes(rfebbu10) USING
- dbtable
- maxlength
- charkey
- keyname
- <resultstring>
- exception.
- IF exception = 0.
- LOOP AT s_bsid INTO h_bsid.
- t_avip_out-koart = 'D'.
- t_avip_out-konto = h_bsid-kunnr.
- t_avip_out-sfeld = 'BELNR'.
- t_avip_out-swert = h_bsid-belnr.
- t_avip_out-swert+10(4) = h_bsid-gjahr.
- APPEND t_avip_out.
- ENDLOOP.
- ELSE. "No debtors found. Search for creditors.
- dbtable = 'BSIK'.
- ASSIGN s_bsik TO <resultstring>.
- PERFORM search_with_leading_zeroes(rfebbu10) USING
- dbtable
- maxlength
- charkey
- keyname
- <resultstring>
- exception.
- IF exception = 0.
- LOOP AT s_bsik INTO h_bsik.
- t_avip_out-koart = 'K'.
- t_avip_out-konto = h_bsik-lifnr.
- t_avip_out-sfeld = 'BELNR'.
- t_avip_out-swert = h_bsik-belnr.
- t_avip_out-swert+10(4) = h_bsik-gjahr.
- APPEND t_avip_out.
- ENDLOOP.
- ENDIF.
- ENDIF.
- ENDIF.
- ENDLOOP.
- ******->** IBC 2018-06-16 - payment split info
- ***** IF <febep> is ASSIGNED. "-fipex IS INITIAL.
- ***** REFRESH lt_str.
- ***** SPLIT i_note_to_payee AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_str.
- ***** LOOP AT lt_str INTO lv_str.
- ***** lv_note = lv_note && lv_str.
- ***** ENDLOOP.
- *****
- ***** FIND FIRST OCCURRENCE OF '/VAT/' IN lv_note MATCH OFFSET lv_moff MATCH LENGTH lv_mlen.
- ***** IF sy-subrc = 0.
- ***** lv_moff = lv_moff + lv_mlen.
- ***** lv_vat_amt = lv_note+lv_moff.
- ***** FIND FIRST OCCURRENCE OF '/' IN lv_vat_amt MATCH OFFSET lv_moff.
- ***** IF sy-subrc = 0.
- ***** lv_vat_amt = lv_vat_amt(lv_moff).
- ***** <febep>-fipex = lv_vat_amt.
- ***** ENDIF.
- ***** ENDIF.
- ***** CLEAR: lv_moff, lv_mlen.
- ***** ENDIF.
- ******<-** IBC 2018-06-16 - payment split info
- ENDFUNCTION.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement