Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

payment performance

Former Member
0 Kudos

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.

2 REPLIES 2

Former Member
0 Kudos

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

Former Member
0 Kudos

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.