Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 6.30 KB | None | 0 0
  1. FUNCTION z_fieb_902_algorithm.
  2. *"----------------------------------------------------------------------
  3. *"*"Lokalny interfejs:
  4. *"  IMPORTING
  5. *"     REFERENCE(I_NOTE_TO_PAYEE) TYPE  STRING OPTIONAL
  6. *"     REFERENCE(I_COUNTRY) TYPE  LAND1 OPTIONAL
  7. *"  TABLES
  8. *"      T_AVIP_IN STRUCTURE  AVIP OPTIONAL
  9. *"      T_AVIP_OUT STRUCTURE  AVIP
  10. *"      T_FILTER1 OPTIONAL
  11. *"      T_FILTER2 OPTIONAL
  12. *"----------------------------------------------------------------------
  13.  
  14.   DATA: l_note_to_payee TYPE string,
  15.         BEGIN OF kidno_tab OCCURS 10,
  16.           nummer LIKE febep-kidno,
  17.         END OF kidno_tab,
  18.         dbtable       TYPE char45,
  19.         maxlength     TYPE  int2,
  20.         charkey       TYPE  char45,
  21.         keyname       TYPE  char45,
  22.         s_bsik        TYPE STANDARD TABLE OF bsik,
  23.         s_bsid        TYPE STANDARD TABLE OF bsid,
  24.         h_bsik        TYPE bsik,
  25.         h_bsid        TYPE bsid,
  26.         exception     TYPE sy-subrc,
  27.         lv_off        TYPE i,
  28.         lv_off1       TYPE i,
  29.         lv_note       TYPE string,
  30.         lv_ref        TYPE string,
  31.         lv_lines      TYPE                   i,
  32.         lv_vat_amt    TYPE                   fm_fipex,
  33.         ls_zibc_debug TYPE                   zibc_debug,
  34.         lv_moff       TYPE i,
  35.         lv_mlen       TYPE i,
  36.         lt_str        TYPE TABLE OF          string,
  37.         lv_str        TYPE                   string.
  38.  
  39.   FIELD-SYMBOLS: <resultstring> TYPE any,
  40.                  <febep>        TYPE febep,
  41.                  <febko>        TYPE febko.
  42.  
  43.  
  44.   " DEBUG
  45.   SELECT SINGLE *
  46.     FROM zibc_debug
  47.     INTO CORRESPONDING FIELDS OF ls_zibc_debug
  48.     WHERE fname EQ 'Z_FIEB_902_ALGORITHM'.
  49.  
  50.   WHILE ls_zibc_debug-xdebug EQ abap_true.
  51.  
  52.     SELECT SINGLE *
  53.       FROM zibc_debug
  54.       INTO CORRESPONDING FIELDS OF ls_zibc_debug
  55.       WHERE fname EQ 'Z_FIEB_902_ALGORITHM'.
  56.  
  57.     WAIT UP TO 5 SECONDS.
  58.  
  59.   ENDWHILE.
  60.  
  61.  
  62. *break: pbednarski, mkapala.
  63.   TRY.
  64.       ASSIGN ('(RFEBBU10)FEBEP') TO <febep>.
  65.       ASSIGN ('(RFEBBU10)FEBKO') TO <febko>.
  66.     CATCH cx_root.
  67.  
  68.   ENDTRY.
  69.  
  70.   l_note_to_payee = i_note_to_payee.
  71.  
  72.   IF NOT l_note_to_payee IS INITIAL.
  73. *reference information is free form, put it into good shape
  74.     IF i_country = 'NO'.
  75.       CALL FUNCTION 'FIEB_EXTRACT_MINUS_NUMBERS'
  76.         EXPORTING
  77.           i_note_to_payee = l_note_to_payee
  78.         TABLES
  79.           e_numbers       = kidno_tab.
  80.     ELSE.
  81.  
  82. *      call function 'FIEB_EXTRACT_NUMBERS'
  83. *        exporting
  84. *          i_note_to_payee = l_note_to_payee
  85. *        tables
  86. *          e_numbers       = kidno_tab.
  87.  
  88.       REFRESH lt_str.
  89.       SPLIT i_note_to_payee AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_str.
  90.       LOOP AT lt_str INTO lv_str.
  91.         lv_note = lv_note && lv_str.
  92.       ENDLOOP.
  93.  
  94.       IF 1 = 2.
  95.         FIND FIRST OCCURRENCE OF '<REF>' IN l_note_to_payee MATCH OFFSET lv_off.
  96.         IF sy-subrc = 0.
  97.           FIND FIRST OCCURRENCE OF '</REF>' IN l_note_to_payee MATCH OFFSET lv_off1.
  98.           IF sy-subrc = 0.
  99.             lv_off = lv_off + 5.
  100.             lv_off1 = lv_off1 - lv_off.
  101.             lv_ref = l_note_to_payee+lv_off(lv_off1).
  102.             APPEND lv_ref TO kidno_tab.
  103.           ENDIF.
  104.         ENDIF.
  105.       ENDIF.
  106.  
  107.       FIND FIRST OCCURRENCE OF '<REF>' IN lv_note MATCH OFFSET lv_off.
  108.       IF sy-subrc = 0.
  109.         FIND FIRST OCCURRENCE OF '</REF>' IN lv_note MATCH OFFSET lv_off1.
  110.         IF sy-subrc = 0.
  111.           lv_off = lv_off + 5.
  112.           lv_off1 = lv_off1 - lv_off.
  113.           lv_ref = lv_note+lv_off(lv_off1).
  114.           APPEND lv_ref TO kidno_tab.
  115.         ENDIF.
  116.       ENDIF.
  117.       DELETE ADJACENT DUPLICATES FROM kidno_tab.
  118.     ENDIF.
  119.  
  120.   ELSE.
  121. *reference information is already structured
  122.     LOOP AT t_avip_in WHERE sfeld = 'KIDNO'.
  123.       kidno_tab-nummer = t_avip_in-swert.
  124.       APPEND kidno_tab.
  125.     ENDLOOP.
  126.   ENDIF.                "structured or unstructured reference
  127.  
  128.   REFRESH t_avip_out.
  129.   LOOP AT kidno_tab.
  130.     CALL FUNCTION 'FI_PAYREF_CHECK'
  131.       EXPORTING
  132.         i_kidno       = kidno_tab-nummer
  133.         i_land1       = i_country
  134.       EXCEPTIONS
  135.         kidno_invalid = 1.
  136.     IF sy-subrc = 0.
  137.       dbtable = 'BSID'.
  138.       ASSIGN s_bsid TO <resultstring>.
  139.       maxlength = 11.
  140.       charkey = kidno_tab-nummer.
  141.       keyname = 'KIDNO'.
  142.  
  143.       PERFORM search_with_leading_zeroes(rfebbu10) USING
  144.       dbtable
  145.       maxlength
  146.       charkey
  147.       keyname
  148.       <resultstring>
  149.       exception.
  150.  
  151.       IF exception = 0.
  152.         LOOP AT s_bsid INTO h_bsid.
  153.           t_avip_out-koart  = 'D'.
  154.           t_avip_out-konto  = h_bsid-kunnr.
  155.           t_avip_out-sfeld  = 'BELNR'.
  156.           t_avip_out-swert  = h_bsid-belnr.
  157.           t_avip_out-swert+10(4) = h_bsid-gjahr.
  158.           APPEND t_avip_out.
  159.         ENDLOOP.
  160.       ELSE.                "No debtors found. Search for creditors.
  161.         dbtable = 'BSIK'.
  162.         ASSIGN s_bsik TO <resultstring>.
  163.         PERFORM search_with_leading_zeroes(rfebbu10) USING
  164.         dbtable
  165.         maxlength
  166.         charkey
  167.         keyname
  168.         <resultstring>
  169.         exception.
  170.         IF exception = 0.
  171.           LOOP AT s_bsik INTO h_bsik.
  172.             t_avip_out-koart  = 'K'.
  173.             t_avip_out-konto  = h_bsik-lifnr.
  174.             t_avip_out-sfeld  = 'BELNR'.
  175.             t_avip_out-swert = h_bsik-belnr.
  176.             t_avip_out-swert+10(4) = h_bsik-gjahr.
  177.             APPEND t_avip_out.
  178.           ENDLOOP.
  179.         ENDIF.
  180.       ENDIF.
  181.     ENDIF.
  182.   ENDLOOP.
  183.  
  184. ******->** IBC 2018-06-16 - payment split info
  185. *****  IF <febep> is ASSIGNED. "-fipex IS INITIAL.
  186. *****    REFRESH lt_str.
  187. *****    SPLIT i_note_to_payee AT cl_abap_char_utilities=>cr_lf INTO TABLE lt_str.
  188. *****    LOOP AT lt_str INTO lv_str.
  189. *****      lv_note = lv_note && lv_str.
  190. *****    ENDLOOP.
  191. *****
  192. *****    FIND FIRST OCCURRENCE OF '/VAT/' IN lv_note MATCH OFFSET lv_moff MATCH LENGTH lv_mlen.
  193. *****    IF sy-subrc = 0.
  194. *****      lv_moff = lv_moff + lv_mlen.
  195. *****      lv_vat_amt = lv_note+lv_moff.
  196. *****      FIND FIRST OCCURRENCE OF '/' IN lv_vat_amt MATCH OFFSET lv_moff.
  197. *****      IF sy-subrc = 0.
  198. *****        lv_vat_amt = lv_vat_amt(lv_moff).
  199. *****        <febep>-fipex = lv_vat_amt.
  200. *****      ENDIF.
  201. *****    ENDIF.
  202. *****    CLEAR: lv_moff, lv_mlen.
  203. *****  ENDIF.
  204. ******<-** IBC 2018-06-16 - payment split info
  205.  
  206.  
  207. ENDFUNCTION.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement