Friday, January 22, 2016

SAP FI Cluster Table Codes

FUNCTION zapo_nrmga_fi_billing_docs.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(I_BEGIN_DATE) TYPE  SY-DATUM
*"     REFERENCE(I_END_DATE) TYPE  SY-DATUM
*"     REFERENCE(I_BEGIN_TIME) TYPE  SY-UZEIT
*"     REFERENCE(I_END_TIME) TYPE  SY-UZEIT
*"  TABLES
*"      I_DOC_TYPES STRUCTURE  ZNRMGA_DOC_TYPE
*"      E_FM_DATA STRUCTURE  ZNRMGA_OB
*"----------------------------------------------------------------------
*&----------------------------------------------------------------------*
*& Created by      :                                    *
*& Technical       :  Anupma Chandra                                    *
*& Functional      :                                                    *
*& Created on      :  07/20/2012                                        *
*& Last Updated    :                                                    *
*& Transport       :                                        *
*& Functional Spec :                                         *
*& Technical Spec  :                                        *
*& Program name    :  ZAPO_NRM_GA                                       *
*& Report Title    :  NRM G&A Transactions Outbound                     *
*& Description     :  The outbound FMMI to NRM G&A interface will       *
*& provide that ability to extract funds reservation, commitments and   *
*& obligations as well as liquidation of obligations through vendor     *
*& advances, vendor invoices, and direct disbursement relevant to the   *
*& NRM G&A system.                                                      *
*&======================================================================*
*&                       Modification History                           *
*&======================================================================*

  PERFORM fill_range_tables TABLES i_doc_types.
  PERFORM select_data_from_dbtables USING i_begin_date i_end_date i_begin_time i_end_time.
  PERFORM int_table_for_billing_doc .
  PERFORM bkpf_bseg_data_4r_ref_doc.
  PERFORM kblk_kblp_data_4r_ref_doc.
  PERFORM Compiling_ref_doc_and_mapp.
  PERFORM select_data_4r_sales_order USING i_begin_date i_end_date i_begin_time i_end_time.
  PERFORM mapping_for_sales_order tables E_FM_DATA .
ENDFUNCTION.


------------------------------------------------------------------------------------------------------------------
TOP INCLUDE
-------------------------------------------------------------------------------------------------------------------
FUNCTION-POOL zapo_nrmga_fi_bil_docs.       "MESSAGE-ID ..
TABLES: bkpf.
*--------------------------------------------------------------------*
*   Types Declaration.
*--------------------------------------------------------------------*
TYPES: BEGIN OF typ_consol_data,
***  ----------- order adjusted because of End AT statement.
**  --  Original documents - Applicable only to all of docs.
         belnr_fmmi_doc                TYPE  bkpf-belnr,             "Document no. of FMMI. doc.
**  --  First level1 preceeding documents - Applicable only to most of docs.
         belnr_level1_ref_doc          TYPE  bkpf-belnr,             "Ref Docuemnt number
         split_batch_level1_ref_doc    TYPE  kblp-fm_split_batch,    "Batch to group results.
***--------------

**  -- Level2  preceeding documents details applicable only to IC docs.
         belnr_level2_ref_doc          TYPE  bkpf-belnr,             "Ref Docuemnt number
         blart_level2_ref_doc          TYPE  bkpf-blart,             "Ref Docuemnt Type
         blart_des_level2_ref_doc      TYPE  ltext_003t,             "desc. for type of document
         budat_level2_ref_doc          TYPE  bkpf-budat,             "Posting Date
         bldat_level2_ref_doc          TYPE  bkpf-bldat,             "creation date of ref. doc.
         bktxt_level2_ref_doc          TYPE  bkpf-bktxt,             "Header text
         xblnr_level2_ref_doc          TYPE  bkpf-xblnr,             "Header Ref. Text
         sgtxt_level2_ref_doc          TYPE  bseg-sgtxt,             "Item Text
         wrbtr_level2_ref_doc          TYPE  bseg-wrbtr,             "Amount
         shkzg_level2_ref_doc          TYPE  bseg-shkzg,             "Debit credit indicator for org. doc.
         buzei_level2_ref_doc          TYPE  bseg-buzei,             "Line No.
         gsber_level2_ref_doc          TYPE  bseg-gsber,             "Business Area.
         umskz_level2_ref_doc          TYPE  bseg-umskz,             "Special G/L indicator.
         projk_level2_ref_doc          TYPE  bseg-projk,             "Invoice WBS
         xreversal_level2_ref_doc      TYPE  bkpf-xreversal,         "Reversal status
         split_batch_level2_ref_doc    TYPE  kblp-fm_split_batch,    "Batch to group results.
         zuonr_level2_ref_doc          TYPE  bseg-zuonr,             "Assignment Number.

**  --  First level1 preceeding documents - Applicable only to most of docs.
*         belnr_level1_ref_doc          TYPE  bkpf-belnr,             "Ref Docuemnt number
         blart_level1_ref_doc          TYPE  bkpf-blart,             "Ref Docuemnt Type
         blart_des_level1_ref_doc      TYPE  ltext_003t,             "desc. for type of document
         budat_level1_ref_doc          TYPE  bkpf-budat,             "Posting Date
         bldat_level1_ref_doc          TYPE  bkpf-bldat,             "creation date of ref. doc.
         bktxt_level1_ref_doc          TYPE  bkpf-bktxt,             "Header text
         xblnr_level1_ref_doc          TYPE  bkpf-xblnr,             "Header Ref. Text
         sgtxt_level1_ref_doc          TYPE  bseg-sgtxt,             "Item Text
         wrbtr_level1_ref_doc          TYPE  bseg-wrbtr,             "Amount
         shkzg_level1_ref_doc          TYPE  bseg-shkzg,             "Debit credit indicator for org. doc.
         buzei_level1_ref_doc          TYPE  bseg-buzei,             "Line No.
         gsber_level1_ref_doc          TYPE  bseg-gsber,             "Business Area.
         umskz_level1_ref_doc          TYPE  bseg-umskz,            "Special G/L indicator.
         projk_level1_ref_doc          TYPE  bseg-projk,             "Invoice WBS
         xreversal_level1_ref_doc      TYPE  bkpf-xreversal,         "Reversal status
*         split_batch_level1_ref_doc    TYPE  kblp-fm_split_batch,    "Batch to group results.
         zuonr_level1_ref_doc          TYPE  bseg-zuonr,              "Assignment Number.

**  --  Original documents - Applicable only to all of docs.
*         belnr_fmmi_doc                TYPE  bkpf-belnr,             "Document no. of FMMI. doc.
         buzei_fmmi_doc                TYPE  bseg-buzei,             "Line no. of a FMMI. doc.
         blart_fmmi_doc                TYPE  bkpf-blart,             "Document type of FMMI. doc.
         budat_fmmi_doc                TYPE  bkpf-budat,             "Posting date of FMMI. doc.
         bldat_fmmi_doc                TYPE  bkpf-bldat,             "Creation date of FMMI. doc.
         wrbtr_fmmi_doc                TYPE  bseg-wrbtr,             "Amount for FMMI doc.
         xreversal_fmmi_doc            TYPE bkpf-xreversal,          "Reversal Indicator for FMMI.
         projk_fmmi_doc                TYPE bseg-projk,              "WBS of FMMI doc
         umskz_fmmi_doc                TYPE bseg-umskz,              "Special G/L indicator.
         geber_fmmi_doc                TYPE bseg-geber,              "fund of FMMI doc
         budget_fmmi_doc               TYPE bseg-budget_pd,          "budget_pd of FMMI doc
         kunnr_fmmi_doc                TYPE bseg-kunnr,              "Customer no.
         lifnr_fmmi_doc                TYPE bseg-lifnr,              "Vendor no.
         measure_fmmi_doc              TYPE bseg-measure,            "Funded Program
         fipos_fmmi_doc                TYPE bseg-fipos,              "Commitment Item
         usname_fmmi_doc               TYPE bkpf-usnam,              "User name
         xblnr_fmmi_doc                TYPE bkpf-xblnr,              "header ref. text.
         zuonr_fmmi_doc                TYPE bseg-zuonr,              "Assignment Number.
         chect_fmmi_doc                TYPE payr-chect,              "Check no.
         gjahr_fmmi_doc                TYPE bkpf-gjahr,              "fiscal year.
         usnam_fmmi_doc                TYPE bkpf-usnam,              "user name.
         finuse_fmmi_doc               TYPE fmfundbpd-finuse,        "Budget Period
         bktxt_fmmi_doc                TYPE bkpf-bktxt,              "header text.
         sgtxt_fmmi_doc                TYPE bseg-sgtxt,              "item text.
 END OF typ_consol_data.

TYPES: BEGIN OF typ_bsad_bsak,
        belnr     TYPE bsad-belnr,
        buzei     TYPE bsad-buzei,
        augbl     TYPE bsad-augbl,
        wrbtr     TYPE bsad-wrbtr,
        blart     TYPE bsad-blart,
  END OF typ_bsad_bsak.

TYPES: BEGIN OF typ_t_typ_t_code,
  tran_code TYPE char2,
  tran_type TYPE char2,
  doc_typ   TYPE bkpf-blart,
  END OF typ_t_typ_t_code.

TYPES: BEGIN OF typ_cdhdr.
        INCLUDE STRUCTURE cdhdr.
TYPES: vbeln TYPE vbap-vbeln,   "Document type of the doc.
END OF typ_cdhdr.

TYPES: BEGIN OF ty_bseg.
        INCLUDE STRUCTURE bseg.
TYPES: blart TYPE bkpf-belnr,   "Document type of the doc.
END OF ty_bseg.


*--------------------------------------------------------------------*
*   Constanat Declaration.
*--------------------------------------------------------------------*
CONSTANTS: c_i                  TYPE tvarvc-sign      VALUE 'I',
           c_eq                 TYPE tvarvc-opti      VALUE 'EQ',
           gc_usda              TYPE bkpf-bukrs       VALUE 'USDA',
           c_nrmg(4)            TYPE  c               VALUE 'NRMG',
           c_e                  TYPE  c               VALUE 'E',
           c_x                  TYPE  c               VALUE 'X',
           c_m                  TYPE  c               VALUE 'M',
           c_dy(2)              TYPE  c               VALUE 'DY',
           c_dl(2)              TYPE  c               VALUE 'DL',
           c_rc(2)              TYPE  c               VALUE 'RC',
           c_dz(2)              TYPE  c               VALUE 'DZ',
           c_lx(2)              TYPE  c               VALUE 'LX',
           c_16                 TYPE bseg-bschl       VALUE '16',
           c_ic(2)              TYPE  c               VALUE 'IC',
           c_ba(2)              TYPE  c               VALUE 'BA',
           c_op(2)              TYPE  c               VALUE 'OP',
           c_bp(2)              TYPE  c               VALUE 'BP',
           c_mo(2)              TYPE  c               VALUE 'MO',
           c_rq(2)              TYPE  c               VALUE 'RQ',
           c_bd(2)              TYPE  c               VALUE 'BD',
*           c_bv(2)              TYPE  c               VALUE 'BV',
           c_u                  TYPE  c               VALUE 'U',
           c_d                  TYPE  c               VALUE 'D',
           c_ac(2)              TYPE  c               VALUE 'AC',
           c_f                  TYPE  c               VALUE 'F',
           c_zero               TYPE  c               VALUE '0',
           c_en                 TYPE thead-tdspras    VALUE 'E',
           c_na(2)              TYPE  c               VALUE 'NA',
           c_wa(2)              TYPE  c               VALUE 'WA',
           c_01(2)              TYPE  c               VALUE '01',
           c_vo(2)              TYPE  c               VALUE 'VO',
           c_va(2)              TYPE  c               VALUE 'VA',
           c_1                  TYPE  bkpf-xreversal  VALUE '1',
           c_2                  TYPE  bkpf-xreversal  VALUE '2',
           c_nt(2)              TYPE  c               VALUE 'NT',
           c_vr(2)              TYPE  c               VALUE 'VR',
           c_tc(2)              TYPE  c               VALUE 'TC',
           c_tr(2)              TYPE  c               VALUE 'TR',
           c_su(2)              TYPE  c               VALUE 'SU',
           c_to(2)              TYPE  c               VALUE 'TO',
           c_sa(2)              TYPE  c               VALUE 'SA',
           c_dr(2)              TYPE  c               VALUE 'DR',
           c_vc(2)              TYPE  c               VALUE 'VC',
           c_nd(2)              TYPE  c               VALUE 'ND',
           c_lc(2)              TYPE  c               VALUE 'LC',
           c_xr(2)              TYPE  c               VALUE 'XR',
           c_pv(2)              TYPE  c               VALUE 'PV',
           c_nc(2)              TYPE  c               VALUE 'NC',
           c_dd(2)              TYPE  c               VALUE 'DD',
           c_ra(2)              TYPE  c               VALUE 'RA',
           c_ad(2)              TYPE  c               VALUE 'AD',
           c_df(2)              TYPE  c               VALUE 'DF',
           c_rf(2)              TYPE  c               VALUE 'RF',
           c_rv(2)              TYPE  c               VALUE 'RV',
           c_so(2)              TYPE  c               VALUE 'SO',
           c_vb(2)              TYPE  c               VALUE 'VB',
           c_towa(4)            TYPE  c               VALUE 'TOWA',
           c_rowa(4)            TYPE  c               VALUE 'ROWA',
           c_fowa(4)            TYPE  c               VALUE 'FOWA',
           c_fiso(4)            TYPE  c               VALUE 'FISO',
           c_0001               TYPE  thead-tdid      VALUE '0001',
           c_0200(4)            TYPE  c               VALUE '0200',
           c_usda(4)            TYPE  c               VALUE 'USDA',
           c_vbbp               TYPE  thead-tdobject  VALUE 'VBBP',
           c_doc_item           TYPE  thead-tdobject  VALUE 'DOC_ITEM',
           c_fs00               TYPE  vbak-gsber      VALUE 'FS00',
           c_1340900000         TYPE  bseg-hkont      VALUE '1340900000',
           c_1360900000         TYPE  bseg-hkont      VALUE '1360900000',
           c_1360910000         TYPE  bseg-hkont      VALUE '1360910000'.

*--------------------------------------------------------------------*
*   Global data/ Variables Declaration.
*--------------------------------------------------------------------*
DATA: gv_gjahr TYPE bseg-gjahr,
      gv_wbs8          TYPE bseg-projk,
      gv_belnr_ic      TYPE bkpf-belnr,
      gv_buzei_ic      TYPE bseg-buzei,
      gv_wbs24         TYPE ps_posid,
      gv_job_code(8)   TYPE c,
      gv_name          TYPE thead-tdname,
      gv_objnr         TYPE fmzuob-objnr,
      gv_farea         TYPE fmzuob-farea,
      gv_posnr         TYPE vbap-posnr,
      gv_tabkey        TYPE cdpos-tabkey,
      gv_vbeln         TYPE vbap-vbeln,
      gv_belnr         TYPE bkpf-belnr,
      gv_rebzg         TYPE bseg-rebzg,
      gv_counter       TYPE i,
      gv_sytabix       TYPE sy-tabix.
*      gv_posnr         type vbap-posnr.

*--------------------------------------------------------------------*
*   Data/ Table Declarations.
*--------------------------------------------------------------------*
DATA: gt_bkpf_all_doc           TYPE TABLE  OF bkpf,
      gt_bseg_all_doc           TYPE TABLE  OF ty_bseg,
      gt_consol_data            TYPE TABLE  OF typ_consol_data,
      gt_consol_data_rbaa       TYPE TABLE  OF typ_consol_data,
      gt_bsad_coll              TYPE TABLE  OF typ_bsad_bsak,
      gt_bsak_coll              TYPE TABLE  OF typ_bsad_bsak,
      gt_bkpf_referenced_doc_lvl1    TYPE TABLE  OF bkpf,
      gt_kblk_referenced_doc_lvl1    TYPE TABLE  OF kblk,
      gt_kblk_referenced_doc_lvl2    TYPE TABLE  OF kblk,
      gt_kblp_referenced_doc_lvl1    TYPE TABLE  OF kblp,
      gt_kblp_referenced_doc_lvl2    TYPE TABLE  OF kblp,
      gt_bseg_referenced_doc_lvl1   TYPE TABLE  OF bseg,
      gt_output_billing         TYPE TABLE  OF znrmga_ob,
      gt_output_sales           TYPE TABLE  OF znrmga_ob,
      gt_veda                   TYPE TABLE  OF veda,
      gt_line                   TYPE TABLE  OF tline,
      gt_fmfundbpd              TYPE TABLE  OF fmfundbpd,
      gt_fmfundbpd_so           TYPE TABLE  OF fmfundbpd,
      gt_vbap                   TYPE TABLE  OF vbap,
      gt_cdhdr                  TYPE TABLE  OF typ_cdhdr,
      gt_cdpos                  TYPE TABLE  OF cdpos,
      gt_vbak_create            TYPE TABLE  OF vbak,
      gt_vbak_change            TYPE TABLE  OF vbak.
*--------------------------------------------------------------------*
*   Data/ Workspace Declarations.
*--------------------------------------------------------------------*
DATA: gs_bkpf_all_doc           TYPE  bkpf,
      gs_bseg_all_doc           TYPE  ty_bseg,
      gs_consol_data_rbaa       TYPE  typ_consol_data,
      gs_consol_data_rbaa_tmp   TYPE  typ_consol_data,
      gs_bseg_all_doc1          TYPE  ty_bseg,
      gs_consol_data            TYPE  typ_consol_data,
      gs_kblk_referenced_doc_lvl1    TYPE  kblk,
      gs_kblp_referenced_doc_lvl1    TYPE  kblp,
      gs_kblk_referenced_doc_lvl2    TYPE  kblk,
      gs_kblp_referenced_doc_lvl2    TYPE  kblp,
      gs_bsad_coll              TYPE  typ_bsad_bsak,
      gs_bsak_coll              TYPE  typ_bsad_bsak,
      gs_bkpf_referenced_doc_lvl1    TYPE  bkpf,
      gs_bseg_referenced_doc_lvl1    TYPE  bseg,
      gs_veda                   TYPE  veda,
      gs_output_billing         TYPE  znrmga_ob,
      gs_output_sales           TYPE  znrmga_ob,
      gs_line                   TYPE  tline,
      gs_fmfundbpd              TYPE  fmfundbpd,
      gs_fmfundbpd_so           TYPE  fmfundbpd,
      gs_vbap                   TYPE  vbap,
      gs_cdhdr                  TYPE  typ_cdhdr,
      gs_cdpos                  TYPE  cdpos,
      gs_vbak_create            TYPE  vbak,
      gs_fmzuob                 TYPE  fmzuob.

*--------------------------------------------------------------------*
*   Ranges.
*--------------------------------------------------------------------*
RANGES: r_blart_all_doc         FOR bkpf-blart,
        r_blart_coll            FOR bkpf-blart,
        r_hkont_fees            FOR bseg-hkont,
        r_blart_no_coll         FOR bkpf-blart,
        r_belnr_full_coll       FOR bkpf-belnr.
-------------------------------------------------------------------------------------------------------------------------
MAIN INCLUDE
---------------------------------------------------------------------------------------------------------------------------
*&---------------------------------------------------------------------*
*&      Form  FILL_RANGE_TABLES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_I_DOC_TYPES  text
*----------------------------------------------------------------------
FORM fill_range_tables  TABLES p_i_doc_types STRUCTURE znrmga_doc_type.
*******  --- to be deleted later. TBD check.
  SELECT * FROM znrmga_doc_type INTO TABLE p_i_doc_types.
****
  DATA: ls_doc_types TYPE znrmga_doc_type.
  CLEAR:  r_blart_all_doc[], r_blart_coll[], r_blart_no_coll[].
  LOOP AT p_i_doc_types INTO ls_doc_types WHERE area = c_fiso.
**-- Append allbuzei FISO document types.
    r_blart_all_doc-low    = ls_doc_types-doc_type.
    r_blart_all_doc-sign   = c_i.
    r_blart_all_doc-option = c_eq.
    APPEND  r_blart_all_doc.
**-- Append all collections document types.
    IF ( ls_doc_types-doc_type = c_dl OR ls_doc_types-doc_type = c_dz
       OR ls_doc_types-doc_type = c_dy OR ls_doc_types-doc_type = c_ic ).
      r_blart_coll-low    = ls_doc_types-doc_type.
      r_blart_coll-sign   = c_i.
      r_blart_coll-option = c_eq.
      APPEND  r_blart_coll.
    ELSE.
      r_blart_no_coll-low    = ls_doc_types-doc_type.
      r_blart_no_coll-sign   = c_i.
      r_blart_no_coll-option = c_eq.
      APPEND  r_blart_no_coll.
    ENDIF.
  ENDLOOP.

** -- Append range r_hkont_fees.
*  all fees hit GL a/c nos. as below in all servers.
  CLEAR: r_hkont_fees, r_hkont_fees[].
  r_hkont_fees-low    = c_1340900000.
  r_hkont_fees-sign   = c_i.
  r_hkont_fees-option = c_eq.
  APPEND r_hkont_fees.

  r_hkont_fees-low    = c_1360900000.
  r_hkont_fees-sign   = c_i.
  r_hkont_fees-option = c_eq.
  APPEND r_hkont_fees.

  r_hkont_fees-low   = c_1360910000.
  r_hkont_fees-sign   = c_i.
  r_hkont_fees-option = c_eq.
  APPEND r_hkont_fees.

ENDFORM.                    " FILL_RANGE_TABLES

*----------------------------------------------------------------------*
***INCLUDE LZAPO_NRMGA_FI_BIL_DOCSF01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  SELECT_DATA_FROM_DBTABLES
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM select_data_from_dbtables  USING    p_i_begin_date
                                         p_i_end_date
                                         p_i_begin_time
                                         p_i_end_time.
  DATA: lv_belnr          TYPE bseg-belnr.


**  -- Get Fiscal Year.
  CALL FUNCTION 'FI_PERIOD_DETERMINE'
    EXPORTING
      i_budat        = sy-datum
      i_bukrs        = gc_usda
    IMPORTING
      e_gjahr        = gv_gjahr
    EXCEPTIONS
      fiscal_year    = 1
      period         = 2
      period_version = 3
      posting_period = 4
      special_period = 5
      version        = 6
      posting_date   = 7
      OTHERS         = 8.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
           WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CLEAR: gt_bkpf_all_doc[], gt_bkpf_all_doc, gt_bseg_all_doc, gt_bseg_all_doc[],
         gt_fmfundbpd[], gt_fmfundbpd.
**-- Select all document types modied/ created for the date range
  SELECT * FROM bkpf                              " Index5 in use.
           INTO TABLE gt_bkpf_all_doc
                WHERE bukrs EQ gc_usda
                  AND cpudt GE p_i_begin_date "and
                  AND cpudt LE p_i_end_date
                  AND blart IN r_blart_all_doc
                  AND gjahr EQ gv_gjahr
                  AND xreversal IN (' ', '1', '2').       "BLank is - Org, 1-reversed, 2-reversal doc.

  LOOP AT gt_bkpf_all_doc INTO gs_bkpf_all_doc.
** -- futher filtering BKPF data based on time stamp.
    IF p_i_begin_date = gs_bkpf_all_doc-cpudt.
      IF  gs_bkpf_all_doc-cputm LE p_i_begin_time.
        TRY.
            DELETE gt_bkpf_all_doc.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.
    ENDIF.
    IF p_i_end_date = gs_bkpf_all_doc-cpudt.
      IF  gs_bkpf_all_doc-cputm GE p_i_end_time.
        TRY.
            DELETE gt_bkpf_all_doc.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.
    ENDIF.
    IF gs_bkpf_all_doc-bktxt+0(4) NE c_nrmg.
**--- NRMG will be populated on the header text of all docs but for SU SA NRMG is on item text
*     and for the collections the NRMG will be on the original doc/ ref. doc header text.
*     As per intsructions for TC and TR docs. also we need to check NRMG on ref. doc. not here.
*     For all S.O related docs also BKTXT is not necessary. And data is based on GEBER = 'FS00' and not BKTXT = 'NRMG'.
      IF NOT ( gs_bkpf_all_doc-blart EQ c_su OR gs_bkpf_all_doc-blart EQ c_sa OR
               gs_bkpf_all_doc-blart EQ c_dy OR gs_bkpf_all_doc-blart EQ c_dl OR
               gs_bkpf_all_doc-blart EQ c_dz OR gs_bkpf_all_doc-blart EQ c_ic OR
               gs_bkpf_all_doc-blart EQ c_tc OR gs_bkpf_all_doc-blart EQ c_tr OR
               gs_bkpf_all_doc-blart EQ c_rv   ) .
        TRY.
            DELETE gt_bkpf_all_doc.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.
    ENDIF.

*  ENDIF.

    MODIFY gt_bkpf_all_doc FROM gs_bkpf_all_doc TRANSPORTING belnr.
  ENDLOOP.

  IF  gt_bkpf_all_doc IS NOT INITIAL.
    SELECT * FROM bseg
             INTO TABLE gt_bseg_all_doc
             FOR ALL ENTRIES IN  gt_bkpf_all_doc
             WHERE bukrs = gc_usda
               AND belnr = gt_bkpf_all_doc-belnr
               AND gjahr = gv_gjahr
               AND bschl NE c_16.   "overpayment.
  ENDIF.

** -- The combination of fund and budget period gives unique application of fund.

  IF gt_bseg_all_doc IS NOT INITIAL.
    SELECT * FROM fmfundbpd
             INTO TABLE gt_fmfundbpd
             FOR ALL ENTRIES IN gt_bseg_all_doc
             WHERE fikrs = c_usda
               AND fincode = gt_bseg_all_doc-geber
               AND budget_pd = gt_bseg_all_doc-budget_pd.
  ENDIF.
ENDFORM.                    "select_data_from_dbtables

*&---------------------------------------------------------------------*
*&      Form   int_table_for_billing_doc .
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM  int_table_for_billing_doc .
  CLEAR:r_belnr_full_coll[], gs_consol_data, gt_consol_data[], gs_bseg_all_doc1.
  LOOP AT gt_bseg_all_doc INTO gs_bseg_all_doc.
    CLEAR: gs_consol_data, gs_bseg_all_doc1, gs_bkpf_all_doc, gs_fmfundbpd, gv_belnr, gv_rebzg.
    READ TABLE gt_bkpf_all_doc INTO gs_bkpf_all_doc WITH KEY belnr = gs_bseg_all_doc-belnr.
    IF sy-subrc = 0.

      IF   gs_bkpf_all_doc-blart = c_rv AND gs_bseg_all_doc-gsber NE c_fs00.
        TRY.
            DELETE gt_bseg_all_doc.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.
**--
      IF  ( gs_bkpf_all_doc-blart = c_su OR gs_bkpf_all_doc-blart = c_sa ) AND gs_bseg_all_doc-sgtxt+0(4) NE c_nrmg .
        TRY.
            DELETE gt_bseg_all_doc.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.

**-- this part of data selection is applicable to all documents.
      READ TABLE gt_fmfundbpd INTO gs_fmfundbpd WITH KEY fincode = gs_bseg_all_doc-geber
                                                       budget_pd = gs_bseg_all_doc-budget_pd.
      IF sy-subrc EQ 0.
        gs_consol_data-finuse_fmmi_doc = gs_fmfundbpd-finuse.
      ENDIF.
**-- this part of data selection is applicable to all documents.
*    Kunnr is only in cust. line, so we are transferring Kunnr to all lines.
      LOOP AT gt_bseg_all_doc INTO gs_bseg_all_doc1 WHERE belnr = gs_bseg_all_doc-belnr
                                                      AND kunnr IS NOT INITIAL.
        IF gs_bseg_all_doc1-belnr             = gs_bseg_all_doc-belnr.
          gs_consol_data-kunnr_fmmi_doc       = gs_bseg_all_doc1-kunnr.
          gs_bseg_all_doc-kunnr               = gs_bseg_all_doc1-kunnr.
          EXIT.
        ELSE .
          EXIT.
        ENDIF.
      ENDLOOP.

**-- this part of data selection is applicable to all documents.
*    lifnr is only in cust. line, so we are transferring Lifnr to all lines.
      CLEAR: gs_bseg_all_doc1.
      LOOP AT gt_bseg_all_doc INTO gs_bseg_all_doc1 WHERE belnr = gs_bseg_all_doc-belnr
                                                      AND  lifnr IS NOT INITIAL .
        IF gs_bseg_all_doc1-belnr             = gs_bseg_all_doc-belnr.
          gs_consol_data-lifnr_fmmi_doc       = gs_bseg_all_doc1-lifnr.
          gs_bseg_all_doc-lifnr               = gs_bseg_all_doc1-lifnr.
          EXIT.
        ELSE .
          EXIT.
        ENDIF.
      ENDLOOP.


**-- Data selection for document type RV.
*-   RV is sales order invoice and RV is DPR also. So if BSEG-UMSKZ (sp.GL Ind.) = 'F' then DPR else S.O.
*-   We will be taking KOART = 'D' as some docs are made with only 'D' lines.
      IF gs_bkpf_all_doc-blart = c_rv AND gs_bseg_all_doc-koart = c_d.
        IF gs_bseg_all_doc-umskz = c_f.
          gs_consol_data-belnr_level1_ref_doc       =      gs_bseg_all_doc-vbel2.
          gs_consol_data-buzei_level1_ref_doc      =       gs_bseg_all_doc-posn2.
        ELSE.
          gs_consol_data-belnr_level1_ref_doc       =      ' '.
          gs_consol_data-buzei_level1_ref_doc      =       ' '.
        ENDIF.
        gs_consol_data-belnr_fmmi_doc       =       gs_bseg_all_doc-belnr.
        gs_consol_data-umskz_fmmi_doc       =       gs_bseg_all_doc-umskz.
        gs_consol_data-gjahr_fmmi_doc       =       gs_bkpf_all_doc-gjahr.
        gs_consol_data-blart_fmmi_doc       =       gs_bkpf_all_doc-blart.
        gs_consol_data-usnam_fmmi_doc       =       gs_bkpf_all_doc-usnam.
        gs_consol_data-budat_fmmi_doc       =       gs_bkpf_all_doc-budat.
        gs_consol_data-bktxt_fmmi_doc       =       gs_bkpf_all_doc-bktxt.
        gs_consol_data-bldat_fmmi_doc       =       gs_bkpf_all_doc-bldat.
        gs_consol_data-wrbtr_fmmi_doc       =       gs_bseg_all_doc-wrbtr.
        gs_consol_data-xreversal_fmmi_doc   =       gs_bkpf_all_doc-xreversal.
        gs_consol_data-projk_fmmi_doc       =       gs_bseg_all_doc-projk.
        gs_consol_data-geber_fmmi_doc       =       gs_bseg_all_doc-geber.
        gs_consol_data-measure_fmmi_doc     =       gs_bseg_all_doc-measure.
        gs_consol_data-budget_fmmi_doc      =       gs_bseg_all_doc-budget_pd.
        gs_consol_data-kunnr_fmmi_doc       =       gs_bseg_all_doc-kunnr.
        gs_consol_data-lifnr_fmmi_doc       =       gs_bseg_all_doc-lifnr.
        gs_consol_data-buzei_fmmi_doc       =       gs_bseg_all_doc-buzei.
        gs_consol_data-xblnr_fmmi_doc       =       gs_bkpf_all_doc-xblnr.
        gs_consol_data-xblnr_fmmi_doc       =       gs_bkpf_all_doc-xblnr.
        gs_consol_data-fipos_fmmi_doc       =       gs_bseg_all_doc-fipos.
        gs_consol_data-zuonr_fmmi_doc       =       gs_bseg_all_doc-zuonr.
      ENDIF.

**-- Data selection for document type TR.
      IF ( gs_bkpf_all_doc-blart = c_tr OR gs_bkpf_all_doc-blart = c_tc ) AND gs_bseg_all_doc-koart = 'S'.
        gs_consol_data-belnr_level1_ref_doc       =       gs_bkpf_all_doc-xblnr. "Invoice ref is maintained in XBLNR field
        gs_consol_data-umskz_fmmi_doc       =       gs_bseg_all_doc-umskz..
        gs_consol_data-belnr_fmmi_doc       =       gs_bseg_all_doc-belnr.
        gs_consol_data-gjahr_fmmi_doc       =       gs_bkpf_all_doc-gjahr.
        gs_consol_data-blart_fmmi_doc       =       gs_bkpf_all_doc-blart.
        gs_consol_data-usnam_fmmi_doc       =       gs_bkpf_all_doc-usnam.
        gs_consol_data-budat_fmmi_doc       =       gs_bkpf_all_doc-budat.
        gs_consol_data-bktxt_fmmi_doc       =       gs_bkpf_all_doc-bktxt.
        gs_consol_data-bldat_fmmi_doc       =       gs_bkpf_all_doc-bldat.
        gs_consol_data-wrbtr_fmmi_doc       =       gs_bseg_all_doc-wrbtr.
        gs_consol_data-xreversal_fmmi_doc   =       gs_bkpf_all_doc-xreversal.
        gs_consol_data-projk_fmmi_doc       =       gs_bseg_all_doc-projk.
        gs_consol_data-geber_fmmi_doc       =       gs_bseg_all_doc-geber.
        gs_consol_data-measure_fmmi_doc     =       gs_bseg_all_doc-measure.
        gs_consol_data-budget_fmmi_doc      =       gs_bseg_all_doc-budget_pd.
        gs_consol_data-kunnr_fmmi_doc       =       gs_bseg_all_doc-kunnr.
        gs_consol_data-lifnr_fmmi_doc       =       gs_bseg_all_doc-lifnr.
        gs_consol_data-buzei_fmmi_doc       =       gs_bseg_all_doc-buzei.
        gs_consol_data-xblnr_fmmi_doc       =       gs_bkpf_all_doc-xblnr.
        gs_consol_data-xblnr_fmmi_doc       =       gs_bkpf_all_doc-xblnr.
        gs_consol_data-fipos_fmmi_doc       =       gs_bseg_all_doc-fipos.
        gs_consol_data-zuonr_fmmi_doc       =       gs_bseg_all_doc-zuonr.
      ENDIF.

**-- Data selection for document type SU SA.
      IF ( gs_bkpf_all_doc-blart = c_su OR gs_bkpf_all_doc-blart = c_sa ) AND gs_bseg_all_doc-koart = 'S'.
*       gs_consol_data-belnr_level1_ref_doc       =        gs_bseg_all_doc-sgtxt+11(21). " ref doc not needed.
        gs_consol_data-belnr_fmmi_doc       =        gs_bseg_all_doc-belnr.
        gs_consol_data-umskz_fmmi_doc       =        gs_bseg_all_doc-umskz..
        gs_consol_data-gjahr_fmmi_doc       =        gs_bkpf_all_doc-gjahr.
        gs_consol_data-blart_fmmi_doc       =        gs_bkpf_all_doc-blart.
        gs_consol_data-usnam_fmmi_doc       =        gs_bkpf_all_doc-usnam.
        gs_consol_data-budat_fmmi_doc       =        gs_bkpf_all_doc-budat.
        gs_consol_data-bktxt_fmmi_doc       =        gs_bkpf_all_doc-bktxt.
        gs_consol_data-bldat_fmmi_doc       =        gs_bkpf_all_doc-bldat.
        gs_consol_data-wrbtr_fmmi_doc       =        gs_bseg_all_doc-wrbtr.
        gs_consol_data-xreversal_fmmi_doc   =        gs_bkpf_all_doc-xreversal.
        gs_consol_data-projk_fmmi_doc       =        gs_bseg_all_doc-projk.
        gs_consol_data-geber_fmmi_doc       =        gs_bseg_all_doc-geber.
        gs_consol_data-measure_fmmi_doc     =        gs_bseg_all_doc-measure.
        gs_consol_data-budget_fmmi_doc      =        gs_bseg_all_doc-budget_pd.
        gs_consol_data-kunnr_fmmi_doc       =        gs_bseg_all_doc-kunnr.
        gs_consol_data-lifnr_fmmi_doc       =        gs_bseg_all_doc-lifnr.
        gs_consol_data-buzei_fmmi_doc       =        gs_bseg_all_doc-buzei.
        gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
        gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
        gs_consol_data-fipos_fmmi_doc       =        gs_bseg_all_doc-fipos.
        gs_consol_data-zuonr_fmmi_doc       =        gs_bseg_all_doc-zuonr.
        gs_consol_data-sgtxt_fmmi_doc       =        gs_bseg_all_doc-sgtxt.
      ENDIF.

**-- Data selection for document type DR.
      IF gs_bkpf_all_doc-blart = c_dr AND gs_bseg_all_doc-koart = 'S'.
        gs_consol_data-belnr_level1_ref_doc =       gs_bseg_all_doc-belnr. " The invoices refer to itself.
        gs_consol_data-umskz_fmmi_doc       =        gs_bseg_all_doc-umskz.
        gs_consol_data-belnr_fmmi_doc       =        gs_bseg_all_doc-belnr.
        gs_consol_data-gjahr_fmmi_doc       =        gs_bkpf_all_doc-gjahr.
        gs_consol_data-blart_fmmi_doc       =        gs_bkpf_all_doc-blart.
        gs_consol_data-usnam_fmmi_doc       =        gs_bkpf_all_doc-usnam.
        gs_consol_data-budat_fmmi_doc       =        gs_bkpf_all_doc-budat.
        gs_consol_data-bktxt_fmmi_doc       =        gs_bkpf_all_doc-bktxt.
        gs_consol_data-bldat_fmmi_doc       =        gs_bkpf_all_doc-bldat.
        gs_consol_data-wrbtr_fmmi_doc       =        gs_bseg_all_doc-wrbtr.
        gs_consol_data-xreversal_fmmi_doc   =        gs_bkpf_all_doc-xreversal.
        gs_consol_data-projk_fmmi_doc       =        gs_bseg_all_doc-projk.
        gs_consol_data-geber_fmmi_doc       =        gs_bseg_all_doc-geber.
        gs_consol_data-measure_fmmi_doc     =        gs_bseg_all_doc-measure.
        gs_consol_data-budget_fmmi_doc      =        gs_bseg_all_doc-budget_pd.
        gs_consol_data-kunnr_fmmi_doc       =        gs_bseg_all_doc-kunnr.
        gs_consol_data-lifnr_fmmi_doc       =        gs_bseg_all_doc-lifnr.
        gs_consol_data-buzei_fmmi_doc       =        gs_bseg_all_doc-buzei.
        gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
        gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
        gs_consol_data-fipos_fmmi_doc       =        gs_bseg_all_doc-fipos.
        gs_consol_data-zuonr_fmmi_doc       =        gs_bseg_all_doc-zuonr.
      ENDIF.

**-- Data selection for document type VA docs.
      IF gs_bkpf_all_doc-blart = c_va  AND gs_bseg_all_doc-koart = 'K'.
        gs_consol_data-belnr_level1_ref_doc = gs_bseg_all_doc-kblnr.
        gs_consol_data-buzei_level1_ref_doc = gs_bseg_all_doc-kblpos.
        gs_consol_data-belnr_fmmi_doc       =        gs_bseg_all_doc-belnr.
        gs_consol_data-umskz_fmmi_doc       =        gs_bseg_all_doc-umskz.
        gs_consol_data-gjahr_fmmi_doc       =        gs_bkpf_all_doc-gjahr.
        gs_consol_data-blart_fmmi_doc       =        gs_bkpf_all_doc-blart.
        gs_consol_data-usnam_fmmi_doc       =        gs_bkpf_all_doc-usnam.
        gs_consol_data-budat_fmmi_doc       =        gs_bkpf_all_doc-budat.
        gs_consol_data-bktxt_fmmi_doc       =        gs_bkpf_all_doc-bktxt.
        gs_consol_data-bldat_fmmi_doc       =        gs_bkpf_all_doc-bldat.
        gs_consol_data-wrbtr_fmmi_doc       =        gs_bseg_all_doc-wrbtr.
        gs_consol_data-xreversal_fmmi_doc   =        gs_bkpf_all_doc-xreversal.
        gs_consol_data-projk_fmmi_doc       =        gs_bseg_all_doc-projk.
        gs_consol_data-geber_fmmi_doc       =        gs_bseg_all_doc-geber.
        gs_consol_data-measure_fmmi_doc     =        gs_bseg_all_doc-measure.
        gs_consol_data-budget_fmmi_doc      =        gs_bseg_all_doc-budget_pd.
        gs_consol_data-kunnr_fmmi_doc       =        gs_bseg_all_doc-kunnr.
        gs_consol_data-lifnr_fmmi_doc       =        gs_bseg_all_doc-lifnr.
        gs_consol_data-buzei_fmmi_doc       =        gs_bseg_all_doc-buzei.
        gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
        gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
        gs_consol_data-fipos_fmmi_doc       =        gs_bseg_all_doc-fipos.
        gs_consol_data-zuonr_fmmi_doc       =        gs_bseg_all_doc-zuonr.
      ENDIF.

**-- Data selection for document type VR docs.
      IF  ( gs_bkpf_all_doc-blart = c_vr OR gs_bkpf_all_doc-blart = c_nd ) AND gs_bseg_all_doc-koart = 'S'.
        gs_consol_data-belnr_level1_ref_doc       = gs_bseg_all_doc-kblnr.
        gs_consol_data-buzei_level1_ref_doc       = gs_bseg_all_doc-kblpos.
        gs_consol_data-belnr_fmmi_doc       =        gs_bseg_all_doc-belnr.
        gs_consol_data-umskz_fmmi_doc       =        gs_bseg_all_doc-umskz.
        gs_consol_data-gjahr_fmmi_doc       =        gs_bkpf_all_doc-gjahr.
        gs_consol_data-blart_fmmi_doc       =        gs_bkpf_all_doc-blart.
        gs_consol_data-usnam_fmmi_doc       =        gs_bkpf_all_doc-usnam.
        gs_consol_data-budat_fmmi_doc       =        gs_bkpf_all_doc-budat.
        gs_consol_data-bktxt_fmmi_doc       =        gs_bkpf_all_doc-bktxt.
        gs_consol_data-bldat_fmmi_doc       =        gs_bkpf_all_doc-bldat.
        gs_consol_data-wrbtr_fmmi_doc       =        gs_bseg_all_doc-wrbtr.
        gs_consol_data-xreversal_fmmi_doc   =        gs_bkpf_all_doc-xreversal.
        gs_consol_data-projk_fmmi_doc       =        gs_bseg_all_doc-projk.
        gs_consol_data-geber_fmmi_doc       =        gs_bseg_all_doc-geber.
        gs_consol_data-measure_fmmi_doc     =        gs_bseg_all_doc-measure.
        gs_consol_data-budget_fmmi_doc      =        gs_bseg_all_doc-budget_pd.
        gs_consol_data-kunnr_fmmi_doc       =        gs_bseg_all_doc-kunnr.
        gs_consol_data-lifnr_fmmi_doc       =        gs_bseg_all_doc-lifnr.
        gs_consol_data-buzei_fmmi_doc       =        gs_bseg_all_doc-buzei.
        gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
        gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
        gs_consol_data-fipos_fmmi_doc       =        gs_bseg_all_doc-fipos.
        gs_consol_data-zuonr_fmmi_doc       =        gs_bseg_all_doc-zuonr.
      ENDIF.

**-- Data selection for document type VC docs.
      IF gs_bkpf_all_doc-blart = c_vc  .
        gs_consol_data-belnr_level1_ref_doc = ''.
        IF gs_bseg_all_doc-koart = 'K'. "for VC doc KOART = 'K'.
          gs_consol_data-belnr_fmmi_doc       =        gs_bseg_all_doc-belnr.
          gs_consol_data-umskz_fmmi_doc       =        gs_bseg_all_doc-umskz.
          gs_consol_data-gjahr_fmmi_doc       =        gs_bkpf_all_doc-gjahr.
          gs_consol_data-blart_fmmi_doc       =        gs_bkpf_all_doc-blart.
          gs_consol_data-usnam_fmmi_doc       =        gs_bkpf_all_doc-usnam.
          gs_consol_data-budat_fmmi_doc       =        gs_bkpf_all_doc-budat.
          gs_consol_data-bktxt_fmmi_doc       =        gs_bkpf_all_doc-bktxt.
          gs_consol_data-bldat_fmmi_doc       =        gs_bkpf_all_doc-bldat.
          gs_consol_data-wrbtr_fmmi_doc       =        gs_bseg_all_doc-wrbtr.
          gs_consol_data-xreversal_fmmi_doc   =        gs_bkpf_all_doc-xreversal.
          gs_consol_data-projk_fmmi_doc       =        gs_bseg_all_doc-projk.
          gs_consol_data-geber_fmmi_doc       =        gs_bseg_all_doc-geber.
          gs_consol_data-measure_fmmi_doc     =        gs_bseg_all_doc-measure.
          gs_consol_data-budget_fmmi_doc      =        gs_bseg_all_doc-budget_pd.
          gs_consol_data-kunnr_fmmi_doc       =        gs_bseg_all_doc-kunnr.
          gs_consol_data-lifnr_fmmi_doc       =        gs_bseg_all_doc-lifnr.
          gs_consol_data-buzei_fmmi_doc       =        gs_bseg_all_doc-buzei.
          gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
          gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
          gs_consol_data-fipos_fmmi_doc       =        gs_bseg_all_doc-fipos.
          gs_consol_data-zuonr_fmmi_doc       =        gs_bseg_all_doc-zuonr.

        ENDIF.
      ENDIF.
**-- data selection for document type DL/DZ/DY Docs.
      IF gs_bkpf_all_doc-blart = c_dy  OR gs_bkpf_all_doc-blart = c_dl OR
         gs_bkpf_all_doc-blart = c_dz  OR gs_bkpf_all_doc-blart = c_ic.
        IF ( gs_bseg_all_doc-koart = 'D' OR gs_bseg_all_doc-koart = 'K' ) AND
           ( gs_bseg_all_doc-hkont NOT IN r_hkont_fees ).
          gs_consol_data-belnr_level1_ref_doc =        gs_bseg_all_doc-rebzg.
          gs_consol_data-belnr_fmmi_doc       =        gs_bseg_all_doc-belnr.
          gs_consol_data-umskz_fmmi_doc       =        gs_bseg_all_doc-umskz.
          gs_consol_data-gjahr_fmmi_doc       =        gs_bkpf_all_doc-gjahr.
          gs_consol_data-blart_fmmi_doc       =        gs_bkpf_all_doc-blart.
          gs_consol_data-usnam_fmmi_doc       =        gs_bkpf_all_doc-usnam.
          gs_consol_data-budat_fmmi_doc       =        gs_bkpf_all_doc-budat.
          gs_consol_data-bktxt_fmmi_doc       =        gs_bkpf_all_doc-bktxt.
          gs_consol_data-bldat_fmmi_doc       =        gs_bkpf_all_doc-bldat.
          gs_consol_data-wrbtr_fmmi_doc       =        gs_bseg_all_doc-wrbtr.
          gs_consol_data-xreversal_fmmi_doc   =        gs_bkpf_all_doc-xreversal.
          gs_consol_data-projk_fmmi_doc       =        gs_bseg_all_doc-projk.
          gs_consol_data-geber_fmmi_doc       =        gs_bseg_all_doc-geber.
          gs_consol_data-measure_fmmi_doc     =        gs_bseg_all_doc-measure.
          gs_consol_data-budget_fmmi_doc      =        gs_bseg_all_doc-budget_pd.
          gs_consol_data-kunnr_fmmi_doc       =        gs_bseg_all_doc-kunnr.
          gs_consol_data-lifnr_fmmi_doc       =        gs_bseg_all_doc-lifnr.
          gs_consol_data-buzei_fmmi_doc       =        gs_bseg_all_doc-buzei.
          gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
          gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
          gs_consol_data-fipos_fmmi_doc       =        gs_bseg_all_doc-fipos.
          gs_consol_data-zuonr_fmmi_doc       =        gs_bseg_all_doc-zuonr.
        ENDIF.
      ENDIF.

**-- data selection for DF documents.
      IF gs_bkpf_all_doc-blart = c_df .
        gs_consol_data-belnr_level1_ref_doc = ' '.
        IF gs_bseg_all_doc-koart = 'S'.
          gs_consol_data-belnr_fmmi_doc       =        gs_bseg_all_doc-belnr.
          gs_consol_data-umskz_fmmi_doc       =        gs_bseg_all_doc-umskz.
          gs_consol_data-gjahr_fmmi_doc       =        gs_bkpf_all_doc-gjahr.
          gs_consol_data-blart_fmmi_doc       =        gs_bkpf_all_doc-blart.
          gs_consol_data-usnam_fmmi_doc       =        gs_bkpf_all_doc-usnam.
          gs_consol_data-budat_fmmi_doc       =        gs_bkpf_all_doc-budat.
          gs_consol_data-bktxt_fmmi_doc       =        gs_bkpf_all_doc-bktxt.
          gs_consol_data-bldat_fmmi_doc       =        gs_bkpf_all_doc-bldat.
          gs_consol_data-wrbtr_fmmi_doc       =        gs_bseg_all_doc-wrbtr.
          gs_consol_data-xreversal_fmmi_doc   =        gs_bkpf_all_doc-xreversal.
          gs_consol_data-projk_fmmi_doc       =        gs_bseg_all_doc-projk.
          gs_consol_data-geber_fmmi_doc       =        gs_bseg_all_doc-geber.
          gs_consol_data-measure_fmmi_doc     =        gs_bseg_all_doc-measure.
          gs_consol_data-budget_fmmi_doc      =        gs_bseg_all_doc-budget_pd.
          gs_consol_data-kunnr_fmmi_doc       =        gs_bseg_all_doc-kunnr.
          gs_consol_data-lifnr_fmmi_doc       =        gs_bseg_all_doc-lifnr.
          gs_consol_data-buzei_fmmi_doc       =        gs_bseg_all_doc-buzei.
          gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
          gs_consol_data-xblnr_fmmi_doc       =        gs_bkpf_all_doc-xblnr.
          gs_consol_data-fipos_fmmi_doc       =        gs_bseg_all_doc-fipos.
          gs_consol_data-zuonr_fmmi_doc       =        gs_bseg_all_doc-zuonr.
        ENDIF.
      ENDIF.

**---Applies to all documents above in case for reversal.
*---- But incase of Treasury Reversals doc type = TR do not change the no.
      IF gs_bkpf_all_doc-xreversal = c_2 AND gs_bkpf_all_doc-blart NE c_tr.
        gs_consol_data-belnr_fmmi_doc = gs_bkpf_all_doc-stblg.
        GS_BSEG_ALL_DOC-BELNR         = gs_bkpf_all_doc-stblg.
      ENDIF.
**--

**-- Tries to collect REZG field as ref_doc_no. incase if its not picked above for collections documents
*    for rare scenarios....
      IF gs_bkpf_all_doc-blart  IN r_blart_coll AND gs_consol_data-belnr_level1_ref_doc  IS INITIAL.
        LOOP AT gt_bseg_all_doc INTO gs_bseg_all_doc1 WHERE belnr = gs_bseg_all_doc-belnr
                                                       AND rebzg IS NOT INITIAL.
          IF gs_bseg_all_doc1-belnr                = gs_bseg_all_doc-belnr.
            gs_consol_data-belnr_level1_ref_doc    = gs_bseg_all_doc1-rebzg.
            gs_bseg_all_doc-rebzg                  = gs_bseg_all_doc1-rebzg.
            EXIT.
          ELSE .
            EXIT.
          ENDIF.
        ENDLOOP.
      ENDIF.

**-- Ref doc. no for full collections. That is if Overpayment or exact payment is reversed.
      IF gs_consol_data-blart_fmmi_doc  IN r_blart_coll.
        IF gs_consol_data-xreversal_fmmi_doc IS NOT INITIAL AND gs_consol_data-belnr_level1_ref_doc IS INITIAL. " Implies there was a collection that
*--   was reset/reversed and its not a reversal of an under payment but exact or overpayment was reversed. the below code
*--   will help fetch the original doc. assosiated with the reversed collections document.
          gv_belnr = gs_consol_data-belnr_fmmi_doc.
          PERFORM get_org_inv_reversed_doc USING gv_belnr CHANGING gv_rebzg.
          gs_consol_data-belnr_level1_ref_doc = gv_rebzg.
        ENDIF.
      ENDIF.

**-- If ref doc is not in rebzg then its full cxollections of a DY non-coll.. Collect all nos and get ref. doc of full coll.
*    later from BSAD.
      IF gs_consol_data-blart_fmmi_doc  IN r_blart_coll AND gs_consol_data-belnr_level1_ref_doc IS INITIAL.
        r_belnr_full_coll-sign     = c_i.
        r_belnr_full_coll-option   = c_eq.
        r_belnr_full_coll-low      = gs_bseg_all_doc-belnr.
        APPEND r_belnr_full_coll.
      ENDIF.


      APPEND gs_consol_data TO gt_consol_data.
      MODIFY gt_bseg_all_doc FROM gs_bseg_all_doc TRANSPORTING blart kunnr lifnr rebzg belnr.
    ENDIF.
  ENDLOOP.

  SORT gt_consol_data.
  DELETE gt_consol_data WHERE belnr_fmmi_doc IS INITIAL.
  DELETE gt_consol_data WHERE blart_fmmi_doc IS INITIAL.
  DELETE ADJACENT DUPLICATES FROM gt_consol_data COMPARING ALL FIELDS.


**-- BSAD table is used to select the details of full collections  -- customers.
**-- BSAK table is used to select the details of full collections  -- vendors.
  CLEAR: gt_bsad_coll[], gs_bsad_coll.
  IF r_belnr_full_coll[] IS NOT INITIAL.
    SELECT belnr buzei augbl wrbtr  blart
           FROM bsad                                        " Index 5.
           INTO TABLE gt_bsad_coll
           WHERE bukrs = gc_usda
               AND augbl IN r_belnr_full_coll
               AND gjahr = gv_gjahr
               AND blart IN r_blart_no_coll.  " All doc types for NRMG except for collections doc.
  ENDIF.

  CLEAR: gt_bsak_coll[], gs_bsak_coll.
  IF r_belnr_full_coll[] IS NOT INITIAL.
    SELECT belnr buzei augbl wrbtr  blart
           FROM bsak                                        " Index 5.
           INTO TABLE gt_bsak_coll
           WHERE bukrs = gc_usda
               AND augbl IN r_belnr_full_coll
               AND gjahr = gv_gjahr
               AND blart IN r_blart_no_coll.  " All doc types for NRMG except for collections doc.
  ENDIF.

  APPEND LINES OF gt_bsak_coll TO gt_bsad_coll.
  SORT gt_bsad_coll.
  DELETE ADJACENT DUPLICATES FROM gt_bsad_coll COMPARING ALL FIELDS.
  CLEAR: gt_bsak_coll[], gs_bsak_coll.

**-- This part of code is only used to get the original document nos. incase of full collections, as then REBZG field
**--  doesnt have full collections no. we take it from Augbl of BSAK or BSAD.
**-- The inserts and loop inside loop in the below code is useful in special scearios where one collections is
**-- fully clearing multiple documents.
  SORT: gt_consol_data BY belnr_fmmi_doc.
  SORT: gt_bsad_coll BY augbl belnr.
  LOOP AT gt_consol_data INTO gs_consol_data WHERE belnr_level1_ref_doc IS INITIAL.
    CLEAR: gs_bsad_coll, gv_sytabix.
    gv_sytabix = sy-tabix.
    IF gs_consol_data-blart_fmmi_doc IN r_blart_coll AND gs_consol_data-belnr_level1_ref_doc IS INITIAL.
      READ TABLE gt_bsad_coll INTO gs_bsad_coll WITH KEY augbl = gs_consol_data-belnr_fmmi_doc.
      IF sy-subrc = 0.
        CLEAR gv_counter.
        LOOP AT gt_bsad_coll INTO gs_bsad_coll FROM sy-tabix.
          IF gs_bsad_coll-augbl = gs_consol_data-belnr_fmmi_doc.
**-- if you are still left with some doc. with no ref. doc. implies its a DY doc with no. org. ref doc.
            gs_consol_data-wrbtr_fmmi_doc          =  gs_bsad_coll-wrbtr.
            gs_consol_data-belnr_level1_ref_doc          =  gs_bsad_coll-belnr.
            IF  gv_counter = 0.
              MODIFY gt_consol_data FROM gs_consol_data TRANSPORTING belnr_level1_ref_doc wrbtr_fmmi_doc.
              gv_counter =  gv_counter + 1.
            ELSE.
              INSERT  gs_consol_data INTO gt_consol_data INDEX gv_sytabix .
              gv_counter =  gv_counter + 1.
            ENDIF.
          ELSE.
            CLEAR: gs_bsad_coll, gv_sytabix, gv_sytabix.
            EXIT.
          ENDIF.
          CLEAR: gs_bsad_coll.
        ENDLOOP.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " int_table_operations_for_billing_doc
*&---------------------------------------------------------------------*
*&      Form  BKPF_DATA_4R_REF_DOC
*&---------------------------------------------------------------------*
* Getting the header details of all the reference documents.
* For document types MO, VC,DF,DY ref doc. is blank. And for document
* type 'DR' its FMMI doc. no.
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM bkpf_bseg_data_4r_ref_doc.
  CLEAR: gt_bkpf_referenced_doc_lvl1[], gs_bkpf_referenced_doc_lvl1,
         gt_bseg_referenced_doc_lvl1[],  gs_bseg_referenced_doc_lvl1.

  IF gt_consol_data IS NOT INITIAL.
    SELECT * FROM bkpf
                INTO TABLE gt_bkpf_referenced_doc_lvl1
                FOR ALL ENTRIES IN gt_consol_data
                  WHERE bukrs EQ gc_usda
                  AND belnr EQ gt_consol_data-belnr_level1_ref_doc
                  AND gjahr = gv_gjahr
*                  AND bstat  IN  (' ', 'A', 'B' )
                  AND xreversal IN (' ', '1', '2').       "BLank is - Org, 1-reversed, 2-reversal doc.
  ENDIF.

  IF gt_bkpf_referenced_doc_lvl1 IS NOT INITIAL.
    SELECT * FROM bseg
             INTO TABLE gt_bseg_referenced_doc_lvl1
             FOR ALL ENTRIES IN  gt_bkpf_referenced_doc_lvl1
             WHERE bukrs = c_usda
               AND belnr = gt_bkpf_referenced_doc_lvl1-belnr
               AND gjahr = gv_gjahr.
*               AND geber IN s_geber   .
  ENDIF.
ENDFORM.                    " BKPF_DATA_4R_REF_DOC
*&---------------------------------------------------------------------*
*&      Form  KBLK_KBLP_DATA_4R_REF_DOC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM kblk_kblp_data_4r_ref_doc.
  CLEAR: gt_kblk_referenced_doc_lvl1[], gs_kblk_referenced_doc_lvl1, gt_kblp_referenced_doc_lvl1[],
         gs_kblp_referenced_doc_lvl1.
  IF gt_consol_data IS NOT INITIAL.
    SELECT * FROM kblk
               INTO TABLE gt_kblk_referenced_doc_lvl1
               FOR ALL ENTRIES IN gt_consol_data
                 WHERE belnr = gt_consol_data-belnr_level1_ref_doc
                   AND bukrs EQ c_usda.
  ENDIF.


  IF gt_consol_data IS NOT INITIAL.
    SELECT * FROM kblp
             INTO TABLE gt_kblp_referenced_doc_lvl1
             FOR ALL ENTRIES IN gt_consol_data
             WHERE belnr  =  gt_consol_data-belnr_level1_ref_doc
               AND blpos =  gt_consol_data-buzei_level1_ref_doc.
  ENDIF.


**--- This part applies only for IC documents. Only IC documents are 2 level documents. Has 2 level of prceeding documents.
  IF gt_bseg_referenced_doc_lvl1 IS NOT INITIAL.
    SELECT * FROM kblp
             INTO TABLE gt_kblp_referenced_doc_lvl2
             FOR ALL ENTRIES IN gt_bseg_referenced_doc_lvl1
             WHERE belnr  =  gt_bseg_referenced_doc_lvl1-kblnr
               AND blpos =  gt_bseg_referenced_doc_lvl1-kblpos.
  ENDIF.

  IF gt_kblp_referenced_doc_lvl2 IS NOT INITIAL.
    SELECT * FROM kblk
                 INTO TABLE gt_kblk_referenced_doc_lvl2
                 FOR ALL ENTRIES IN gt_kblp_referenced_doc_lvl2
                   WHERE belnr = gt_kblp_referenced_doc_lvl2-belnr
                    AND bukrs EQ c_usda.
  ENDIF.
ENDFORM.                    " KBLK_KBLP_DATA_4R_REF_DOC


" SELECT_DATA_FROM_DBTABLES
*&---------------------------------------------------------------------*
*&      Form  COMPILING_REF_DOC_AND_MAPP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM compiling_ref_doc_and_mapp .

*--  For document types VC,DF,DY ( non-collections) ref doc. is blank. And for document
*-- type 'DR' its ref doc no = FMMI doc. no itself.
*-- For VR and VA the NRMG-RQ-Docnum is populated in FMMI doc  BKTXT directly.
  SORT gt_consol_data.
  CLEAR: gt_output_billing[], gs_output_billing, gt_consol_data_rbaa[], gs_consol_data_rbaa.
  LOOP AT gt_consol_data INTO gs_consol_data.
    CLEAR: gs_kblk_referenced_doc_lvl1, gs_kblp_referenced_doc_lvl1,gs_bkpf_referenced_doc_lvl1,
           gs_bseg_referenced_doc_lvl1.
    IF gs_consol_data-blart_fmmi_doc = c_tr OR gs_consol_data-blart_fmmi_doc = c_tc OR
       gs_consol_data-blart_fmmi_doc = c_dl OR gs_consol_data-blart_fmmi_doc = c_dz OR
       gs_consol_data-blart_fmmi_doc = c_dy OR gs_consol_data-blart_fmmi_doc = c_ic.
* ------------------------------------
      READ TABLE gt_bkpf_referenced_doc_lvl1 INTO gs_bkpf_referenced_doc_lvl1 WITH KEY belnr = gs_consol_data-belnr_level1_ref_doc.
      IF sy-subrc = 0.
        gs_consol_data-blart_level1_ref_doc  =   gs_bkpf_referenced_doc_lvl1-blart.
        gs_consol_data-budat_level1_ref_doc  =   gs_bkpf_referenced_doc_lvl1-budat.
        gs_consol_data-bldat_level1_ref_doc  =   gs_bkpf_referenced_doc_lvl1-bldat.
        gs_consol_data-bktxt_level1_ref_doc  =   gs_bkpf_referenced_doc_lvl1-bktxt.
        gs_consol_data-xblnr_level1_ref_doc  =   gs_bkpf_referenced_doc_lvl1-xblnr.
      ENDIF.

      READ TABLE gt_bseg_referenced_doc_lvl1 INTO gs_bseg_referenced_doc_lvl1 WITH KEY belnr = gs_consol_data-belnr_level1_ref_doc.
*                                                                             buzei = gs_consol_data-buzei_ref_doc.
      IF sy-subrc = 0.
        gs_consol_data-sgtxt_level1_ref_doc = gs_bseg_referenced_doc_lvl1-sgtxt.
        gs_consol_data-zuonr_level1_ref_doc = gs_bseg_referenced_doc_lvl1-zuonr.
        gs_consol_data-gsber_level1_ref_doc = gs_bseg_referenced_doc_lvl1-gsber.
        gs_consol_data-umskz_level1_ref_doc = gs_bseg_referenced_doc_lvl1-umskz.
        IF gs_consol_data-blart_fmmi_doc = c_ic.
          gs_consol_data-belnr_level2_ref_doc =  gs_bseg_referenced_doc_lvl1-kblnr.
          gs_consol_data-buzei_level2_ref_doc =  gs_bseg_referenced_doc_lvl1-kblpos.
        ENDIF.

      ENDIF.
*----------------

    ELSEIF gs_consol_data-blart_fmmi_doc = c_nd OR gs_consol_data-blart_fmmi_doc = c_va OR
           gs_consol_data-blart_fmmi_doc = c_vr.
      READ TABLE gt_kblk_referenced_doc_lvl1 INTO gs_kblk_referenced_doc_lvl1 WITH KEY belnr = gs_consol_data-belnr_level1_ref_doc.
      IF sy-subrc = 0.
        gs_consol_data-blart_level1_ref_doc  =   gs_kblk_referenced_doc_lvl1-blart.
        gs_consol_data-budat_level1_ref_doc  =   gs_kblk_referenced_doc_lvl1-budat.
        gs_consol_data-bldat_level1_ref_doc  =   gs_kblk_referenced_doc_lvl1-bldat.
        gs_consol_data-bktxt_level1_ref_doc  =   gs_kblk_referenced_doc_lvl1-ktext.
        gs_consol_data-xblnr_level1_ref_doc  =   gs_kblk_referenced_doc_lvl1-xblnr.
      ENDIF.

      READ TABLE gt_kblp_referenced_doc_lvl1 INTO gs_kblp_referenced_doc_lvl1 WITH KEY belnr = gs_consol_data-belnr_level1_ref_doc
                                                                             blpos = gs_consol_data-buzei_level1_ref_doc.
      IF sy-subrc = 0.
        gs_consol_data-sgtxt_level1_ref_doc         = gs_kblp_referenced_doc_lvl1-ptext.
        gs_consol_data-split_batch_level1_ref_doc = gs_kblp_referenced_doc_lvl1-fm_split_batch.
      ENDIF.
    ENDIF.
*-----------------Going upto 2nd level ref. doc. Only incase of IC docs.
    IF gs_consol_data-blart_fmmi_doc = c_ic.
      READ TABLE gt_kblp_referenced_doc_lvl2 INTO gs_kblp_referenced_doc_lvl2 WITH KEY belnr =  gs_consol_data-belnr_level2_ref_doc
                                                                                       blpos =  gs_consol_data-buzei_level2_ref_doc.
      IF sy-subrc = 0.
        gs_consol_data-sgtxt_level2_ref_doc         = gs_kblp_referenced_doc_lvl2-ptext.
        gs_consol_data-split_batch_level2_ref_doc = gs_kblp_referenced_doc_lvl2-fm_split_batch.
      ENDIF.

      READ TABLE gt_kblk_referenced_doc_lvl2 INTO gs_kblk_referenced_doc_lvl2 WITH KEY belnr = gs_consol_data-belnr_level2_ref_doc.
      IF sy-subrc = 0.
        gs_consol_data-blart_level2_ref_doc  =   gs_kblk_referenced_doc_lvl2-blart.
        gs_consol_data-budat_level2_ref_doc  =   gs_kblk_referenced_doc_lvl2-budat.
        gs_consol_data-bldat_level2_ref_doc  =   gs_kblk_referenced_doc_lvl2-bldat.
        gs_consol_data-bktxt_level2_ref_doc  =   gs_kblk_referenced_doc_lvl2-ktext.
        gs_consol_data-xblnr_level2_ref_doc  =   gs_kblk_referenced_doc_lvl2-xblnr.
      ENDIF.
    ENDIF.

*--------------------------------------------------------------------
**-- Delete the collections doc. which do not ref to an original document
*    with header text and NRMG.
*   As per instructions for TR and Tc documents also we need to check NRMG on
*   ref. document and not on TR and TC document's BKPF-BKTXT.
*   For all S.O docs check for GSBER = FS00 and not BKTXT = NRMG. And for
*   collections (DL/DZ) that ref. to RV (SO Invoices) check for FS00 and not NRMG.
*--------------------------------------------------------------------
**SIMPLE NRMGA FILTERING OF DATA.
*--------------------------------------------------------------------

    IF ( gs_consol_data-blart_fmmi_doc = c_dl OR gs_consol_data-blart_fmmi_doc = c_dz OR
         gs_consol_data-blart_fmmi_doc = c_tr OR gs_consol_data-blart_fmmi_doc = c_tc ) AND
         gs_consol_data-blart_level1_ref_doc NE c_rv.
      IF gs_consol_data-bktxt_level1_ref_doc+0(4) NE  c_nrmg.
        TRY.
            DELETE gt_consol_data.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.

    ELSEIF  gs_consol_data-blart_fmmi_doc = c_ic.
      IF gs_consol_data-bktxt_level2_ref_doc+0(4) NE  c_nrmg.
        TRY.
            DELETE gt_consol_data.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.

    ELSEIF  gs_consol_data-blart_fmmi_doc = c_dy.
      IF gs_consol_data-belnr_level1_ref_doc IS NOT INITIAL. "Implies this is a collections.
        IF gs_consol_data-bktxt_level1_ref_doc+0(4) NE  c_nrmg.
          TRY.
              DELETE gt_consol_data.
            CATCH cx_sy_open_sql_db.
          ENDTRY.
          CONTINUE.
        ENDIF.
      ELSE.                                      "Implies its not collections but expenditure ref.
        IF gs_consol_data-bktxt_fmmi_doc+0(4) NE  c_nrmg.
          TRY.
              DELETE gt_consol_data.
            CATCH cx_sy_open_sql_db.
          ENDTRY.
          CONTINUE.
        ENDIF.
      ENDIF.
    ENDIF.

    IF gs_consol_data-blart_level1_ref_doc EQ c_rv.
      IF gs_consol_data-gsber_level1_ref_doc NE c_fs00.
        TRY.
            DELETE gt_consol_data.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.
    ENDIF.



*--------------------------------------------------------------------
**-- RBAA Logic.
*--------------------------------------------------------------------
**--- Documents where RBAA is not applied.
    IF gs_consol_data-split_batch_level1_ref_doc IS INITIAL.
      PERFORM mapping_billing_doc USING gs_consol_data.
    ELSE.
      gs_consol_data_rbaa = gs_consol_data.
      APPEND gs_consol_data_rbaa TO gt_consol_data_rbaa. " put doc. with RBAA in a separate table.
      CLEAR: gs_consol_data_rbaa.
    ENDIF.

    MODIFY gt_consol_data FROM gs_consol_data TRANSPORTING
                  blart_level1_ref_doc budat_level1_ref_doc bldat_level1_ref_doc bktxt_level1_ref_doc
                  xblnr_level1_ref_doc sgtxt_level1_ref_doc zuonr_level1_ref_doc gsber_level1_ref_doc
                  blart_level1_ref_doc.
  ENDLOOP.

*--------------------------------------------------------------------
**-- RBAA Logic.
*--------------------------------------------------------------------
**--- Documents where RBAA is applied.
  SORT gt_consol_data_rbaa BY belnr_fmmi_doc belnr_level1_ref_doc split_batch_level1_ref_doc. " sort seqn. is important.
  LOOP AT gt_consol_data_rbaa INTO gs_consol_data_rbaa.
    gs_consol_data_rbaa_tmp = gs_consol_data_rbaa.  " _tmp is used to avoid '****' in end at.
    AT END OF split_batch_level1_ref_doc.
      SUM .
      gs_consol_data_rbaa_tmp-wrbtr_fmmi_doc = gs_consol_data_rbaa-wrbtr_fmmi_doc.
      PERFORM mapping_billing_doc USING gs_consol_data_rbaa_tmp.
    ENDAT.
    CLEAR:gs_consol_data_rbaa_tmp.
  ENDLOOP.
ENDFORM.                    " COMPILING_REF_DOC_AND_MAPP


*&---------------------------------------------------------------------*
*&      Form  MAPPING_BILLING_DOC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GS_CONSOL_DATA  text
*----------------------------------------------------------------------*
FORM mapping_billing_doc  USING    p_gs_consol_data TYPE typ_consol_data .

*--------------------------------------------------------------------
**-- Mapping to ouput structure begins here.
*--------------------------------------------------------------------
**-- mapping Field1.
*--hard coded values taken from the functional design.

  IF p_gs_consol_data-blart_fmmi_doc = c_va OR p_gs_consol_data-blart_fmmi_doc = c_vr OR
     p_gs_consol_data-blart_fmmi_doc = c_dr OR p_gs_consol_data-blart_fmmi_doc = c_nd OR
    p_gs_consol_data-blart_fmmi_doc = c_vc.
    gs_output_billing-transaction_code = p_gs_consol_data-bktxt_fmmi_doc+5(2).
  ELSEIF  p_gs_consol_data-blart_fmmi_doc = c_tc. " TC not necessary that the text is always maintained. NRMG check is done on ref. doc.
    gs_output_billing-transaction_code = c_ad.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_tr.
    gs_output_billing-transaction_code = c_xr. "TR doc. can't be dynamic cause the BKTXT of TR is one from TC.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_ic.
    gs_output_billing-transaction_code = c_dd.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_rv.
    IF p_gs_consol_data-belnr_level1_ref_doc IS NOT INITIAL. "Implies RV DPR. Harcoding as BKTXT is not necessary for RV docs.
      gs_output_billing-transaction_code = c_ba.
    ELSE.
      gs_output_billing-transaction_code = c_bp.   "Implies RV sales order Invoice.
    ENDIF.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_su OR p_gs_consol_data-blart_fmmi_doc = c_sa.
    gs_output_billing-transaction_code = p_gs_consol_data-sgtxt_fmmi_doc+5(2).
*    ELSEIF p_gs_consol_data-blart_fmmi_doc = c_vc. " Manual doc. not sure if text is always maintained so hard code  TT, TC
*      gs_output_billing-transaction_code = c_bd.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_dl OR p_gs_consol_data-blart_fmmi_doc = c_dz.
    gs_output_billing-transaction_code = c_lx.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_df OR p_gs_consol_data-blart_fmmi_doc = c_dy.
    IF p_gs_consol_data-belnr_level1_ref_doc EQ ' ' . " implies not a collections.
      gs_output_billing-transaction_code = c_bd.
    ELSE.                                         " implies is a collections.
      gs_output_billing-transaction_code = c_lx.
    ENDIF.
  ENDIF.

**-- mapping Field2.
*-- for VR and VA docs. source system doc. no. comes from FMMI  doc BTXT itself.
  IF  p_gs_consol_data-blart_fmmi_doc = c_vr OR p_gs_consol_data-blart_fmmi_doc = c_va.
    gs_output_billing-document_number   =  p_gs_consol_data-bktxt_fmmi_doc+10(12).
  ELSE.
    gs_output_billing-document_number   =  p_gs_consol_data-belnr_fmmi_doc.
  ENDIF.

**-- mapping Field3.
**-- As per the FD the mapping below is done.
  IF p_gs_consol_data-xreversal_fmmi_doc = ' ' OR p_gs_consol_data-xreversal_fmmi_doc = c_1.
    gs_output_billing-document_action   =  c_e.
  ELSE.
    IF ( p_gs_consol_data-blart_fmmi_doc EQ 'SU' OR p_gs_consol_data-blart_fmmi_doc EQ 'SA' OR p_gs_consol_data-blart_fmmi_doc EQ 'DY'
      OR p_gs_consol_data-blart_fmmi_doc EQ 'DL' OR p_gs_consol_data-blart_fmmi_doc EQ 'DZ' OR p_gs_consol_data-blart_fmmi_doc EQ 'DR'
      OR p_gs_consol_data-blart_fmmi_doc EQ 'RV' ).
      gs_output_billing-document_action   =  c_m.
    ELSEIF p_gs_consol_data-blart_fmmi_doc EQ c_tr.
      gs_output_billing-document_action   =  c_e.
    ELSE.
      gs_output_billing-document_action   =  c_x.
    ENDIF.
  ENDIF.

**-- mapping Field4.
  gs_output_billing-batch_number = ' '.

**-- mapping Field5.
  gs_output_billing-document_date = p_gs_consol_data-bldat_fmmi_doc+2(6).

**-- mapping Field6.
  IF p_gs_consol_data-kunnr_fmmi_doc IS NOT INITIAL.
    gs_output_billing-vendor_id = p_gs_consol_data-kunnr_fmmi_doc.
  ELSE.
    gs_output_billing-vendor_id = p_gs_consol_data-lifnr_fmmi_doc.
  ENDIF.

**-- mapping Field7.
  gs_output_billing-vendor_address_code = ' '.

**-- mapping Field8.
  gs_output_billing-line_number = p_gs_consol_data-buzei_fmmi_doc.

**-- mapping Field9.
**-- Hardcoded values taken from the FD.
*    This value is better hardcoded..

  IF p_gs_consol_data-blart_fmmi_doc = c_va.
    gs_output_billing-acctg_trans_type  = c_nt.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_vr. " for VR/ VA doc. NRMG-RQ-DOCNUM is directly populated.
    IF gs_output_billing-transaction_code = c_nc.
      gs_output_billing-acctg_trans_type = c_nt.
    ELSE.
      gs_output_billing-acctg_trans_type  = c_01.
    ENDIF.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_ic.
    gs_output_billing-acctg_trans_type  = c_op.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_tc OR  p_gs_consol_data-blart_fmmi_doc = c_tr . "Dynamic as can have multiple values.
    gs_output_billing-acctg_trans_type  = p_gs_consol_data-bktxt_fmmi_doc+7(2).
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_nd.
    gs_output_billing-acctg_trans_type  = c_lc.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_rv.
    gs_output_billing-acctg_trans_type  = c_01.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_su OR p_gs_consol_data-blart_fmmi_doc = c_sa.
    gs_output_billing-acctg_trans_type  = c_to.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_vc.
    gs_output_billing-acctg_trans_type  = c_nt.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_dl OR p_gs_consol_data-blart_fmmi_doc = c_dz.
    IF p_gs_consol_data-blart_level1_ref_doc = c_rv AND  p_gs_consol_data-umskz_level1_ref_doc IS INITIAL. " Imples ref. is SO Invoice
      gs_output_billing-acctg_trans_type  = c_rc.
    ELSEIF p_gs_consol_data-blart_level1_ref_doc = c_rv AND  p_gs_consol_data-umskz_level1_ref_doc = c_f." Implies ref. is SO DPR.
      gs_output_billing-acctg_trans_type  = c_ac.
    ELSE.
      gs_output_billing-acctg_trans_type  = p_gs_consol_data-bktxt_level1_ref_doc+7(2).
    ENDIF.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_dr.
    gs_output_billing-acctg_trans_type  = c_bd.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_df OR p_gs_consol_data-blart_fmmi_doc = c_dy.
    gs_output_billing-acctg_trans_type  = c_rf.
  ENDIF.

**-- mapping Field10 and Field 10.
**-- From the Functional document.
*--  For document types MO, VC,DF,DY ( non-collections) ref doc. is blank. And for document
*-- type 'DR' its ref doc no = FMMI doc. no itself.
*-- For VR and VA the NRMG-RQ-Docnum is populated in FMMI doc  BKTXT directly.

  IF p_gs_consol_data-blart_fmmi_doc = c_va.
    IF p_gs_consol_data-blart_level1_ref_doc = c_mo. " doc type of FR.
      gs_output_billing-reference_trans_code = c_rq.
    ELSEIF p_gs_consol_data-blart_level1_ref_doc = c_vo. "doc type of FC.
      gs_output_billing-reference_trans_code = c_mo.
    ENDIF.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_vr. " for VR/ VA doc. NRMG-RQ-DOCNUM is directly populated.
    IF p_gs_consol_data-blart_level1_ref_doc = c_mo. "Funds Reser.
      gs_output_billing-reference_trans_code = c_rq.
    ELSEIF p_gs_consol_data-blart_level1_ref_doc = c_vo. "FC
      gs_output_billing-reference_trans_code = c_mo.
    ENDIF.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_tc OR p_gs_consol_data-blart_fmmi_doc = c_tr. "Will come from ref. invoice.
    gs_output_billing-reference_trans_code = p_gs_consol_data-bktxt_level1_ref_doc+5(2).
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_ic .""not sure of text on ref. vendor invoice so better hardcode.
    gs_output_billing-reference_trans_code = c_mo.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_su OR p_gs_consol_data-blart_fmmi_doc = c_sa.
    gs_output_billing-reference_trans_code = c_mo. "FMMI_doc hard coded.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_vc.
    gs_output_billing-reference_trans_code = ' '.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_rv.
    IF p_gs_consol_data-umskz_fmmi_doc IS INITIAL.      "Implies RV S.O.
      gs_output_billing-reference_trans_code = ' '.
    ELSEIF p_gs_consol_data-umskz_fmmi_doc = c_f.       "Implies RV DPR.
      gs_output_billing-reference_trans_code = c_so.
    ENDIF.
    gs_output_billing-reference_trans_code = c_so.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_dl OR p_gs_consol_data-blart_fmmi_doc = c_dz.
    IF p_gs_consol_data-blart_level1_ref_doc = c_rv AND  p_gs_consol_data-umskz_level1_ref_doc IS INITIAL. " Imples ref. is SO Invoice
      gs_output_billing-reference_trans_code  = c_bp.
    ELSEIF p_gs_consol_data-blart_level1_ref_doc = c_rv AND  p_gs_consol_data-umskz_level1_ref_doc = c_f." Implies ref. is SO DPR.
      gs_output_billing-reference_trans_code  = c_ba.
    ELSE.
      gs_output_billing-reference_trans_code = p_gs_consol_data-bktxt_level1_ref_doc+5(2).
    ENDIF.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_nd. " ND refer to FC.
    gs_output_billing-reference_trans_code = p_gs_consol_data-bktxt_level1_ref_doc+5(2).
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_dr. "TBD CHECK
    gs_output_billing-reference_trans_code = p_gs_consol_data-bktxt_fmmi_doc+5(2).
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_df OR p_gs_consol_data-blart_fmmi_doc = c_dy.
    IF p_gs_consol_data-belnr_level1_ref_doc EQ ' ' . " implies not a collections.
      gs_output_billing-reference_trans_code = ' '.
    ELSE.                                         " implies is a collections.
      gs_output_billing-reference_trans_code = p_gs_consol_data-bktxt_level1_ref_doc+5(2).
    ENDIF.
  ENDIF.


**-- mapping Field11. This refers to the source system no. for this doc and not the ref. doc - comes from text
*--  For document types VC,DF,DY ( non-collections) ref doc. is blank. And for document
*-- type 'DR' its ref doc no = FMMI doc. no itself.
  IF p_gs_consol_data-blart_fmmi_doc = c_va OR p_gs_consol_data-blart_fmmi_doc = c_vr OR
     p_gs_consol_data-blart_fmmi_doc = c_nd.
    gs_output_billing-ref_document_number = p_gs_consol_data-bktxt_level1_ref_doc+10(11). " direct doc.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_vc.
    gs_output_billing-ref_document_number = ' '.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_df OR p_gs_consol_data-blart_fmmi_doc = c_dy.
    IF p_gs_consol_data-belnr_level1_ref_doc NE ' '.  "Implies collections.
      gs_output_billing-ref_document_number = p_gs_consol_data-belnr_level1_ref_doc.
    ELSE                                     .  "Implies not a collections.
      gs_output_billing-ref_document_number = ' '.
    ENDIF.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_dr. "TBD CHECK.
    gs_output_billing-ref_document_number = p_gs_consol_data-belnr_fmmi_doc .
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_dl OR p_gs_consol_data-blart_fmmi_doc = c_dz.
    gs_output_billing-ref_document_number = p_gs_consol_data-belnr_level1_ref_doc.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_su OR p_gs_consol_data-blart_fmmi_doc = c_sa.
    gs_output_billing-ref_document_number = p_gs_consol_data-sgtxt_fmmi_doc+10(11). " direct doc.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_tr OR p_gs_consol_data-blart_fmmi_doc = c_tc.
    gs_output_billing-ref_document_number = p_gs_consol_data-bktxt_level1_ref_doc+10(11).
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_ic.
    gs_output_billing-ref_document_number = p_gs_consol_data-bktxt_level2_ref_doc+10(11). " direct doc.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_rv.
    gs_output_billing-ref_document_number = p_gs_consol_data-belnr_level1_ref_doc. "Contains S.O No.
  ENDIF.

**-- mapping Field12.
**-- taken from the functional document mapping.
  IF p_gs_consol_data-blart_fmmi_doc = c_su OR p_gs_consol_data-blart_fmmi_doc = c_sa.
    gs_output_billing-ref_line_number  = p_gs_consol_data-sgtxt_fmmi_doc+22(3).
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_vc.
    gs_output_billing-ref_line_number  = ' '.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_rv .
    gs_output_billing-ref_line_number  = p_gs_consol_data-buzei_level1_ref_doc.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_dr .
    gs_output_billing-ref_line_number  = p_gs_consol_data-buzei_fmmi_doc.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_df OR p_gs_consol_data-blart_fmmi_doc = c_dy .
    IF p_gs_consol_data-belnr_level1_ref_doc IS INITIAL.    "implies not a collections doc.
      gs_output_billing-ref_line_number  = ' '.
    ELSE.                                          "imples is a collections doc.
      gs_output_billing-ref_line_number  = p_gs_consol_data-buzei_level1_ref_doc.
    ENDIF.
  ELSE.
    gs_output_billing-ref_line_number  = p_gs_consol_data-sgtxt_level1_ref_doc+0(3). "check
  ENDIF.

**-- mapping Field13.
  gv_wbs8 = p_gs_consol_data-projk_fmmi_doc.
  PERFORM convert_wb8_to_wbs24 USING gv_wbs8 CHANGING gv_wbs24.
  gs_output_billing-budget_org = gv_wbs24+6(4).

**-- mapping Field14.
  CONCATENATE gv_wbs24+11(2)  gv_wbs24+14(4) p_gs_consol_data-budget_fmmi_doc+0(2) INTO gv_job_code.
  gs_output_billing-job_code = gv_job_code.

**-- mapping Field15.
  gs_output_billing-beg_budget_fy = p_gs_consol_data-budget_fmmi_doc+0(2). "TBD check

**-- mapping Field16.
  gs_output_billing-fund  = p_gs_consol_data-geber_fmmi_doc+6(4).

**-- mapping Field17.
  gs_output_billing-fund_program = p_gs_consol_data-measure_fmmi_doc+4(4).

**-- mapping Field18.
  gs_output_billing-budget_object_code = p_gs_consol_data-fipos_fmmi_doc+0(4).

**-- mapping Field19.
  gs_output_billing-line_dollar_amount = p_gs_consol_data-wrbtr_fmmi_doc.
  CONDENSE gs_output_billing-line_dollar_amount.
**-- mapping Field20.
  IF p_gs_consol_data-xreversal_fmmi_doc = ' ' OR p_gs_consol_data-xreversal_fmmi_doc = c_1 .
    gs_output_billing-line_action = c_i.
  ELSEIF p_gs_consol_data-xreversal_fmmi_doc = c_2.
    IF p_gs_consol_data-blart_fmmi_doc = c_tr.
      gs_output_billing-line_action = c_i.
    ELSE.
      gs_output_billing-line_action = c_d.
    ENDIF.
  ENDIF.

**-- mapping Field21.
**-- taken from the technical/ Functional design.
  IF p_gs_consol_data-blart_fmmi_doc = c_tr OR p_gs_consol_data-blart_fmmi_doc = c_su OR p_gs_consol_data-blart_fmmi_doc = c_sa OR
     p_gs_consol_data-blart_fmmi_doc = c_vc OR p_gs_consol_data-blart_fmmi_doc = c_df OR p_gs_consol_data-blart_fmmi_doc = c_dy OR
     p_gs_consol_data-blart_fmmi_doc = c_dl OR p_gs_consol_data-blart_fmmi_doc = c_dz OR p_gs_consol_data-blart_fmmi_doc = c_dr OR
     p_gs_consol_data-blart_fmmi_doc = c_vo OR p_gs_consol_data-blart_fmmi_doc = c_rv.
    gs_output_billing-vendor_invoice = ' '.
  ELSE.
    gs_output_billing-vendor_invoice = p_gs_consol_data-xblnr_fmmi_doc.
  ENDIF.

**-- mapping Field22.
** Taken from TD/FD document.
  IF p_gs_consol_data-blart_fmmi_doc = c_tc.
    gs_output_billing-description = 'DISB TREASURY RECONCILIATION'.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_tr.
    gs_output_billing-description = 'CANCELLATION RECONCILIATION'.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_su  OR  p_gs_consol_data-blart_fmmi_doc = c_sa OR  p_gs_consol_data-blart_fmmi_doc = c_dr.
    gs_output_billing-description = p_gs_consol_data-zuonr_fmmi_doc.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_vc.
    gs_output_billing-description = p_gs_consol_data-xblnr_fmmi_doc.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_va OR p_gs_consol_data-blart_fmmi_doc = c_vr OR p_gs_consol_data-blart_fmmi_doc = c_nd.
    gs_output_billing-description = p_gs_consol_data-sgtxt_level1_ref_doc+3(47).
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_ic .
    gs_output_billing-description = p_gs_consol_data-bktxt_level2_ref_doc.
  ELSEIF  p_gs_consol_data-blart_fmmi_doc = c_df OR  p_gs_consol_data-blart_fmmi_doc = c_dy.
    IF  p_gs_consol_data-belnr_level1_ref_doc IS INITIAL. "Implies not a collections.
      gs_output_billing-description = p_gs_consol_data-xblnr_fmmi_doc.
    ELSE.                                      "Implies is a collections doc.
      gs_output_billing-description = p_gs_consol_data-xblnr_level1_ref_doc.
    ENDIF.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_dl OR  p_gs_consol_data-blart_fmmi_doc = c_dz.
    gs_output_billing-description = p_gs_consol_data-xblnr_level1_ref_doc.
  ELSEIF  p_gs_consol_data-blart_fmmi_doc = c_rv .
    IF p_gs_consol_data-umskz_fmmi_doc IS INITIAL.                        "Implies RV S.O Invoice
      gs_output_billing-description = p_gs_consol_data-xblnr_fmmi_doc.
    ELSEIF p_gs_consol_data-umskz_fmmi_doc = c_f.
      gs_output_billing-description = p_gs_consol_data-xblnr_fmmi_doc.    "Implies RV DPR.
*        gs_output_billing-description = ' '.  "TBD ask someone.
    ENDIF.
  ENDIF.

**-- mapping Field23.
  gs_output_billing-acceptance_date = p_gs_consol_data-budat_fmmi_doc.

**-- mapping Field24.
**-- taken from the technical design.
  IF p_gs_consol_data-xblnr_fmmi_doc = c_nd OR p_gs_consol_data-xblnr_fmmi_doc = c_tc OR
     p_gs_consol_data-xblnr_fmmi_doc = c_tr.
    gs_output_billing-treasury_schedule_no = p_gs_consol_data-xblnr_fmmi_doc.
  ELSEIF p_gs_consol_data-xblnr_fmmi_doc = c_ic.
    gs_output_billing-treasury_schedule_no = p_gs_consol_data-xblnr_level1_ref_doc.
  ELSE.
    gs_output_billing-treasury_schedule_no = ' '.
  ENDIF.

**-- mapping Field25.
**-- taken from functional document.
  IF p_gs_consol_data-blart_fmmi_doc = c_dl OR p_gs_consol_data-blart_fmmi_doc = c_dz OR
     p_gs_consol_data-blart_fmmi_doc = c_tc OR p_gs_consol_data-blart_fmmi_doc = c_tr.
    gs_output_billing-check_number = p_gs_consol_data-chect_fmmi_doc.  "TBD
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_df OR p_gs_consol_data-blart_fmmi_doc = c_dy.
    IF p_gs_consol_data-belnr_level1_ref_doc NE  ' '. " implies collections.
      gs_output_billing-check_number = p_gs_consol_data-chect_fmmi_doc.
    ELSE.
      gs_output_billing-check_number = ' '.
    ENDIF.
  ELSE.
    gs_output_billing-check_number = ' '.
  ENDIF.

**-- mapping Field26.
  gs_output_billing-voucher_line_amount = c_zero.

**-- mapping Field27.
  gs_output_billing-disbursed_line_amount = c_zero.

**-- mapping Field28.
**-- Taken from functional doc.
  IF p_gs_consol_data-blart_fmmi_doc = c_va OR p_gs_consol_data-blart_fmmi_doc = c_vc.
    gs_output_billing-accomplish_date = ' '.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_vr.
    IF  gs_output_billing-transaction_code = c_nc.
      gs_output_billing-accomplish_date = p_gs_consol_data-bldat_fmmi_doc+2(6).
    ELSEIF  gs_output_billing-transaction_code = c_pv.
      gs_output_billing-accomplish_date = ' '.
    ENDIF.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_rv.
    IF p_gs_consol_data-belnr_level1_ref_doc IS INITIAL.      "Imples RV S.O. invoice.
      gs_output_billing-accomplish_date = ' '.
    ELSE.                                            "Implies RV DPR.
      gs_output_billing-accomplish_date = p_gs_consol_data-bldat_fmmi_doc+2(6).
    ENDIF.
  ELSEIF p_gs_consol_data-blart_fmmi_doc = c_df OR p_gs_consol_data-blart_fmmi_doc = c_dy.
    IF  p_gs_consol_data-belnr_level1_ref_doc IS INITIAL. " Implies not a collections.
      gs_output_billing-accomplish_date = ' '.
    ELSE.
      gs_output_billing-accomplish_date =  p_gs_consol_data-bldat_fmmi_doc+2(6).
    ENDIF.
  ELSE.
    gs_output_billing-accomplish_date =  p_gs_consol_data-bldat_fmmi_doc+2(6).
  ENDIF.

**-- mapping Field29.
  gs_output_billing-cancellation_code = ''.

**-- mapping Field30.
  gs_output_billing-cancellation_type = ''.

**-- mapping Field31.
  gs_output_billing-fmmi_userid = p_gs_consol_data-usnam_fmmi_doc.

**-- mapping Field31.
  gs_output_billing-treasury_symbol = p_gs_consol_data-finuse_fmmi_doc+0(15).

**-- mapping Field32.
  gs_output_billing-fmmi_doc_num = p_gs_consol_data-belnr_fmmi_doc.

**-- mapping Field33.
** - mapped as per functional doc.
  IF p_gs_consol_data-blart_fmmi_doc = c_vc OR p_gs_consol_data-blart_fmmi_doc = c_df OR
     p_gs_consol_data-blart_fmmi_doc = c_dy OR p_gs_consol_data-blart_fmmi_doc = c_dl OR
     p_gs_consol_data-blart_fmmi_doc = c_dz OR p_gs_consol_data-blart_fmmi_doc = c_rv OR
     p_gs_consol_data-blart_fmmi_doc = c_ic.
    gs_output_billing-fmmi_customer = p_gs_consol_data-kunnr_fmmi_doc.
  ELSE.
    gs_output_billing-fmmi_customer = ' '.
  ENDIF.

**-- mapping Field34.
  IF p_gs_consol_data-blart_fmmi_doc =  c_ic  .
    CLEAR:gv_name,  gt_line[],  gt_line, gs_line, gv_belnr_ic, gv_buzei_ic.
    gv_belnr_ic = p_gs_consol_data-belnr_fmmi_doc.
    gv_buzei_ic = p_gs_consol_data-buzei_fmmi_doc.
    PERFORM call_function_alpha_input CHANGING gv_belnr_ic.
    PERFORM call_function_alpha_input CHANGING gv_buzei_ic.
    CONCATENATE  c_usda gv_belnr_ic gv_gjahr gv_buzei_ic  INTO gv_name.
    IF gv_name IS NOT INITIAL.
      CALL FUNCTION 'READ_TEXT'
        EXPORTING
          client                  = sy-mandt
          id                      = c_0001
          language                = c_en
          name                    = gv_name
          object                  = c_doc_item
        TABLES
          lines                   = gt_line
        EXCEPTIONS
          id                      = 1
          language                = 2
          name                    = 3
          not_found               = 4
          object                  = 5
          reference_check         = 6
          wrong_access_to_archive = 7
          OTHERS                  = 8.
      IF sy-subrc <> 0.
      ENDIF.
      READ TABLE gt_line INTO gs_line INDEX 1.
      IF sy-subrc = 0.
        gs_output_billing-reimbursable_note_text =  gs_line.
      ENDIF.
    ENDIF.
* ----
  ELSEIF p_gs_consol_data-blart_fmmi_doc =  c_rv.
    CLEAR:gv_name,  gt_line[],  gt_line, gv_vbeln, gs_line.
    gv_vbeln =  p_gs_consol_data-belnr_level1_ref_doc.
    gv_posnr = p_gs_consol_data-buzei_level1_ref_doc.
    PERFORM call_function_alpha_input  CHANGING gv_vbeln.
    PERFORM call_function_alpha_input  CHANGING gv_posnr.

    PERFORM select_vbap  USING gv_vbeln gv_posnr CHANGING gv_name .
    IF gv_name IS NOT INITIAL.
      CALL FUNCTION 'READ_TEXT'
        EXPORTING
          client                  = sy-mandt
          id                      = c_0001
          language                = c_en
          name                    = gv_name
          object                  = c_vbbp
        TABLES
          lines                   = gt_line
        EXCEPTIONS
          id                      = 1
          language                = 2
          name                    = 3
          not_found               = 4
          object                  = 5
          reference_check         = 6
          wrong_access_to_archive = 7
          OTHERS                  = 8.
      IF sy-subrc <> 0.
      ENDIF.
      READ TABLE gt_line INTO gs_line INDEX 1.
    ELSE.
      gs_output_billing-reimbursable_note_text =  ' '.
    ENDIF.
  ENDIF.
*    MODIFY gt_consol_data FROM p_gs_consol_data TRANSPORTING
*              blart_level1_ref_doc budat_level1_ref_doc bldat_level1_ref_doc bktxt_level1_ref_doc
*              xblnr_level1_ref_doc sgtxt_level1_ref_doc zuonr_level1_ref_doc gsber_level1_ref_doc
*              blart_level1_ref_doc.
  APPEND gs_output_billing TO gt_output_billing.
  CLEAR: gs_output_billing, gs_line.

ENDFORM.                    " MAPPING_BILLING_DOC
*&---------------------------------------------------------------------*
*&      Form  CONVERT_WB8_TO_WBS24
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM convert_wb8_to_wbs24 USING    p_lv_wbs8  TYPE bseg-projk
                  CHANGING p_lv_wbs24 TYPE ps_posid.
  CLEAR: p_lv_wbs24.
  CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
    EXPORTING
      input  = p_lv_wbs8
    IMPORTING
      output = p_lv_wbs24.

ENDFORM.                    " CONVERT_WB8_TO_WBS24
*&---------------------------------------------------------------------*
*&      Form  SELECT_DATA_4R_SALES_ORDER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_I_BEGIN_DATE  text
*      -->P_I_END_DATE  text
*      -->P_I_BEGIN_TIME  text
*      -->P_I_END_TIME  text
*----------------------------------------------------------------------*
FORM select_data_4r_sales_order  USING    p_i_begin_date
                                          p_i_end_date
                                          p_i_begin_time
                                          p_i_end_time.

  CLEAR:gt_cdhdr[], gs_cdhdr, gt_cdpos[], gs_cdpos, gt_vbap[], gs_vbap,
        gt_veda[], gs_veda, gt_fmfundbpd_so[],
        gs_fmfundbpd_so, gt_vbak_change[], gt_vbak_create[], gs_vbak_create.

  SELECT * FROM cdhdr
           INTO TABLE gt_cdhdr
                WHERE objectclas = 'VERKBELEG'
                  AND udate GE p_i_begin_date
                  AND udate LE p_i_end_date.

** -- Filter based on time.
  LOOP AT  gt_cdhdr INTO  gs_cdhdr.
    IF p_i_begin_date = gs_cdhdr-udate.
      IF  gs_cdhdr-utime LE p_i_begin_time.
        TRY.
            DELETE gt_cdhdr.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.
    ENDIF.
    IF p_i_end_date = gs_cdhdr-udate.
      IF  gs_cdhdr-utime GE p_i_end_time.
        TRY.
            DELETE gt_cdhdr.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.
    ENDIF.
    gs_cdhdr-vbeln = gs_cdhdr-objectid+0(10).
    PERFORM call_function_alpha_input CHANGING gs_cdhdr-vbeln.
    MODIFY gt_cdhdr FROM gs_cdhdr TRANSPORTING vbeln.
  ENDLOOP.

  IF gt_cdhdr IS NOT INITIAL.
    SELECT * FROM cdpos
             INTO TABLE gt_cdpos
            FOR ALL ENTRIES IN gt_cdhdr
             WHERE objectclas = gt_cdhdr-objectclas
               AND objectid   = gt_cdhdr-objectid
               AND changenr   = gt_cdhdr-changenr.
  ENDIF.
**-- This sort is important to make sure if we do a read on this table the latest
*      change in amount is picked up by the read statement.
  SORT  gt_cdpos BY objectclas objectid changenr DESCENDING.

  IF gt_cdhdr IS NOT INITIAL.
    SELECT * FROM vbak
             INTO TABLE gt_vbak_change
             FOR ALL ENTRIES IN gt_cdhdr
              WHERE vbeln =  gt_cdhdr-vbeln.
*                AND gsber = c_fs00. " igsber in VBAK is always blank.

  ENDIF.

  SELECT * FROM vbak
           INTO TABLE gt_vbak_create
                WHERE audat GE p_i_begin_date
                  AND audat LE p_i_end_date.
*                  AND gsber = c_fs00.


** -- Filter based on time.
  LOOP AT  gt_vbak_create INTO  gs_vbak_create.
    IF p_i_begin_date = gs_vbak_create-audat.
      IF  gs_vbak_create-erzet LE p_i_begin_time.
        TRY.
            DELETE gt_vbak_create.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.
    ENDIF.
    IF p_i_end_date = gs_vbak_create-audat.
      IF  gs_vbak_create-erzet GE p_i_end_time.
        TRY.
            DELETE gt_vbak_create.
          CATCH cx_sy_open_sql_db.
        ENDTRY.
        CONTINUE.
      ENDIF.
    ENDIF.
  ENDLOOP.

** Transfer all change and create doc. in gt_vbak_create.
  APPEND LINES OF gt_vbak_change TO gt_vbak_create.


  IF gt_vbak_create IS NOT INITIAL.
    SELECT * FROM vbap
             INTO TABLE gt_vbap
             FOR ALL ENTRIES IN gt_vbak_create
              WHERE vbeln = gt_vbak_create-vbeln
                AND gsber = c_fs00.
  ENDIF.

  SORT gt_vbap BY vbeln posnr.
  DELETE ADJACENT DUPLICATES FROM gt_vbap COMPARING vbeln posnr.

  IF gt_vbap IS NOT INITIAL.
    SELECT * FROM veda
       INTO TABLE gt_veda
       FOR ALL ENTRIES IN gt_vbap
              WHERE vbeln = gt_vbap-vbeln
                AND vposn = gt_vbap-posnr.
  ENDIF.

  IF gt_vbap IS NOT INITIAL.
    SELECT * FROM fmfundbpd
             INTO TABLE gt_fmfundbpd_so
             FOR ALL ENTRIES IN gt_vbap
             WHERE fikrs = c_usda               " fin mgm area.
               AND fincode = gt_vbap-fonds           " fund
               AND budget_pd = gt_vbap-budget_pd.
  ENDIF.


ENDFORM.                    " SELECT_DATA_4R_SALES_ORDER
*&---------------------------------------------------------------------*
*&      Form  INT_TABLE_FOR_SALES_ORDER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM mapping_for_sales_order TABLES e_fm_data STRUCTURE znrmga_ob .
  CLEAR: gt_output_sales[], gs_output_sales.

  LOOP AT gt_vbap INTO gs_vbap.
    CLEAR: gs_vbak_create, gs_output_sales, gs_cdhdr .
    READ TABLE gt_vbak_create INTO gs_vbak_create WITH KEY vbeln = gs_vbap-vbeln.
    IF sy-subrc = 0.

*--------------------------------------------------------------------
**-- Mapping to ouput structure begins here.
*--------------------------------------------------------------------
**-- mapping Field1.
*--hard coded values taken from the functional design.

      gs_output_sales-transaction_code = c_ra.

**-- mapping Field2.
      gs_output_sales-document_number   =  gs_vbap-vbeln.

**-- mapping Field3.
**-- As per the TD the mapping below is done.
**-- CDHDR U/I update/insert and D is delete. Original docs has no entry in cdhdr for SO.
      READ TABLE gt_cdhdr INTO gs_cdhdr WITH KEY objectid+0(10) = gs_vbap-vbeln.
      IF sy-subrc EQ 0.
        IF gs_cdhdr-change_ind = c_u OR gs_cdhdr-change_ind = c_i.
          gs_output_sales-document_action   =  c_m.
        ELSEIF gs_cdhdr-change_ind = c_d.
          gs_output_sales-document_action   =  c_x.
        ENDIF.
      ELSE.
        gs_output_sales-document_action   =  c_e.
      ENDIF.

**-- mapping Field4.
      gs_output_sales-batch_number = ' '.

**-- mapping Field5.
      gs_output_sales-document_date = gs_vbak_create-audat+2(6).

**-- mapping Field6.
      gs_output_sales-vendor_id = ' '.

**-- mapping Field7.
      gs_output_sales-vendor_address_code = ' '.

**-- mapping Field8.
      gs_output_sales-line_number = gs_vbap-posnr+3(3).

**-- mapping Field9.
*- taken from TD
      gs_output_sales-acctg_trans_type = c_01.

**-- mapping Field10.
**-- From the Functional document & TD.
      IF gs_vbak_create-auart = c_rowa OR gs_vbak_create-auart = c_towa OR gs_vbak_create-auart = c_fowa .
        gs_output_sales-transaction_code = c_wa.
      ELSE.
        gs_output_sales-transaction_code = c_na.
      ENDIF.


**-- mapping Field11.
      gs_output_sales-ref_document_number =  ' '.


**-- mapping Field12.
**-- taken from the TD mapping.
      gs_output_sales-ref_line_number = ' '.

**-- mapping Field13.
      gv_wbs8 = gs_vbap-ps_psp_pnr.
      PERFORM convert_wb8_to_wbs24 USING gv_wbs8 CHANGING gv_wbs24.
      gs_output_sales-budget_org = gv_wbs24+6(4).

**-- mapping Field14.
      CONCATENATE gv_wbs24+11(2)  gv_wbs24+14(4) gs_consol_data-budget_fmmi_doc+0(2) INTO gv_job_code.
      gs_output_sales-job_code = gv_job_code.

**-- mapping Field15.
      gs_output_sales-beg_budget_fy = gs_vbap-budget_pd+0(2). "TBD check

**-- mapping Field16.
      gs_output_sales-fund  = gs_vbap-fonds+6(4).

**-- mapping Field17.
      CLEAR: gv_objnr, gv_farea.
      CONCATENATE c_vb gs_vbap-vbeln gs_vbap-posnr INTO gv_objnr.
      PERFORM select_fmzuob USING gv_objnr CHANGING gv_farea .
      gs_output_sales-fund_program = gv_farea.  " check

**-- mapping Field18.
      gs_output_sales-budget_object_code = c_0200.

**-- mapping Field19.
      gs_output_sales-line_dollar_amount  = gs_vbap-netpr.
      CONDENSE gs_output_sales-line_dollar_amount.

**-- mapping Field20.
      CLEAR: gv_posnr,  gv_tabkey.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = gs_vbap-posnr
        IMPORTING
          output = gv_posnr.


      CONCATENATE sy-mandt gs_vbap-vbeln  gv_posnr INTO gv_tabkey.
      READ TABLE gt_cdpos INTO gs_cdpos WITH KEY objectid = gs_vbap-vbeln
                                                   tabkey = gv_tabkey
                                                   fname  = 'NETPR'.
      IF sy-subrc  = 0.
        IF gs_cdpos-value_old GT gs_cdpos-value_new.
          .
          gs_output_sales-line_action = c_d.
        ELSEIF gs_cdpos-value_old LE gs_cdpos-value_new.
          gs_output_sales-line_action = c_i.
        ENDIF.
      ELSE.
*   -- Not found means original doc.
        gs_output_sales-line_action = c_i.

      ENDIF.


**-- mapping Field21.
**-- taken from the technical design.
      gs_output_sales-vendor_invoice = ' '.

**-- mapping Field22.
* Taken from TD document.

      CLEAR: gv_name, gt_line[], gt_line, gs_line.
      gv_name = gs_vbap-objnr.
      IF gv_name IS NOT INITIAL.
        CALL FUNCTION 'READ_TEXT'
          EXPORTING
            client                  = sy-mandt
            id                      = c_0001
            language                = c_en
            name                    = gv_name
            object                  = c_vbbp
          TABLES
            lines                   = gt_line
          EXCEPTIONS
            id                      = 1
            language                = 2
            name                    = 3
            not_found               = 4
            object                  = 5
            reference_check         = 6
            wrong_access_to_archive = 7
            OTHERS                  = 8.
        IF sy-subrc <> 0.
*              MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*                      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.
      ENDIF.
      READ TABLE gt_line INTO gs_line INDEX 1.
      gs_output_sales-description = gs_line.
**-- mapping Field23.

      gs_output_sales-acceptance_date = gs_vbak_create-audat+2(6).

**-- mapping Field24.
      gs_output_sales-treasury_schedule_no = ' '.


**-- mapping Field25.
**-- taken from functional document.

      gs_output_sales-check_number = ' '.

**-- mapping Field26.
      gs_output_sales-voucher_line_amount = c_zero.

**-- mapping Field27.
      gs_output_sales-disbursed_line_amount = c_zero.

**-- mapping Field28.
**-- Taken from functional doc.
      READ TABLE gt_veda INTO gs_veda WITH KEY vbeln = gs_vbap-vbeln
                                               vposn = gs_vbap-posnr.
      IF sy-subrc = 0.
        gs_output_sales-accomplish_date = gs_veda-venddat+2(6).
      ELSE.
        gs_output_sales-accomplish_date = ' '.
      ENDIF.
*  ENDIF.
**-- mapping Field29.

      gs_output_sales-cancellation_code = ''.
**-- mapping Field30.
      gs_output_sales-cancellation_type = ''.

**-- mapping Field31.
      gs_output_sales-fmmi_userid = gs_vbak_create-ernam.

**-- mapping Field31.
      READ TABLE gt_fmfundbpd_so INTO gs_fmfundbpd_so WITH KEY fincode = gs_vbap-fonds
                                                                budget_pd = gs_vbap-budget_pd.
      IF sy-subrc = 0.
        gs_output_sales-treasury_symbol = gs_fmfundbpd_so-finuse+0(15).
      ELSE.
        gs_output_sales-treasury_symbol =  ' '.
      ENDIF.
**-- mapping Field32.
      gs_output_sales-fmmi_doc_num = gs_vbap-vbeln.

**-- mapping Field33.

      gs_output_sales-fmmi_customer = gs_vbak_create-kunnr.

**-- mapping Field34.
*- As per the TD.
      gs_output_sales-reimbursable_note_text = ' '.
      APPEND gs_output_sales TO gt_output_sales.
    ENDIF.
  ENDLOOP.
************** To be deleted TBD Check.
  CLEAR: e_fm_data[], e_fm_data.
  APPEND LINES OF  gt_output_sales TO  e_fm_data.
  APPEND LINES OF  gt_output_billing TO  e_fm_data.
***  -----------------------

ENDFORM.                    " INT_TABLE_FOR_SALES_ORDER
*&---------------------------------------------------------------------*
*&      Form  SELECT_FMZUOB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM select_fmzuob USING    p_gv_objnr
                   CHANGING p_gv_farea.
  SELECT SINGLE * FROM
                  fmzuob INTO gs_fmzuob
                   WHERE objnr = p_gv_objnr.

  p_gv_farea = gs_fmzuob-farea.
ENDFORM.                    " SELECT_FMZUOB
*&---------------------------------------------------------------------*
*&      Form  CALL_FUNCTION_ALPHA_INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM call_function_alpha_input CHANGING p_field1.

  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = p_field1
    IMPORTING
      output = p_field1.


ENDFORM.                    " CALL_FUNCTION_ALPHA_INPUT
*&---------------------------------------------------------------------*
*&      Form  SELECT_VBAP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GV_BELNR  text
*      -->P_GV_POSNR  text
*      <--P_GV_NAME  text
*----------------------------------------------------------------------*
FORM select_vbap  USING    p_belnr
                           p_posnr
                  CHANGING p_name.
  DATA: lv_vbap TYPE vbap.

  SELECT SINGLE * FROM vbap INTO lv_vbap
                  WHERE vbeln =  p_belnr
                    AND posnr =  p_posnr.
  p_name = lv_vbap-objnr.
ENDFORM.                    " SELECT_VBAP
*&---------------------------------------------------------------------*
*&      Form  GET_ORG_INV_REVERSED_DOC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LV_BELNR  text
*      <--P_LV_REBZG  text
*----------------------------------------------------------------------*
FORM get_org_inv_reversed_doc  USING    p_belnr
                               CHANGING p_rebzg.
  DATA: lv_objid TYPE cdhdr-objectid,
          lt_cdhdr TYPE TABLE OF cdhdr,
          lt_cdpos TYPE TABLE OF cdpos,
          ls_cdpos TYPE cdpos,
          lv_belnr TYPE bkpf-belnr.
  TABLES: cdhdr.
  CONSTANTS: lc_obj_class TYPE cdhdr-objectclas VALUE 'BELEGR',
             lc_bsegr     TYPE cdpos-tabname    VALUE 'BSEGR',
             lc_chngid    TYPE cdpos-chngind    VALUE 'U',
             lc_augbl     TYPE cdpos-fname      VALUE 'AUGBL',
             lc_usda      TYPE bkpf-bukrs       VALUE 'USDA',
*             lc_001(3)    TYPE c                VALUE '001',
             lc_dr        TYPE bkpf-blart       VALUE 'DR'.


  CONCATENATE sy-mandt lc_usda p_belnr gv_gjahr INTO lv_objid.
  SELECT SINGLE * FROM cdhdr
                  WHERE objectid = lv_objid
                   AND  objectclas = lc_obj_class.
  IF sy-subrc = 0.
    SELECT  * FROM cdhdr                          " index Z91.
             INTO TABLE lt_cdhdr
            WHERE objectclas = lc_obj_class
              AND udate = cdhdr-udate
              AND utime = cdhdr-utime.
  ENDIF.

  IF lt_cdhdr[] IS NOT INITIAL.
    SELECT * FROM cdpos
             INTO TABLE lt_cdpos
             FOR ALL ENTRIES IN lt_cdhdr
             WHERE objectclas = lt_cdhdr-objectclas
               AND  objectid   = lt_cdhdr-objectid
               AND  changenr   = lt_cdhdr-changenr
               AND  tabname    = lc_bsegr
*               AND tabkey      = lt_cdhdr-objectid
               AND fname =      lc_augbl
               AND chngind    = lc_chngid
               AND value_old  = p_belnr.
  ENDIF.

  LOOP AT lt_cdpos INTO ls_cdpos WHERE fname = lc_augbl.
    CLEAR: p_rebzg, lv_belnr.
    lv_belnr = ls_cdpos-objectid+7(17).
    SELECT SINGLE * FROM bkpf WHERE belnr = lv_belnr
                                AND blart = lc_dr.
    IF sy-subrc = 0.
      p_rebzg = lv_belnr.
      EXIT.
    ENDIF.
  ENDLOOP.

  CLEAR: ls_cdpos, lt_cdpos[], lt_cdhdr, cdhdr.
ENDFORM.                    " GET_ORG_INV_REVERSED_DOC
*&---------------------------------------------------------------------*
*&      Form  SELECT_KBLK_KBLP_DATA_FOR_IC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--GS_CONSOL_DATA  text
*----------------------------------------------------------------------*
FORM select_kblk_kblp_data_for_ic  CHANGING p_gs_consol_data.

ENDFORM.                    " SELECT_KBLK_KBLP_DATA_FOR_IC