GL Clearing For (F-03) Using BAPI

 Input


*&---------------------------------------------------------------------*
*& Report ZFI_GL_CLEARING
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zfi_gl_clearing.

INCLUDE zfi_gl_clearing_top.
INCLUDE zfi_gl_clearing_sec.
INCLUDE zfi_gl_clearing_cls.

START-OF-SELECTION.
*call METHOD
  DATA(lo_mainNEW lcl_main).
  lo_main->get_data).
  lo_main->fill_data).
  lo_main->display_clearing_result).


*&---------------------------------------------------------------------*
*& Include          ZFI_GL_CLEARING_TOP
*&---------------------------------------------------------------------*
TABLESsscrfields.
TYPESBEGIN OF gty_final,
         sno           TYPE char4,
         gl_account    TYPE  bseg-hkont,
         clearing_date TYPE bseg-augcp,
         currency      TYPE waers,
         doc_from      TYPE bseg-belnr,
         doc_to        TYPE bseg-belnr,
         year          TYPE bseg-gjahr,
       END OF gty_final.
TYPES :BEGIN OF gty_result,
         type    TYPE char10,
         bukrs   TYPE bukrs,
         belnr   TYPE belnr_d,
         gjahr   TYPE gjahr,
         hkont   TYPE hkont,
         zuonr   TYPE dzuonr,
         id      TYPE symsgid,
         number  TYPE symsgno,
         message TYPE bapi_msg,
       END OF gty_result.

datagt_result TYPE TABLE OF gty_result.
DATAgt_final TYPE TABLE OF gty_final,
      gs_final TYPE gty_final,
      h_excel  TYPE ole2_object" Excel object
      h_mapl   TYPE ole2_object" list of workbooks
      h_map    TYPE ole2_object" workbook
      h_zl     TYPE ole2_object" cell
      h_f      TYPE ole2_object" font
      t_raw    TYPE truxs_t_text_data.


DATAlt_doc TYPE RANGE OF mara-matnr,
      ls_doc LIKE LINE OF lt_doc.

DATA:
  lt_acchd      TYPE acchd_t,
  lt_accit      TYPE accit_t,
  lt_acccr      TYPE acccr_t,
  lv_posnr      TYPE posnr_acc,
  lv_cr_amount  TYPE wrbtr,
  lt_open_tab   TYPE postab_tab,
  lv_difference TYPE dmbtr,
  lv_post_clr   TYPE char1.

DATA:
  md_tender_type      TYPE ztender_type,
  md_tender_gl        TYPE hkont,
  md_key_date         TYPE allgstid,
  md_bank_gl          TYPE hkont,
  md_charges_gl       TYPE hkont,
  md_difference_gl    TYPE hkont,
  md_diff_amount      TYPE dmbtr,
  md_diff_ind         TYPE flag,
  md_total_inv_amount TYPE dmbtr,
  md_cr_amount        TYPE dmbtr,
  md_doc_type         TYPE blart VALUE 'ZA',
  md_posting_date     TYPE budat,
  md_filefullpath     TYPE string,
  ms_data             TYPE zfi_tender_post_struc,
*      mt_result           TYPE tt_result,
*      mt_clearing_result  TYPE tt_cleating_result,
  mt_gl_data          TYPE REF TO data,
  gl_tablestructure   TYPE REF TO cl_abap_structdescr,
  tabletype           TYPE REF TO cl_abap_tabledescr.


*&---------------------------------------------------------------------*
*& Include          ZFI_GL_CLEARING_SEC
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b1  WITH FRAME TITLE TEXT-001.
  PARAMETERSp_file  TYPE ibipparms-path.
SELECTION-SCREEN END OF BLOCK b1 .

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002 .
  SELECTION-SCREENPUSHBUTTON 40(70cmdgen USER-COMMAND a_gen VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b2.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file .
*** File Upload.
  PERFORM file_upload.
INITIALIZATION.
  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name   icon_xxl
      text   'Generate Template'
      info   'Generate Excel File Template'
    IMPORTING
      result cmdgen
    EXCEPTIONS
      OTHERS 0.

AT SELECTION-SCREEN.
  CASE sscrfields.
    WHEN 'A_GEN'.
      PERFORM generate_template.
  ENDCASE.

*& FORM generate_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM generate_template .

* start Excel
  CREATE OBJECT h_excel 'EXCEL.APPLICATION'.
  SET PROPERTY OF h_excel 'Visible' 1.

* get list of workbooks, initially empty
  CALL METHOD OF
    h_excel
      'Workbooks' h_mapl.

*** Error handle File
  PERFORM err_hdl.

* add a new workbook
  CALL METHOD OF
    h_mapl
      'Add' h_map.

*** Error handle File
  PERFORM err_hdl.

  PERFORM fill_cell USING:   'Sno',
                             'Gl Account',
                             'Clearing Date',
                             'Currency',
                             'Doc From',
                             'Doc To',
                             'Year'.
ENDFORM.


FORM err_hdl .
  IF sy-subrc <> 0.
    CALL METHOD OF
      h_excel
      'QUIT'.
    FREE OBJECT h_excel.
    h_excel-handle -1.
    MESSAGE'Failed to generate template.' TYPE 'E'.
  ENDIF.
ENDFORM.
FORM fill_cell USING j bold val.
  CALL METHOD OF
      h_excel
      'Cells' h_zl
    EXPORTING
      #1      i
      #2      j.
  PERFORM err_hdl.
  SET PROPERTY OF h_zl 'Value' val .
  PERFORM err_hdl.
  GET PROPERTY OF h_zl 'Font' h_f.
  PERFORM err_hdl.
  SET PROPERTY OF h_f 'Bold' bold .
  PERFORM err_hdl.
ENDFORM.


FORM file_upload .

****FIle Upload Data
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  syst-cprog
      dynpro_number syst-dynnr
      field_name    'P_FILE'
    IMPORTING
      file_name     p_file.

ENDFORM.


*&---------------------------------------------------------------------*
*& Include          ZFI_GL_CLEARING_CLS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*

CLASS lcl_main DEFINITION.
  PUBLIC SECTION.
    TYPES:
      tt_open_items TYPE STANDARD TABLE OF bsis_view WITH DEFAULT KEY.
    METHODS:
      get_data,
      fill_data,
      display_clearing_result,
      get_open_items IMPORTING
                       VALUE(im_bukrs)      TYPE bukrs
                       VALUE(im_gl)         TYPE hkont
                       VALUE(im_doc_form)   TYPE bseg-belnr
                       VALUE(im_doc_to)     TYPE bseg-belnr
                     RETURNING
                       VALUE(rt_open_itemsTYPE tt_open_items,
      fill_rfpos_data IMPORTING
                        VALUE(is_open_itemsTYPE bsis_view
                      RETURNING
                        VALUE(rs_rfpos)      TYPE rfops,
      fill_accounting_data IMPORTING
                             VALUE(im_payments)   TYPE flag
                             VALUE(im_invoices)   TYPE flag
                             VALUE(im_posnr)      TYPE posnr_acc
                             VALUE(is_open_itemsTYPE rfops
                           CHANGING
                             VALUE(cv_cr_amount)  TYPE wrbtr
                             VALUE(ct_acchd)      TYPE acchd_t
                             VALUE(ct_accit)      TYPE accit_tab
                             VALUE(ct_acccr)      TYPE acccr_tab,
      post_clearing IMPORTING
                      VALUE(it_open_itemsTYPE postab_tab
                      VALUE(it_acchd)      TYPE acchd_t
                      VALUE(it_accit)      TYPE accit_t
                      VALUE(it_acccr)      TYPE acccr_t
                      VALUE(im_gl)         TYPE hkont
                      VALUE(im_diff)       TYPE flag
                    EXPORTING
                      VALUE(e_belnr)       TYPE  belnr_d
                      VALUE(e_bukrs)       TYPE  bukrs
                      VALUE(e_gjahr)       TYPE  gjahr,
      fill_difference_line IMPORTING
                             VALUE(im_posnr)      TYPE posnr_acc
                             VALUE(is_open_itemsTYPE rfops
                             VALUE(im_amount)     TYPE dmbtr
                           CHANGING
                             VALUE(ct_acchd)      TYPE acchd_t
                             VALUE(ct_accit)      TYPE accit_tab
                             VALUE(ct_acccr)      TYPE acccr_tab,

      on_link_click   FOR EVENT link_click OF cl_salv_events_table IMPORTING row column.
ENDCLASS.

CLASS lcl_main IMPLEMENTATION.
  METHOD get_data .
    CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
      EXPORTING
*       I_FIELD_SEPERATOR    =
        i_line_header        'X'
        i_tab_raw_data       t_raw
        i_filename           p_file
      TABLES
        i_tab_converted_data gt_final.
    IF gt_final IS INITIAL.
      MESSAGE 'No data uploaded' TYPE 'E'.
    ENDIF.
  ENDMETHOD.

  METHOD fill_data.

    LOOP AT gt_final ASSIGNING FIELD-SYMBOL(<fs_final>).
      <fs_final>-gl_account |{  <fs_final>-gl_account ALPHA IN }|.
      <fs_final>-doc_from   |{  <fs_final>-doc_from ALPHA IN }|.
      <fs_final>-doc_to     |{  <fs_final>-doc_to ALPHA IN }|.
      md_posting_date       <fs_final>-clearing_date.

      CALL METHOD get_open_items
        EXPORTING
          im_bukrs      '****'
          im_gl         <fs_final>-gl_account
          im_doc_form   <fs_final>-doc_from
          im_doc_to     <fs_final>-doc_to
        RECEIVING
          rt_open_items DATA(gt_gl_open_items).

      DATA(gt_creditgt_gl_open_items.
      DATA(gt_debit)  gt_gl_open_items.

      SORTgt_credit BY bukrs zuonr prctr,
            gt_debit  BY bukrs zuonr prctr.

      DELETE gt_credit WHERE shkzg 'H'.
      DELETE gt_debit WHERE shkzg 'S'.

      DELETE ADJACENT DUPLICATES FROM gt_gl_open_items COMPARING belnr  bukrs .

      LOOP AT  gt_gl_open_items ASSIGNING FIELD-SYMBOL(<fs_gl_open>).

        LOOP AT gt_credit ASSIGNING FIELD-SYMBOL(<fs_credit>)  WHERE  belnr <fs_gl_open>-belnr
                                                                      AND  bukrs <fs_gl_open>-bukrs
                                                                    AND gjahr =  <fs_gl_open>-gjahr.

          lv_posnr lv_posnr + 1.
          "Fill RFPOS(Open Items for Clearing Transactions)
          APPEND INITIAL LINE TO lt_open_tab ASSIGNING FIELD-SYMBOL(<ls_open_post>).
          <ls_open_post> fill_rfpos_data<fs_credit> ).
          lv_cr_amount md_cr_amount lv_cr_amount + <fs_credit>-wrbtr.

          "Fill Accounting Information
          CALL METHOD fill_accounting_data
            EXPORTING
              im_payments   abap_true
              im_invoices   abap_false
              im_posnr      lv_posnr
              is_open_items <ls_open_post>
            CHANGING
              cv_cr_amount  lv_cr_amount
              ct_acchd      lt_acchd
              ct_accit      lt_accit
              ct_acccr      lt_acccr.
        ENDLOOP.
        LOOP AT  gt_debit ASSIGNING FIELD-SYMBOL(<fs_debit>WHERE  belnr <fs_gl_open>-belnr
                                                                      AND  bukrs <fs_gl_open>-bukrs
                                                                    AND gjahr =  <fs_gl_open>-gjahr.
          lv_posnr lv_posnr + 1.

          "Fill RFPOS(Open Items for Clearing Transactions)
          UNASSIGN <ls_open_post>.
          APPEND INITIAL LINE TO lt_open_tab ASSIGNING <ls_open_post>.
          <ls_open_post> fill_rfpos_data<fs_debit> ).

          "Fill Accounting Information
          CALL METHOD fill_accounting_data
            EXPORTING
              im_payments   abap_false
              im_invoices   abap_true
              im_posnr      lv_posnr
              is_open_items <ls_open_post>
            CHANGING
              cv_cr_amount  lv_cr_amount
              ct_acchd      lt_acchd
              ct_accit      lt_accit
              ct_acccr      lt_acccr.
        ENDLOOP.
        "Fill Difference Amount Line
        IF md_total_inv_amount md_cr_amount NE AND
            md_total_inv_amount NE AND md_cr_amount NE 0.

          lv_difference md_total_inv_amount md_cr_amount.

          IF lv_difference LT 0.
            MULTIPLY lv_difference BY -1.
          ENDIF.

          IF lv_difference LE md_diff_amount.

            lv_posnr lv_posnr + 1.

            REFRESHlt_accit,lt_acccr.

            md_diff_ind abap_true.

            CALL METHOD fill_difference_line
              EXPORTING
                im_posnr      lv_posnr
                is_open_items <ls_open_post>
                im_amount     md_cr_amount md_total_inv_amount )
              CHANGING
                ct_acchd      lt_acchd
                ct_accit      lt_accit
                ct_acccr      lt_acccr.
          ENDIF.
        ENDIF.
      ENDLOOP.
      AT END OF sno.
        CALL METHOD post_clearing
          EXPORTING
            it_open_items lt_open_tab
            it_acchd      lt_acchd
            it_accit      lt_accit
            it_acccr      lt_acccr
            im_gl         <fs_final>-gl_account
            im_diff       md_diff_ind
          IMPORTING
            e_belnr       DATA(lv_belnr)
            e_gjahr       DATA(lv_gjahr).

        CLEAR:
       lv_posnr,
       lv_post_clr,
       lv_cr_amount,
       md_total_inv_amount,
       md_cr_amount,
       lt_open_tab,
       lt_acccr,
       lt_accit,
       lt_acchd.
      ENDAT.

    ENDLOOP.

  ENDMETHOD.

  METHOD get_open_items.

    ls_doc-sign 'I'.
    IF im_doc_to IS NOT INITIAL .
      ls_doc-option 'BT'.
    ELSE.
      ls_doc-option 'EQ'.
    ENDIF.

    ls_doc-low im_doc_form.
    ls_doc-high  im_doc_to.
    APPEND ls_doc TO lt_doc.

    CLEARrt_open_items.
    SELECT *
      FROM bsis_view
      INTO TABLE @DATA(lt_open_items)
     WHERE belnr IN @lt_doc AND
      bukrs EQ @im_bukrs
       AND hkont EQ @im_gl.

    SELECT *
      FROM bsas_view
      APPENDING TABLE @lt_open_items
     WHERE belnr IN @lt_doc AND
      bukrs EQ @im_bukrs
       AND hkont EQ @im_gl.
    SORT lt_open_items BY bukrs belnr gjahr buzei.
    DELETE lt_open_items WHERE augbl IS NOT INITIAL.            " Delete record if it has Clearing document
    rt_open_items lt_open_items.
    CLEAR lt_doc.
  ENDMETHOD.

  METHOD fill_rfpos_data.
    rs_rfpos CORRESPONDING #is_open_items ).

    rs_rfpos-koart 'S'.
    rs_rfpos-xaktp 'X'.
    rs_rfpos-konko is_open_items-hkont.
  ENDMETHOD.
  METHOD fill_accounting_data.
    IF ct_acchd IS INITIAL.
      "Fill Accounting Header Information
      APPEND INITIAL LINE TO ct_acchd ASSIGNING FIELD-SYMBOL(<ls_acchd>).
      <ls_acchd>-bktxt 'Clearing Document'.
    ENDIF.

    "Fill Payments Accounting Information
    IF im_payments IS NOT INITIAL.
      "Fill Accounting Item Information
      APPEND INITIAL LINE TO ct_accit ASSIGNING FIELD-SYMBOL(<ls_accit>).

      <ls_accit> CORRESPONDING #is_open_items MAPPING hkont konko
                                                  EXCEPT  belnr blart shkzg pswbt mwskz .
      <ls_accit>-awtyp ''.
      <ls_accit>-posnr    im_posnr.
      <ls_accit>-blart    'AB'.
      <ls_accit>-bldat    md_posting_date.
      <ls_accit>-budat    md_posting_date.
      <ls_accit>-shkzg    'H'.
      <ls_accit>-bschl    50.
      <ls_accit>-xmwst    'X'.

      "Fill Accounting Currency Information
      APPEND INITIAL LINE TO ct_acccr ASSIGNING FIELD-SYMBOL(<ls_acccr>).
      <ls_acccr>-awtyp ''.
      <ls_acccr>-posnr    im_posnr.
      <ls_acccr>-curtp    '00'.
      <ls_acccr>-waers    is_open_items-waers.
      <ls_acccr>-wrbtr    is_open_items-wrbtr * -1.

      "Fill Invoice Accounting Information
    ELSEIF im_invoices IS NOT INITIAL.

      APPEND INITIAL LINE TO ct_accit ASSIGNING <ls_accit>.

      <ls_accit> CORRESPONDING #is_open_items MAPPING hkont konko
                                                  EXCEPT belnr blart shkzg pswbt mwskz ).
      <ls_accit>-awtyp ''.
      <ls_accit>-posnr    im_posnr.
      <ls_accit>-blart    'AB'.
      <ls_accit>-bldat    md_posting_date.
      <ls_accit>-budat    md_posting_date.
      <ls_accit>-shkzg    'S'.
      <ls_accit>-bschl    40.

      APPEND INITIAL LINE TO ct_acccr ASSIGNING <ls_acccr>.
      <ls_acccr>-awtyp ''.
      <ls_acccr>-posnr    im_posnr.
      <ls_acccr>-curtp    '00'.
      <ls_acccr>-waers    is_open_items-waers.
      <ls_acccr>-wrbtr    is_open_items-wrbtr.

      cv_cr_amount cv_cr_amount is_open_items-wrbtr.

      "Fill Accounting Currency Information

      " If Credit amount is greater than debit amount
      md_total_inv_amount md_total_inv_amount + is_open_items-wrbtr.
    ENDIF.
  ENDMETHOD.
  METHOD fill_difference_line.

    "Fill Difference GL
    APPEND INITIAL LINE TO ct_accit ASSIGNING FIELD-SYMBOL(<ls_accit>).

    <ls_accit> CORRESPONDING #is_open_items EXCEPT hkont belnr blart shkzg pswbt mwskz ).

    <ls_accit>-posnr    im_posnr.
    <ls_accit>-blart    'AB'.
    <ls_accit>-bldat    md_posting_date.
    <ls_accit>-budat    md_posting_date.
    <ls_accit>-budat    md_posting_date.
    <ls_accit>-hkont    md_difference_gl.

    APPEND INITIAL LINE TO ct_acccr ASSIGNING FIELD-SYMBOL(<ls_acccr>).
    <ls_acccr>-posnr    im_posnr.
    <ls_acccr>-curtp    '00'.
    <ls_acccr>-waers    is_open_items-waers.
    <ls_acccr>-wrbtr    im_amount.

    IF <ls_acccr>-wrbtr LT 0.
      <ls_accit>-bschl    50.
      <ls_accit>-shkzg    'H'.
    ELSE.
      <ls_accit>-bschl    40.
      <ls_accit>-shkzg    'S'.
    ENDIF.
  ENDMETHOD.

  METHOD post_clearing.

    DATA:
       lv_message TYPE itex132.

    READ TABLE it_accit INTO DATA(ls_accitINDEX 1.
    LOOP AT it_accit ASSIGNING FIELD-SYMBOL(<accit>).
      IF <accit>-gjahr 2023.
        CLEAR <accit>-gjahr.
      ENDIF.
    ENDLOOP.
    CALL FUNCTION 'ZFI_AUTO_CLEARING_CREATE'
      EXPORTING
        i_clr_trans      'UMBUCHNG' "c_clr_trans
        it_open_item_tab it_open_items
        im_gl            im_gl
        im_diff          im_diff
*       i_simulation     = space
      IMPORTING
        e_belnr          e_belnr
        e_bukrs          e_bukrs
        e_gjahr          e_gjahr
      CHANGING
        ct_acchd         it_acchd
        ct_accit         it_accit                " Accounting Interface: Item Information
        ct_acccr         it_acccr                 " Accounting Interface: Currency Information
      EXCEPTIONS
        error_message    1
        OTHERS           2.
    IF sy-subrc <> 0.
*      ev_return_code = sy-subrc.
      CALL FUNCTION 'FORMAT_MESSAGE'
        EXPORTING
          id        sy-msgid
          lang      '-D'
          no        sy-msgno
          v1        sy-msgv1
          v2        sy-msgv2
          v3        sy-msgv3
          v4        sy-msgv4
        IMPORTING
          msg       lv_message
        EXCEPTIONS
          not_found 1
          OTHERS    2.
      IF sy-subrc <> 0.
        "mplement suitable error handling here
      ENDIF.

      APPEND INITIAL LINE TO gt_result ASSIGNING FIELD-SYMBOL(<fs_result>).

      <fs_result>-type     icon_led_red.
      <fs_result>-bukrs    '****'.
      <fs_result>-id       sy-msgid.
      <fs_result>-number   sy-msgno.
      <fs_result>-message  lv_message.

    ELSE.

      APPEND INITIAL LINE TO gt_result ASSIGNING <fs_result>.
      <fs_result>-type     icon_led_green.
      <fs_result>-bukrs    e_bukrs.
      <fs_result>-belnr    e_belnr.
      <fs_result>-gjahr    e_gjahr.
      <fs_result>-hkont    im_gl.
      <fs_result>-message  'Clearing Document Posted Successfully'(007).

    ENDIF.

  ENDMETHOD.
  METHOD display_clearing_result.

    DATA:
        lo_column               TYPE REF TO cl_salv_column_table.

    TRY.

        CALL METHOD cl_salv_table=>factory
          IMPORTING
            r_salv_table DATA(lo_salv)                          " Basis Class Simple ALV Tables
          CHANGING
            t_table      gt_result.

        DATA(lo_functionslo_salv->get_functions).
        lo_functions->set_all).

        DATA(lo_columnslo_salv->get_columns).

        lo_columns->set_optimize).

        lo_column ?= lo_columns->get_column'TYPE' ).
        lo_column->set_iconif_salv_c_bool_sap=>true ).
        lo_column->set_long_text'Status' ).
        lo_column->set_alignmentif_salv_c_alignment=>centered ).
        lo_column->set_output_length20 ).

        lo_column ?= lo_columns->get_column'BELNR' ).
        lo_column->set_cell_typeif_salv_c_cell_type=>hotspot ).

        DATA(lo_eventslo_salv->get_event).

        SET HANDLER on_link_click FOR lo_events.

        lo_salv->display).

      CATCH cx_salv_msg INTO DATA(lx_salv_msg)" ALV: General Error Class with Message
      CATCH cx_salv_data_error INTO DATA(lx_salv_data_error)" ALV: General Error Class (Checked in Syntax Check)
      CATCH cx_salv_not_found INTO DATA(lx_salv_not_found).  " ALV: General Error Class (Checked in Syntax Check)
      CATCH cx_salv_existing INTO DATA(lx_salv_existing).   " ALV: General Error Class (Checked in Syntax Check)
    ENDTRY.
  ENDMETHOD.

  METHOD on_link_click.

    IF column 'BELNR'.

      READ TABLE gt_result INTO DATA(ls_resultINDEX row.
      IF sy-subrc 0.
        SET PARAMETER ID 'BLN' FIELD ls_result-belnr.
        SET PARAMETER ID 'BUK' FIELD ls_result-bukrs.
        SET PARAMETER ID 'GJR' FIELD ls_result-gjahr.

        CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
      ENDIF.
    ENDIF.


  ENDMETHOD.


ENDCLASS.



Note : ZFI_AUTO_CLEARING_CREATE ( find the below Code )








FUNCTION zfi_auto_clearing_create.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(I_CLR_TRANS) TYPE  CHAR8
*"     REFERENCE(IT_OPEN_ITEM_TAB) TYPE  POSTAB_TAB
*"     REFERENCE(I_DIFF_TC) TYPE  DIFFW OPTIONAL
*"     REFERENCE(I_SIMULATION) TYPE  XFELD DEFAULT SPACE
*"     VALUE(IM_GL) TYPE  HKONT OPTIONAL
*"     VALUE(IM_DIFF) TYPE  FLAG OPTIONAL
*"  EXPORTING
*"     REFERENCE(E_BELNR) TYPE  BELNR_D
*"     REFERENCE(E_BUKRS) TYPE  BUKRS
*"     REFERENCE(E_GJAHR) TYPE  GJAHR
*"  CHANGING
*"     REFERENCE(CT_ACCHD) TYPE  ACCHD_T
*"     REFERENCE(CT_ACCIT) TYPE  ACCIT_TAB
*"     REFERENCE(CT_ACCCR) TYPE  ACCCR_TAB
*"     REFERENCE(CT_ACCFI) TYPE  ACCFI_T OPTIONAL
*"     REFERENCE(CT_ACCIT_EXT) TYPE  FAGL_T_ACCIT_EXTENSION OPTIONAL
*"  EXCEPTIONS
*"      ERROR_MESSAGE
*"----------------------------------------------------------------------

  DATAls_acchd     TYPE acchd,
        ls_accit     TYPE accit,
        ls_acccr     TYPE acccr,
        ls_accfi     TYPE accfi,
        ls_accit_ext TYPE accit_extension,              
        lt_ausz1     TYPE ausz1_tab,
        lt_ausz2     TYPE ausz2_tab,
        lt_ausz3     TYPE ausz_clr_tab,
        lt_acctx     TYPE TABLE OF accbset.

  READ TABLE ct_acchd INDEX INTO ls_acchd.

  READ TABLE ct_accit INDEX INTO ls_accit.

  READ TABLE ct_acccr INDEX INTO ls_acccr.

  IF ct_accfi IS SUPPLIED.
    READ TABLE ct_accfi INDEX INTO ls_accfi.
  ENDIF.

  IF ct_accit_ext IS SUPPLIED.                         
    READ TABLE ct_accit_ext INDEX INTO ls_accit_ext.    
  ENDIF.                                                 

  IF ls_acchd-awtyp IS INITIAL AND ls_acchd-glvor IS INITIAL.
    ls_acchd-awtyp 'BKPFF'.
    ls_acchd-glvor 'RFBU'.
    MODIFY ct_acchd FROM ls_acchd TRANSPORTING awtyp glvor
                    WHERE awtyp <> ls_acchd-awtyp OR
                          glvor <> ls_acchd-glvor.
    ls_accit-awtyp ls_acchd-awtyp.
    MODIFY ct_accit FROM ls_accit TRANSPORTING awtyp
                    WHERE awtyp <> ls_acchd-awtyp.
    ls_acccr-awtyp ls_acchd-awtyp.
    MODIFY ct_acccr FROM ls_acccr TRANSPORTING awtyp
                    WHERE awtyp <> ls_acchd-awtyp.
    IF ct_accfi IS SUPPLIED.
      ls_accfi-awtyp ls_acchd-awtyp.
      MODIFY ct_accfi FROM ls_accfi TRANSPORTING awtyp
                      WHERE awtyp <> ls_acchd-awtyp.
    ENDIF.
    IF ct_accit_ext IS SUPPLIED.                          
      ls_accit_ext-awtyp ls_acchd-awtyp.               
      MODIFY ct_accit_ext FROM ls_accit_ext               
                          TRANSPORTING awtyp              
                          WHERE awtyp <> ls_acchd-awtyp.  
    ENDIF.                                                "
  ENDIF.

* VAT calculation for manual line items is not supported (yet)
  LOOP AT ct_accit INTO ls_accit WHERE mwskz NE space.
    MESSAGE e899 WITH 'No VAT calculation on manual line items (yet).'.
  ENDLOOP.

* classic/old withholding tax is not supported (yet)
  LOOP AT ct_accit INTO ls_accit WHERE qsskz NE space
                                   AND koart CA 'DVK'.
    CALL FUNCTION 'FI_CHECK_EXTENDED_WT'
      EXPORTING
        i_bukrs              ls_accit-bukrs
      EXCEPTIONS
        component_not_active 1
        not_found            2
        OTHERS               3.
    IF sy-subrc <> 0.
      MESSAGE e448(f5a).
    ENDIF.
  ENDLOOP.

* create/execute the clearing on the basis of the provided open items -
  CALL FUNCTION 'FI_CLEARING_CREATE'
    EXPORTING
      i_clr_trans      i_clr_trans
      it_open_item_tab it_open_item_tab
      i_diff_tc        i_diff_tc
    IMPORTING
      et_ausz1         lt_ausz1
      et_ausz2         lt_ausz2
      et_ausz3         lt_ausz3
    CHANGING
      ct_acchd         ct_acchd
      ct_accit         ct_accit
      ct_acccr         ct_acccr
      ct_accfi         ct_accfi
      ct_acctx         lt_acctx
      ct_accit_ext     ct_accit_ext.                    
  IF im_diff IS INITIAL.
    IF im_gl IS NOT INITIAL.
      DELETE ct_accit WHERE hkont im_gl AND augbl IS INITIAL.

      LOOP AT ct_acccr INTO ls_acccr.
        READ TABLE ct_accit TRANSPORTING NO FIELDS WITH KEY posnr ls_acccr-posnr.
        IF sy-subrc NE 0.
          DELETE ct_acccr.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ELSE.
    IF im_gl IS NOT INITIAL.
      DELETE ct_accit WHERE hkont im_gl AND augbl IS INITIAL AND posnr ls_accit-posnr.

      LOOP AT ct_acccr INTO ls_acccr.
        READ TABLE ct_accit TRANSPORTING NO FIELDS WITH KEY posnr ls_acccr-posnr.
        IF sy-subrc NE 0.
          DELETE ct_acccr.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

  READ TABLE it_open_item_tab INTO DATA(ls_open_itemsINDEX 1.
  IF sy-subrc 0.
    MODIFY ct_accit FROM ls_accit TRANSPORTING zuonr
                        WHERE zuonr <> ls_open_items-zuonr.
  ENDIF.


  CLEAR:ls_acccr.

  READ TABLE ct_acchd INDEX INTO ls_acchd.
  READ TABLE ct_accit INDEX INTO ls_accit.

* ------ call the general interface to accounting / RWIN --------------
  CALL FUNCTION 'AC_DOCUMENT_CREATE'
    EXPORTING
      i_free_table ' '
    TABLES
      t_acchd      ct_acchd
      t_accit      ct_accit
      t_acccr      ct_acccr
      t_accfi      ct_accfi
      t_acctx      lt_acctx
      t_accit_ext  ct_accit_ext                        
      t_ausz2      lt_ausz2
      t_ausz3      lt_ausz3.

  IF i_simulation IS INITIAL.

    IF ls_acchd-awtyp EQ 'BKPFF' AND ls_acchd-awref IS INITIAL.
      PERFORM belegnummer_vergeben USING ls_accit-bukrs
                                         ls_accit-gjahr
                                         ls_accit-blart
                                         g_group_ledger
                                CHANGING ls_acchd-awref.
      ls_acchd-aworg(4ls_accit-bukrs.
      ls_acchd-aworg+4(4ls_accit-gjahr.
    ENDIF.

    MODIFY ct_acchd FROM ls_acchd TRANSPORTING awref aworg
      WHERE awref <> ls_acchd-awref
         OR aworg <> ls_acchd-aworg.

    CALL FUNCTION 'AC_DOCUMENT_POST'
      EXPORTING
        i_awtyp ls_acchd-awtyp
        i_awref ls_acchd-awref
        i_aworg ls_acchd-aworg.

    COMMIT WORK AND WAIT.

    e_belnr ls_acchd-awref.
    e_bukrs ls_accit-bukrs.
    e_gjahr ls_accit-gjahr.

  ENDIF.

ENDFUNCTION.




Comments

Popular posts from this blog

PO rejection notification & rejection comments for Fiori

FB60 Vendor Invoice Post using BAPI

Service Invoice Upload For FB70 (BAPI)