Skip to Content
author's profile photo
Former Member

payment performance

I want to calculate customer payment performance by profit center it is a report.

Caluation clue.

Performance is a measure of when the payment was made versus the due date calculated by the payment terms.

i want the logic to be included in the following code.

Add comment
10|10000 characters needed characters exceeded

  • Follow
  • Get RSS Feed

2 Answers

  • author's profile photo
    Former Member
    Sep 29, 2005 at 04:34 PM

    Have you tried subtracting the due date on the invoice from the payment date on the payment transaction That will give you the number of days before or after the payment is due. Is that what you mean by payment performance?

    Or subtract the due date from the clearing date on the invoice?

    Rob

    Message was edited by: Rob Burbank

    Add comment
    10|10000 characters needed characters exceeded

  • author's profile photo
    Former Member
    Sep 30, 2005 at 07:28 AM

    can u give coding for this payment performance calculations.My follwing code as follows we have to this calculations in this report.

    TABLES: BFOD_A, "FI subsequent BA/PC adjustment: Customer items

    BSID, "Open Items

    BSAD, "Cleared Items

    BKPF, "Docuemnt Header

    KNA1, "Customer Master

    CEPCT, "Texts for Profit Center Master Data

    CEPC, "Profit center master data table

    SKB1, "G/L account master

    VBFA, "Sales Document Flow

    VBAK. "Sales Document: Header Data

    CONTROLS: TABAGING TYPE TABLEVIEW USING SCREEN 9000.

    FIELD-SYMBOLS: <COLUMN>.

    ----


    • Internal tables followed by types

    ----


    TYPES: BEGIN OF T_TOTAL,

    WAERS LIKE COEP-TWAER,

    DAYS01 LIKE COEP-WTGBTR,

    DAYS02 LIKE COEP-WTGBTR,

    DAYS03 LIKE COEP-WTGBTR,

    DAYS04 LIKE COEP-WTGBTR,

    DAYS05 LIKE COEP-WTGBTR,

    TOTAL LIKE COEP-WTGBTR,

    END OF T_TOTAL.

    DATA: V_DISVARIANT TYPE DISVARIANT,

    REF_CUSTOM TYPE REF TO CL_GUI_CUSTOM_CONTAINER,

    REF_ALV_ZRPT TYPE REF TO CL_GUI_ALV_GRID.

    DATA: V_SAVE(1) TYPE C,

    V_DEFAULT(1) TYPE C,

    V_VARIANT TYPE DISVARIANT,

    V_SORT TYPE LVC_S_SORT,

    V_LAYOUT TYPE LVC_S_LAYO,

    V_SAVE_TABIX LIKE SY-TABIX,

    V_SAVE_TIME LIKE SY-UZEIT,

    V_ALV_FIELDCAT TYPE LVC_S_FCAT,

    V_SAVE_INDEX LIKE SY-TABIX,

    V_ROW TYPE LVC_S_ROW,

    V_ROWS TYPE LINE OF LVC_T_ROW.

    DATA: BEGIN OF V_HDR,

    CURKY(9) TYPE C,

    CURR(20) TYPE C,

    COL1(20) TYPE C,

    COL2(20) TYPE C,

    COL3(20) TYPE C,

    COL4(20) TYPE C,

    TOTAL(20) TYPE C,

    END OF V_HDR.

    DATA: BEGIN OF V_FIELD,

    NAME(15) TYPE C,

    VALUE(17) TYPE C,

    END OF V_FIELD.

    DATA: BEGIN OF I_BFOD_A OCCURS 0,

    PRCTR LIKE BFOD_A-PRCTR,

    KUNNR LIKE BFOD_A-KUNNR,

    BUKRS LIKE BFOD_A-BUKRS,

    GJAHR LIKE BFOD_A-GJAHR,

    BELNR LIKE BFOD_A-BELNR,

    BUZEI LIKE BFOD_A-BUZEI,

    AUGDT LIKE BFOD_A-AUGDT,

    HKONT LIKE BFOD_A-HKONT,

    BUDAT LIKE BFOD_A-BUDAT,

    SHKZG LIKE BFOD_A-SHKZG,

    DMBTR LIKE BFOD_A-DMBTR,

    DMBE2 LIKE BFOD_A-DMBE2,

    END OF I_BFOD_A.

    DATA: I_SET_VALUES LIKE SETVALUES OCCURS 0 WITH HEADER LINE,

    I_SORT TYPE LVC_T_SORT,

    I_ALV_FIELDCAT TYPE LVC_T_FCAT,

    I_PRCTR_COCD TYPE FCINPCA001 OCCURS 0 WITH HEADER LINE,

    I_BFODA_KUNNR LIKE I_BFOD_A OCCURS 0 WITH HEADER LINE,

    • Begin of changes for DEVK909110

    • I_REPORT TYPE ZFR0ARPR_S1 OCCURS 0 WITH HEADER LINE,

    I_REPORT TYPE ZPSS_ARBYPC OCCURS 0 WITH HEADER LINE,

    • End of changes for DEVK909110

    I_FAEDE LIKE FAEDE,

    I_TOTAL TYPE T_TOTAL OCCURS 0 WITH HEADER LINE.

    DATA: BEGIN OF I_BKPF OCCURS 0,

    BUKRS LIKE BKPF-BUKRS,

    BELNR LIKE BKPF-BELNR,

    GJAHR LIKE BKPF-GJAHR,

    BKTXT LIKE BKPF-BKTXT,

    XBLNR LIKE BKPF-XBLNR,

    HWAER LIKE BKPF-HWAER,

    HWAE2 LIKE BKPF-HWAE2,

    END OF I_BKPF.

    *... combine BSAD and BSID

    DATA: BEGIN OF I_BSYD OCCURS 0,

    KUNNR LIKE BSID-KUNNR,

    BUKRS LIKE BSID-BUKRS,

    GJAHR LIKE BSID-GJAHR,

    BELNR LIKE BSID-BELNR,

    BUZEI LIKE BSID-BUZEI,

    AUGDT LIKE BSID-AUGDT,

    BLDAT LIKE BSID-BLDAT,

    BUDAT LIKE BSID-BUDAT,

    HKONT LIKE BSID-HKONT,

    WAERS LIKE BSID-WAERS,

    ZFBDT LIKE BSID-ZFBDT,

    ZBD1T LIKE BSID-ZBD1T,

    ZBD2T LIKE BSID-ZBD2T,

    ZBD3T LIKE BSID-ZBD3T,

    XBLNR LIKE BSID-XBLNR,

    REBZG LIKE BSID-REBZG,

    SHKZG LIKE BSID-SHKZG,

    DMBTR LIKE BSID-DMBTR,

    WRBTR LIKE BSID-WRBTR,

    END OF I_BSYD.

    DATA: BEGIN OF I_CEPC OCCURS 0,

    PRCTR LIKE CEPC-PRCTR,

    KHINR LIKE CEPC-KHINR,

    END OF I_CEPC.

    DATA: BEGIN OF I_CEPCT OCCURS 0,

    PRCTR LIKE CEPCT-PRCTR,

    MCTXT LIKE CEPCT-MCTXT,

    END OF I_CEPCT.

    DATA: BEGIN OF I_PRCTR OCCURS 0,

    PRCTR LIKE BFOD_A-PRCTR,

    END OF I_PRCTR.

    DATA: BEGIN OF I_KNA1 OCCURS 0,

    KUNNR LIKE KNA1-KUNNR,

    NAME1 LIKE KNA1-NAME1,

    END OF I_KNA1.

    ----


    • Working Variables Declarations

    ----


    *... accumulators

    DATA: V_BFOD_TXNAMT LIKE BSID-WRBTR, "transaction currency amt

    V_FRCURR LIKE TCURR-FCURR, "local currency

    V_TOCURR LIKE TCURR-FCURR, "local currency

    V_LCURR LIKE T001-WAERS, "local currency

    V_CUSTTOTUSD LIKE BFOD_A-DMBE2, "customer total grp curr

    V_TOTAL LIKE BPPE-WTP03, "days total grp curr

    V_CURRENT LIKE BPPE-WTP03, "days current grp curr

    V_TOTAL_USD LIKE BPPE-WTP03, "days total grp curr

    V_TOTAL_ROW LIKE BPPE-WTP03. "total of local curr/row

    DATA: V_PRCTR LIKE CEPC-PRCTR, "profit center

    V_SUBRC LIKE SY-SUBRC,

    V_FLAG TYPE I,

    V_DPAST TYPE I, "past due days working

    V_GRAND TYPE C,

    V_DIFF_COLOR TYPE C,

    V_MSG(50) TYPE C,

    V_SAVE_PCFN(128) TYPE C,

    V_EXTENSION(4) TYPE C,

    V_PREV_PRCTR LIKE CEPC-PRCTR,

    V_POS LIKE SY-FDPOS,

    V_SAVE_BUKRS LIKE BFOD_A-BUKRS,

    V_SAVE_KHINR LIKE CEPC-KHINR,

    V_PERC TYPE P DECIMALS 10,

    V_ZBD1T LIKE BSID-ZBD1T,

    V_ZFBDT LIKE BSID-ZFBDT,

    V_GROUP_CLASS LIKE RGSBS-CLASS,

    V_GROUP_NAME LIKE RGSBS-SETNR,

    V_GROUP_TITLE LIKE RGSBS-TITLE,

    V_SETID LIKE SETHIER-SETID,

    V_FILETYPE LIKE RLGRAP-FILETYPE VALUE 'DAT',

    V_CNT LIKE SY-TABIX,

    V_PREV_BELNR LIKE BSID-BELNR,

    V_REPORT1 LIKE I_REPORT,

    V_REPORT LIKE I_REPORT,

    V_TABIX LIKE SY-TABIX.

    ----


    • Constants

    ----


    CONSTANTS:

    C_0H(2) TYPE C VALUE '0H',

    C_0106(4) TYPE C VALUE '0106',

    C_SPACE(11) TYPE C VALUE ' ',

    C_USD(3) TYPE C VALUE 'USD',

    C_KBRC LIKE CEPC-KOKRS VALUE 'KBRC',

    C_TXT(4) TYPE C VALUE '.txt',

    C_XLS(4) TYPE C VALUE '.xls',

    C_RTF(4) TYPE C VALUE '.rtf',

    C_PERIOD(1) TYPE C VALUE '.',

    C_TODATE LIKE CEPC-DATBI VALUE '99991231'.

    RANGES: R_KUNNR FOR KNA1-KUNNR. "Customer

    ----


    • Selection Screen Parameters and Select-options

    ----


    SELECTION-SCREEN SKIP 1.

    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

    PARAMETERS: P_KHINR LIKE CEPC-KHINR.

    SELECT-OPTIONS: S_PRCTR FOR CEPC-PRCTR,

    S_KUNNR FOR KNA1-KUNNR,

    S_BUKRS FOR BKPF-BUKRS,

    S_HKONT FOR SKB1-SAKNR.

    PARAMETERS: P_BUDAT LIKE BFOD_A-BUDAT OBLIGATORY.

    SELECTION-SCREEN ULINE.

    SELECT-OPTIONS: S_BELNR FOR BFOD_A-BELNR,

    S_AUART FOR VBAK-AUART,

    S_VTWEG FOR VBAK-VTWEG,

    S_VBTYP FOR VBFA-VBTYP_V.

    SELECTION-SCREEN ULINE.

    PARAMETERS: P_AGEDY TYPE ZZAGEMULT DEFAULT '30' OBLIGATORY.

    SELECTION-SCREEN END OF BLOCK B1.

    SELECTION-SCREEN SKIP.

    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.

    PARAMETERS: P_DSVAR LIKE DISVARIANT-VARIANT.

    SELECTION-SCREEN END OF BLOCK B2.

    ----


    • class lcl_event_receiver: local class to handle event DOUBLE_CLICK

    • Definition:

    ----


    CLASS LCL_EVENT_RECEIVER DEFINITION.

    PUBLIC SECTION.

    METHODS:

    MTH_PRINT_TOP_OF_PAGE

    FOR EVENT PRINT_TOP_OF_PAGE OF CL_GUI_ALV_GRID.

    METHODS:

    MTH_PRINT_TOP_OF_LIST

    FOR EVENT PRINT_TOP_OF_LIST OF CL_GUI_ALV_GRID.

    PRIVATE SECTION.

    ENDCLASS. "lcl_event_receiver DEFINITION

    ----


    • class lcl_event_receiver: local class to handle event DOUBLE_CLICK

    • Implementation:

    ----


    CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

    METHOD MTH_PRINT_TOP_OF_PAGE.

    CALL FUNCTION 'Z_CA_STD_HEADER'

    EXPORTING

    HEADING = SY-TITLE

    P_REPID = SY-CPROG

    LINE_WIDTH = SY-LINSZ.

    ENDMETHOD. "MTH_PRINT_TOP_OF_PAGE

    METHOD MTH_PRINT_TOP_OF_LIST.

    CALL FUNCTION 'Z_CA_STD_HEADER'

    EXPORTING

    HEADING = SY-TITLE

    P_REPID = SY-CPROG

    LINE_WIDTH = SY-LINSZ.

    CALL FUNCTION 'Z_CA_PRINT_SELECTION_OPTIONS'

    EXPORTING

    P_PGMN = SY-CPROG

    P_SKIP = 'X'

    P_NOTOP = 'X'.

    NEW-PAGE.

    ENDMETHOD. "MTH_PRINT_TOP_OF_LIST

    ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION

    DATA: REF_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.

    ----


    • Selection Screen Prompt values

    ----


    ----


    • At Selection Screen

    ----


    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_DSVAR.

    DATA: LS_DISPLAY_VARIANT TYPE DISVARIANT.

    • Get the display variant

    V_DISVARIANT-REPORT = SY-CPROG.

    V_DISVARIANT-VARIANT = P_DSVAR.

    CALL FUNCTION 'REUSE_ALV_VARIANT_F4'

    EXPORTING

    IS_VARIANT = V_DISVARIANT

    I_SAVE = 'A'

    IMPORTING

    ES_VARIANT = LS_DISPLAY_VARIANT

    EXCEPTIONS

    OTHERS = 3.

    • Load results to parameter

    IF SY-SUBRC = 0 AND NOT LS_DISPLAY_VARIANT IS INITIAL.

    P_DSVAR = LS_DISPLAY_VARIANT-VARIANT.

    ENDIF.

    *...performed when looking for values in fields

    • performs the drop down selection list

    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_KHINR. "Profit center grp

    PERFORM F_GET_S_KHINR.

    ----


    • Selection Screen validations

    ----


    AT SELECTION-SCREEN.

    IF P_KHINR IS INITIAL.

    IF S_PRCTR[] IS INITIAL.

    IF S_BUKRS[] IS INITIAL.

    MESSAGE E000 WITH TEXT-300 TEXT-302.

    ENDIF.

    ENDIF.

    ELSE.

    IF S_PRCTR[] IS INITIAL.

    PERFORM F_VALIDATE_KHINR.

    ELSE.

    *.. Error msg: Please enter either a Profit Center Group or a

    • profit center, but not both

    MESSAGE E000 WITH TEXT-300 TEXT-301.

    EXIT.

    ENDIF.

    ENDIF.

    IF NOT S_AUART[] IS INITIAL.

    MESSAGE E000 WITH TEXT-303.

    ENDIF.

    IF NOT S_VTWEG[] IS INITIAL.

    MESSAGE E000 WITH TEXT-304.

    ENDIF.

    ----


    • Event AT LINE-SELECTION

    ----


    AT LINE-SELECTION.

    CHECK SY-LSIND LE 1.

    CHECK NOT I_REPORT-BELNR IS INITIAL.

    SET PARAMETER ID 'BLN' FIELD I_REPORT-BELNR.

    SET PARAMETER ID 'BUK' FIELD I_REPORT-BUKRS.

    SET PARAMETER ID 'GJR' FIELD I_REPORT-GJAHR.

    CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.

    CLEAR: I_REPORT-BELNR, I_REPORT-BUKRS, I_REPORT-GJAHR.

    ----


    • INITIALIZATION

    ----


    INITIALIZATION.

    ----


    • START OF MAIN PROCESSING

    ----


    START-OF-SELECTION.

    • Check aging days multiplier

    IF P_AGEDY LE 0.

    MESSAGE S000 WITH 'Aging Days Multiplier must be greater than zero'.

    EXIT.

    ENDIF.

    • Populate the s_prctr from a profit center group

    IF NOT I_SET_VALUES[] IS INITIAL.

    PERFORM F_POPULATE_PRCTR_FROM_PRCTRGRP.

    ENDIF.

    • Build and validate prctr against cepc table

    IF NOT S_PRCTR[] IS INITIAL.

    PERFORM F_BUILD_I_CEPC_TABLE. "FILLS THE VALID PROFIT CTR TABLE

    ENDIF.

    • Get base selections

    PERFORM F_SELECT_DATA. "BUILD REF INTERNAL TABLES

    • Get additional fields and build reporting structure

    PERFORM F_BUILD_I_REPORT. "BUILDS INTERNAL REPORTING TABLE

    • Generate ALV report

    PERFORM F_WRITE_REPORT. "WRITES i_report AND RUNS CALCS

    END-OF-SELECTION.

    FREE: I_BFOD_A, I_KNA1, I_CEPC, I_CEPCT, I_REPORT.

    ----


    • Form F_DIS_MSG

    ----


    FORM F_DIS_MSG USING VALUE(P_PERCENTAGE) VALUE(P_TEXT).

    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

    EXPORTING

    PERCENTAGE = P_PERCENTAGE

    TEXT = P_TEXT

    EXCEPTIONS

    OTHERS = 1.

    ENDFORM. " F_DIS_MSG

    ----


    • Form F_GET_S_KHINR

    • Get prompt values for Profit Center Group

    ----


    FORM F_GET_S_KHINR.

    PERFORM F_DIS_MSG USING 100 'Get prompt values for Profit Ctr Group.'.

    COMMIT WORK.

    CALL FUNCTION 'K_GROUP_SELECT'

    EXPORTING

    BUTTONS = 'X'

    CLASS = '0H '

    CRUSER = '*'

    FIELD_NAME = 'RPRCTR'

    SEARCHFLD = 'KBRC'

    SEARCHFLD_INPUT = ' '

    SEARCHFLD_REQUIRED = 'X'

    SET = '*'

    START_COLUMN = 10

    START_ROW = 5

    TABLE = 'GLPCT'

    TYPELIST = 'BS'

    UPDUSER = '*'

    IMPORTING

    CLASS_NAME = V_GROUP_CLASS

    SET_NAME = V_GROUP_NAME

    SET_TITLE = V_GROUP_TITLE

    EXCEPTIONS

    NO_SET_PICKED = 1

    OTHERS = 2.

    IF SY-SUBRC = 0.

    P_KHINR = V_GROUP_NAME.

    ENDIF.

    ENDFORM. " F_GET_S_KHINR

    ----


    • FORM F_VALIDATE_KHINR *

    ----


    FORM F_VALIDATE_KHINR.

    PERFORM F_DIS_MSG USING 100 'Validate Profit Center group.'.

    COMMIT WORK.

    CLEAR I_SET_VALUES.

    REFRESH I_SET_VALUES.

    CONCATENATE C_0106 C_KBRC P_KHINR INTO V_SETID.

    CONDENSE V_SETID.

    CALL FUNCTION 'G_SET_TREE_IMPORT'

    EXPORTING

    CLIENT = SY-MANDT

    FIELDNAME = 'RPRCTR'

    LANGU = SY-LANGU

    SETID = V_SETID

    TABNAME = 'GLPCT'

    NO_TABLE_BUFFERING = 'X'

    TABLES

    SET_VALUES = I_SET_VALUES

    EXCEPTIONS

    SET_NOT_FOUND = 1

    ILLEGAL_FIELD_REPLACEMENT = 2

    ILLEGAL_TABLE_REPLACEMENT = 3

    OTHERS = 4.

    IF SY-SUBRC NE 0.

    • E: Unable to find Profit Center Group & - please modify selection

    MESSAGE E000 WITH TEXT-002 P_KHINR.

    ENDIF.

    IF I_SET_VALUES[] IS INITIAL.

    MESSAGE E000 WITH P_KHINR TEXT-039.

    ENDIF.

    ENDFORM. " F_VALIDATE_KHINR

    ----


    • Form F_SELECT_DATA

    ----


    FORM F_SELECT_DATA.

    PERFORM F_DIS_MSG USING 100 'Retrieve info from SAP tables.'.

    COMMIT WORK.

    • Build the BFOD_A internal table based on user selections

    • f i_cepc table is initial, it means derive all prctr under a co cd

    IF S_PRCTR[] IS INITIAL.

    PERFORM F_RETRIEVE_BFODA_BY_COMPANY.

    ELSE.

    PERFORM F_RETRIEVE_BFODA_BY_PRCTR.

    ENDIF.

    IF I_BFOD_A[] IS INITIAL.

    *... No records fit selection criteria.

    MESSAGE E000 WITH TEXT-H20.

    ENDIF.

    • Get the text for profit center

    SELECT SPRAS PRCTR DATBI KOKRS MCTXT FROM CEPCT

    INTO CORRESPONDING FIELDS OF TABLE I_CEPCT

    FOR ALL ENTRIES IN I_CEPC

    WHERE SPRAS = SY-LANGU

    AND PRCTR = I_CEPC-PRCTR.

    • Build an internal table of unique bfod keys for bsid and bsad

    I_BFODA_KUNNR[] = I_BFOD_A[].

    SORT I_BFODA_KUNNR BY KUNNR BUKRS GJAHR BELNR BUZEI.

    DELETE ADJACENT DUPLICATES FROM I_BFODA_KUNNR COMPARING

    KUNNR BUKRS GJAHR BELNR BUZEI.

    • Build BSID Internal table

    SELECT MANDT BUKRS KUNNR UMSKS UMSKZ AUGDT AUGBL ZUONR GJAHR BELNR

    BUZEI BUDAT HKONT BLDAT WAERS REBZG XBLNR SHKZG DMBTR

    WRBTR ZFBDT ZBD1T ZBD2T ZBD3T

    FROM BSID INTO CORRESPONDING FIELDS OF TABLE I_BSYD

    FOR ALL ENTRIES IN I_BFODA_KUNNR

    WHERE KUNNR EQ I_BFODA_KUNNR-KUNNR

    AND BUKRS EQ I_BFODA_KUNNR-BUKRS

    AND GJAHR EQ I_BFODA_KUNNR-GJAHR

    AND BELNR EQ I_BFODA_KUNNR-BELNR

    AND BUZEI EQ I_BFODA_KUNNR-BUZEI.

    • Build BSAD internal table

    SELECT MANDT BUKRS KUNNR UMSKS UMSKZ AUGDT AUGBL ZUONR GJAHR BELNR

    BUZEI HKONT BUDAT BLDAT WAERS REBZG XBLNR SHKZG DMBTR WRBTR ZFBDT

    ZBD1T ZBD2T ZBD3T

    FROM BSAD APPENDING CORRESPONDING FIELDS OF TABLE I_BSYD

    FOR ALL ENTRIES IN I_BFODA_KUNNR

    WHERE KUNNR EQ I_BFODA_KUNNR-KUNNR

    AND BUKRS EQ I_BFODA_KUNNR-BUKRS

    AND AUGDT GT P_BUDAT

    AND GJAHR EQ I_BFODA_KUNNR-GJAHR

    AND BELNR EQ I_BFODA_KUNNR-BELNR

    AND BUZEI EQ I_BFODA_KUNNR-BUZEI.

    IF NOT I_BSYD[] IS INITIAL.

    • Remove records based on selection criteria

    DELETE I_BSYD WHERE

    NOT BUDAT LE P_BUDAT OR

    NOT HKONT IN S_HKONT.

    ENDIF.

    • Acquire document headers

    SELECT BUKRS BELNR GJAHR BKTXT XBLNR HWAER HWAE2 FROM BKPF

    INTO TABLE I_BKPF

    FOR ALL ENTRIES IN I_BSYD

    WHERE BUKRS EQ I_BSYD-BUKRS

    AND BELNR EQ I_BSYD-BELNR

    AND GJAHR EQ I_BSYD-GJAHR.

    • Sort document lines

    SORT I_BSYD BY KUNNR BUKRS GJAHR BELNR BUZEI ASCENDING.

    SORT I_BKPF BY BUKRS BELNR GJAHR ASCENDING.

    • Create table of unique customers

    SORT I_BFODA_KUNNR BY KUNNR.

    DELETE ADJACENT DUPLICATES FROM I_BFODA_KUNNR COMPARING KUNNR.

    • Build customer table

    SELECT KUNNR NAME1 FROM KNA1

    INTO TABLE I_KNA1

    FOR ALL ENTRIES IN I_BFODA_KUNNR

    WHERE KUNNR EQ I_BFODA_KUNNR-KUNNR.

    • Free memory space

    FREE I_BFODA_KUNNR.

    ENDFORM. " F_SELECT_DATA

    ----


    • Form F_BUILD_I_CEPC_TABLE

    ----


    • build the i_cepc internal table that would populate the

    • valid profit centers to processed.

    ----


    FORM F_BUILD_I_CEPC_TABLE.

    PERFORM F_DIS_MSG USING 100 'Build the Profit Center Ref Table.'.

    COMMIT WORK.

    • Acquire CEPC table

    IF I_PRCTR[] IS INITIAL.

    SORT S_PRCTR.

    SELECT PRCTR KHINR

    FROM CEPC

    INTO TABLE I_CEPC

    WHERE PRCTR IN S_PRCTR.

    • Sort table

    SORT I_CEPC BY PRCTR KHINR.

    • Remove duplicate values

    DELETE ADJACENT DUPLICATES FROM I_CEPC COMPARING PRCTR.

    I_PRCTR[] = I_CEPC[].

    • Sort table

    SORT I_PRCTR BY PRCTR.

    ELSE.

    • Sort table

    SORT I_PRCTR BY PRCTR.

    • Acquire CEPC table

    SELECT PRCTR KHINR

    FROM CEPC

    INTO TABLE I_CEPC

    FOR ALL ENTRIES IN I_PRCTR

    WHERE PRCTR = I_PRCTR-PRCTR.

    • SOrt table

    SORT I_CEPC BY PRCTR KHINR.

    ENDIF.

    IF I_CEPC[] IS INITIAL.

    MESSAGE E000 WITH TEXT-006.

    ENDIF.

    ENDFORM. " F_BUILD_i_CEPC_TABLE

    ----


    • Form F_BUILD_I_REPORT

    ----


    • Build the A/R report internal table from bfod_a, bsid and bsad

    • It is necessary to go to BSAD/BSID to get the document currency

    • not present in bfod_a.

    ----


    FORM F_BUILD_I_REPORT.

    PERFORM F_DIS_MSG USING 100 'Build the report information.'.

    COMMIT WORK.

    • Sort all internal tables, this is essential for later processing

    SORT I_BFOD_A BY KUNNR BUKRS GJAHR BELNR BUZEI .

    SORT I_BSYD BY KUNNR BUKRS GJAHR BELNR BUZEI.

    SORT I_CEPC BY PRCTR KHINR.

    LOOP AT I_BFOD_A.

    • New customer

    AT NEW KUNNR.

    READ TABLE I_KNA1 WITH KEY KUNNR = I_BFOD_A-KUNNR BINARY SEARCH.

    IF SY-SUBRC EQ 0.

    MOVE I_KNA1-NAME1 TO I_REPORT-NAME1.

    ENDIF.

    ENDAT.

    • Acquire header fields

    READ TABLE I_BKPF WITH KEY BUKRS = I_BFOD_A-BUKRS

    BELNR = I_BFOD_A-BELNR

    GJAHR = I_BFOD_A-GJAHR BINARY SEARCH.

    IF SY-SUBRC NE 0.

    CLEAR I_BKPF.

    ENDIF.

    • Build base record

    PERFORM F_MOVE_BASE_TO_REPORT.

    • Load profit center data

    IF P_KHINR IS INITIAL.

    IF V_PREV_PRCTR = I_BFOD_A-PRCTR.

    I_REPORT-KHINR = I_CEPC-KHINR.

    ELSE.

    READ TABLE I_CEPC WITH KEY PRCTR = I_BFOD_A-PRCTR BINARY SEARCH.

    IF SY-SUBRC = 0.

    I_REPORT-KHINR = I_CEPC-KHINR.

    ELSE.

    CLEAR I_REPORT-KHINR.

    ENDIF.

    V_PREV_PRCTR = I_BFOD_A-PRCTR.

    ENDIF.

    ELSE.

    I_REPORT-KHINR = P_KHINR.

    ENDIF.

    • Reverse signs

    IF I_REPORT-SHKZG = 'H'.

    I_REPORT-DMBTR = I_REPORT-DMBTR * -1.

    I_REPORT-DMBE2 = I_REPORT-DMBE2 * -1.

    ENDIF.

    • Additional details

    READ TABLE I_BSYD WITH KEY KUNNR = I_BFOD_A-KUNNR

    BUKRS = I_BFOD_A-BUKRS

    GJAHR = I_BFOD_A-GJAHR

    BELNR = I_BFOD_A-BELNR

    BUZEI = I_BFOD_A-BUZEI BINARY SEARCH.

    IF SY-SUBRC = 0.

    PERFORM F_FORMAT_I_REPORT_FR_BSYD.

    APPEND I_REPORT.

    ENDIF.

    ENDLOOP.

    ENDFORM. " F_BUILD_I_REPORT

    ----


    • Form F_FORMAT_I_REPORT_FR_BSYD

    ----


    • Retrieve all the information needed for reporting from BSID.

    • If a document has a referencing invoice (REBZG), the payment terms

    • and the baseline date to be used will come from the referencing

    • invoice.

    ----


    FORM F_FORMAT_I_REPORT_FR_BSYD.

    *=> get the document currency amount from bsid

    I_REPORT-BLDAT = I_BSYD-BLDAT.

    I_REPORT-WAERS = I_BSYD-WAERS.

    PERFORM F_CONVERT_CURRENCY_FR_2_AMTS USING I_REPORT-HWAER I_BSYD-WAERS

    I_BSYD-DMBTR I_BSYD-WRBTR

    I_BFOD_A-DMBTR

    CHANGING V_BFOD_TXNAMT.

    I_REPORT-WRBTR = V_BFOD_TXNAMT.

    IF I_BSYD-SHKZG = 'H'.

    I_REPORT-WRBTR = I_REPORT-WRBTR * -1.

    ENDIF.

    V_ZBD1T = I_BSYD-ZBD1T.

    V_ZFBDT = I_BSYD-ZFBDT.

    *=> determine reference document (referencing invoice)

    CLEAR I_REPORT-SORT.

    CASE I_BSYD-REBZG.

    WHEN ' '.

    I_REPORT-SORT = I_BFOD_A-BELNR.

    WHEN 'V'.

    I_REPORT-SORT = I_BSYD-XBLNR.

    WHEN OTHERS.

    I_REPORT-SORT = I_BSYD-REBZG.

    PERFORM F_GET_DATEPAYTERM_FR_ORIGDOC.

    ENDCASE.

    CLEAR I_FAEDE.

    I_FAEDE-SHKZG = I_BSYD-SHKZG.

    I_FAEDE-KOART = 'D'.

    I_FAEDE-ZFBDT = I_BSYD-ZFBDT.

    I_FAEDE-ZBD1T = I_BSYD-ZBD1T.

    I_FAEDE-ZBD2T = I_BSYD-ZBD2T.

    I_FAEDE-ZBD3T = I_BSYD-ZBD3T.

    I_FAEDE-REBZG = I_BSYD-REBZG.

    I_FAEDE-BLDAT = I_BSYD-BLDAT.

    CALL FUNCTION 'DETERMINE_DUE_DATE'

    EXPORTING

    I_FAEDE = I_FAEDE

    IMPORTING

    E_FAEDE = I_FAEDE

    EXCEPTIONS

    ACCOUNT_TYPE_NOT_SUPPORTED = 1

    OTHERS = 2.

    V_DPAST = P_BUDAT - I_FAEDE-NETDT.

    IF V_DPAST < 0.

    I_REPORT-DPAST = 0.

    ELSE.

    MOVE V_DPAST TO I_REPORT-DPAST.

    ENDIF.

    I_REPORT-ZBD1T = V_ZBD1T.

    I_REPORT-NETDT = I_FAEDE-NETDT.

    • Update totals

    PERFORM F_BUILD_TOTALS.

    ENDFORM. " F_FORMAT_I_REPORT_FR_BSYD

    ----


    • Form F_GET_DATEPAYTERM_FR_ORIGDOC

    ----


    FORM F_GET_DATEPAYTERM_FR_ORIGDOC.

    • In order to go back to the original document's payment terms and

    • baseline date, we neeed to resort bsid/bsad to a different sort

    • order b-coz only these 3 fields logically matched the orig doc

    SORT I_BSYD BY KUNNR BUKRS BELNR.

    READ TABLE I_BSYD WITH KEY KUNNR = I_BFOD_A-KUNNR

    BUKRS = I_BFOD_A-BUKRS

    BELNR = I_REPORT-SORT BINARY SEARCH.

    IF SY-SUBRC = 0.

    V_ZBD1T = I_BSYD-ZBD1T. "payment term

    V_ZFBDT = I_BSYD-ZFBDT. "baseline due date

    ENDIF.

    SORT I_BSYD BY KUNNR BUKRS GJAHR BELNR BUZEI.

    ENDFORM. " F_GET_DATEPAYTERM_FR_ORIGDOC

    ----


    • Form F_WRITE_REPORT

    ----


    • Write A/R report summarized by profit center.

    • Report will be build by profit center and sum all customers

    • then will sum past do for profit center and catagorized

    • will also sum by project / wbs element.

    ----


    FORM F_WRITE_REPORT.

    SORT I_REPORT BY PRCTR KUNNR SORT BLDAT BELNR DPAST DESCENDING.

    CALL SCREEN 9000.

    ENDFORM. " F_WRITE_REPORT

    ----


    • Form F_POPULATE_PRCTR_FROM_PRCTRGRP

    ----


    FORM F_POPULATE_PRCTR_FROM_PRCTRGRP.

    LOOP AT I_SET_VALUES.

    IF I_SET_VALUES-TO = I_SET_VALUES-FROM.

    I_PRCTR-PRCTR = I_SET_VALUES-TO.

    COLLECT I_PRCTR.

    S_PRCTR-SIGN = 'I'.

    S_PRCTR-OPTION = 'EQ'.

    S_PRCTR-LOW = I_SET_VALUES-TO.

    COLLECT S_PRCTR.

    ELSE.

    MESSAGE E000 WITH 'System Error, contact programmer'

    I_SET_VALUES-TO I_SET_VALUES-FROM.

    ENDIF.

    ENDLOOP.

    ENDFORM. " F_POPULATE_PRCTR_FROM_PRCTRGRP

    ----


    • Form F_CONVERT_CURRENCY_FR_2_AMTS

    ----


    • This function module will ensure proper handling of decimals

    • and conversion of currency. This will give you the historical

    • exchange rate used.

    • BFOD_A does not have the trans curr amt so we will get it

    • using: ( bsid trans curr amt / bsid loc curr amt ) *

    • bfod_a loc currency amt

    ----


    FORM F_CONVERT_CURRENCY_FR_2_AMTS USING V_FRCURR V_TOCURR

    V_OFRAMT V_OTOAMT V_NFRAMT

    CHANGING V_NTOAMT.

    CALL FUNCTION 'Z_CONVERT_CURRENCY_FROM_2_AMTS'

    EXPORTING

    FROM_CURRENCY = V_FRCURR

    TO_CURRENCY = V_TOCURR

    OLD_FROM_AMOUNT = V_OFRAMT

    OLD_TO_AMOUNT = V_OTOAMT

    NEW_FROM_AMOUNT = V_NFRAMT

    IMPORTING

    NEW_TO_AMOUNT = V_NTOAMT

    EXCEPTIONS

    OTHERS = 1.

    IF SY-SUBRC <> 0.

    MESSAGE E000 WITH TEXT-005.

    ENDIF.

    ENDFORM. " F_CONVERT_CURRENCY_FR_2_AMTS

    ----


    • Form F_RETRIEVE_BFODA_BY_COMPANY

    ----


    FORM F_RETRIEVE_BFODA_BY_COMPANY.

    • Acquire BFOD_A table

    SELECT PRCTR KUNNR BUKRS GJAHR BELNR BUZEI AUGDT HKONT BUDAT

    SHKZG DMBTR DMBE2 FROM BFOD_A

    INTO TABLE I_BFOD_A

    WHERE BUKRS IN S_BUKRS.

    IF I_BFOD_A[] IS INITIAL.

    EXIT.

    ELSE.

    • Remove records based on selection criteria

    DELETE I_BFOD_A WHERE NOT KUNNR IN S_KUNNR OR

    NOT BUDAT LE P_BUDAT OR

    NOT HKONT IN S_HKONT OR

    NOT BELNR IN S_BELNR OR

    ( NOT AUGDT IS INITIAL AND

    NOT AUGDT > P_BUDAT ).

    ENDIF.

    • Build selection option

    LOOP AT I_BFOD_A.

    I_PRCTR-PRCTR = I_BFOD_A-PRCTR.

    COLLECT I_PRCTR.

    S_PRCTR-SIGN = 'I'.

    S_PRCTR-OPTION = 'EQ'.

    S_PRCTR-LOW = I_BFOD_A-PRCTR.

    COLLECT S_PRCTR.

    ENDLOOP.

    SORT S_PRCTR.

    SORT I_PRCTR BY PRCTR.

    PERFORM F_BUILD_I_CEPC_TABLE.

    ENDFORM. " F_RETRIEVE_BFODA_BY_COMPANY

    ----


    • Form F_RETRIEVE_BFODA_BY_PRCTR

    ----


    FORM F_RETRIEVE_BFODA_BY_PRCTR.

    • Acquire BFOD_A table

    SELECT PRCTR KUNNR BUKRS GJAHR BELNR BUZEI AUGDT HKONT BUDAT

    SHKZG DMBTR DMBE2 FROM BFOD_A

    INTO TABLE I_BFOD_A

    FOR ALL ENTRIES IN I_PRCTR

    WHERE PRCTR = I_PRCTR-PRCTR AND

    KUNNR IN S_KUNNR AND

    BUKRS IN S_BUKRS.

    IF I_BFOD_A[] IS INITIAL.

    EXIT.

    ELSE.

    • Remove records based on selection criteria

    DELETE I_BFOD_A WHERE NOT KUNNR IN S_KUNNR OR

    NOT BUKRS IN S_BUKRS OR

    NOT BUDAT LE P_BUDAT OR

    NOT HKONT IN S_HKONT OR

    NOT BELNR IN S_BELNR OR

    ( NOT AUGDT IS INITIAL AND

    NOT AUGDT > P_BUDAT ).

    ENDIF.

    ENDFORM. " F_RETRIEVE_BFODA_BY_PRCTR

    ----


    • Form F_MOVE_BASE_TO_REPORT

    ----


    FORM F_MOVE_BASE_TO_REPORT.

    I_REPORT-PRCTR = I_BFOD_A-PRCTR.

    I_REPORT-KUNNR = I_BFOD_A-KUNNR.

    I_REPORT-BELNR = I_BFOD_A-BELNR.

    I_REPORT-BUKRS = I_BFOD_A-BUKRS.

    I_REPORT-HKONT = I_BFOD_A-HKONT.

    I_REPORT-AUGDT = I_BFOD_A-AUGDT.

    I_REPORT-BUDAT = I_BFOD_A-BUDAT.

    I_REPORT-GJAHR = I_BFOD_A-GJAHR.

    I_REPORT-BUZEI = I_BFOD_A-BUZEI.

    I_REPORT-SHKZG = I_BFOD_A-SHKZG.

    I_REPORT-DMBTR = I_BFOD_A-DMBTR.

    I_REPORT-DMBE2 = I_BFOD_A-DMBE2.

    I_REPORT-HWAER = I_BKPF-HWAER.

    I_REPORT-HWAE2 = I_BKPF-HWAE2.

    I_REPORT-BKTXT = I_BKPF-BKTXT.

    I_REPORT-XBLNR = I_BKPF-XBLNR.

    ENDFORM. " F_MOVE_BASE_TO_REPORT

    ----


    • Module STATUS_9000 OUTPUT

    ----


    • text

    ----


    MODULE STATUS_9000 OUTPUT.

    SET PF-STATUS '9000'.

    SET TITLEBAR '900'.

    • Launch standard ALV grid

    PERFORM F_CREATE_ALV_GRID_CONTROL.

    PERFORM F_LOAD_COLUMN_HEADINGS.

    ENDMODULE. " STATUS_9000 OUTPUT

    ----


    • Module USER_COMMAND_9000 INPUT

    ----


    • text

    ----


    MODULE USER_COMMAND_9000 INPUT.

    CASE SY-UCOMM.

    WHEN 'EXIT' OR 'CANC' OR 'BACK'.

    CALL METHOD REF_CUSTOM->FREE.

    SET SCREEN 0.

    LEAVE SCREEN.

    • Begin of changes for Release 2 by HBE7890 - DEVK909110

    WHEN 'PRIN'.

    PERFORM PRINT_AGING_TOTALS.

    • End of changes.

    ENDCASE.

    ENDMODULE. " USER_COMMAND_9000 INPUT

    ----


    • Form F_CREATE_ALV_GRID_CONTROL

    ----


    • text

    ----


    FORM F_CREATE_ALV_GRID_CONTROL.

    • Set field catalog for ALV

    PERFORM F_SET_FIELDCAT.

    IF REF_CUSTOM IS INITIAL.

    • Create ALV container

    CREATE OBJECT REF_CUSTOM

    EXPORTING

    CONTAINER_NAME = 'ZRPT_CONTAINER'.

    • Create ALV grid control

    CREATE OBJECT REF_ALV_ZRPT

    EXPORTING

    I_PARENT = REF_CUSTOM.

    • Adjust look and feel

    PERFORM F_CHANGE_SETTINGS.

    • Call the ALV Build

    CALL METHOD REF_ALV_ZRPT->SET_TABLE_FOR_FIRST_DISPLAY

    EXPORTING

    IS_LAYOUT = V_LAYOUT

    IS_VARIANT = V_VARIANT

    I_SAVE = V_SAVE

    I_DEFAULT = V_DEFAULT

    CHANGING

    IT_SORT = I_SORT

    IT_OUTTAB = I_REPORT[]

    IT_FIELDCATALOG = I_ALV_FIELDCAT[].

    • Create print top of page

    CREATE OBJECT REF_EVENT_RECEIVER.

    SET HANDLER REF_EVENT_RECEIVER->MTH_PRINT_TOP_OF_PAGE

    FOR REF_ALV_ZRPT.

    • Create print top of page

    CREATE OBJECT REF_EVENT_RECEIVER.

    SET HANDLER REF_EVENT_RECEIVER->MTH_PRINT_TOP_OF_LIST

    FOR REF_ALV_ZRPT.

    ENDIF.

    ENDFORM. " F_CREATE_ALV_GRID_CONTROL

    ----


    • Form F_CHANGE_SETTINGS

    ----


    • text

    ----


    FORM F_CHANGE_SETTINGS .

    • Set layout parameters

    V_LAYOUT-GRID_TITLE = 'A/R by Profit Center'.

    V_LAYOUT-SEL_MODE = 'A'.

    V_LAYOUT-INFO_FNAME = 'LINECOLOR'.

    V_LAYOUT-CWIDTH_OPT = 'X'.

    V_LAYOUT-NO_MERGING = 'X'.

    V_LAYOUT-NUMC_TOTAL = 'X'.

    V_DEFAULT = 'X'.

    V_SAVE = 'A'.

    • Set display variant

    V_VARIANT-REPORT = SY-REPID.

    IF P_DSVAR NE ''.

    V_VARIANT-VARIANT = P_DSVAR.

    ENDIF.

    ENDFORM. " F_CHANGE_SETTINGS

    ----


    • Form F_SET_FIELDCAT

    ----


    • text

    ----


    FORM F_SET_FIELDCAT .

    • Set field catalog for ALV

    CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'

    EXPORTING

    • I_STRUCTURE_NAME = 'ZFR0ARPR_S1' "DEVK909110

    I_STRUCTURE_NAME = 'ZPSS_ARBYPC' "DEVK909110

    CHANGING

    CT_FIELDCAT = I_ALV_FIELDCAT

    EXCEPTIONS

    INCONSISTENT_INTERFACE = 1

    PROGRAM_ERROR = 2

    OTHERS = 3.

    • Override any attributes

    LOOP AT I_ALV_FIELDCAT INTO V_ALV_FIELDCAT.

    IF V_ALV_FIELDCAT-FIELDNAME EQ 'NAME1'.

    MOVE 'Customer Name' TO: V_ALV_FIELDCAT-REPTEXT,

    V_ALV_FIELDCAT-SCRTEXT_L,

    V_ALV_FIELDCAT-SCRTEXT_M,

    V_ALV_FIELDCAT-SCRTEXT_S.

    ENDIF.

    IF V_ALV_FIELDCAT-FIELDNAME EQ 'SORT'.

    MOVE 'Documentation' TO: V_ALV_FIELDCAT-REPTEXT,

    V_ALV_FIELDCAT-SCRTEXT_L,

    V_ALV_FIELDCAT-SCRTEXT_M.

    MOVE 'DocRef' TO V_ALV_FIELDCAT-SCRTEXT_S.

    ENDIF.

    MODIFY I_ALV_FIELDCAT FROM V_ALV_FIELDCAT.

    ENDLOOP.

    ENDFORM. " F_SET_FIELDCAT

    ----


    • Form F_BUILD_TOTALS

    ----


    • text

    ----


    FORM F_BUILD_TOTALS .

    DATA: V_DAYS TYPE I,

    V_INDEX(2) TYPE N.

    CLEAR I_TOTAL.

    • Build total line

    MOVE I_REPORT-HWAER TO I_TOTAL-WAERS.

    MOVE I_REPORT-DMBTR TO I_TOTAL-TOTAL.

    DO 5 TIMES.

    V_DAYS = ( SY-INDEX - 1 ) * P_AGEDY.

    V_INDEX = SY-INDEX.

    IF I_REPORT-DPAST LE V_DAYS.

    CONCATENATE 'I_TOTAL-DAYS' V_INDEX INTO V_FIELD-NAME.

    ASSIGN (V_FIELD-NAME) TO <COLUMN>.

    <COLUMN> = I_REPORT-DMBTR.

    EXIT.

    ELSEIF SY-INDEX EQ 5.

    CONCATENATE 'I_TOTAL-DAYS' V_INDEX INTO V_FIELD-NAME.

    ASSIGN (V_FIELD-NAME) TO <COLUMN>.

    <COLUMN> = I_REPORT-DMBTR.

    EXIT.

    ENDIF.

    ENDDO.

    COLLECT I_TOTAL.

    ENDFORM. " F_BUILD_TOTALS

    ----


    • Module LOAD_AGING OUTPUT

    ----


    • text

    ----


    MODULE LOAD_AGING OUTPUT.

    PERFORM F_LOAD_AGING.

    ENDMODULE. " LOAD_AGING OUTPUT

    ----


    • Form F_LOAD_AGING

    ----


    • text

    ----


    FORM F_LOAD_AGING .

    READ TABLE I_TOTAL INDEX TABAGING-CURRENT_LINE.

    IF SY-SUBRC NE 0. EXIT. ENDIF.

    MOVE I_TOTAL TO I_TOTAL.

    • Handle free rows on the table contol - Vertical Scroll Bar

    DESCRIBE TABLE I_TOTAL LINES SY-TFILL.

    IF TABAGING-LINES <= SY-TFILL.

    TABAGING-LINES = TABAGING-LINES + 1.

    ENDIF.

    ENDFORM. " F_LOAD_AGING

    ----


    • Form F_LOAD_COLUMN_HEADINGS

    ----


    • text

    ----


    FORM F_LOAD_COLUMN_HEADINGS .

    DATA: V_INDEX(1) TYPE C,

    V_DAYS TYPE STRING.

    • Set static field names

    V_HDR-CURKY = 'CurKy'.

    V_HDR-CURR = 'Current'.

    V_HDR-TOTAL = 'Total'.

    • Set dynamic field names

    DO 4 TIMES.

    V_INDEX = SY-INDEX.

    V_DAYS = SY-INDEX * P_AGEDY.

    CONCATENATE 'V_HDR-COL' V_INDEX INTO V_FIELD-NAME.

    CONCATENATE V_DAYS 'Days' INTO V_FIELD-VALUE SEPARATED BY SPACE.

    ASSIGN (V_FIELD-NAME) TO <COLUMN>.

    <COLUMN> = V_FIELD-VALUE.

    ENDDO.

    ENDFORM. " F_LOAD_COLUMN_HEADINGS

    • Begin of changes for Release 2 by HBE7890 - DEVK909110

    &----


    *& Form PRINT_AGING_TOTALS

    &----


    • This routine is for printing the Aging summary

    ----


    FORM PRINT_AGING_TOTALS .

    • Leave to list processing.

    LEAVE TO LIST-PROCESSING.

    IF NOT I_TOTAL[] IS INITIAL.

    NEW-PAGE PRINT ON

    DESTINATION 'LOCL'

    COVER TEXT 'AR by Profit Center Report'(001)

    LINE-SIZE SY-LINSZ

    IMMEDIATELY 'X'.

    FORMAT COLOR COL_HEADING INTENSIFIED ON.

    skip 2.

    • Print the Standard Heading.

    CALL FUNCTION 'Z_CA_STD_HEADER'

    EXPORTING

    HEADING = SY-TITLE

    P_REPID = SY-CPROG

    LINE_WIDTH = SY-LINSZ.

    skip 2.

    • Print Select-Options

    CALL FUNCTION 'Z_CA_PRINT_SELECTION_OPTIONS'

    EXPORTING

    P_PGMN = SY-CPROG

    P_VARI = SY-SLSET

    P_SKIP = 'X'.

    ULINE.

    WRITE:/1(255)

    'Accounts Receivable by Profit Center - Summary Report' CENTERED.

    ULINE.

    WRITE:/1(10) 'Curr Key',

    11(20) 'Current' RIGHT-justified,

    • Begin of change for DEVK909871

    • 31(20) '30.0 Days' RIGHT-justified,

    • 51(20) '60.0 Days' RIGHT-justified,

    • 71(20) '90.0 Days' RIGHT-justified,

    • 91(20) '120.0 Days' RIGHT-justified,

    31(20) V_HDR-COL1 RIGHT-justified,

    51(20) V_HDR-COL2 RIGHT-justified,

    71(20) V_HDR-COL3 RIGHT-justified,

    91(20) V_HDR-COL4 RIGHT-justified,

    • Begin of change for DEVK909871

    111(20) 'Total' RIGHT-justified.

    ULINE.

    FORMAT COLOR OFF.

    LOOP AT I_TOTAL.

    WRITE:/1(10) I_TOTAL-WAERS,

    11(20) I_TOTAL-DAYS01 currency I_TOTAL-WAERS RIGHT-justified,

    31(20) I_TOTAL-DAYS02 currency I_TOTAL-WAERS RIGHT-justified,

    51(20) I_TOTAL-DAYS03 currency I_TOTAL-WAERS RIGHT-justified,

    71(20) I_TOTAL-DAYS04 currency I_TOTAL-WAERS RIGHT-justified,

    91(20) I_TOTAL-DAYS05 currency I_TOTAL-WAERS RIGHT-justified,

    111(20) I_TOTAL-TOTAL currency I_TOTAL-WAERS RIGHT-justified.

    ENDLOOP.

    ULINE.

    NEW-PAGE PRINT OFF.

    LEAVE LIST-PROCESSING.

    ELSE.

    MESSAGE S000 WITH 'Data not available for printing...'.

    ENDIF.

    ENDFORM. " PRINT_AGING_TOTALS

    • End of changes.

    Add comment
    10|10000 characters needed characters exceeded