Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

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

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

Not what you were looking for? View more on this topic or Ask a question