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: 

Time out error 1.6 million internal table fields are computed using FMs

Former Member
0 Kudos

Hi , All ...

The Report running fine in server with less 300 record but ...production server which has 1.6 million record it gives error as time-out error and takes hell amount of time.

Please suggest ugently ..

I have tried few things

Internal table having 1.6 lacs ... fields to compute .. i have token in a batch

loop at i_cinfo into s_cinfo from 1 to 100000.

and so on ...also applied all the performace related .. like indexs, work areas , deleting adjacent duplicates , for all entries ..wherever applicable.

Please Suggest .

Report is as below

REPORT ZUSOTCBD_CREDIT_REPORT .

TABLES : KNA1, " General Data Customer Master

KNB1, " Customer Master (Company Code)

KNC1, " Customer master (transaction figures)

KNKK, " Customer master credit management: Control area data

T009, " Fiscal Year Variants P

T009Y, " Shortened fiscal years in Asset Accounting P

T001, " Co. Codes

T001CM, " Permitted Credit Control Areas per Company Code

RF42B, " Structure to hold credit data.

RF035, " Structure to hold credit managment fields

RF02L, " Structure to hold credit data.

TRAS, " Interval for Days in Arrears P

T000CM. " Data for DSO calculation.

************************************************************************

  • Types

************************************************************************

TYPES:

BEGIN OF type_final,

string(50) TYPE c, " String Value for Title

END OF type_final.

data:wa_final TYPE type_final. " Work Area to hold Title Data

DATA: RASID TYPE RF035-RASID value 'R03N'. " For Days in interval

DATA: MONAT(2) TYPE N.

DATA: GJAHR TYPE KNC1-GJAHR.

DATA: LD_PERIODS(32) TYPE N

VALUE '01020304050607080910111213141516'.

DATA sytabix type sy-tabix.

DATA LAND TYPE KNA1-LAND1 VALUE 'US'. " Country Key

DATA: LD_PERIOD TYPE BSID-MONAT, " Fiscal Year Variant

LD_GJAHR TYPE KNC1-GJAHR,

LD_COUNTER TYPE SY-TABIX.

**

************************************************************************

  • Internal Tables

************************************************************************

      • Internal table to hold Title Data *

DATA:

i_final TYPE STANDARD TABLE OF type_final.

**Internal Table Permitted Credit Control Areas per Company Code

DATA: BEGIN OF TCMTAB OCCURS 10.

INCLUDE STRUCTURE T001CM.

DATA: END OF TCMTAB.

*Internal table to store Customer no.

DATA : BEGIN OF ICUST OCCURS 0,

KUNNR TYPE KNA1-KUNNR, " Customer No.

END OF ICUST.

DATA: BEGIN OF BUKTAB OCCURS 20,

KKBER LIKE T001-KKBER, " Credit Control Area

BUKRS LIKE T001-BUKRS, " Co. Code

WAERS LIKE T001-WAERS, " Currency

PERIV LIKE T001-PERIV, " Fiscal Year Variant

BUTXT LIKE T001-BUTXT,

END OF BUKTAB.

    • Internal Table to store Fiscal year Data .

DATA: BEGIN OF GJATAB OCCURS 5,

PERIV LIKE T001-PERIV, " Fiscal Year Variant

GJAHR LIKE KNC1-GJAHR, " Fiscal Year

MONAT LIKE T009-ANZBP, "

ANZBP LIKE T009-ANZBP, " Number of posting periods

END OF GJATAB.

*Main Output internal table to be used to store credit history Information

DATA : BEGIN OF I_CINFO occurs 0,

KUNNR TYPE KNB1-KUNNR, " Customer

KNKLI TYPE KNKK-KNKLI, " Customer's account number with credit limit reference

KKBER TYPE KNKK-KKBER, " Credit Control Area

CTLPC TYPE KNKK-CTLPC, " Risk Category

KLIMK TYPE KNKK-KLIMK, " Credit Limit

SBGRP TYPE KNKK-SBGRP, " Credit representative group for credit management

ERDAT TYPE KNKK-ERDAT, " Created On

DTREV TYPE KNKK-DTREV, " Last Internal Review

REVDB TYPE KNKK-REVDB, " Last External Review

SALDO TYPE RF42B-SALDO, " Balance

DSOIN TYPE RF02L-DSOIN, " DSO

H06SA TYPE RF035-H06SA, " Highest Balance at the end of 6 Months

H06JA TYPE RF035-H06JA, " Year highest Balance 6 Months

H06MO TYPE RF035-H06MO, " Month OF hihest Balance 6 Months

H12SA TYPE RF035-H12SA, " Highest Balance at the end of 12 Months

H12JA TYPE RF035-H12JA, " Year highest Balance 12 Months

H12MO TYPE RF035-H12MO, " Month OF hihest Balance 12 Months

UMP2U TYPE RF42B-UMP2U, " Sales from the current Year

UMP1U TYPE RF42B-UMP1U, " Sales from the Previous Year

SFAEL TYPE RF035-SFAEL, " Total Past Due Open Item

SFAE1 TYPE RF035-SFAE1, " Aging buckets 0-15

SFAE2 TYPE RF035-SFAE2, " Aging buckets 16-30

SFAE3 TYPE RF035-SFAE3, " Aging buckets 31-60

SFAE4 TYPE RF035-SFAE4, " Aging buckets 60-90

SFAE5 TYPE RF035-SFAE5, " Aging buckets Over 90

END Of I_CINFO.

DATA : BEGIN OF S_CINFO ,

KUNNR TYPE KNB1-KUNNR, " Customer

KNKLI TYPE KNKK-KNKLI, " Customer's account number with credit limit reference

KKBER TYPE KNKK-KKBER, " Credit Control Area

CTLPC TYPE KNKK-CTLPC, " Risk Category

KLIMK TYPE KNKK-KLIMK, " Credit Limit

SBGRP TYPE KNKK-SBGRP, " Credit representative group for credit management

ERDAT TYPE KNKK-ERDAT, " Created On

DTREV TYPE KNKK-DTREV, " Last Internal Review

REVDB TYPE KNKK-REVDB, " Last External Review

SALDO TYPE RF42B-SALDO, " Balance

DSOIN TYPE RF02L-DSOIN, " DSO

H06SA TYPE RF035-H06SA, " Highest Balance at the end of 6 Months

H06JA TYPE RF035-H06JA, " Year highest Balance 6 Months

H06MO TYPE RF035-H06MO, " Month OF hihest Balance 6 Months

H12SA TYPE RF035-H12SA, " Highest Balance at the end of 12 Months

H12JA TYPE RF035-H12JA, " Year highest Balance 12 Months

H12MO TYPE RF035-H12MO, " Month OF hihest Balance 12 Months

UMP2U TYPE RF42B-UMP2U, " Sales from the current Year

UMP1U TYPE RF42B-UMP1U, " Sales from the Previous Year

SFAEL TYPE RF035-SFAEL, " Total Past Due Open Item

SFAE1 TYPE RF035-SFAE1, " Aging buckets 0-15

SFAE2 TYPE RF035-SFAE2, " Aging buckets 16-30

SFAE3 TYPE RF035-SFAE3, " Aging buckets 31-60

SFAE4 TYPE RF035-SFAE4, " Aging buckets 60-90

SFAE5 TYPE RF035-SFAE5, " Aging buckets Over 90

END Of s_cinfo.

*Internal table to hold month-wise balance.

DATA: BEGIN OF SALTAB OCCURS 12,

LNUMM(2) TYPE N, " Month

SALDO LIKE RF42B-SALDO, " Balance

END OF SALTAB.

*Internal table used for computing the Balance fields

DATA: BEGIN OF SALDO,

UML01 LIKE KNC1-UM01S,

UML02 LIKE KNC1-UM01S,

UML03 LIKE KNC1-UM01S,

UML04 LIKE KNC1-UM01S,

UML05 LIKE KNC1-UM01S,

UML06 LIKE KNC1-UM01S,

UML07 LIKE KNC1-UM01S,

UML08 LIKE KNC1-UM01S,

UML09 LIKE KNC1-UM01S,

UML10 LIKE KNC1-UM01S,

UML11 LIKE KNC1-UM01S,

UML12 LIKE KNC1-UM01S,

END OF SALDO.

  • Structure to hold Bal fields ------ -------

DATA: BEGIN OF SKNKK,

KUNNR LIKE KNA1-KUNNR, " Customer Number 1: Debitor

KONTO LIKE KNKK-KUNNR,

SFAE1 LIKE RF035-SFAE1, " Aging buckets 0-15

SFAE2 LIKE RF035-SFAE2, " Aging buckets 16-30

SFAE3 LIKE RF035-SFAE3, " Aging buckets 30-60

SFAE4 LIKE RF035-SFAE4, " Aging buckets 60-90

SFAE5 LIKE RF035-SFAE5, " Aging buckets Over 90

SFAEL LIKE RF035-SFAEL, " Total Due of Items

UML01 LIKE KNC1-UM01S,

UML02 LIKE KNC1-UM01S,

UML03 LIKE KNC1-UM01S,

UML04 LIKE KNC1-UM01S,

UML05 LIKE KNC1-UM01S,

UML06 LIKE KNC1-UM01S,

UML07 LIKE KNC1-UM01S,

UML08 LIKE KNC1-UM01S,

UML09 LIKE KNC1-UM01S,

UML10 LIKE KNC1-UM01S,

UML11 LIKE KNC1-UM01S,

UML12 LIKE KNC1-UM01S,

UMP1U LIKE RF42B-UMP1U, " Sales from the Previous Year

UMP2U LIKE RF42B-UMP2U, " Sales from the current Year

SALDO LIKE RF42B-SALDO, " Balance

END OF SKNKK.

DATA : BEGIN OF ICUST1 OCCURS 0,

KUNNR TYPE KNA1-KUNNR, "For Customer Filter.

END OF ICUST1.

**Internal table to hold fiscal varriants

DATA: BEGIN OF LT_PERIODS OCCURS 12,

PERIOD LIKE BSID-MONAT,

GJAHR LIKE KNC1-GJAHR,

END OF LT_PERIODS.

************************************************************************

**Constants

************************************************************************

constants : BUKRS1 TYPE KNB1-BUKRS VALUE '1000',

BUKRS2 TYPE KNB1-BUKRS VALUE '1031',

Recs Type i value '200',

B_count type i value '2'.

*----


  • INITIALIZATION

*----


INITIALIZATION.

IF RASID IS INITIAL.

SELECT * FROM TRAS.

EXIT.

ENDSELECT.

IF SY-SUBRC = 0.

RASID = TRAS-RASID.

ENDIF.

ENDIF.

*----


  • SELECTION-SCREEN

*----


parameters : p_path type rlgrap-filename default 'C:\Documents and Settings\C890971\Desktop\Credit_history.XLS'.

************************************************************************

  • Start of selection processing

************************************************************************

START-OF-SELECTION.

**Get Customers for Co. Code 1000 & 1031.

PERFORM GET_CUST.

  • Get / Compute Credit Information data for Company Codes 1000 & 1031.

PERFORM GET_CREDIT_DATA.

*************************************************************************

    • End of selection processing

*************************************************************************

*END-OF-SELECTION.

*

    • Listing Credit History Data

PERFORM DOWNLOAD_CREDIT_DATA.

*

*

*************************************************************************

    • S U B R O U T I N E S

*************************************************************************

&----


*& Form GET_CUST

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GET_CUST .

    • Get US only Customers.

Refresh icust.

Select kunnr from kna1 appending table icust

where Land1 = land.

**Delete duplicate records

Delete Adjacent duplicates from icust comparing kunnr.

if icust[] is not initial.

  • Limit the selection some more to Co. Code 1000 & 1031

    • As join will cost overhead as compared.

Select kunnr from knb1 into table icust1

for all entries in icust

where kunnr = icust-kunnr

and bukrs = bukrs1

OR bukrs = bukrs2.

**Delete duplicate records

Delete Adjacent duplicates from icust1 comparing kunnr.

endif.

**Free memory.

Free icust.

  • Credit Control Area

select * from T001CM into table TCMTAB

where bukrs = bukrs1 OR

bukrs = bukrs2.

ENDFORM. " GET_CUST

&----


*& Form GET_CREDIT_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GET_CREDIT_DATA .

DATA : L_TEXT(60) TYPE C ,

Ltext1(50) type C value 'Computing Credit-History Data For',

Ltext2(10) type C value 'Customers',

L_PCT type i value '10',

L_recs type i,

l_batch_recs type i,

l_s_rec type i value 1,

l_recs1(7) type N.

***Fetch data from KNKK table

PERFORM GET_KNKK_DATA .

***Computing Crredit Fields

**Number of Customers For whom Deatils needed.

Describe table I_CINFO lines l_recs.

l_recs1 = l_recs.

Concatenate Ltext1 l_recs1 Ltext2 into l_text separated by ' '.

PERFORM GET_PGRESS_INDICATOR USING l_text l_pct.

***If records are more than 200000, should be processed batch-wise

If l_recs > recs.

l_batch_recs = abs( l_recs / b_count ).

Do b_count times.

loop at i_cinfo INTO S_CINFO from l_S_REC to l_batch_recs.

**Remember the row

sytabix = sy-tabix.

**Compute DSO

PERFORM GET_DSO_FIELD .

  • Compute rest credit history data.

PERFORM COMPUTE_SFIELDS.

endloop.

l_S_REC = l_S_REC + l_batch_recs.

l_batch_recs = l_batch_recs + l_batch_recs.

IF l_batch_recs ge l_recs.

l_batch_recs = l_recs.

eNDIF.

    • Commit up to here to release the DB locks.

Commit work.

enddo.

else.

loop at i_cinfo INTO S_CINFO.

**Remember the row

sytabix = sy-tabix.

**Compute DSO

PERFORM GET_DSO_FIELD .

  • Compute rest credit history data.

PERFORM COMPUTE_SFIELDS.

endloop.

Endif.

ENDFORM. " GET_CREDIT_DATA

&----


*& Form GET_KNKK_DATA

&----


  • text

----


  • -->P_ICUST_KUNNR text

----


FORM GET_KNKK_DATA .

if icust1[] is not initial.

SELECT KUNNR KNKLI KKBER CTLPC KLIMK

SBGRP ERDAT DTREV REVDB

from KNKK into corresponding fields of table I_Cinfo

for all entries in icust1

where kunnr = icust1-kunnr.

Delete Adjacent duplicates from i_cinfo comparing kunnr.

endif.

**Free Memory for internal table icust1.

Free icust1.

ENDFORM. " GET_KNKK_DATA

*&----


**& Form GET_DSO_FIELD

*&----


    • text

*----


    • --> p1 text

    • <-- p2 text

*----


FORM GET_DSO_FIELD .

***Determine DSO Parameter

PERFORM DSO_PARAMETER.

***Compute DSO

CALL FUNCTION 'CUSTOMER_DSO_CALCULATION'

EXPORTING

I_KKBER = s_cinfo-kkber

I_KUNNR = s_cinfo-kunnr

I_ANZBUPER = T000CM-DSOPP

I_XCHILDS = T000CM-DSOCH

I_ACTBALANCE = T000CM-DSOAB

IMPORTING

E_DSOIN = RF02L-DSOIN

EXCEPTIONS

ERROR_MESSAGE = 1.

ENDFORM. " GET_DSO_FIELD

&----


*& Form DSO_PARAMETER

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM DSO_PARAMETER.

IF T000CM-DSOPP IS INITIAL.

SELECT SINGLE * FROM T000CM.

IF SY-SUBRC EQ 0.

IF T000CM-DSOPP IS INITIAL.

T000CM-DSOPP = '003'.

ENDIF.

ELSE.

T000CM-DSOPP = '003'.

T000CM-DSOCH = ' '.

T000CM-DSOAB = 'X'.

ENDIF.

ENDIF.

ENDFORM. " DSO_PARAMETER

----


  • --> p1 text

  • <-- p2 text

----


FORM PERIODE_ERMITTELN_EXC USING

P03_BUDAT LIKE SYST-DATUM

P03_GJAHR LIKE KNC1-GJAHR

P03_MONAT LIKE MONAT.

CALL FUNCTION 'FI_PERIOD_DETERMINE'

EXPORTING

I_BUDAT = P03_BUDAT

I_PERIV = T001-PERIV

  • I_BUKRS = T001-BUKRS

I_GJAHR = P03_GJAHR

I_MONAT = P03_MONAT

IMPORTING

E_GJAHR = P03_GJAHR

E_MONAT = P03_MONAT

EXCEPTIONS

ERROR_MESSAGE = 1.

ENDFORM. "PERIODE_ERMITTELN_EXC

&----


*& Form COMPUTE_SFIELDS

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM COMPUTE_SFIELDS .

**Compute Balance

PERFORM GET_SFIELDS .

S_CINFO-DSOIN = RF02L-DSOIN.

S_CINFO-SALDO = RF035-SALDO.

S_CINFO-H06SA = RF035-H06SA.

S_CINFO-H06JA = RF035-H06JA.

S_CINFO-H06MO = RF035-H06MO.

S_CINFO-H12SA = RF035-H12SA.

S_CINFO-H12JA = RF035-H12JA.

S_CINFO-H12MO = RF035-H12MO.

S_CINFO-UMP2U = RF42B-UMP2U.

S_CINFO-UMP1U = RF42B-UMP1U.

S_CINFO-SFAEL = RF035-SFAEL.

S_CINFO-SFAE1 = RF035-SFAE1.

S_CINFO-SFAE2 = RF035-SFAE2.

S_CINFO-SFAE3 = RF035-SFAE3.

S_CINFO-SFAE4 = RF035-SFAE4.

S_CINFO-SFAE5 = RF035-SFAE5.

  • modify..

MODIFY I_CINFO FROM S_CINFO INDEX sytabix.

CLEAR: S_CINFO,RF035,RF02L, RF42B.

ENDFORM. " COMPUTE_SFIELDS

&----


  • text

----


  • -->P_C_INFO_KUNNR text

----


FORM GET_CUST_BAL_INFO.

LOOP AT TCMTAB.

CALL FUNCTION 'FI_COMPANY_CODE_DATA'

EXPORTING

I_BUKRS = TCMTAB-BUKRS

IMPORTING

E_T001 = T001

EXCEPTIONS

ERROR_MESSAGE = 1.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING T001 TO BUKTAB.

BUKTAB-KKBER = TCMTAB-KKBER.

COLLECT BUKTAB.

ENDIF.

ENDLOOP.

  • ------ ------------------

LOOP AT BUKTAB WHERE PERIV NE SPACE.

GJATAB-PERIV = BUKTAB-PERIV.

COLLECT GJATAB.

ENDLOOP.

  • ------ -----------------------------

CLEAR: MONAT.

LOOP AT GJATAB.

T001-PERIV = GJATAB-PERIV.

CLEAR: GJAHR, MONAT.

PERFORM PERIODE_ERMITTELN_EXC USING SY-DATLO GJAHR MONAT.

CHECK SY-SUBRC = 0.

GJATAB-GJAHR = GJAHR.

GJATAB-MONAT = MONAT.

SELECT SINGLE * FROM T009 WHERE PERIV = GJATAB-PERIV.

IF SY-SUBRC = 0.

GJATAB-ANZBP = T009-ANZBP.

ENDIF.

MODIFY GJATAB.

ENDLOOP.

LOOP AT BUKTAB.

CHECK NOT ( BUKTAB-PERIV IS INITIAL ).

READ TABLE GJATAB WITH KEY BUKTAB-PERIV.

CHECK SY-SUBRC = 0

AND NOT ( GJATAB-GJAHR IS INITIAL ).

CALL FUNCTION 'CUSTOMER_BALANCE'

EXPORTING

KUNNR = S_cinfo-kunnr

BUKRS = BUKTAB-BUKRS

GJAHR = GJATAB-GJAHR

MONAT = GJATAB-MONAT

PERIV = GJATAB-PERIV

ANZBP = GJATAB-ANZBP

XH6MON = 'X'

XH12MON = 'X'

IMPORTING

UMP2U = RF42B-UMP2U

VMP2U = RF42B-UMP1U

SALDO = RF035-SALDO

UML01 = SALDO-UML01

UML02 = SALDO-UML02

UML03 = SALDO-UML03

UML04 = SALDO-UML04

UML05 = SALDO-UML05

UML06 = SALDO-UML06

UML07 = SALDO-UML07

UML08 = SALDO-UML08

UML09 = SALDO-UML09

UML10 = SALDO-UML10

UML11 = SALDO-UML11

UML12 = SALDO-UML12

EXCEPTIONS

NO_BALANCE = 4.

IF SY-SUBRC = 0.

SKNKK-UMP1U = SKNKK-UMP1U + RF42B-UMP1U.

SKNKK-UMP2U = SKNKK-UMP2U + RF42B-UMP2U.

SKNKK-SALDO = SKNKK-SALDO + RF035-SALDO.

SKNKK-UML01 = SKNKK-UML01 + SALDO-UML01.

SKNKK-UML02 = SKNKK-UML02 + SALDO-UML02.

SKNKK-UML03 = SKNKK-UML03 + SALDO-UML03.

SKNKK-UML04 = SKNKK-UML04 + SALDO-UML04.

SKNKK-UML05 = SKNKK-UML05 + SALDO-UML05.

SKNKK-UML06 = SKNKK-UML06 + SALDO-UML06.

SKNKK-UML07 = SKNKK-UML07 + SALDO-UML07.

SKNKK-UML08 = SKNKK-UML08 + SALDO-UML08.

SKNKK-UML09 = SKNKK-UML09 + SALDO-UML09.

SKNKK-UML10 = SKNKK-UML10 + SALDO-UML10.

SKNKK-UML11 = SKNKK-UML11 + SALDO-UML11.

SKNKK-UML12 = SKNKK-UML12 + SALDO-UML12.

ENDIF.

ENDLOOP.

ENDFORM. "

&----


*& Form GET_SFIELDS

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GET_SFIELDS .

sknkk-kunnr = S_CINFO-KUNNR.

**Clear target to store computed values

CLEAR: RF035.

**Compute Balance fields

PERFORM GET_CUST_BAL_INFO.

REFRESH: SALTAB.

SALTAB-LNUMM = '01'. SALTAB-SALDO = SKNKK-UML01. APPEND SALTAB.

SALTAB-LNUMM = '02'. SALTAB-SALDO = SKNKK-UML02. APPEND SALTAB.

SALTAB-LNUMM = '03'. SALTAB-SALDO = SKNKK-UML03. APPEND SALTAB.

SALTAB-LNUMM = '04'. SALTAB-SALDO = SKNKK-UML04. APPEND SALTAB.

SALTAB-LNUMM = '05'. SALTAB-SALDO = SKNKK-UML05. APPEND SALTAB.

SALTAB-LNUMM = '06'. SALTAB-SALDO = SKNKK-UML06. APPEND SALTAB.

SALTAB-LNUMM = '07'. SALTAB-SALDO = SKNKK-UML07. APPEND SALTAB.

SALTAB-LNUMM = '08'. SALTAB-SALDO = SKNKK-UML08. APPEND SALTAB.

SALTAB-LNUMM = '09'. SALTAB-SALDO = SKNKK-UML09. APPEND SALTAB.

SALTAB-LNUMM = '10'. SALTAB-SALDO = SKNKK-UML10. APPEND SALTAB.

SALTAB-LNUMM = '11'. SALTAB-SALDO = SKNKK-UML11. APPEND SALTAB.

SALTAB-LNUMM = '12'. SALTAB-SALDO = SKNKK-UML12. APPEND SALTAB.

READ TABLE SALTAB INDEX 1.

RF035-H06SA = SALTAB-SALDO.

RF035-H06MO = SALTAB-LNUMM.

RF035-H12SA = SALTAB-SALDO.

RF035-H12MO = SALTAB-LNUMM.

  • ------ SALTAB ---------------------------------------------

LOOP AT SALTAB.

IF SALTAB-SALDO > RF035-H06SA

AND SY-TABIX < 7.

RF035-H06SA = SALTAB-SALDO.

RF035-H06MO = SALTAB-LNUMM.

ENDIF.

IF SALTAB-SALDO > RF035-H12SA

AND SY-TABIX < 13.

RF035-H12SA = SALTAB-SALDO.

RF035-H12MO = SALTAB-LNUMM.

ENDIF.

ENDLOOP.

  • ------ Period--------------------

REFRESH LT_PERIODS.

CLEAR LD_COUNTER.

READ TABLE BUKTAB INDEX 1.

IF SY-SUBRC = 0.

READ TABLE GJATAB WITH KEY BUKTAB-PERIV.

DO GJATAB-MONAT TIMES

VARYING LD_PERIOD FROM LD_PERIODS(2) NEXT LD_PERIODS+2(2)

RANGE LD_PERIODS.

LT_PERIODS-GJAHR = GJATAB-GJAHR.

LT_PERIODS-PERIOD = LD_PERIOD.

LD_COUNTER = LD_COUNTER + 1.

APPEND LT_PERIODS.

ENDDO.

IF LD_COUNTER LT 12.

LD_GJAHR = GJATAB-GJAHR - 1.

CLEAR T009Y.

SELECT SINGLE * FROM T009Y WHERE PERIV = GJATAB-PERIV

AND GJAHR = LD_GJAHR.

DO GJATAB-ANZBP TIMES

VARYING LD_PERIOD FROM LD_PERIODS(2) NEXT LD_PERIODS+2(2)

RANGE LD_PERIODS.

IF T009Y-ANZBP > 0.

CHECK SY-INDEX <= T009Y-ANZBP.

ENDIF.

LD_COUNTER = LD_COUNTER + 1.

LT_PERIODS-GJAHR = LD_GJAHR.

LT_PERIODS-PERIOD = LD_PERIOD.

APPEND LT_PERIODS.

ENDDO.

ENDIF.

IF LD_COUNTER LT 12.

LD_GJAHR = LD_GJAHR - 1.

DO GJATAB-ANZBP TIMES

VARYING LD_PERIOD FROM LD_PERIODS(2) NEXT LD_PERIODS+2(2)

RANGE LD_PERIODS.

LD_COUNTER = LD_COUNTER + 1.

LT_PERIODS-GJAHR = LD_GJAHR.

LT_PERIODS-PERIOD = LD_PERIOD.

APPEND LT_PERIODS.

ENDDO.

ENDIF.

SORT LT_PERIODS BY GJAHR ASCENDING PERIOD ASCENDING.

LD_COUNTER = LD_COUNTER - 12.

DO LD_COUNTER TIMES.

DELETE LT_PERIODS INDEX 1.

ENDDO.

SORT LT_PERIODS BY GJAHR DESCENDING PERIOD DESCENDING.

READ TABLE LT_PERIODS INDEX RF035-H06MO.

RF035-H06MO = LT_PERIODS-PERIOD.

RF035-H06JA = LT_PERIODS-GJAHR.

READ TABLE LT_PERIODS INDEX RF035-H12MO.

RF035-H12MO = LT_PERIODS-PERIOD.

RF035-H12JA = LT_PERIODS-GJAHR.

ENDIF.

**Compute Due Dates fields

PERFORM GET_AGING_BUCKETS .

RF035-SFAE1 = SKNKK-SFAE1.

RF035-SFAE2 = SKNKK-SFAE2.

RF035-SFAE3 = SKNKK-SFAE3.

RF035-SFAE4 = SKNKK-SFAE4 .

RF035-SFAE5 = SKNKK-SFAE5.

  • ENDLOOP.

ENDFORM. " GET_BALANCE_SFIELDS

&----


*& Form GET_AGING_BUCKETS

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GET_AGING_BUCKETS .

DATA: BEGIN OF LT_BUKRS OCCURS 0,

BUKRS LIKE T001-BUKRS,

END OF LT_BUKRS.

DATA: BEGIN OF LT_BUKTAB OCCURS 0,

BUKRS LIKE T001-BUKRS,

WAERS LIKE T001-WAERS,

KKBER LIKE T014-KKBER,

END OF LT_BUKTAB.

DATA: LD_LINES LIKE SY-TABIX.

*...performance optimization: for more than one company codes check....*

*...if balances exist and avoid selection of open items, if they don't.*

*...exist..............................................................*

REFRESH LT_BUKRS.

REFRESH LT_BUKTAB.

DESCRIBE TABLE BUKTAB LINES LD_LINES.

IF LD_LINES GT 1.

SELECT DISTINCT BUKRS APPENDING CORRESPONDING FIELDS

OF TABLE LT_BUKRS

FROM KNC1 FOR ALL ENTRIES IN BUKTAB

WHERE BUKRS = BUKTAB-BUKRS AND

KUNNR = Sknkk-KUNNR.

SELECT DISTINCT BUKRS APPENDING CORRESPONDING FIELDS

OF TABLE LT_BUKRS

FROM KNC3 FOR ALL ENTRIES IN BUKTAB

WHERE BUKRS = BUKTAB-BUKRS AND

KUNNR = Sknkk-KUNNR.

SORT LT_BUKRS.

DELETE ADJACENT DUPLICATES FROM LT_BUKRS.

LOOP AT LT_BUKRS.

LOOP AT BUKTAB WHERE BUKRS = LT_BUKRS-BUKRS.

MOVE-CORRESPONDING BUKTAB TO LT_BUKTAB.

APPEND LT_BUKTAB.

ENDLOOP.

ENDLOOP.

ELSE.

READ TABLE BUKTAB INDEX 1.

MOVE-CORRESPONDING BUKTAB TO LT_BUKTAB.

APPEND LT_BUKTAB.

ENDIF.

*...process company codes for customer given by interface..........*

LOOP AT LT_BUKTAB WHERE KKBER = s_cinfo-KKBER.

CALL FUNCTION 'CUSTOMER_DUE_DATE_ANALYSIS'

EXPORTING BUKRS = LT_BUKTAB-BUKRS

  • KKBER = ' '

KKBER = s_cinfo-KKBER

KUNNR = Sknkk-KUNNR

RASID = RASID

IMPORTING SFAE1 = RF035-SFAE1

SFAE2 = RF035-SFAE2

SFAE3 = RF035-SFAE3

SFAE4 = RF035-SFAE4

SFAE5 = RF035-SFAE5

SFAEL = RF035-SFAEL

EXCEPTIONS NO_OPEN_ITEMS = 4.

IF SY-SUBRC = 0.

*-- RF035 -


SKNKK-SFAE1 = SKNKK-SFAE1 + RF035-SFAE1.

SKNKK-SFAE2 = SKNKK-SFAE2 + RF035-SFAE2.

SKNKK-SFAE3 = SKNKK-SFAE3 + RF035-SFAE3.

SKNKK-SFAE4 = SKNKK-SFAE4 + RF035-SFAE4.

SKNKK-SFAE5 = SKNKK-SFAE5 + RF035-SFAE5.

SKNKK-SFAE5 = SKNKK-SFAE5 + RF035-SFAE5.

SKNKK-SFAEL = SKNKK-SFAEL + RF035-SFAEL.

ENDIF.

ENDLOOP.

ENDFORM. " GET_AGING_BUCKETS

&----


*& Form header

----


  • This Subroutine gets data for displaying title *

----


  • There are no interface parameters to be passed to this subroutine. *

----


FORM header .

wa_final-string = text-000. APPEND wa_final TO i_final.

wa_final-string = text-001. APPEND wa_final TO i_final.

wa_final-string = text-002. APPEND wa_final TO i_final.

wa_final-string = text-003. APPEND wa_final TO i_final.

wa_final-string = text-004. APPEND wa_final TO i_final.

wa_final-string = text-005. APPEND wa_final TO i_final.

wa_final-string = text-006. APPEND wa_final TO i_final.

wa_final-string = text-007. APPEND wa_final TO i_final.

wa_final-string = text-008. APPEND wa_final TO i_final.

wa_final-string = text-009. APPEND wa_final TO i_final.

wa_final-string = text-010. APPEND wa_final TO i_final.

wa_final-string = text-011. APPEND wa_final TO i_final.

wa_final-string = text-012. APPEND wa_final TO i_final.

wa_final-string = text-013. APPEND wa_final TO i_final.

wa_final-string = text-014. APPEND wa_final TO i_final.

wa_final-string = text-015. APPEND wa_final TO i_final.

wa_final-string = text-016. APPEND wa_final TO i_final.

wa_final-string = text-017. APPEND wa_final TO i_final.

wa_final-string = text-018. APPEND wa_final TO i_final.

wa_final-string = text-019. APPEND wa_final TO i_final.

wa_final-string = text-020. APPEND wa_final TO i_final.

wa_final-string = text-021. APPEND wa_final TO i_final.

wa_final-string = text-022. APPEND wa_final TO i_final.

wa_final-string = text-023. APPEND wa_final TO i_final.

wa_final-string = text-024. APPEND wa_final TO i_final.

ENDFORM. " header

&----


*& Form DOWNLOADCREDITDATA

&----


  • text

----


  • -->P_P_PATH text

----


FORM DOWNLOADCREDITDATA USING P_PATH.

DATA:

lw_file2 TYPE string . " File Path

lw_file2 = p_PATH.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

  • BIN_FILESIZE = BIN_FILESIZE

filename = lw_file2

filetype = 'DBF'

  • APPEND = ' '

  • write_field_separator = ' '

  • HEADER = '00'

  • TRUNC_TRAILING_BLANKS = 'X'

  • WRITE_LF = 'X'

COL_SELECT = 'X'

  • COL_SELECT_MASK = ' '

  • DAT_MODE = 'X'

  • CONFIRM_OVERWRITE = ' '

  • NO_AUTH_CHECK = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • WRITE_BOM = ' '

  • TRUNC_TRAILING_BLANKS_EOL = 'X'

  • WK1_N_FORMAT = '0'

  • WK1_N_SIZE = ' '

  • WK1_T_FORMAT = ' '

  • WK1_T_SIZE = ' '

  • IMPORTING

  • FILELENGTH = FILELENGTH

TABLES

data_tab = I_CINFO

fieldnames = i_final

EXCEPTIONS

file_write_error = 1

no_batch = 2

gui_refuse_filetransfer = 3

invalid_type = 4

no_authority = 5

unknown_error = 6

header_not_allowed = 7

separator_not_allowed = 8

filesize_not_allowed = 9

header_too_long = 10

dp_error_create = 11

dp_error_send = 12

dp_error_write = 13

unknown_dp_error = 14

access_denied = 15

dp_out_of_memory = 16

disk_full = 17

dp_timeout = 18

file_not_found = 19

dataprovider_exception = 20

control_flush_error = 21

.

IF sy-subrc <> 0.

  • Messege

ENDIF. " IF sy-subrc EQ 0

*

ENDFORM. " DOWNLOADCREDITDATA

&----


*& Form DOWNLOAD_CREDIT_DATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM DOWNLOAD_CREDIT_DATA .

PERFORM HEADER.

PERFORM DOWNLOADCREDITDATA USING P_PATH.

ENDFORM. " DOWNLOAD_CREDIT_DATA

&----


*& Form GET_PGRESS_INDICATOR

&----


  • text

----


  • -->P_L_TEXT text

  • -->P_L_PCT text

----


FORM GET_PGRESS_INDICATOR USING L_TEXT

L_PCT.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

PERCENTAGE = l_pct

TEXT = l_TEXT.

ENDFORM. " GET_PGRESS_INDICATOR

2 REPLIES 2

ThomasZloch
Active Contributor
0 Kudos

Only you can analyse with reasonable effort where the problem really is. Here is how:

[Blog on Runtime Analysis by Siegried Boes|https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/7769] [original link is broken] [original link is broken] [original link is broken];

Thomas

Former Member
0 Kudos

If you are just Downloading to a Flat file then why dont you have logic in place for the program to dump the data read into the file to that point depending on any criteria like accounts or customer then clear the internal table and run it in the back ground.

try to use cursor to read the records from the table which will make it a bit more efficient than plain select stement.