Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2018
1,273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 30.07 KB | None | 0 0
  1. FUNCTION zmm_wf_mmfi_invoice.
  2. *"----------------------------------------------------------------------
  3. *"*"Lokalny interfejs:
  4. *"  IMPORTING
  5. *"     VALUE(I_HEADERDATA) TYPE  ZFI_BAPI_INCINV_CREATE_HEADER OPTIONAL
  6. *"     VALUE(I_TAXDATA) TYPE  ZMM_T_BAPI_INCINV_CREATE_TAX OPTIONAL
  7. *"     VALUE(I_ITEMDATA) TYPE  ZMM_T_BAPI_INCINV_CREATE_ITEMS OPTIONAL
  8. *"     VALUE(I_EXTENSIONIN) TYPE  ZMM_T_EXTENSIONIN OPTIONAL
  9. *"     VALUE(I_ACCOUNTINGDATA) TYPE  ZMM_T_BAPI_INCINV_CREATE_ACC_T
  10. *"       OPTIONAL
  11. *"     VALUE(I_GLACCOUNTDATA) TYPE  ZMM_T_API_INCINV_CREAT_GLACC_T
  12. *"       OPTIONAL
  13. *"     VALUE(I_MATERIALDATA) TYPE  ZMM_T_BAPI_INCINV_CREATE_MAT_T
  14. *"       OPTIONAL
  15. *"  EXPORTING
  16. *"     VALUE(E_NR_DOC) TYPE  CHAR25
  17. *"     VALUE(E_NR_FI_DOC) TYPE  CHAR25
  18. *"     VALUE(E_STATUS) TYPE  CHAR1
  19. *"     VALUE(E_ERROR_TYPE) TYPE  CHAR25
  20. *"     VALUE(E_ERROR_MESSAGE) TYPE  BAPI_MSG
  21. *"     VALUE(LINIE) TYPE  ZCA_T_WF_ERROR_LINE_T
  22. *"----------------------------------------------------------------------
  23.  
  24.  
  25.   DATA:
  26.     ls_bapiache09              TYPE bapiache09,
  27.     lv_ebeln                   TYPE ebeln,
  28.     lt_ekbe                    TYPE TABLE OF ekbe,
  29.     ls_ekbe                    TYPE ekbe,
  30.     ls_accountingdata          TYPE LINE OF zmm_t_bapi_incinv_create_acc_t,
  31.     lt_accountingdata          TYPE  zmm_t_bapi_incinv_create_acc_t,
  32.     ls_glaccountdata           TYPE LINE OF zmm_t_api_incinv_creat_glacc_t,
  33.     lt_bapiret2                TYPE TABLE OF bapiret2,
  34.     ls_bapiret2                TYPE bapiret2,
  35.     ls_ext                     TYPE LINE OF zmm_t_extensionin,
  36.     tmp_amount                 LIKE i_headerdata-gross_amount,
  37.     line                       TYPE LINE OF zfi_t_wf_error_line_t,
  38.     counter                    TYPE int2,
  39.     ls_tax                     LIKE LINE OF i_taxdata,
  40.     bapi_incinv_create_item    TYPE TABLE OF bapi_incinv_create_item,
  41.     bapi_incinv_create_header  TYPE bapi_incinv_create_header,
  42.     invoicedocnumber           TYPE bapi_incinv_fld-inv_doc_no,
  43.     fiscalyear                 TYPE bapi_incinv_fld-fisc_year,
  44.     ls_if_inv_prop             TYPE zmm_ibc_if_inv_p,
  45.     dbmtr                      LIKE ls_ekbe-dmbtr,
  46.     menge                      LIKE ls_ekbe-menge,
  47.     additionalheaderdata       LIKE  bapi_incinv_save_header_backgr,
  48.     ls_bapi_incinv_create_item TYPE bapi_incinv_create_item,
  49.     ls_zca_ibc_status          TYPE zca_ibc_status,
  50.     lt_ekkn                    TYPE TABLE OF ekkn,
  51.     ls_ekkn                    TYPE ekkn.
  52.  
  53.   DATA:
  54.         struct_converter TYPE REF TO cl_abap_conv_in_ce.
  55.  
  56.   DATA:
  57.     uname     TYPE uname,
  58.     datavat   TYPE datum,
  59.     spos_fakt TYPE char10.
  60.  
  61.   DATA:
  62.     lt_log_data   TYPE zmm_t_ibc_if_edi_sdata_t,
  63.     ls_rbkp       TYPE rbkp,
  64.     lt_ekpo       TYPE TABLE OF ekpo,
  65.     ls_ekpo       TYPE ekpo,
  66.     ls_if_fv_dupl TYPE zmm_ibc_if_fv_du,
  67.     ls_log_data   TYPE LINE OF zmm_t_ibc_if_edi_sdata_t.
  68.  
  69.   DATA lt_items TYPE zmm_t_bapi_incinv_create_items.
  70.   DATA lt_itemsok TYPE TABLE OF bapi_incinv_create_item.
  71.  
  72.   FIELD-SYMBOLS:
  73.     <fs>                  TYPE any,
  74.     <fs_i_accountingdata> TYPE LINE OF zmm_t_bapi_incinv_create_acc_t,
  75.     <fs_i_glaccountdata>  TYPE LINE OF zmm_t_api_incinv_creat_glacc_t.
  76. *      <fs_I_ITEMDATA> TYPE LINE OF ZMM_T_BAPI_INCINV_CREATE_ITEMS.
  77.  
  78.  
  79.   DATA:
  80.     text(4) TYPE c VALUE 'ABC',
  81.     int     TYPE i VALUE 258.
  82.   DATA:
  83.     lv_zterm       TYPE dzterm,
  84.     lv_zbd1t       TYPE dzbdet,
  85.     buffer1        TYPE xstring,
  86.     buffer2        TYPE xstring,
  87.     lt_if_inv_prop TYPE TABLE OF zmm_ibc_if_inv_p,
  88.     del_costs        TYPE bapi_beznk,
  89.     lt_rbkp        TYPE TABLE OF rbkp,
  90.     lt_rbkp_del    TYPE TABLE OF rbkp,
  91.     " lv_egroup TYPE ztrmd_group,
  92.     nr_fv          TYPE string,
  93.     days           TYPE int2,
  94.     "ls_tax like line of I_TAXDATA,
  95.     conv           TYPE REF TO cl_abap_conv_out_ce,
  96.     view           TYPE REF TO cl_abap_view_offlen.
  97.  
  98.   DATA:
  99.     lt_ekbe_tmp  TYPE TABLE OF ekbe,
  100.     lt_ekbe_dupl TYPE TABLE OF ekbe,
  101.     ls_ekbe_tmp  TYPE ekbe.
  102.  
  103.   DATA :
  104.     wart   TYPE  dmbtr,
  105.     lv_pz  TYPE menge_d,
  106.     lv_pzk TYPE menge_d,
  107.     wal    TYPE  waers.
  108.  
  109.   FIELD-SYMBOLS <poz> TYPE zfi_bapi_incinv_create_items.
  110.  
  111.   MOVE-CORRESPONDING i_headerdata TO bapi_incinv_create_header.
  112.   IF bapi_incinv_create_header-repcountry IS NOT INITIAL AND bapi_incinv_create_header-vat_reg_no IS INITIAL.
  113.     SELECT SINGLE stceg
  114.        FROM lfas
  115.        INTO bapi_incinv_create_header-vat_reg_no
  116.        WHERE lifnr = bapi_incinv_create_header-diff_inv AND
  117.              land1 = bapi_incinv_create_header-repcountry.
  118.  
  119.   ENDIF.
  120.  
  121.   lt_items[] = i_itemdata[].
  122.  
  123.   LOOP AT lt_items ASSIGNING <poz>.
  124.  
  125.     IF <poz>-quantity = 0.  " ilośc zerowa- czyli mamy korekte wartościową
  126.       <poz>-de_cre_ind = 'X'.
  127. * obliczamy ilośc fakturowaną netto
  128.       SELECT SUM( menge ) INTO lv_pz FROM ekbe WHERE ebeln = <poz>-po_number
  129.                                                     AND ebelp = <poz>-po_item
  130.                                                     AND vgabe = '2'
  131.                                                     AND shkzg = 'S'.
  132.  
  133.       SELECT SUM( menge ) INTO lv_pzk FROM ekbe WHERE ebeln = <poz>-po_number
  134.                                                     AND ebelp = <poz>-po_item
  135.                                                     AND vgabe = '2'
  136.                                                     AND shkzg = 'H'.
  137.  
  138.       <poz>-quantity = lv_pz - lv_pzk.
  139.  
  140.     ENDIF.
  141.  
  142.     IF <poz>-item_amount < 0.  " jeśli ujemna watość - to odwracamy znak i sterujemy wskaźnikiem DE_CRE_IND
  143.       <poz>-item_amount = <poz>-item_amount * ( -1 ).
  144.  
  145.       IF <poz>-de_cre_ind = 'X'.
  146.         <poz>-de_cre_ind = ''.
  147.       ELSE.
  148.         <poz>-de_cre_ind = 'X'.
  149.       ENDIF.
  150.     ENDIF.
  151.  
  152.     SELECT SINGLE * FROM ekpo INTO ls_ekpo WHERE ebeln = <poz>-po_number
  153.                                              AND ebelp = <poz>-po_item.
  154.     IF sy-subrc = 0.
  155.       IF ls_ekpo-meins <> ls_ekpo-bprme.
  156.         IF <poz>-po_pr_uom IS INITIAL.
  157.           <poz>-po_pr_uom  = ls_ekpo-bprme.
  158.  
  159.           READ TABLE i_accountingdata ASSIGNING <fs_i_accountingdata> WITH KEY invoice_doc_item =  <poz>-invoice_doc_item.
  160.           IF sy-subrc = 0.
  161.             <fs_i_accountingdata>-po_pr_uom  = ls_ekpo-bprme.
  162.           ENDIF.
  163.  
  164.         ENDIF.
  165.       ENDIF.
  166.     ENDIF.
  167.  
  168.   ENDLOOP.
  169.  
  170.   lt_itemsok[] = lt_items[].
  171.  
  172.   LOOP AT i_extensionin INTO ls_ext.
  173.     CASE ls_ext-structure.
  174.       WHEN 'ZAMOWIENIE'.
  175.         lv_ebeln = ls_ext-valuepart1.
  176.         CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  177.           EXPORTING
  178.             input  = lv_ebeln
  179.           IMPORTING
  180.             output = lv_ebeln.
  181.       WHEN 'UZYTKOWNIK'.
  182.         uname =   ls_ext-valuepart1.
  183.       WHEN 'DATAVAT'.
  184.         datavat = ls_ext-valuepart1.
  185. *        CONCATENATE ls_ext-valuepart1+6(2) ls_ext-valuepart1+4(2) ls_ext-valuepart1(4) INTO datavat.
  186.  
  187.         CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
  188.           EXPORTING
  189.             date                      = datavat
  190.           EXCEPTIONS
  191.             plausibility_check_failed = 1
  192.             OTHERS                    = 2.
  193.         IF sy-subrc <> 0.
  194.           CLEAR datavat.
  195.         ENDIF.
  196.  
  197.  
  198.       WHEN 'SPOSOB_PRZETWARZANIA'.
  199.         spos_fakt = ls_ext-valuepart1.
  200.       WHEN 'KWOTA_DODATKOWA'.
  201.         del_costs = ls_ext-valuepart1.
  202.       WHEN 'NR_FV '.
  203.         nr_fv  = ls_ext-valuepart1.
  204.     ENDCASE.
  205.   ENDLOOP.
  206.  
  207.   SELECT * FROM zmm_ibc_if_inv_p INTO TABLE lt_if_inv_prop.
  208.  
  209.   SELECT  belnr
  210.           bwart
  211.           buzei
  212.           xblnr
  213.           gjahr
  214.           shkzg
  215.           vgabe
  216.           dmbtr
  217.           FROM ekbe INTO CORRESPONDING FIELDS OF TABLE lt_ekbe WHERE ebeln = lv_ebeln.
  218.  
  219.   lt_ekbe_dupl =  lt_ekbe.
  220.  
  221.   DELETE lt_ekbe_dupl WHERE vgabe NE 'P' AND vgabe = '1'.
  222.  
  223.  
  224. *  CALL FUNCTION 'ZMM_IBC_IF_PO_SUM'
  225. *    EXPORTING
  226. *      ebeln   = lv_ebeln
  227. *    IMPORTING
  228. *      wart    = wart
  229. *      wal     = wal
  230. *    TABLES
  231. *      it_ekbe = lt_ekbe.
  232.   " and (  VGABE = 'P' OR
  233.   "       VGABE = '2' ).
  234.   " ).
  235.  
  236.   IF sy-subrc EQ 0.
  237.     IF lines( lt_ekbe_dupl ) > 0.
  238.       SELECT belnr gjahr rbstat  FROM rbkp INTO CORRESPONDING FIELDS OF TABLE lt_rbkp FOR ALL ENTRIES IN lt_ekbe_dupl
  239.              WHERE belnr = lt_ekbe_dupl-belnr AND gjahr = lt_ekbe_dupl-gjahr AND
  240.                    xblnr = i_headerdata-ref_doc_no.
  241.  
  242.       IF sy-subrc EQ 0.
  243.         LOOP AT lt_rbkp INTO ls_rbkp.
  244.  
  245. *          "FV do usunięcia
  246. *          IF ls_rbkp-rbstat EQ 'A' OR  ls_rbkp-rbstat EQ 'D'.
  247. *            APPEND  ls_rbkp TO lt_rbkp_del.
  248. *            CLEAR lt_bapiret2.
  249. *          ENDIF.
  250.  
  251.           CLEAR ls_rbkp.
  252.           READ TABLE lt_if_inv_prop INTO ls_if_inv_prop WITH KEY klucz = 'DUPLICATE_CHECK'.
  253.           IF ls_if_inv_prop-wart EQ 'X'.
  254.             IF ls_rbkp-rbstat EQ '5'.
  255.               e_status = 'E'.
  256.               e_error_type = 'VALIDATE_ERROR'.
  257.               e_error_message = 'Istnieje już zaksięgowana faktura o danym ID'.
  258.               RETURN.
  259.             ENDIF.
  260.           ENDIF.
  261.         ENDLOOP.
  262.       ENDIF.
  263.     ENDIF.
  264.   ENDIF.
  265.  
  266.   SELECT SINGLE zterm zbd1t FROM ekko INTO  (lv_zterm , lv_zbd1t) WHERE ebeln = lv_ebeln.
  267.   " tego nie musimy już dodawać bo otrzymujemy pozycje.
  268. *  SELECT ebeln ebelp meins matnr bprme mtart mwskz netpr menge mwskz FROM ekpo INTO CORRESPONDING FIELDS OF TABLE lt_ekpo WHERE ebeln = lv_ebeln.
  269. *  IF sy-subrc EQ 0.
  270. *
  271. *    tmp_amount = i_headerdata-gross_amount.
  272. *    LOOP AT i_taxdata INTO ls_tax.
  273. *      tmp_amount = tmp_amount - ls_tax-tax_amount. "liczymy netto
  274. *    ENDLOOP.
  275. *    tmp_amount = tmp_amount + del_costs. " uwzględnenie kwoty dodatkowej
  276. *    IF tmp_amount < 0. " jezeli ujemne to 0
  277. *      tmp_amount = 0.
  278. *
  279. *      " wywalamy FV z ujemnymi wartościami
  280. *      bapi_incinv_create_header-gross_amount = 0.
  281. *      del_costs = 0.
  282. *    ENDIF.
  283. *
  284. *    counter = 1.
  285. *
  286. *    LOOP AT lt_ekpo INTO ls_ekpo.
  287. *
  288. *      ls_bapi_incinv_create_item-invoice_doc_item = counter.
  289. *      ls_bapi_incinv_create_item-po_number = ls_ekpo-ebeln.
  290. *      ls_bapi_incinv_create_item-quantity = ls_ekpo-menge.
  291. *      ls_bapi_incinv_create_item-po_item = ls_ekpo-ebelp.
  292. *      ls_bapi_incinv_create_item-item_amount = ls_ekpo-netpr.
  293. *      ls_bapi_incinv_create_item-po_unit = ls_ekpo-meins.
  294. *      ls_bapi_incinv_create_item-po_unit_iso = ls_ekpo-meins.
  295. *      ls_bapi_incinv_create_item-po_unit = ls_ekpo-meins.
  296. *      ls_bapi_incinv_create_item-po_unit_iso = ls_ekpo-meins.
  297. *      ls_bapi_incinv_create_item-po_pr_uom = ls_ekpo-bprme.
  298. *      ls_bapi_incinv_create_item-po_pr_uom_iso = ls_ekpo-bprme.
  299. *      ls_bapi_incinv_create_item-tax_code = ls_ekpo-mwskz.
  300. *
  301. *      if ls_bapi_incinv_create_item-tax_code is initial.
  302. *            READ TABLE I_TAXDATA into ls_tax index 1.
  303. *            if sy-subrc eq 0.
  304. *                  ls_bapi_incinv_create_item-tax_code = ls_tax-tax_code.
  305. *            endif.
  306. *      endif.
  307. *
  308. *      APPEND ls_bapi_incinv_create_item TO bapi_incinv_create_item.
  309. *    ENDLOOP.
  310. *  ENDIF.
  311.   "loop at
  312.  
  313.  
  314.   "bapi_incinv_create_header-planning_level = 'F3'.
  315. *  bapi_incinv_create_header-del_costs  = del_costs.
  316.   bapi_incinv_create_header-person_ext = uname .
  317. *  bapi_incinv_create_header-inv_rec_date = sy-datum.
  318.   bapi_incinv_create_header-pmnttrms = lv_zterm.
  319.   bapi_incinv_create_header-person_ext = uname .
  320.   bapi_incinv_create_header-paymt_ref = nr_fv.
  321.  
  322.   IF bapi_incinv_create_header-pmnttrms IS NOT INITIAL.
  323.     days = bapi_incinv_create_header-dsct_days1.
  324.     CLEAR  bapi_incinv_create_header-dsct_days1.
  325.   ENDIF.
  326.  
  327.   IF
  328.    bapi_incinv_create_header-bline_date EQ 0.
  329.     bapi_incinv_create_header-bline_date = bapi_incinv_create_header-doc_date.
  330.   ENDIF.
  331. *  bapi_incinv_create_header-RET_DUE_PROP = '00000000'.
  332.  
  333.   IF lv_zbd1t IS NOT INITIAL.
  334.     days = lv_zbd1t.
  335.   ENDIF.
  336. *  IF bapi_incinv_create_header-INV_REC_DATE = ''.
  337. *
  338. *    bapi_incinv_create_header-INV_REC_DATE = '00000000'.
  339. *
  340. *  ENDIF.
  341.   "bapi_incinv_create_header-planning_date =  bapi_incinv_create_header-bline_date + days.
  342.   " dodawanie zer wiodących
  343.   LOOP AT i_accountingdata ASSIGNING <fs_i_accountingdata>.
  344.  
  345.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  346.       EXPORTING
  347.         input  = <fs_i_accountingdata>-gl_account
  348.       IMPORTING
  349.         output = <fs_i_accountingdata>-gl_account.
  350.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  351.       EXPORTING
  352.         input  = <fs_i_accountingdata>-costcenter
  353.       IMPORTING
  354.         output = <fs_i_accountingdata>-costcenter.
  355.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  356.       EXPORTING
  357.         input  = <fs_i_accountingdata>-asset_no
  358.       IMPORTING
  359.         output = <fs_i_accountingdata>-asset_no.
  360.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  361.       EXPORTING
  362.         input  = <fs_i_accountingdata>-orderid
  363.       IMPORTING
  364.         output = <fs_i_accountingdata>-orderid.
  365.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  366.       EXPORTING
  367.         input  = <fs_i_accountingdata>-bus_area
  368.       IMPORTING
  369.         output = <fs_i_accountingdata>-bus_area.
  370.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  371.       EXPORTING
  372.         input  = <fs_i_accountingdata>-profit_ctr
  373.       IMPORTING
  374.         output = <fs_i_accountingdata>-profit_ctr.
  375.  
  376. *CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  377. *          EXPORTING
  378. *            input  = <fs_i_accountingdata>-PROFIT_CTR
  379. *          IMPORTING
  380. *            output = <fs_i_accountingdata>-PROFIT_CTR.
  381.   ENDLOOP.
  382.  
  383.  
  384.   LOOP AT i_glaccountdata ASSIGNING <fs_i_glaccountdata>.
  385.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  386.       EXPORTING
  387.         input  = <fs_i_glaccountdata>-gl_account
  388.       IMPORTING
  389.         output = <fs_i_glaccountdata>-gl_account.
  390.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  391.       EXPORTING
  392.         input  = <fs_i_glaccountdata>-costcenter
  393.       IMPORTING
  394.         output = <fs_i_glaccountdata>-costcenter.
  395.  
  396.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  397.       EXPORTING
  398.         input  = <fs_i_glaccountdata>-orderid
  399.       IMPORTING
  400.         output = <fs_i_glaccountdata>-orderid.
  401.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  402.       EXPORTING
  403.         input  = <fs_i_glaccountdata>-profit_ctr
  404.       IMPORTING
  405.         output = <fs_i_glaccountdata>-profit_ctr.
  406.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  407.       EXPORTING
  408.         input  = <fs_i_glaccountdata>-bus_area
  409.       IMPORTING
  410.         output = <fs_i_glaccountdata>-bus_area.
  411.  
  412.   ENDLOOP.
  413. *  LOOP AT I_ITEMDATA ASSIGNING <fs_I_ITEMDATA>.
  414.   IF lines( lt_itemsok ) > 0.
  415.     SELECT ek~ebeln ek~ebelp ek~menge ek~sakto ek~kostl ek~paobjnr ek~zekkn ek~vproz
  416.         FROM ekkn AS ek
  417.         INNER JOIN ekpo AS ep
  418.         ON ek~ebeln = ep~ebeln
  419.         AND ek~ebelp = ep~ebelp
  420.         INTO CORRESPONDING FIELDS OF TABLE lt_ekkn
  421.         FOR ALL ENTRIES IN lt_itemsok
  422.         WHERE ek~ebeln = lt_itemsok-po_number AND
  423.               ek~ebelp = lt_itemsok-po_item AND
  424.               ep~vrtkz = '1'.
  425.   ENDIF.
  426.   LOOP AT lt_itemsok ASSIGNING FIELD-SYMBOL(<fs_i_itemdata>).
  427.     CLEAR ls_accountingdata.
  428.     CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
  429.       EXPORTING
  430.         input    = <fs_i_itemdata>-po_unit
  431.         language = sy-langu
  432.       IMPORTING
  433.         output   = <fs_i_itemdata>-po_unit.
  434.     CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
  435.       EXPORTING
  436.         input    = <fs_i_itemdata>-po_unit_iso
  437.         language = sy-langu
  438.       IMPORTING
  439.         output   = <fs_i_itemdata>-po_unit_iso.
  440.     IF sy-subrc <> 0.
  441. * Implement suitable error handling here
  442.     ENDIF.
  443.  
  444.  
  445.     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  446.       EXPORTING
  447.         input  = <fs_i_itemdata>-po_number
  448.       IMPORTING
  449.         output = <fs_i_itemdata>-po_number.
  450.     IF <fs_i_itemdata>-ref_doc IS NOT INITIAL.
  451.       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  452.         EXPORTING
  453.           input  = <fs_i_itemdata>-ref_doc
  454.         IMPORTING
  455.           output = <fs_i_itemdata>-ref_doc.
  456.     ENDIF.
  457.     ls_accountingdata-invoice_doc_item = <fs_i_itemdata>-invoice_doc_item.
  458. *    ls_accountingdata-xunpl = 'X'. " to ma być zawsze X to zaznaczamy tylko w przypadku gyd mamy jakąś nieplanowana dekretacje
  459.     ls_accountingdata-tax_code = <fs_i_itemdata>-tax_code.
  460. *    ls_accountingdata-ITEM_AMOUNT = <fs_i_itemdata>-item_amount.
  461.     ls_accountingdata-po_unit = <fs_i_itemdata>-po_unit.
  462.     " dodajemy segment z dekretacją.
  463.     LOOP AT lt_ekkn INTO ls_ekkn WHERE ebeln = <fs_i_itemdata>-po_number AND
  464.                                        ebelp = <fs_i_itemdata>-po_item.
  465.       ls_accountingdata-serial_no = ls_ekkn-zekkn.
  466.       ls_accountingdata-quantity = ls_ekkn-menge.
  467.       TRY.
  468.           ls_accountingdata-item_amount = ( <fs_i_itemdata>-item_amount * ls_ekkn-vproz ) / 100.
  469.         CATCH cx_sy_zerodivide.
  470. *         write:/5 'Divide by zero caught'.
  471.       ENDTRY.
  472.       ls_accountingdata-gl_account = ls_ekkn-sakto.
  473.       ls_accountingdata-costcenter = ls_ekkn-kostl.
  474.       ls_accountingdata-profit_segm_no = ls_ekkn-paobjnr.
  475.       APPEND ls_accountingdata TO lt_accountingdata.
  476.     ENDLOOP.
  477.  
  478.   ENDLOOP.
  479.   IF lines( i_accountingdata ) = 0.
  480.     APPEND LINES OF lt_accountingdata TO i_accountingdata.
  481.   ENDIF.
  482.  
  483.   READ TABLE lt_bapiret2 TRANSPORTING NO FIELDS WITH KEY type = 'E'.
  484.   IF ( sy-subrc EQ 0 OR spos_fakt = 'PARK' ).
  485.     " if lines( lt_rbkp_del ) eq 0. "jeżeli odnaleziono duplikat to nie zachowuj FV w przypadku błedu
  486. *    if spos_fakt NE 'PARK'.
  487. *        E_NR_DOC = '0'.
  488. *        E_STATUS = 'E'.
  489. *        E_ERROR_TYPE = 'LOGIC_ERROR'.
  490. *        E_ERROR_MESSAGE = ''.
  491. *    endif.
  492.     LOOP AT lt_bapiret2 INTO ls_bapiret2.
  493.       line-e_status = ls_bapiret2-id.
  494.       line-e_error_type =  ls_bapiret2-number.
  495.       line-e_error_message = ls_bapiret2-message.
  496.       APPEND line TO  linie.
  497.     ENDLOOP.
  498.     CLEAR lt_bapiret2[].
  499.     CLEAR invoicedocnumber.
  500.     CLEAR fiscalyear.
  501.     bapi_incinv_create_header-person_ext = uname .
  502. *    bapi_incinv_create_header-header_txt = 'WF_SYSTEM'. " znacznik na podstawie którego w Enhancement determinowany jest
  503.     " czy faktura ma być "PARKED" czy "HELD" -
  504.     "BAPI_INCINV_CREATE_HEADER-ITEM_TXT = '
  505.     " Dodajemy status D żeby faktura się zachowała.
  506.     DATA: lv_INVOICESTATUS TYPE  BAPI_INCINV_CREATE_STATUS-RBSTAT VALUE 'D'.
  507.     CLEAR ls_accountingdata.
  508.     READ TABLE i_accountingdata INTO ls_accountingdata  INDEX 1.
  509.     IF ls_accountingdata-invoice_doc_item IS NOT INITIAL.
  510.       READ TABLE i_glaccountdata INTO ls_glaccountdata INDEX 1.
  511.       IF ls_glaccountdata-gl_account IS NOT INITIAL.
  512.         IF lines( i_accountingdata ) < 999  . " jeżeli mamy mniej niż 999 pozycji
  513.  
  514.           CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
  515.             EXPORTING
  516.               headerdata       = bapi_incinv_create_header
  517. *             ADDRESSDATA      =
  518.             IMPORTING
  519.               invoicedocnumber = invoicedocnumber
  520.               fiscalyear       = fiscalyear
  521.             TABLES
  522.               itemdata         = lt_itemsok "LT_ITEMS "I_ITEMDATA
  523.               accountingdata   = i_accountingdata
  524.               glaccountdata    = i_glaccountdata
  525.               "materialdata              =  i_materialdata
  526.               taxdata          = i_taxdata
  527. *             WITHTAXDATA      =
  528. *             VENDORITEMSPLITDATA =
  529.               return           = lt_bapiret2
  530.             .             "extensionin               =  i_extensionin
  531.         ELSE.
  532.           CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE1'
  533.             EXPORTING
  534.               headerdata       = bapi_incinv_create_header
  535.               INVOICESTATUS    = lv_INVOICESTATUS
  536. *             ADDRESSDATA      =
  537.             IMPORTING
  538.               invoicedocnumber = invoicedocnumber
  539.               fiscalyear       = fiscalyear
  540.             TABLES
  541.               itemdata         = lt_itemsok "LT_ITEMS "I_ITEMDATA
  542.               accountingdata   = i_accountingdata
  543.               glaccountdata    = i_glaccountdata
  544.               "materialdata              =  i_materialdata
  545.               taxdata          = i_taxdata
  546. *             WITHTAXDATA      =
  547. *             VENDORITEMSPLITDATA =
  548.               return           = lt_bapiret2
  549.             .             "extensionin               =  i_extensionin
  550.         ENDIF.
  551.       ELSE.
  552.         IF lines( i_accountingdata ) < 999  .
  553.           CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
  554.             EXPORTING
  555.               headerdata       = bapi_incinv_create_header
  556. *             ADDRESSDATA      =
  557.             IMPORTING
  558.               invoicedocnumber = invoicedocnumber
  559.               fiscalyear       = fiscalyear
  560.             TABLES
  561.               itemdata         = lt_itemsok "LT_ITEMS "I_ITEMDATA
  562.               accountingdata   = i_accountingdata
  563.               "glaccountdata             =  i_glaccountdata
  564.               "materialdata              =  i_materialdata
  565.               taxdata          = i_taxdata
  566. *             WITHTAXDATA      =
  567. *             VENDORITEMSPLITDATA =
  568.               return           = lt_bapiret2
  569.             .             "extensionin               =  i_extensionin
  570.         ELSE.
  571.           CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE1'
  572.             EXPORTING
  573.               headerdata       = bapi_incinv_create_header
  574.               INVOICESTATUS    = lv_INVOICESTATUS
  575. *             ADDRESSDATA      =
  576.             IMPORTING
  577.               invoicedocnumber = invoicedocnumber
  578.               fiscalyear       = fiscalyear
  579.             TABLES
  580.               itemdata         = lt_itemsok "LT_ITEMS "I_ITEMDATA
  581.               accountingdata   = i_accountingdata
  582.               "glaccountdata             =  i_glaccountdata
  583.               "materialdata              =  i_materialdata
  584.               taxdata          = i_taxdata
  585. *             WITHTAXDATA      =
  586. *             VENDORITEMSPLITDATA =
  587.               return           = lt_bapiret2
  588.             .             "extensionin               =  i_extensionin
  589.  
  590.         ENDIF.
  591.       ENDIF.
  592.     ELSE.
  593.       IF lines( i_accountingdata ) < 999  .
  594.         CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
  595.           EXPORTING
  596.             headerdata       = bapi_incinv_create_header
  597. *           ADDRESSDATA      =
  598.           IMPORTING
  599.             invoicedocnumber = invoicedocnumber
  600.             fiscalyear       = fiscalyear
  601.           TABLES
  602.             itemdata         = lt_itemsok " LT_ITEMS "I_ITEMDATA
  603.             "accountingdata            =  i_accountingdata
  604.             "glaccountdata             =  i_glaccountdata
  605.             "materialdata              =  i_materialdata
  606.             taxdata          = i_taxdata
  607. *           WITHTAXDATA      =
  608. *           VENDORITEMSPLITDATA =
  609.             return           = lt_bapiret2
  610.           .             "extensionin               =  i_extensionin
  611.       ELSE.
  612.         CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE1'
  613.           EXPORTING
  614.             headerdata       = bapi_incinv_create_header
  615.             INVOICESTATUS    = lv_INVOICESTATUS
  616. *           ADDRESSDATA      =
  617.           IMPORTING
  618.             invoicedocnumber = invoicedocnumber
  619.             fiscalyear       = fiscalyear
  620.           TABLES
  621.             itemdata         = lt_itemsok " LT_ITEMS "I_ITEMDATA
  622.             "accountingdata            =  i_accountingdata
  623.             "glaccountdata             =  i_glaccountdata
  624.             "materialdata              =  i_materialdata
  625.             taxdata          = i_taxdata
  626. *           WITHTAXDATA      =
  627. *           VENDORITEMSPLITDATA =
  628.             return           = lt_bapiret2
  629.           .             "extensionin               =  i_extensionin
  630.       ENDIF.
  631.     ENDIF.
  632.   "E_NR_DOC = INVOICEDOCNUMBER && FISCALYEAR .
  633.   CONCATENATE invoicedocnumber fiscalyear INTO e_nr_doc.
  634.   IF spos_fakt NE 'PARK'.
  635.     "E_NR_DOC = '0'.
  636.     e_status = 'E'.
  637.     e_error_type = 'LOGIC_ERROR'.
  638.     e_error_message = 'Problem z księgowaniem SAP'.
  639.   ELSE.
  640.     READ TABLE lt_bapiret2 TRANSPORTING NO FIELDS WITH KEY type = 'E'.
  641.     IF sy-subrc EQ 0.
  642.       e_status = 'E'.
  643.       e_error_type = 'LOGIC_ERROR'.
  644.       LOOP AT lt_bapiret2 INTO ls_bapiret2.
  645.         line-e_status = ls_bapiret2-id.
  646.         line-e_error_type =  ls_bapiret2-number.
  647.         line-e_error_message = ls_bapiret2-message.
  648.         APPEND line TO  linie.
  649.       ENDLOOP.
  650.     ELSE.
  651.       IF invoicedocnumber IS INITIAL.
  652.         e_status = 'E'.
  653.         e_error_type = 'VALIDATE_ERROR'.
  654.         LOOP AT lt_bapiret2 INTO ls_bapiret2.
  655.           line-e_status = ls_bapiret2-id.
  656.           line-e_error_type =  ls_bapiret2-number.
  657.           line-e_error_message = ls_bapiret2-message.
  658.           APPEND line TO  linie.
  659.         ENDLOOP.
  660.       ELSE.
  661.         e_status = 'S'.
  662.       ENDIF.
  663.     ENDIF.
  664.   ENDIF.
  665.   "endif.
  666. ELSE.
  667.   CONCATENATE invoicedocnumber fiscalyear INTO e_nr_doc.
  668.   e_status = 'S'.
  669. ENDIF.
  670. IF invoicedocnumber IS NOT INITIAL.
  671.   "kasowanie FV
  672. *    LOOP AT lt_rbkp_del INTO ls_rbkp.
  673. *      CALL FUNCTION 'BAPI_INCOMINGINVOICE_DELETE'
  674. *        EXPORTING
  675. *          invoicedocnumber = ls_rbkp-belnr
  676. *          fiscalyear       = ls_rbkp-gjahr
  677. *        TABLES
  678. *          return           = lt_bapiret2.
  679. *    ENDLOOP.
  680.   ls_if_fv_dupl-ebeln   = lv_ebeln.
  681.   ls_if_fv_dupl-xbelnr  = i_headerdata-ref_doc_no.
  682.   MODIFY zmm_ibc_if_fv_du FROM ls_if_fv_dupl .
  683.   CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
  684. *     EXPORTING
  685. *       WAIT          =
  686. *     IMPORTING
  687. *       RETURN        =
  688.   .
  689.   "Zmiana numeru zwracanaego na numer dokumentu FI w przyapdku gdy wszysto się powiodło
  690.   DATA:
  691.     ls_bkpf TYPE bkpf,
  692. *          ls_rbkp TYPE rbkp,
  693.     lv_scc  TYPE char1.
  694.   DO 9 TIMES.
  695.     SELECT SINGLE bukrs
  696.                   belnr
  697.                   gjahr
  698.                   usnam
  699.                   cpudt FROM bkpf INTO CORRESPONDING FIELDS OF
  700.                                                      ls_bkpf WHERE
  701.                                                       awtyp = 'RMRP'
  702.                                                   AND awkey = e_nr_doc.
  703.       IF sy-subrc EQ 0.
  704.         "tylko w wypadku powodzenia -  w przeciwnym zostaje numer faktry
  705.         CONCATENATE ls_bkpf-bukrs ls_bkpf-belnr ls_bkpf-gjahr INTO e_nr_fi_doc.
  706.         "e_nr_doc = ls_bkpf-belnr.
  707.         CLEAR ls_zca_ibc_status.
  708.         ls_zca_ibc_status-mandt = sy-mandt.
  709.         ls_zca_ibc_status-awkey = ls_bkpf-awkey.
  710.         ls_zca_ibc_status-nr_dok = ls_bkpf-belnr.
  711.         ls_zca_ibc_status-bukrs = ls_bkpf-bukrs.
  712.         ls_zca_ibc_status-gjahr = ls_bkpf-gjahr.
  713.         ls_zca_ibc_status-referencja = i_headerdata-ref_doc_no.
  714.         ls_zca_ibc_status-usnam = ls_bkpf-usnam.
  715.         ls_zca_ibc_status-status = '1'.
  716.         ls_zca_ibc_status-bldat = ls_bkpf-cpudt.
  717.         ls_zca_ibc_status-sys_source = sy-sysid.
  718.         ls_zca_ibc_status-belnr_mm = invoicedocnumber.
  719.         ls_zca_ibc_status-gjahr_mm = fiscalyear.
  720.         ls_zca_ibc_status-vatdate = datavat.
  721.         ls_zca_ibc_status-barcode = bapi_incinv_create_header-header_txt.
  722.  
  723.         MODIFY zca_ibc_status FROM ls_zca_ibc_status.
  724.  
  725.         CALL FUNCTION 'ZMM_WF_IF_FI_CHANGE'  "STARTING NEW TASK sy-uzeit
  726.           EXPORTING
  727.             i_bukrs    = ls_bkpf-bukrs
  728.             i_belnr    = ls_bkpf-belnr
  729.             i_gjahr    = ls_bkpf-gjahr
  730.             i_fv       = nr_fv
  731.             datavat    = datavat
  732.             uname      = uname
  733.           IMPORTING
  734.             rv_success = lv_scc.
  735.         EXIT.
  736.       ELSE.
  737.         WAIT UP TO 1 SECONDS.
  738.       ENDIF.
  739.     ENDDO.
  740.   ENDIF.
  741.   "zmiana w sposobie zwracania numerów
  742.   IF ls_bkpf IS INITIAL AND invoicedocnumber IS NOT INITIAL AND fiscalyear IS NOT INITIAL.
  743.     SELECT SINGLE *
  744.       INTO CORRESPONDING FIELDS OF ls_rbkp
  745.       FROM rbkp
  746.       WHERE belnr = invoicedocnumber AND
  747.             gjahr = fiscalyear.
  748.       IF sy-subrc = 0.
  749.         CLEAR ls_zca_ibc_status.
  750.         ls_zca_ibc_status-mandt = sy-mandt.
  751.         ls_zca_ibc_status-nr_dok = ls_rbkp-belnr.
  752. *    ls_ZCA_IBC_STATUS-BUKRS = ls_bkpf-bukrs.
  753.         CONCATENATE invoicedocnumber fiscalyear INTO ls_zca_ibc_status-awkey.
  754.         ls_zca_ibc_status-gjahr = ls_rbkp-gjahr.
  755.         ls_zca_ibc_status-referencja = ls_rbkp-xblnr.
  756.         ls_zca_ibc_status-usnam = ls_rbkp-usnam.
  757.         ls_zca_ibc_status-status = '1'.
  758.         ls_zca_ibc_status-bldat = ls_rbkp-cpudt.
  759.         ls_zca_ibc_status-sys_source = sy-sysid.
  760.         ls_zca_ibc_status-belnr_mm = invoicedocnumber.
  761.         ls_zca_ibc_status-gjahr_mm = fiscalyear.
  762.         ls_zca_ibc_status-vatdate = datavat.
  763.         ls_zca_ibc_status-barcode = bapi_incinv_create_header-header_txt.
  764.         MODIFY zca_ibc_status FROM ls_zca_ibc_status.
  765.       ENDIF.
  766.     ENDIF.
  767.     CONCATENATE invoicedocnumber fiscalyear INTO e_nr_doc.
  768.     "e_nr_doc =
  769.  
  770.     "logowanie komunikatu przychodzącego
  771.     conv = cl_abap_conv_out_ce=>create(
  772.              encoding = 'UTF-8'
  773.              endian = 'L' ).
  774.  
  775.     view = cl_abap_view_offlen=>create_legacy_view( i_headerdata ).
  776.  
  777.     conv->convert_struc( EXPORTING data = i_headerdata
  778.                                    view = view
  779.                                    IMPORTING buffer = buffer1 ).
  780.  
  781.     ls_log_data-name = 'I_HEADERDATA'.
  782.     ls_log_data-sdata = buffer1.
  783.     APPEND ls_log_data TO lt_log_data.
  784.  
  785.     view = cl_abap_view_offlen=>create_legacy_view( ls_tax ).
  786.     LOOP AT i_taxdata INTO ls_tax.
  787.       conv->convert_struc( EXPORTING data = ls_tax
  788.                            view = view
  789.                            IMPORTING buffer = buffer1 ).
  790.       ls_log_data-name = 'I_TAXDATA'.
  791.       ls_log_data-sdata = buffer1.
  792.       APPEND ls_log_data TO lt_log_data.
  793.     ENDLOOP.
  794.  
  795.     view = cl_abap_view_offlen=>create_legacy_view( ls_ext ).
  796.     LOOP AT i_extensionin INTO ls_ext.
  797.       conv->convert_struc( EXPORTING data = ls_ext
  798.                            view = view
  799.                            IMPORTING buffer = buffer1 ).
  800.       ls_log_data-name = 'I_EXTENSIONIN'.
  801.       ls_log_data-sdata = buffer1.
  802.       APPEND ls_log_data TO lt_log_data.
  803.     ENDLOOP.
  804.     .
  805.  
  806.     view = cl_abap_view_offlen=>create_legacy_view( ls_bapiret2 ).
  807.     LOOP AT lt_bapiret2 INTO ls_bapiret2.
  808.       conv->convert_struc( EXPORTING data = ls_bapiret2
  809.                           view = view
  810.                           IMPORTING buffer = buffer1 ).
  811.  
  812.       ls_log_data-name = 'BAPIRET2'.
  813.       ls_log_data-sdata = buffer1.
  814.       APPEND ls_log_data TO lt_log_data.
  815.     ENDLOOP.
  816.  
  817.     CALL FUNCTION 'ZMM_IBC_IF_LOG_MSG' STARTING NEW TASK sy-uzeit
  818.       TABLES
  819.         log_tab = lt_log_data.
  820.  
  821.     "koniec logowania
  822.  
  823.  
  824.  
  825.   ENDFUNCTION.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement