Author: Sujeet Mishra
Submitted: 14/08/2013
Related Links:
Description: Customer Ageing Report.
Refer SAP Standard Report before creating any custom report:
S_ALR_87012085 Vendor Payment History with OI sorted Items.
S_ALR_87012178 Customer (AR) Aging report by Customer
S_ALR_87012168 Customer (AR) Aging report by Invoice
REPORT zfi_customer_ageing. TYPE-POOLS: slis. TABLES: knb1,kna1,knvv,fagl_splinfo,bapi3007_2, tgsb. DATA: i_data TYPE STANDARD TABLE OF bapi3007_2 WITH HEADER LINE. DATA: lv_bukrs TYPE bapi3007_1-comp_code, lv_kunnr TYPE bapi3007_1-customer, lv_date TYPE bapi3007-key_date. DATA: lv_line TYPE i. DATA: lv_sum TYPE fagl_splinfo-pswbt. DATA: lv_amtlc TYPE bsid-dmbtr. DATA: lv_amtdc TYPE bsid-dmbtr. DATA : lv_amtlcfix TYPE bsid-dmbtr. DATA : lv_amtdcfix TYPE bsid-dmbtr. DATA: lv_brtxt(20), lv_ktext(20), lv_gtext(30), lv_ltext(20). DATA: lv_dudat TYPE d. DATA: lv_ovdat TYPE d. DATA: lv_day TYPE i. DATA: lv_days(10). DATA: gv_days(15). DATA: lv_top(60). DATA: lv_txt(10). DATA: lv_pernr TYPE vbpa-pernr. DATA: lv_invref_docdate TYPE bkpf-bldat. DATA: ibkpf TYPE bkpf. DATA: i_date TYPE STANDARD TABLE OF faede WITH HEADER LINE. DATA: i_kna1 TYPE STANDARD TABLE OF kna1 WITH HEADER LINE. DATA: i_knb1 TYPE STANDARD TABLE OF knb1 WITH HEADER LINE. DATA: i_knvv TYPE STANDARD TABLE OF knvv WITH HEADER LINE. DATA: it_t001 TYPE TABLE OF t001 WITH HEADER LINE. DATA: i_splinfo TYPE STANDARD TABLE OF fagl_splinfo WITH HEADER LINE. TYPES: BEGIN OF t_ageing, bukrs TYPE knb1-bukrs, kunnr TYPE kna1-kunnr, name1 TYPE kna1-name1, ort01 TYPE kna1-ort01, zregio TYPE kna1-regio, konzs TYPE kna1-konzs, currency(5), prctr TYPE cepc-prctr, ltext TYPE cepct-ltext, gsber TYPE fagl_splinfo-gsber, zzbdiv TYPE bseg-zzbdiv, zztdiv TYPE bseg-zztdiv, inv_year TYPE bseg-rebzj, inv_ref TYPE bseg-rebzg, inv_item TYPE bseg-rebzz, sp_gl_ind(1), brsch TYPE kna1-brsch, brtxt TYPE t016t-brtxt, vkorg TYPE knvv-vkorg, vtweg TYPE knvv-vtweg, spart TYPE knvv-spart, kdgrp TYPE knvv-kdgrp, ktext TYPE t151t-ktext, bzirk TYPE knvv-bzirk, vkbur TYPE knvv-vkbur, vkgrp TYPE knvv-vkgrp, busab TYPE knb1-busab, niels TYPE kna1-niels, kukla TYPE kna1-kukla, bran1 TYPE kna1-bran1, pernr TYPE vbpa-pernr, pstng_date TYPE sy-datum, usnam TYPE bkpf-usnam, ppnam TYPE bkpf-ppnam, cpudt TYPE bkpf-cpudt, cputm TYPE bkpf-cputm, doc_date TYPE sy-datum, doc_type TYPE bkpf-blart, bline_date TYPE sy-datum, adate TYPE sy-datum, lv_dudat TYPE sy-datum, pmnttrms(4), zlspr TYPE bsid-zlspr, bill_doc(10), ref_doc_no(16), alloc_nmbr(18), days(10), intrate TYPE zzroi, int TYPE bsid-dmbtr, doc_no(10), fisc_year(4), item_num(3), gtext TYPE tgsbt-gtext, spl_no TYPE fagl_splinfo-spl_no, lc_fixamt TYPE bsid-dmbtr, lc_amount TYPE bsid-dmbtr, lv_amt TYPE bsid-dmbtr, lv_amt1 TYPE bsid-dmbtr, lv_amt2 TYPE bsid-dmbtr, lv_amt3 TYPE bsid-dmbtr, lv_amt4 TYPE bsid-dmbtr, lv_amt5 TYPE bsid-dmbtr, lv_amt6 TYPE bsid-dmbtr, lv_amt7 TYPE bsid-dmbtr, lv_amt8 TYPE bsid-dmbtr, lv_reval TYPE bsid-dmbtr, lv_exdif TYPE bsid-dmbtr, lv_exrate TYPE ukursp, lv_sgtxt TYPE bseg-sgtxt, END OF t_ageing. DATA: i_ageing TYPE STANDARD TABLE OF t_ageing WITH HEADER LINE. DATA: i_age TYPE STANDARD TABLE OF t_ageing WITH HEADER LINE. DATA: wa_ageing LIKE LINE OF i_ageing. \*&---------------------------------------------------------------------\* \*& Internal Table Declaration For Field Catalog \*&---------------------------------------------------------------------\* DATA: fcat TYPE slis_t_fieldcat_alv, ls_fact TYPE slis_fieldcat_alv, ls_adjust TYPE slis_layout_alv. DATA : gt_events TYPE slis_t_event. DATA: gt_list_top_of_page TYPE slis_t_listheader. DATA: i_sort TYPE slis_t_sortinfo_alv. DATA: wa_sort TYPE slis_sortinfo_alv, color TYPE slis_t_specialcol_alv, ls_color TYPE slis_specialcol_alv. CONSTANTS: gc_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'. \*&---------------------------------------------------------------------\* \*& Selection Screen \*&---------------------------------------------------------------------\* SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. SELECT-OPTIONS: s_bukrs FOR knb1-bukrs OBLIGATORY, s_busab FOR knb1-busab NO-DISPLAY, s_vkorg FOR knvv-vkorg NO-DISPLAY, s_vtweg FOR knvv-vtweg NO-DISPLAY, s_spart FOR knvv-spart, s_kunnr FOR kna1-kunnr, s_vbund FOR kna1-vbund NO-DISPLAY, s_konzs FOR kna1-konzs. PARAMETERS : p_spart AS CHECKBOX. SELECTION-SCREEN END OF BLOCK b1. SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-007. SELECT-OPTIONS: s_gsber FOR tgsb-gsber NO-DISPLAY, s_prctr FOR fagl_splinfo-prctr, s_zzbdiv FOR fagl_splinfo-zzbdiv, s_zztdiv FOR fagl_splinfo-zztdiv. SELECTION-SCREEN END OF BLOCK b2. SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-006. PARAMETERS: p_date LIKE rfpdo-allgstid OBLIGATORY. PARAMETERS: p_ddate RADIOBUTTON GROUP g1, p_pdate RADIOBUTTON GROUP g1. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(10) text-002 FOR FIELD p_0 . PARAMETERS: p_0(3) TYPE n DEFAULT '0', p_a(3) TYPE n DEFAULT '045' OBLIGATORY, p_b(3) TYPE n DEFAULT '060' OBLIGATORY, p_c(3) TYPE n DEFAULT '090' OBLIGATORY, p_d(3) TYPE n DEFAULT '120' OBLIGATORY, p_e(3) TYPE n DEFAULT '180' OBLIGATORY, p_f(3) TYPE n DEFAULT '365' OBLIGATORY. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK b3. SELECTION-SCREEN BEGIN OF BLOCK b8 WITH FRAME TITLE text-012. SELECT-OPTIONS: s_kdgrp FOR knvv-kdgrp NO-DISPLAY, s_bzirk FOR knvv-bzirk NO-DISPLAY, s_vkbur FOR knvv-vkbur NO-DISPLAY, s_vkgrp FOR knvv-vkgrp NO-DISPLAY, s_niels FOR kna1-niels NO-DISPLAY, s_kukla FOR kna1-kukla NO-DISPLAY, s_brsch FOR kna1-brsch NO-DISPLAY, s_bran1 FOR kna1-bran1 NO-DISPLAY. SELECTION-SCREEN END OF BLOCK b8. SELECTION-SCREEN BEGIN OF BLOCK b7 WITH FRAME TITLE text-011. PARAMETERS: p_lc RADIOBUTTON GROUP g5, p_dc RADIOBUTTON GROUP g5 DEFAULT 'X', p_reval AS CHECKBOX. SELECTION-SCREEN END OF BLOCK b7. SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME TITLE text-009. PARAMETERS: p_detail RADIOBUTTON GROUP g3, p_accsum RADIOBUTTON GROUP g3 DEFAULT 'X'. SELECTION-SCREEN END OF BLOCK b5. SELECTION-SCREEN BEGIN OF BLOCK b6 WITH FRAME TITLE text-010. PARAMETERS: p_bdci RADIOBUTTON GROUP g4, p_di RADIOBUTTON GROUP g4, p_ci RADIOBUTTON GROUP g4, p_ch AS CHECKBOX DEFAULT ' '. SELECT-OPTIONS: s_sgli FOR bapi3007_2-sp_gl_ind. SELECTION-SCREEN END OF BLOCK b6. INITIALIZATION. PERFORM e03_eventtab_build USING gt_events\[\]. CLEAR: p_a, p_b, p_c, p_d, p_e, p_f. AT SELECTION-SCREEN. PERFORM checking. IF s_sgli\[\] IS INITIAL. s_sgli-sign = 'I'. s_sgli-option = 'EQ'. s_sgli-low = ' '. APPEND s_sgli. ENDIF. IF p_spart = ' ' AND s_spart\[\] IS INITIAL. MESSAGE e001(38) WITH 'Please select a Division'. ENDIF. IF p_spart = 'X' AND s_spart\[\] IS NOT INITIAL. MESSAGE e001(38) WITH 'Please do not select a Division'. ENDIF. AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF screen-name = 'P_0'. screen-input = '0'. MODIFY SCREEN. ENDIF. ENDLOOP. START-OF-SELECTION. PERFORM selection. SORT i_knvv BY kunnr. LOOP AT i_knvv. DELETE ADJACENT DUPLICATES FROM i_knvv COMPARING kunnr. ENDLOOP. LOOP AT i_knb1. READ TABLE i_knvv WITH KEY kunnr = i_knb1-kunnr. READ TABLE i_kna1 WITH KEY kunnr = i_knb1-kunnr. SELECT SINGLE brtxt FROM t016t INTO lv_brtxt WHERE brsch = i_kna1-brsch AND spras = sy-langu. SELECT SINGLE ktext FROM t151t INTO lv_ktext WHERE kdgrp = i_knvv-kdgrp AND spras = sy-langu. lv_bukrs = i_knb1-bukrs. lv_kunnr = i_knb1-kunnr. lv_date = p_date. CALL FUNCTION 'BAPI_AR_ACC_GETOPENITEMS' EXPORTING companycode = lv_bukrs customer = lv_kunnr keydate = lv_date TABLES lineitems = i_data. IF p_di EQ 'X'. p_ch = ' '. LOOP AT i_data WHERE db_cr_ind EQ 'S' AND sp_gl_ind IN s_sgli. PERFORM split_operation. ENDLOOP. ENDIF. IF p_ci EQ 'X'. p_ch = ' '. LOOP AT i_data WHERE db_cr_ind EQ 'H' AND sp_gl_ind IN s_sgli. i_data-lc_amount = \-1 * i_data-lc_amount. i_data-amt_doccur = \-1 * i_data-amt_doccur. PERFORM split_operation. ENDLOOP. ENDIF. IF p_bdci EQ 'X'. LOOP AT i_data WHERE sp_gl_ind IN s_sgli. IF i_data-db_cr_ind EQ 'H'. i_data-lc_amount = \-1 * i_data-lc_amount. i_data-amt_doccur = \-1 * i_data-amt_doccur. ENDIF. PERFORM split_operation. ENDLOOP. ENDIF. ENDLOOP. PERFORM fieldcatalog. PERFORM e04_comment_build USING gt_list_top_of_page\[\]. PERFORM alv_display. \*&---------------------------------------------------------------------\* \*& Form SELECTION \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* --> p1 text \* <-\- p2 text \*----------------------------------------------------------------------\* FORM selection . SELECT * FROM knvv INTO TABLE i_knvv WHERE kunnr IN s_kunnr AND vkorg IN s_vkorg AND vtweg IN s_vtweg AND spart IN s_spart AND kdgrp IN s_kdgrp AND bzirk IN s_bzirk AND vkbur IN s_vkbur AND vkgrp IN s_vkgrp. IF p_spart = ' '. SELECT * FROM kna1 INTO TABLE i_kna1 FOR ALL ENTRIES IN i_knvv WHERE kunnr EQ i_knvv-kunnr AND niels IN s_niels AND kukla IN s_kukla AND brsch IN s_brsch AND bran1 IN s_bran1 AND vbund IN s_vbund AND konzs IN s_konzs. SELECT * FROM knb1 INTO TABLE i_knb1 FOR ALL ENTRIES IN i_kna1 WHERE kunnr = i_kna1-kunnr AND bukrs IN s_bukrs AND busab IN s_busab. ELSE. SELECT * FROM kna1 INTO TABLE i_kna1 WHERE kunnr IN s_kunnr AND niels IN s_niels AND kukla IN s_kukla AND brsch IN s_brsch AND bran1 IN s_bran1 AND vbund IN s_vbund AND konzs IN s_konzs. SELECT * FROM knb1 INTO TABLE i_knb1 FOR ALL ENTRIES IN i_kna1 WHERE kunnr = i_kna1-kunnr AND bukrs IN s_bukrs AND busab IN s_busab. ENDIF. ENDFORM. " SELECTION \*&---------------------------------------------------------------------\* \*& Form DATA_ENTRY \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* --> p1 text \* <-\- p2 text \*----------------------------------------------------------------------\* FORM data_entry . \*&---------------------------------------------------------------------\* \*& Selecting Text For Businees Area \*&---------------------------------------------------------------------\* IF i_data-inv_ref EQ ' '. i_data-inv_ref = i_data-doc_no. i_data-inv_year = i_data-fisc_year. i_data-inv_item = i_data-item_num. ENDIF. \* Document for Invoice reference stored in Variable. CLEAR: lv_invref_docdate. SELECT SINGLE bldat FROM bkpf INTO lv_invref_docdate WHERE bukrs = i_data-comp_code AND belnr = i_data-inv_ref AND gjahr = i_data-inv_year. SELECT SINGLE gtext FROM tgsbt INTO lv_gtext WHERE gsber = i_splinfo-gsber AND spras = sy-langu. SELECT SINGLE ktext FROM cepct INTO lv_ltext WHERE prctr = i_splinfo-prctr AND spras = sy-langu. CLEAR : lv_pernr. IF i_data-bill_doc NE ' '. SELECT SINGLE pernr FROM vbpa INTO lv_pernr WHERE vbeln = i_data-bill_doc AND parvw = 'ZA'. ENDIF. DATA: lv_vbelv TYPE vbfa-vbelv, lv_intrate TYPE vbak-zzroi. CLEAR: lv_vbelv, lv_intrate. SELECT SINGLE vbelv FROM vbfa INTO lv_vbelv WHERE vbeln = i_data-ref_doc_no AND vbtyp_v = 'C'. IF sy-subrc = 0. SELECT SINGLE zzroi FROM vbak INTO lv_intrate WHERE vbeln = lv_vbelv. ENDIF. PERFORM date_calculation. CLEAR : i_ageing, it_t001. READ TABLE it_t001 WITH KEY bukrs = i_knb1-bukrs. i_ageing-bukrs = i_knb1-bukrs. i_ageing-kunnr = i_knb1-kunnr. i_ageing-name1 = i_kna1-name1. i_ageing-ort01 = i_kna1-ort01. i_ageing-regio = i_kna1-regio. i_ageing-brsch = i_kna1-brsch. i_ageing-brtxt = lv_brtxt. i_ageing-konzs = i_kna1-konzs. i_ageing-vkorg = i_knvv-vkorg. i_ageing-vtweg = i_knvv-vtweg. i_ageing-spart = i_knvv-spart. i_ageing-kdgrp = i_knvv-kdgrp. i_ageing-ktext = lv_ktext. i_ageing-bzirk = i_knvv-bzirk. i_ageing-vkbur = i_knvv-vkbur. i_ageing-vkgrp = i_knvv-vkgrp. i_ageing-pernr = lv_pernr. i_ageing-busab = i_knb1-busab. i_ageing-gsber = i_splinfo-gsber. i_ageing-spl_no = i_splinfo-spl_no. i_ageing-gtext = lv_gtext. i_ageing-prctr = i_splinfo-prctr. i_ageing-ltext = lv_ltext. i_ageing-doc_no = i_data-doc_no. i_ageing-fisc_year = i_data-fisc_year. i_ageing-item_num = i_data-item_num. i_ageing-pstng_date = i_data-pstng_date. i_ageing-doc_date = i_data-doc_date. i_ageing-usnam = ibkpf-usnam. i_ageing-ppnam = ibkpf-ppnam. i_ageing-cpudt = ibkpf-cpudt. i_ageing-cputm = ibkpf-cputm. i_ageing-doc_type = i_data-doc_type. i_ageing-currency = i_data-currency. i_ageing-bline_date = i_data-bline_date. i_ageing-adate = p_date. i_ageing-lv_dudat = lv_dudat. i_ageing-pmnttrms = i_data-pmnttrms. i_ageing-zlspr = i_data-pmnt_block. i_ageing-bill_doc = i_data-bill_doc. i_ageing-ref_doc_no = i_data-ref_doc_no. i_ageing-alloc_nmbr = i_data-alloc_nmbr. i_ageing-lv_sgtxt = i_data-item_text. i_ageing-inv_ref = i_data-inv_ref. i_ageing-inv_year = i_data-inv_year. i_ageing-inv_item = i_data-inv_item. i_ageing-sp_gl_ind = i_data-sp_gl_ind. i_ageing-lc_amount = lv_amtlc. IF p_dc = 'X'. i_ageing-lc_fixamt = lv_amtlcfix. ELSE. i_ageing-lc_fixamt = lv_amtdcfix. ENDIF. i_ageing-days = lv_days. i_ageing-intrate = lv_intrate. i_ageing-int = i_ageing-lc_amount * lv_intrate / 365. IF p_ch = ' '. IF lv_days LT p_0. "AND lv_amtlc GE 0. i_ageing-lv_amt = lv_amtlc. ENDIF. IF lv_days GT p_0 AND lv_days LE p_a AND p_a IS NOT INITIAL. i_ageing-lv_amt1 = lv_amtlc. ENDIF. IF lv_days GT p_a AND lv_days LE p_b AND p_b IS NOT INITIAL. i_ageing-lv_amt2 = lv_amtlc. ENDIF. IF lv_days GT p_b AND lv_days LE p_c AND p_c IS NOT INITIAL. i_ageing-lv_amt3 = lv_amtlc. ENDIF. IF lv_days GT p_c AND lv_days LE p_d AND p_d IS NOT INITIAL. i_ageing-lv_amt4 = lv_amtlc. ENDIF. IF lv_days GT p_d AND lv_days LE p_e AND p_e IS NOT INITIAL . i_ageing-lv_amt5 = lv_amtlc. ENDIF. IF lv_days GT p_e AND lv_days LE p_f AND p_f IS NOT INITIAL. i_ageing-lv_amt6 = lv_amtlc. ENDIF. IF lv_days GT p_f AND p_f IS NOT INITIAL. i_ageing-lv_amt7 = lv_amtlc. ENDIF. IF lv_days GT p_f AND p_f IS INITIAL. i_ageing-lv_amt7 = lv_amtlc. ENDIF. ENDIF. IF p_ch = 'X'. IF lv_days LT p_0 AND i_data-sp_gl_ind EQ ' '. i_ageing-lv_amt = lv_amtlc. ENDIF. IF lv_days GT p_0 AND lv_days LE p_a AND p_a IS NOT INITIAL AND i_data-sp_gl_ind EQ ' '. i_ageing-lv_amt1 = lv_amtlc. ENDIF. IF lv_days GT p_a AND lv_days LE p_b AND p_b IS NOT INITIAL AND i_data-sp_gl_ind EQ ' '. i_ageing-lv_amt2 = lv_amtlc. ENDIF. IF lv_days GT p_b AND lv_days LE p_c AND p_c IS NOT INITIAL AND i_data-sp_gl_ind EQ ' '. i_ageing-lv_amt3 = lv_amtlc. ENDIF. IF lv_days GT p_c AND lv_days LE p_d AND p_d IS NOT INITIAL AND i_data-sp_gl_ind EQ ' '. i_ageing-lv_amt4 = lv_amtlc. ENDIF. IF lv_days GT p_d AND lv_days LE p_e AND p_e IS NOT INITIAL AND i_data-sp_gl_ind EQ ' '. i_ageing-lv_amt5 = lv_amtlc. ENDIF. IF lv_days GT p_e AND lv_days LE p_f AND p_f IS NOT INITIAL AND i_data-sp_gl_ind EQ ' '. i_ageing-lv_amt6 = lv_amtlc. ENDIF. IF lv_days GT p_f AND p_f IS NOT INITIAL AND i_data-sp_gl_ind EQ ' '. i_ageing-lv_amt7 = lv_amtlc. ENDIF. IF lv_days GT p_f AND p_f IS INITIAL AND i_data-sp_gl_ind EQ ' '. i_ageing-lv_amt7 = lv_amtlc. ENDIF. IF i_data-sp_gl_ind NE ' '. i_ageing-lv_amt8 = lv_amtlc. ENDIF. ENDIF. IF p_reval = 'X'. PERFORM forex_reval. ENDIF. IF i_ageing-prctr IN s_prctr APPEND i_ageing. ENDIF. CLEAR i_ageing. CLEAR: lv_amtlc, lv_amtlcfix, lv_amtdcfix. ENDFORM. " DATA_ENTRY \*&---------------------------------------------------------------------\* \*& Form FIELDCATALOG \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* --> p1 text \* <-\- p2 text \*----------------------------------------------------------------------\* FORM fieldcatalog . ls_fact-fieldname = 'BUKRS'. ls_fact-seltext_m = 'Company Code'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'KUNNR'. ls_fact-seltext_m = 'Customer Code'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'NAME1'. ls_fact-seltext_m = 'Customer Name'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'ORT01'. ls_fact-seltext_m = 'Customer City'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'KONZS'. ls_fact-seltext_m = 'Group Key'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'PRCTR'. ls_fact-seltext_m = 'Profit Center'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LTEXT'. ls_fact-seltext_m = 'PC Description'. APPEND ls_fact TO fcat. CLEAR ls_fact. IF p_accsum <> 'X'. ls_fact-fieldname = 'INV_REF'. ls_fact-seltext_m = 'Invoice Reference'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'INV_YEAR'. ls_fact-seltext_m = 'Invoice Ref Year'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'INV_ITEM'. ls_fact-seltext_m = 'Invoice Ref Item'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'BILL_DOC'. ls_fact-seltext_m = 'Billing Doc-Internal'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'ALLOC_NMBR'. ls_fact-seltext_m = 'Billing Doc-External'. APPEND ls_fact TO fcat. CLEAR ls_fact. ENDIF. IF p_dc = 'X'. ls_fact-fieldname = 'LC_FIXAMT'. ls_fact-seltext_m = 'Amt in Local Curr'. ls_fact-emphasize = 'C400'. ls_fact-do_sum = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ELSE. ls_fact-fieldname = 'LC_FIXAMT'. ls_fact-seltext_m = 'Amt in Doc Curr'. ls_fact-emphasize = 'C400'. APPEND ls_fact TO fcat. CLEAR ls_fact. ENDIF. ls_fact-fieldname = 'CURRENCY'. ls_fact-seltext_m = 'Currency'. ls_fact-emphasize = 'C400'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LC_AMOUNT'. ls_fact-seltext_m = 'Amount'. ls_fact-emphasize = 'C400'. IF p_lc = 'X'. ls_fact-do_sum = 'X'. ENDIF. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LV_AMT'. CONCATENATE 'Less Than' p_0 INTO gv_days. ls_fact-seltext_m = gv_days. ls_fact-emphasize = 'C500'. IF p_lc = 'X'. ls_fact-do_sum = 'X'. ENDIF. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LV_AMT1'. PERFORM days_concatenation USING p_0 p_a. ls_fact-seltext_m = gv_days. ls_fact-emphasize = 'C500'. IF p_lc = 'X'. ls_fact-do_sum = 'X'. ENDIF. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LV_AMT2'. PERFORM days_concatenation USING p_a p_b. ls_fact-seltext_m = gv_days. ls_fact-emphasize = 'C500'. IF p_lc = 'X'. ls_fact-do_sum = 'X'. ENDIF. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LV_AMT3'. PERFORM days_concatenation USING p_b p_c. ls_fact-seltext_m = gv_days. ls_fact-emphasize = 'C500'. IF p_lc = 'X'. ls_fact-do_sum = 'X'. ENDIF. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LV_AMT4'. PERFORM days_concatenation USING p_c p_d. ls_fact-seltext_m = gv_days. ls_fact-emphasize = 'C500'. IF p_lc = 'X'. ls_fact-do_sum = 'X'. ENDIF. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LV_AMT5'. PERFORM days_concatenation USING p_d p_e. ls_fact-seltext_m = gv_days. ls_fact-emphasize = 'C500'. IF p_lc = 'X'. ls_fact-do_sum = 'X'. ENDIF. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LV_AMT6'. PERFORM days_concatenation USING p_e p_f. ls_fact-seltext_m = gv_days. ls_fact-emphasize = 'C500'. IF p_lc = 'X'. ls_fact-do_sum = 'X'. ENDIF. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LV_AMT7'. CONCATENATE 'Greater Than' p_f INTO gv_days. ls_fact-seltext_m = gv_days. ls_fact-emphasize = 'C500'. IF p_lc = 'X'. ls_fact-do_sum = 'X'. ENDIF. APPEND ls_fact TO fcat. CLEAR ls_fact. IF p_ch = 'X'. ls_fact-fieldname = 'LV_AMT8'. ls_fact-seltext_m = 'Special GL Amount'. ls_fact-emphasize = 'C600'. IF p_lc = 'X'. ls_fact-do_sum = 'X'. ENDIF. APPEND ls_fact TO fcat. CLEAR ls_fact. ENDIF. IF p_accsum <> 'X'. ls_fact-fieldname = 'PSTNG_DATE'. ls_fact-seltext_m = 'Posting Date'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'DOC_DATE'. ls_fact-seltext_m = 'Document Date'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'DOC_TYPE'. ls_fact-seltext_m = 'Document Type'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'ADATE'. ls_fact-seltext_m = 'Analysis Date'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'BLINE_DATE'. ls_fact-seltext_m = 'Baseline Date'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'PMNTTRMS'. ls_fact-seltext_m = 'Payment Terms'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LV_DUDAT'. ls_fact-seltext_m = 'Due Date'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'DAYS'. ls_fact-seltext_m = 'Overdue Days'. APPEND ls_fact TO fcat. CLEAR ls_fact. ENDIF. IF p_reval = 'X'. IF p_accsum <> 'X'. ls_fact-fieldname = 'LV_EXRATE'. ls_fact-seltext_m = 'Revaluation Ex. Rate'. ls_fact-emphasize = 'C700'. APPEND ls_fact TO fcat. CLEAR ls_fact. ENDIF. ls_fact-fieldname = 'LV_REVAL'. ls_fact-seltext_m = 'Revaluated LC Amount'. ls_fact-emphasize = 'C700'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LV_EXDIF'. ls_fact-seltext_m = 'Revaluation Difference'. ls_fact-emphasize = 'C700'. APPEND ls_fact TO fcat. CLEAR ls_fact. ENDIF. ls_fact-fieldname = 'INT'. ls_fact-seltext_m = 'Overdue Interest'. ls_fact-emphasize = 'C100'. APPEND ls_fact TO fcat. CLEAR ls_fact. IF p_accsum <> 'X'. ls_fact-fieldname = 'INTRATE'. ls_fact-seltext_m = 'Int Rate p.a'. ls_fact-emphasize = 'C100'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'SP_GL_IND'. ls_fact-seltext_m = 'Special GL Indicator'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'LV_SGTXT'. ls_fact-seltext_m = 'Line Item Text'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'DOC_NO'. ls_fact-seltext_m = 'Accounting Doccument Number'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'FISC_YEAR'. ls_fact-seltext_m = 'Document Year'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'ITEM_NUM'. ls_fact-seltext_m = 'Line Item'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'ZLSPR'. ls_fact-seltext_m = 'Payment Block'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'USNAM'. ls_fact-seltext_m = 'User ID'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'PPNAM'. ls_fact-seltext_m = 'Parking User ID'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'CPUDT'. ls_fact-seltext_m = 'Entry Date'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ls_fact-fieldname = 'CPUTM'. ls_fact-seltext_m = 'Entry Time'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. CLEAR ls_fact. ENDIF. ls_fact-fieldname = 'REGIO'. ls_fact-seltext_m = 'Customer State'. ls_fact-no_out = 'X'. APPEND ls_fact TO fcat. wa_sort-spos = '02'. wa_sort-fieldname = 'KUNNR'. wa_sort-up = 'X'. wa_sort-group = '*'. wa_sort-subtot = 'X'. APPEND wa_sort TO i_sort. ENDFORM. " FIELDCATALOG \*&---------------------------------------------------------------------\* \*& Form ALV_DISPLAY \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* --> p1 text \* <-\- p2 text \*----------------------------------------------------------------------\* FORM alv_display . SORT i_ageing BY bukrs kunnr currency prctr gsber zzbdiv zztdiv inv_year inv_ref inv_item sp_gl_ind. IF p_detail = 'X'. LOOP AT i_ageing INTO wa_ageing. PERFORM data_condense USING wa_ageing-kunnr. PERFORM data_condense USING wa_ageing-prctr. PERFORM data_condense USING wa_ageing-doc_no. PERFORM data_condense USING wa_ageing-bill_doc. APPEND wa_ageing TO i_age. CLEAR i_age. ENDLOOP. ENDIF. IF p_accsum = 'X'. LOOP AT i_ageing INTO wa_ageing. AT END OF ltext. SUM. PERFORM data_condense USING wa_ageing-kunnr. PERFORM data_condense USING wa_ageing-prctr. PERFORM data_condense USING wa_ageing-doc_no. PERFORM data_condense USING wa_ageing-bill_doc. APPEND wa_ageing TO i_age. CLEAR i_age. ENDAT. ENDLOOP. ENDIF. ls_adjust-colwidth_optimize = 'X'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_buffer_active = space i_default = 'X' i_save = 'A' i_callback_program = sy-repid it_fieldcat = fcat it_sort = i_sort is_layout = ls_adjust it_events = gt_events\[\] TABLES t_outtab = i_age. IF sy-subrc <> 0. \* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO \* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. ENDFORM. " ALV_DISPLAY \*&---------------------------------------------------------------------\* \*& Form SPLIT_OPERATION \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* --> p1 text \* <-\- p2 text \*----------------------------------------------------------------------\* FORM split_operation . SELECT * FROM fagl_splinfo INTO TABLE i_splinfo WHERE belnr = i_data-doc_no AND gjahr = i_data-fisc_year AND bukrs = i_data-comp_code AND buzei = i_data-item_num. CLEAR ibkpf. SELECT SINGLE * FROM bkpf INTO ibkpf WHERE bukrs = i_data-comp_code AND belnr = i_data-doc_no AND gjahr = i_data-fisc_year. DESCRIBE TABLE i_splinfo LINES lv_line. IF lv_line = 1. READ TABLE i_splinfo WITH KEY belnr = i_data-doc_no. IF p_lc = 'X'. lv_amtlc = i_data-lc_amount. ENDIF. IF p_dc = 'X'. lv_amtlc = i_data-amt_doccur . ENDIF. lv_amtlcfix = i_data-lc_amount. lv_amtdcfix = i_data-amt_doccur. PERFORM data_entry. ENDIF. IF lv_line GT 1. LOOP AT i_splinfo WHERE belnr = i_data-doc_no AND gjahr = i_data-fisc_year AND bukrs = i_data-comp_code AND buzei = i_data-item_num. lv_sum = lv_sum + i_splinfo-pswbt. ENDLOOP. LOOP AT i_splinfo WHERE belnr = i_data-doc_no AND gjahr = i_data-fisc_year AND bukrs = i_data-comp_code AND buzei = i_data-item_num. CLEAR: lv_amtlc, lv_amtdc. IF p_lc = 'X'. lv_amtlc = ( i_data-lc_amount * i_splinfo-pswbt ) / lv_sum. ENDIF. IF p_dc = 'X'. lv_amtlc = ( i_data-amt_doccur * i_splinfo-pswbt ) / lv_sum. ENDIF. lv_amtlcfix = ( i_data-lc_amount * i_splinfo-pswbt ) / lv_sum. lv_amtdcfix = ( i_data-amt_doccur * i_splinfo-pswbt ) / lv_sum. PERFORM data_entry. ENDLOOP. CLEAR lv_sum. ENDIF. ENDFORM. " SPLIT_OPERATION \*&---------------------------------------------------------------------\* \*& Form DATE_CALCULATION \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* --> p1 text \* <-\- p2 text \*----------------------------------------------------------------------\* FORM date_calculation . IF p_pdate = 'X'. lv_dudat = lv_invref_docdate. ENDIF. IF p_ddate = 'X'. IF i_data-bline_date IS NOT INITIAL. i_date-shkzg = i_data-db_cr_ind. i_date-koart = 'D'. i_date-zfbdt = i_data-bline_date. i_date-zbd1t = i_data-dsct_days1. i_date-zbd2t = i_data-dsct_days2. i_date-zbd3t = i_data-netterms. i_date-rebzg = i_data-inv_ref. APPEND i_date. ELSE. i_date-shkzg = i_data-db_cr_ind. i_date-koart = 'D'. i_date-zfbdt = i_data-pstng_date. i_date-zbd1t = i_data-dsct_days1. i_date-zbd2t = i_data-dsct_days2. i_date-zbd3t = i_data-netterms. i_date-rebzg = i_data-inv_ref. APPEND i_date. ENDIF. CALL FUNCTION 'DETERMINE_DUE_DATE' EXPORTING i_faede = i_date IMPORTING e_faede = i_date. lv_dudat = i_date-netdt. ENDIF. lv_ovdat = p_date. CALL FUNCTION 'HR_SGPBS_YRS_MTHS_DAYS' EXPORTING beg_da = lv_dudat end_da = lv_ovdat IMPORTING no_cal_day = lv_day. lv_days = lv_day. ENDFORM. " DATE_CALCULATION \*&---------------------------------------------------------------------\* \*& Form DAYS_CONCATENATION \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* -->P_P_0 text \* -->P_P_A text \*----------------------------------------------------------------------\* FORM days_concatenation USING p_p_0 p_p_a. IF p_p_0 <> 0. p_p_0 = p_p_0 + 1. ENDIF. CONCATENATE p_p_0 '-' p_p_a INTO gv_days. ENDFORM. " DAYS_CONCATENATION \*&---------------------------------------------------------------------\* \*& Form CHECKING \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* --> p1 text \* <-\- p2 text \*----------------------------------------------------------------------\* FORM checking . SELECT * FROM t001 INTO TABLE it_t001 WHERE bukrs IN s_bukrs. LOOP AT it_t001. AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' ID 'BUKRS' FIELD it_t001-bukrs ID 'ACTVT' FIELD '03'. IF sy-subrc <> 0. MESSAGE 'You do not have display authorisation for this company code' TYPE 'E' . ENDIF. ENDLOOP. IF p_a LE p_0 AND p_a IS NOT INITIAL. MESSAGE e001(38) WITH 'Please Check The Entry - Age Block 1-2'. ENDIF. IF p_b LE p_a AND p_b IS NOT INITIAL. MESSAGE e001(38) WITH 'Please Check The Entry - Age Block 2-3'. ENDIF. IF p_c LE p_b AND p_c IS NOT INITIAL. MESSAGE e001(38) WITH 'Please Check The Entry - Age Block 3-4'. ENDIF. IF p_d LE p_c AND p_d IS NOT INITIAL. MESSAGE e001(38) WITH 'Please Check The Entry - Age Block 4-5'. ENDIF. IF p_e LE p_d AND p_e IS NOT INITIAL. MESSAGE e001(38) WITH 'Please Check The Entry - Age Block 5-6'. ENDIF. IF p_f LE p_e AND p_f IS NOT INITIAL. MESSAGE e001(38) WITH 'Please Check The Entry - Age Block 6-7'. ENDIF. IF p_bdci = ' '. p_ch = ' '. ENDIF. IF p_dc = ' ' AND p_reval <> ' '. MESSAGE e001(38) WITH 'Revaluation only possible when' 'display is in Document Currency'. ENDIF. ENDFORM. " CHECKING \*&---------------------------------------------------------------------\* \*& Form E03_EVENTTAB_BUILD \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* -->P_GT_EVENTS\[\] text \*----------------------------------------------------------------------\* FORM e03_eventtab_build USING e03_lt_events TYPE slis_t_event. DATA: ls_event TYPE slis_alv_event. \* CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING i_list_type = 0 IMPORTING et_events = e03_lt_events. READ TABLE e03_lt_events WITH KEY name = slis_ev_top_of_page INTO ls_event. IF sy-subrc = 0. MOVE gc_formname_top_of_page TO ls_event-form. APPEND ls_event TO e03_lt_events. ENDIF. ls_event-name = 'USER_COMMAND'. ls_event-form = 'VAL'. APPEND ls_event TO gt_events. ENDFORM. " E03_EVENTTAB_BUILD \*&---------------------------------------------------------------------\* \*& Form E04_COMMENT_BUILD \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* -->P_GT_LIST_TOP_OF_PAGE\[\] text \*----------------------------------------------------------------------\* FORM e04_comment_build USING e04_lt_top_of_page TYPE slis_t_listheader. DATA: ls_line TYPE slis_listheader. CLEAR ls_line. ls_line-typ = 'H'. ls_line-info = 'Customer Ageing Analysis'. APPEND ls_line TO e04_lt_top_of_page. CLEAR ls_line. IF s_bukrs\[\] IS NOT INITIAL. ls_line-typ = 'S'. ls_line-key = ' '. LOOP AT s_bukrs. CONCATENATE 'Company Code: ' s_bukrs-low INTO lv_top SEPARATED BY space. IF s_bukrs-high IS NOT INITIAL. CONCATENATE lv_top ' to ' s_bukrs-high INTO lv_top SEPARATED BY space. ENDIF. IF s_bukrs-sign = 'E'. CONCATENATE lv_top ' (Excluded) ' INTO lv_top SEPARATED BY space. ENDIF. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. ENDLOOP. CLEAR lv_top. ENDIF. IF s_busab IS NOT INITIAL. ls_line-key = ' '. CONCATENATE 'Accounting Clerk: ' s_busab-low ' to ' s_busab-high INTO lv_top SEPARATED BY space. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. CLEAR lv_top. ENDIF. IF s_vbund IS NOT INITIAL. ls_line-key = ' '. CONCATENATE 'Trading Partner: ' s_vbund-low ' to ' s_vbund-high INTO lv_top SEPARATED BY space. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. CLEAR lv_top. ENDIF. IF s_kdgrp IS NOT INITIAL. ls_line-key = ' '. CONCATENATE 'Customer Group: ' s_kdgrp-low ' to ' s_kdgrp-high INTO lv_top SEPARATED BY space. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. CLEAR lv_top. ENDIF. IF s_vkorg IS NOT INITIAL. ls_line-key = ' '. CONCATENATE 'Sales Organisation: ' s_vkorg-low ' to ' s_vkorg-high INTO lv_top SEPARATED BY space. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. CLEAR lv_top. ENDIF. IF s_vtweg IS NOT INITIAL. ls_line-key = ' '. CONCATENATE 'Distribution Channel: ' s_vtweg-low ' to ' s_vtweg-high INTO lv_top SEPARATED BY space. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. CLEAR lv_top. ENDIF. IF s_spart IS NOT INITIAL. ls_line-key = ' '. CONCATENATE 'Division: ' s_spart-low ' to ' s_spart-high INTO lv_top SEPARATED BY space. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. CLEAR lv_top. ENDIF. IF s_bzirk IS NOT INITIAL. ls_line-key = ' '. CONCATENATE 'Sales District: ' s_bzirk-low ' to ' s_bzirk-high INTO lv_top SEPARATED BY space. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. CLEAR lv_top. ENDIF. IF s_kunnr IS NOT INITIAL. ls_line-key = ' '. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = s_kunnr-low IMPORTING output = s_kunnr-low. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = s_kunnr-high IMPORTING output = s_kunnr-high. CONCATENATE 'Customer: ' s_kunnr-low ' to ' s_kunnr-high INTO lv_top SEPARATED BY space. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. CLEAR lv_top. ENDIF. IF p_lc = 'X'. ls_line-key = ' '. lv_top = 'Display in Local Currency'. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. CLEAR lv_top. ENDIF. IF p_dc = 'X'. ls_line-key = ' '. lv_top = 'Display in Document Currency'. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. CLEAR lv_top. ENDIF. IF s_gsber IS NOT INITIAL. ls_line-key = ' '. CONCATENATE 'Business Area: ' s_gsber-low ' to ' s_gsber-high INTO lv_top SEPARATED BY space. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. CLEAR lv_top. ENDIF. IF s_prctr IS NOT INITIAL. ls_line-key = ' '. LOOP AT s_prctr. CONCATENATE 'Profit center: ' s_prctr-low INTO lv_top SEPARATED BY space. IF s_prctr-high IS NOT INITIAL. CONCATENATE lv_top ' to ' s_prctr-high INTO lv_top SEPARATED BY space. ENDIF. IF s_prctr-sign = 'E'. CONCATENATE lv_top ' (Excluded)' INTO lv_top SEPARATED BY space. ENDIF. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. ENDLOOP. CLEAR lv_top. ENDIF. IF s_zzbdiv IS NOT INITIAL. ls_line-key = ' '. LOOP AT s_zzbdiv. CONCATENATE 'Business Division: ' s_zzbdiv-low INTO lv_top SEPARATED BY space. IF s_zzbdiv-high IS NOT INITIAL. CONCATENATE lv_top ' to ' s_zzbdiv-high INTO lv_top SEPARATED BY space. ENDIF. IF s_zzbdiv-sign = 'E'. CONCATENATE lv_top ' (Excluded)' INTO lv_top SEPARATED BY space. ENDIF. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. ENDLOOP. CLEAR lv_top. ENDIF. IF s_zztdiv IS NOT INITIAL. ls_line-key = ' '. LOOP AT s_zztdiv. CONCATENATE 'Tax Division: ' s_zztdiv-low INTO lv_top SEPARATED BY space. IF s_zztdiv-high IS NOT INITIAL. CONCATENATE lv_top ' to ' s_zztdiv-high INTO lv_top SEPARATED BY space. ENDIF. IF s_zztdiv-sign = 'E'. CONCATENATE lv_top ' (Excluded)' INTO lv_top SEPARATED BY space. ENDIF. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. ENDLOOP. CLEAR lv_top. ENDIF. IF p_date IS NOT INITIAL. ls_line-typ = 'A'. ls_line-key = ' '. CALL FUNCTION 'CONVERSION_EXIT_IDATE_OUTPUT' EXPORTING input = p_date IMPORTING output = lv_txt. CONCATENATE 'Analysis Date: ' lv_txt INTO lv_top. ls_line-info = lv_top. APPEND ls_line TO e04_lt_top_of_page. ENDIF. CLEAR ls_line. ENDFORM. " E04_COMMENT_BUILD \*&---------------------------------------------------------------------\* \*& Form top_of_page \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* FORM top_of_page. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING \* i_logo = 'HTMLCNTL_TESTHTM2_SAPLOGO' \* i_logo = 'ENJOYSAP_LOGO' it_list_commentary = gt_list_top_of_page. ENDFORM. "TOP_OF_PAGE \*&---------------------------------------------------------------------\* \*& Form VAL \*&---------------------------------------------------------------------\* FORM val USING user_command LIKE sy-ucomm sel TYPE slis_selfield. DATA: lv_docno(10). IF p_detail = 'X'. READ TABLE i_age INDEX sel-tabindex. SET PARAMETER ID 'BLN' FIELD i_age-doc_no. SET PARAMETER ID 'BUK' FIELD i_age-bukrs. SET PARAMETER ID 'GJR' FIELD i_age-fisc_year. CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN. ENDIF. ENDFORM. "val \*&---------------------------------------------------------------------\* \*& Form DATA_CONDENSE \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* -->P_WA_AGEING_KUNNR text \*----------------------------------------------------------------------\* FORM data_condense USING p_data. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' EXPORTING input = p_data IMPORTING output = p_data. ENDFORM. " DATA_CONDENSE \*&---------------------------------------------------------------------\* \*& Form FOREX_REVAL \*&---------------------------------------------------------------------\* \* text \*----------------------------------------------------------------------\* \* --> p1 text \* <-\- p2 text \*----------------------------------------------------------------------\* FORM forex_reval . DATA: wa_rate TYPE bapi1093_0, wa_ret TYPE bapiret1. IF i_ageing-currency <> it_t001-waers. CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL' EXPORTING rate_type = 'C' from_curr = i_ageing-currency to_currncy = it_t001-waers date = p_date IMPORTING exch_rate = wa_rate return = wa_ret. IF wa_ret IS NOT INITIAL. MESSAGE e000(38) WITH wa_ret-message. ELSE. i_ageing-lv_reval = ( i_ageing-lc_amount / wa_rate-from_factor * wa_rate-to_factor ) * wa_rate-exch_rate. i_ageing-lv_exrate = wa_rate-exch_rate. ENDIF. ELSE. i_ageing-lv_reval = i_ageing-lc_amount. i_ageing-lv_exrate = '1'. ENDIF. i_ageing-lv_exdif = i_ageing-lv_reval - i_ageing-lc_fixamt. ENDFORM. " FOREX_REVAL