SAP ABAP Realtime Code SAmple
Wednesday, December 16, 2020
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
*"----------------------------------------------------------------------
*"*"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
Subscribe to:
Posts (Atom)