Application Development and Automation 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: 
Read only

Optimization of this code

Former Member
0 Likes
461

Dear All,

Following is the code that I have written for Service Tax Details report. Please optimize this/ give suggestions for. It's taking hell lot of a time, doesn't give an output at all unless executed for a single document.

Regards,

Alok.

REPORT ZFI_R018 NO STANDARD PAGE HEADING LINE-SIZE 500

MESSAGE-ID ZMATLIST.

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

  • Description: Report on Service Tax

  • Author :

  • Date :

  • Request ID :

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

TABLES : BSIK, BSAK, BSAS, BSIS, LFA1, SKAT.

DATA : CRTP LIKE BSAS-DMBTR,

VALGS LIKE BSAS-DMBTR.

DATA : BEGIN OF I_BSIS_ds OCCURS 0,

BUKRS LIKE BSIS-BUKRS,

BELNR LIKE BSIS-BELNR,

GJAHR LIKE BSIS-GJAHR,

GSBER LIKE BSIS-GSBER,

HKONT LIKE BSIS-HKONT,

SGTXT LIKE BSIS-SGTXT,

END OF I_BSIS_ds.

DATA : BEGIN OF I_BSIS OCCURS 0,

BUKRS LIKE BSIS-BUKRS,

BELNR LIKE BSIS-BELNR,

GJAHR LIKE BSIS-GJAHR,

BUDAT LIKE BSIS-BUDAT,

BLDAT LIKE BSIS-BLDAT,

GSBER LIKE BSIS-GSBER,

DMBTR LIKE BSIS-DMBTR,

SHKZG LIKE BSIS-SHKZG,

HKONT LIKE BSIS-HKONT,

XBLNR LIKE BSIS-XBLNR,

SGTXT LIKE BSIS-SGTXT,

END OF I_BSIS.

DATA : BEGIN OF I_BSISTBA OCCURS 0,

BUKRS LIKE BSIS-BUKRS,

BELNR LIKE BSIS-BELNR,

GJAHR LIKE BSIS-GJAHR,

BUDAT LIKE BSIS-BUDAT,

BLDAT LIKE BSIS-BLDAT,

GSBER LIKE BSIS-GSBER,

DMBTR LIKE BSIS-DMBTR,

SHKZG LIKE BSIS-SHKZG,

HKONT LIKE BSIS-HKONT,

XBLNR LIKE BSIS-XBLNR,

SGTXT LIKE BSIS-SGTXT,

END OF I_BSISTBA.

DATA : BEGIN OF I_BSISAMT OCCURS 0,

BUKRS LIKE BSIS-BUKRS,

BELNR LIKE BSIS-BELNR,

GJAHR LIKE BSIS-GJAHR,

BUDAT LIKE BSIS-BUDAT,

BLDAT LIKE BSIS-BLDAT,

GSBER LIKE BSIS-GSBER,

DMBTR LIKE BSIS-DMBTR,

SHKZG LIKE BSIS-SHKZG,

HKONT LIKE BSIS-HKONT,

XBLNR LIKE BSIS-XBLNR,

END OF I_BSISAMT.

DATA : BEGIN OF I_BSAS OCCURS 0,

BUKRS LIKE BSAS-BUKRS,

BELNR LIKE BSAS-BELNR,

GJAHR LIKE BSAS-GJAHR,

BUDAT LIKE BSAS-BUDAT,

BLDAT LIKE BSAS-BLDAT,

GSBER LIKE BSAS-GSBER,

DMBTR LIKE BSAS-DMBTR,

SHKZG LIKE BSAS-SHKZG,

HKONT LIKE BSAS-HKONT,

XBLNR LIKE BSAS-XBLNR,

END OF I_BSAS.

DATA : BEGIN OF I_BSIK OCCURS 0,

BUKRS LIKE BSIK-BUKRS,

BELNR LIKE BSIK-BELNR,

GJAHR LIKE BSIK-GJAHR,

BUDAT LIKE BSIK-BUDAT,

BLDAT LIKE BSIK-BLDAT,

GSBER LIKE BSIK-GSBER,

DMBTR LIKE BSIK-DMBTR,

SHKZG LIKE BSIK-SHKZG,

HKONT LIKE BSIK-HKONT,

XBLNR LIKE BSIK-XBLNR,

END OF I_BSIK.

DATA : BEGIN OF I_BSAK OCCURS 0,

BUKRS LIKE BSAK-BUKRS,

BELNR LIKE BSAK-BELNR,

GJAHR LIKE BSAK-GJAHR,

BUDAT LIKE BSAK-BUDAT,

BLDAT LIKE BSAK-BLDAT,

GSBER LIKE BSAK-GSBER,

DMBTR LIKE BSAK-DMBTR,

SHKZG LIKE BSAK-SHKZG,

HKONT LIKE BSAK-HKONT,

XBLNR LIKE BSAK-XBLNR,

END OF I_BSAK.

DATA : BEGIN OF I_TOTTEMP1 OCCURS 0,

BUKRS LIKE BSAK-BUKRS,

BELNR LIKE BSAK-BELNR,

GJAHR LIKE BSAK-GJAHR,

GSBER LIKE BSAK-GSBER,

DMBTR LIKE BSAK-DMBTR,

SHKZG LIKE BSAK-SHKZG,

HKONT LIKE BSAK-HKONT,

END OF I_TOTTEMP1.

DATA : BEGIN OF I_TOTTEMP2 OCCURS 0,

BUKRS LIKE BSAK-BUKRS,

BELNR LIKE BSAK-BELNR,

GJAHR LIKE BSAK-GJAHR,

GSBER LIKE BSAK-GSBER,

DMBTR LIKE BSAK-DMBTR,

SHKZG LIKE BSAK-SHKZG,

HKONT LIKE BSAK-HKONT,

BUDAT LIKE BSAK-BUDAT,

BLDAT LIKE BSAK-BLDAT,

XBLNR LIKE BSAK-XBLNR,

END OF I_TOTTEMP2.

DATA : BEGIN OF I_TOTAMT OCCURS 0,

BUKRS LIKE BSAK-BUKRS,

BELNR LIKE BSAK-BELNR,

GJAHR LIKE BSAK-GJAHR,

GSBER LIKE BSAK-GSBER,

DMBTR LIKE BSAK-DMBTR,

SHKZG LIKE BSAK-SHKZG,

HKONT LIKE BSAK-HKONT,

BUDAT LIKE BSAK-BUDAT,

BLDAT LIKE BSAK-BLDAT,

XBLNR LIKE BSAK-XBLNR,

END OF I_TOTAMT.

DATA : BEGIN OF I_TOTAMTGL OCCURS 0,

BUKRS LIKE BSAK-BUKRS,

BELNR LIKE BSAK-BELNR,

GJAHR LIKE BSAK-GJAHR,

GSBER LIKE BSAK-GSBER,

DMBTR LIKE BSAK-DMBTR,

SHKZG LIKE BSAK-SHKZG,

HKONT LIKE BSAK-HKONT,

BUDAT LIKE BSAK-BUDAT,

BLDAT LIKE BSAK-BLDAT,

XBLNR LIKE BSAK-XBLNR,

END OF I_TOTAMTGL.

DATA : BEGIN OF I_STAX OCCURS 0,

BUKRS LIKE BSEG-BUKRS,

BELNR LIKE BSEG-BELNR,

GJAHR LIKE BSEG-GJAHR,

GSBER LIKE BSEG-GSBER,

HKONT LIKE BSEG-HKONT,

DMBTR LIKE BSEG-DMBTR,

END OF I_STAX.

DATA : BEGIN OF I_CESS OCCURS 0,

BUKRS LIKE BSAK-BUKRS,

BELNR LIKE BSAK-BELNR,

GJAHR LIKE BSAK-GJAHR,

GSBER LIKE BSAK-GSBER,

HKONT LIKE BSAK-HKONT,

SHKZG LIKE BSAK-SHKZG,

DMBTR LIKE BSAK-DMBTR,

END OF I_CESS.

DATA : BEGIN OF I_CLGDOC OCCURS 0,

BUKRS LIKE BSAK-BUKRS,

BELNR LIKE BSAK-BELNR,

GJAHR LIKE BSAK-GJAHR,

GSBER LIKE BSAK-GSBER,

HKONT LIKE BSAK-HKONT,

LIFNR LIKE BSAK-LIFNR,

DMBTR LIKE BSAK-DMBTR,

AUGBL LIKE BSAK-AUGBL,

AUGDT LIKE BSAK-AUGDT,

END OF I_CLGDOC.

DATA : BEGIN OF I_CLEARED OCCURS 0,

BUKRS LIKE BSAK-BUKRS,

BELNR LIKE BSAK-BELNR,

GJAHR LIKE BSAK-GJAHR,

GSBER LIKE BSAK-GSBER,

HKONT LIKE BSAK-HKONT,

LIFNR LIKE BSAK-LIFNR,

DMBTR LIKE BSAK-DMBTR,

END OF I_CLEARED.

DATA : BEGIN OF I_TDS OCCURS 0,

BUKRS LIKE BSAK-BUKRS,

BELNR LIKE BSAK-BELNR,

GJAHR LIKE BSAK-GJAHR,

SHKZG LIKE BSAK-SHKZG,

GSBER LIKE BSAK-GSBER,

DMBTR LIKE BSAK-DMBTR,

END OF I_TDS.

DATA : BEGIN OF I_CREDIT OCCURS 0,

BUKRS LIKE BKPF-BUKRS,

BELNR LIKE BKPF-BELNR,

GJAHR LIKE BKPF-GJAHR,

LIFNR LIKE BSEG-LIFNR,

SHKZG LIKE BSEG-SHKZG,

DMBTR LIKE BSEG-DMBTR,

END OF I_CREDIT.

DATA: BEGIN OF I_LFA1 OCCURS 0,

LIFNR LIKE LFA1-LIFNR,

NAME1 LIKE LFA1-NAME1,

NAME2 LIKE LFA1-NAME2,

ORT01 LIKE LFA1-ORT01,

END OF I_LFA1.

DATA: BEGIN OF I_SKAT OCCURS 0,

SAKNR LIKE SKAT-SAKNR,

TXT20 LIKE SKAT-TXT20,

END OF I_SKAT.

DATA : BEGIN OF I_BSIS_main OCCURS 0,

BUKRS LIKE BSIS-BUKRS,

BELNR LIKE BSIS-BELNR,

GJAHR LIKE BSIS-GJAHR,

BUDAT LIKE BSIS-BUDAT,

BLDAT LIKE BSIS-BLDAT,

GSBER LIKE BSIS-GSBER,

DMBTR LIKE BSIS-DMBTR,

SHKZG LIKE BSIS-SHKZG,

HKONT LIKE BSIS-HKONT,

XBLNR LIKE BSIS-XBLNR,

SGTXT LIKE BSIS-SGTXT,

END OF I_BSIS_main.

DATA: BEGIN OF MAIN_TABLE OCCURS 0,

BUKRS LIKE BSEG-BUKRS,

BELNR LIKE BSEG-BELNR,

BLDAT LIKE BKPF-BLDAT,

BUDAT LIKE BKPF-BUDAT,

GJAHR LIKE BSEG-GJAHR,

SGTXT LIKE BSEG-SGTXT,

GSBER LIKE BSEG-GSBER,

HKONT LIKE BSEG-HKONT,

TXT20 LIKE SKAT-TXT20,

LIFNR LIKE BSEG-LIFNR,

NAME1 LIKE LFA1-NAME1,

NAME2 LIKE LFA1-NAME2,

ORT01 LIKE LFA1-ORT01,

TOTAMT LIKE BSEG-DMBTR,

STAX LIKE BSEG-DMBTR,

CESS LIKE BSEG-DMBTR,

EDCESS LIKE BSEG-DMBTR,

VALGS LIKE BSEG-DMBTR,

TDS LIKE BSEG-DMBTR,

CREDIT LIKE BSEG-DMBTR,

AUGBL LIKE BSEG-AUGBL,

AUGDT LIKE BSEG-AUGDT,

PAYAMT LIKE BSEG-DMBTR,

XBLNR LIKE BKPF-XBLNR,

END OF MAIN_TABLE.

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

**SELECTION-SCREEN**

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

SELECTION-SCREEN BEGIN OF BLOCK BLK.

PARAMETERS : P_BUKRS LIKE BSAK-BUKRS.

SELECT-OPTIONS : S_GSBER FOR BSAK-GSBER.

SELECT-OPTIONS : S_BELNR FOR BSAK-BELNR.

SELECT-OPTIONS : S_BUDAT FOR BSAK-BUDAT.

PARAMETERS : P_GJAHR LIKE BSAK-GJAHR.

SELECTION-SCREEN END OF BLOCK BLK.

START-OF-SELECTION.

SELECT BUKRS HKONT GJAHR BELNR BUDAT BLDAT XBLNR SHKZG

GSBER DMBTR SGTXT

INTO CORRESPONDING FIELDS OF table I_BSIS_main

FROM BSIS

WHERE

BUKRS EQ P_BUKRS AND

GJAHR EQ P_GJAHR .

if S_BUDAT IS NOT INITIAL and S_BELNR is initial.

sort i_bsis_main by budat.

loop at i_bsis_main where BUDAT IN S_BUDAT.

i_bsis-BUKRS = i_bsis_main-BUKRS.

i_bsis-BELNR = i_bsis_main-BELNR.

i_bsis-GJAHR = i_bsis_main-GJAHR.

i_bsis-BUDAT = i_bsis_main-BUDAT.

i_bsis-BLDAT = i_bsis_main-BLDAT.

i_bsis-GSBER = i_bsis_main-GSBER.

i_bsis-DMBTR = i_bsis_main-DMBTR.

i_bsis-SHKZG = i_bsis_main-SHKZG.

i_bsis-HKONT = i_bsis_main-HKONT.

i_bsis-XBLNR = i_bsis_main-XBLNR.

i_bsis-SGTXT = i_bsis_main-SGTXT.

append i_bsis.

clear i_bsis.

endloop.

endif.

if S_BUDAT IS INITIAL and S_BELNR is not initial.

sort i_bsis_main by belnr.

loop at i_bsis_main where belnr IN S_BELNR.

i_bsis-BUKRS = i_bsis_main-BUKRS.

i_bsis-BELNR = i_bsis_main-BELNR.

i_bsis-GJAHR = i_bsis_main-GJAHR.

i_bsis-BUDAT = i_bsis_main-BUDAT.

i_bsis-BLDAT = i_bsis_main-BLDAT.

i_bsis-GSBER = i_bsis_main-GSBER.

i_bsis-DMBTR = i_bsis_main-DMBTR.

i_bsis-SHKZG = i_bsis_main-SHKZG.

i_bsis-HKONT = i_bsis_main-HKONT.

i_bsis-XBLNR = i_bsis_main-XBLNR.

i_bsis-SGTXT = i_bsis_main-SGTXT.

append i_bsis.

clear i_bsis.

endloop.

endif.

LOOP AT I_BSIS where SHKZG EQ 'S'.

MAIN_TABLE-BUKRS = I_BSIS-BUKRS.

MAIN_TABLE-BELNR = I_BSIS-BELNR.

MAIN_TABLE-GJAHR = I_BSIS-GJAHR.

MAIN_TABLE-BLDAT = I_BSIS-BLDAT.

MAIN_TABLE-BUDAT = I_BSIS-BUDAT.

MAIN_TABLE-XBLNR = I_BSIS-XBLNR.

APPEND MAIN_TABLE.

CLEAR MAIN_TABLE.

ENDLOOP.

SORT MAIN_TABLE BY BELNR.

LOOP AT MAIN_TABLE.

DELETE ADJACENT DUPLICATES FROM MAIN_TABLE.

ENDLOOP.

************************************FOR G/L UPDATION

loop at i_bsis.

if i_bsis-hkont+4(1) = '4'.

i_bsis_ds-BUKRS = i_BSIS-BUKRS.

i_bsis_ds-BELNR = i_BSIS-BELNR.

i_bsis_ds-GJAHR = i_BSIS-GJAHR.

i_bsis_ds-GSBER = i_BSIS-GSBER.

i_bsis_ds-HKONT = i_BSIS-HKONT.

i_bsis_ds-SGTXT = i_BSIS-SGTXT.

append i_bsis_ds.

clear i_bsis_ds.

endif.

endloop.

LOOP AT I_BSIS_ds.

LOOP AT MAIN_TABLE WHERE BUKRS = I_BSIS_ds-BUKRS AND

BELNR = I_BSIS_Ds-BELNR AND

GJAHR = I_BSIS_Ds-GJAHR.

MAIN_TABLE-HKONT = I_BSIS_ds-HKONT.

MAIN_TABLE-SGTXT = I_BSIS_ds-SGTXT.

MAIN_TABLE-GSBER = I_BSIS_ds-GSBER.

MODIFY MAIN_TABLE INDEX SY-TABIX.

ENDLOOP.

ENDLOOP.

********************************For Total Bill Amount

LOOP AT I_BSIS WHERE

BELNR IN S_BELNR AND

BUKRS EQ P_BUKRS AND

GJAHR EQ P_GJAHR AND

BUDAT IN S_BUDAT.

I_BSISTBA-BUKRS = I_BSIS-BUKRS.

I_BSISTBA-BELNR = I_BSIS-BELNR.

I_BSISTBA-GJAHR = I_BSIS-GJAHR.

I_BSISTBA-BUDAT = I_BSIS-BUDAT.

I_BSISTBA-BLDAT = I_BSIS-BLDAT.

I_BSISTBA-GSBER = I_BSIS-GSBER.

I_BSISTBA-DMBTR = I_BSIS-DMBTR.

I_BSISTBA-SHKZG = I_BSIS-SHKZG.

I_BSISTBA-HKONT = I_BSIS-HKONT.

I_BSISTBA-XBLNR = I_BSIS-XBLNR.

I_BSISTBA-SGTXT = I_BSIS-SGTXT.

APPEND I_BSISTBA.

CLEAR I_BSISTBA.

ENDLOOP.

LOOP AT I_BSISTBA.

I_BSISAMT-BUKRS = I_BSISTBA-BUKRS.

I_BSISAMT-BELNR = I_BSISTBA-BELNR.

I_BSISAMT-GJAHR = I_BSISTBA-GJAHR.

I_BSISAMT-DMBTR = I_BSISTBA-DMBTR.

COLLECT I_BSISAMT.

CLEAR I_BSISAMT.

ENDLOOP.

LOOP AT I_BSISAMT.

LOOP AT MAIN_TABLE WHERE BUKRS = I_BSISAMT-BUKRS AND

BELNR = I_BSISAMT-BELNR AND

GJAHR = I_BSISAMT-GJAHR.

MAIN_TABLE-TOTAMT = I_BSISAMT-DMBTR.

MODIFY MAIN_TABLE INDEX SY-TABIX.

ENDLOOP.

ENDLOOP.

*******************************For SERVICE TAX

LOOP AT I_BSIS WHERE HKONT = '0000180201' AND

SHKZG = 'S'.

I_STAX-BUKRS = I_BSIS-BUKRS.

I_STAX-BELNR = I_BSIS-BELNR.

I_STAX-GJAHR = I_BSIS-GJAHR.

I_STAX-GSBER = I_BSIS-GSBER.

I_STAX-HKONT = I_BSIS-HKONT.

I_STAX-DMBTR = I_BSIS-DMBTR.

APPEND I_STAX.

CLEAR I_STAX.

ENDLOOP.

LOOP AT I_STAX.

LOOP AT MAIN_TABLE WHERE BUKRS = I_STAX-BUKRS AND

BELNR = I_STAX-BELNR AND

GJAHR = I_STAX-GJAHR.

MAIN_TABLE-STAX = I_STAX-DMBTR.

MODIFY MAIN_TABLE INDEX SY-TABIX.

ENDLOOP.

ENDLOOP.

*************************************For the Cess

LOOP AT I_BSIS WHERE HKONT = '0000180203' AND

SHKZG = 'S'.

I_CESS-BUKRS = I_BSIS-BUKRS.

I_CESS-BELNR = I_BSIS-BELNR.

I_CESS-GJAHR = I_BSIS-GJAHR.

I_CESS-GSBER = I_BSIS-GSBER.

I_CESS-HKONT = I_BSIS-HKONT.

I_CESS-DMBTR = I_BSIS-DMBTR.

APPEND I_CESS.

CLEAR I_CESS.

ENDLOOP.

LOOP AT I_CESS.

LOOP AT MAIN_TABLE WHERE BUKRS = I_CESS-BUKRS AND

BELNR = I_CESS-BELNR AND

GJAHR = I_CESS-GJAHR.

MAIN_TABLE-CESS = I_CESS-DMBTR.

MODIFY MAIN_TABLE INDEX SY-TABIX.

ENDLOOP.

ENDLOOP.

*******************************For the TDS

SELECT ABUKRS AGJAHR ABELNR AXBLNR A~SHKZG

AGSBER ADMBTR

INTO CORRESPONDING FIELDS OF

I_BSAS

FROM BSAS AS A

WHERE

BELNR IN S_BELNR AND

BUKRS EQ P_BUKRS AND

GJAHR EQ P_GJAHR AND

SHKZG EQ 'H' AND

BUDAT IN S_BUDAT.

COLLECT I_BSAS.

CLEAR I_BSAS.

ENDSELECT.

LOOP AT I_BSAS.

LOOP AT MAIN_TABLE WHERE BUKRS = I_BSAS-BUKRS AND

BELNR = I_BSAS-BELNR AND

GJAHR = I_BSAS-GJAHR.

MAIN_TABLE-TDS = I_BSAS-DMBTR.

MODIFY MAIN_TABLE INDEX SY-TABIX.

ENDLOOP.

ENDLOOP.

                                                          • For G/L TEXT

LOOP AT MAIN_TABLE.

SELECT SAKNR TXT20

INTO CORRESPONDING FIELDS OF TABLE I_SKAT

FROM SKAT

WHERE

SAKNR EQ MAIN_TABLE-HKONT.

ENDLOOP.

LOOP AT I_SKAT.

LOOP AT MAIN_TABLE WHERE HKONT = I_SKAT-SAKNR.

MAIN_TABLE-TXT20 = I_SKAT-TXT20.

MODIFY MAIN_TABLE INDEX SY-TABIX.

ENDLOOP.

ENDLOOP.

******************************************Clearing Doc

LOOP AT MAIN_TABLE.

SELECT BUKRS BELNR GJAHR AUGBL AUGDT LIFNR

INTO CORRESPONDING FIELDS OF I_CLGDOC

FROM BSAK

WHERE

BELNR EQ MAIN_TABLE-BELNR AND

BUKRS EQ MAIN_TABLE-BUKRS AND

GJAHR EQ MAIN_TABLE-GJAHR.

ENDSELECT.

APPEND I_CLGDOC.

CLEAR I_CLGDOC.

ENDLOOP.

LOOP AT I_CLGDOC.

SELECT BUKRS BELNR AUGDT GJAHR DMBTR LIFNR

INTO CORRESPONDING FIELDS OF I_CLEARED

FROM BSAK

WHERE

BELNR EQ I_CLGDOC-AUGBL AND

BUKRS EQ I_CLGDOC-BUKRS AND

GJAHR EQ I_CLGDOC-GJAHR.

ENDSELECT.

APPEND I_CLEARED.

CLEAR I_CLEARED.

ENDLOOP.

*************************************Vendor Details

LOOP AT I_CLGDOC.

SELECT LIFNR NAME1 NAME2 ORT01

INTO CORRESPONDING FIELDS OF I_LFA1

FROM LFA1 AS A

WHERE LIFNR = I_CLGDOC-LIFNR.

ENDSELECT.

APPEND I_LFA1.

CLEAR I_LFA1.

ENDLOOP.

************************Clearing Document

LOOP AT I_CLGDOC.

LOOP AT MAIN_TABLE WHERE BUKRS = I_CLGDOC-BUKRS AND

BELNR = I_CLGDOC-BELNR AND

GJAHR = I_CLGDOC-GJAHR.

MAIN_TABLE-AUGBL = I_CLGDOC-AUGBL.

MAIN_TABLE-AUGDT = I_CLGDOC-AUGDT.

MAIN_TABLE-LIFNR = I_CLGDOC-LIFNR.

MODIFY MAIN_TABLE INDEX SY-TABIX.

ENDLOOP.

ENDLOOP.

************************Payment

LOOP AT I_CLEARED.

LOOP AT I_CLGDOC WHERE BUKRS = I_CLEARED-BUKRS AND

AUGBL = I_CLEARED-BELNR AND

GJAHR = I_CLEARED-GJAHR.

LOOP AT MAIN_TABLE WHERE BUKRS = I_CLGDOC-BUKRS AND

BELNR = I_CLGDOC-BELNR AND

GJAHR = I_CLGDOC-GJAHR.

MAIN_TABLE-PAYAMT = I_CLEARED-DMBTR.

MODIFY MAIN_TABLE INDEX SY-TABIX.

ENDLOOP.

ENDLOOP.

ENDLOOP.

***********************Vendor Details

LOOP AT I_LFA1.

LOOP AT MAIN_TABLE WHERE LIFNR = I_LFA1-LIFNR.

MAIN_TABLE-NAME1 = I_LFA1-NAME1.

MAIN_TABLE-ORT01 = I_LFA1-ORT01.

MODIFY MAIN_TABLE INDEX SY-TABIX.

ENDLOOP.

ENDLOOP.

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

CLEAR CRTP.

CLEAR VALGS.

LOOP AT MAIN_TABLE WHERE STAX > 0 .

**********VALUE OF GOODS OR SERVICES

VALGS = ( MAIN_TABLE-TOTAMT - MAIN_TABLE-STAX - MAIN_TABLE-CESS ).

**********CREDIT TO PARTY

CRTP = ( MAIN_TABLE-TOTAMT - MAIN_TABLE-TDS ).

WRITE:/5 '|' NO-GAP, MAIN_TABLE-BELNR,

16 '|' NO-GAP, MAIN_TABLE-BLDAT,

27 '|' NO-GAP, MAIN_TABLE-BUDAT,

38 '|' NO-GAP, MAIN_TABLE-XBLNR,

48 '|' NO-GAP, MAIN_TABLE-SGTXT,

85 '|' NO-GAP, MAIN_TABLE-GSBER,

90 '|' NO-GAP, MAIN_TABLE-HKONT,

98 '|' NO-GAP, MAIN_TABLE-TXT20,

112 '|' NO-GAP, MAIN_TABLE-NAME1,

146 '|' NO-GAP, MAIN_TABLE-ORT01,

157 '|' NO-GAP, MAIN_TABLE-TOTAMT LEFT-JUSTIFIED,

170 '|' NO-GAP, MAIN_TABLE-STAX LEFT-JUSTIFIED ,

180 '|' NO-GAP, MAIN_TABLE-CESS LEFT-JUSTIFIED,

188 '|' NO-GAP, VALGS LEFT-JUSTIFIED,

199 '|' NO-GAP, MAIN_TABLE-TDS LEFT-JUSTIFIED,

210 '|' NO-GAP, CRTP LEFT-JUSTIFIED,

222 '|' NO-GAP, MAIN_TABLE-AUGBL,

234 '|' NO-GAP, MAIN_TABLE-AUGDT,

245 '|' NO-GAP, MAIN_TABLE-PAYAMT LEFT-JUSTIFIED,

257 '|'.

ENDLOOP.

WRITE :/5 SY-ULINE(250).

WRITE :250 SY-ULINE(8).

END-OF-SELECTION.

*

TOP-OF-PAGE.

WRITE :/5 'Service Tax Report'.

WRITE :/5 SY-ULINE(250).

WRITE :250 SY-ULINE(8).

WRITE :/5 '|' NO-GAP, 'AcctDocNo.' COLOR 6 INVERSE ON,

16 '|' NO-GAP, 'Doc Date' COLOR 6 INVERSE ON,

27 '|' NO-GAP, 'Posting Dt' COLOR 6 INVERSE ON,

38 '|' NO-GAP, 'Reference' COLOR 6 INVERSE ON,

48 '|' NO-GAP, 'Text' COLOR 6 INVERSE ON,

85 '|' NO-GAP, 'BusA' COLOR 6 INVERSE ON,

90 '|' NO-GAP, 'GL Code' COLOR 6 INVERSE ON,

98 '|' NO-GAP, 'GL Desc' COLOR 6 INVERSE ON,

112 '|' NO-GAP, 'Party Name' COLOR 6 INVERSE ON,

146 '|' NO-GAP, 'City' COLOR 6 INVERSE ON,

157 '|' NO-GAP, 'TotBillAmt' COLOR 6 INVERSE ON,

170 '|' NO-GAP, 'STax' COLOR 6 INVERSE ON,

180 '|' NO-GAP, 'ECess' COLOR 6 INVERSE ON,

188 '|' NO-GAP, 'VoSer' COLOR 6 INVERSE ON,

199 '|' NO-GAP, 'TDS' COLOR 6 INVERSE ON,

210 '|' NO-GAP, 'Cr-Party' COLOR 6 INVERSE ON,

222 '|' NO-GAP, 'PayDocNo.' COLOR 6 INVERSE ON,

234 '|' NO-GAP, 'DocDt' COLOR 6 INVERSE ON,

245 '|' NO-GAP, 'PaymentAmt' COLOR 6 INVERSE ON,

257 '|'.

WRITE :/5 SY-ULINE(250).

WRITE :250 SY-ULINE(8).

END-OF-PAGE.

3 REPLIES 3
Read only

Former Member
0 Likes
426

The first you can optimize is:

chage the following:

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

SELECT BUKRS HKONT GJAHR BELNR BUDAT BLDAT XBLNR SHKZG

GSBER DMBTR SGTXT

INTO CORRESPONDING FIELDS OF table I_BSIS_main

FROM BSIS

WHERE

BUKRS EQ P_BUKRS AND

GJAHR EQ P_GJAHR .

if S_BUDAT IS NOT INITIAL and S_BELNR is initial.

sort i_bsis_main by budat.

loop at i_bsis_main where BUDAT IN S_BUDAT.

i_bsis-BUKRS = i_bsis_main-BUKRS.

i_bsis-BELNR = i_bsis_main-BELNR.

i_bsis-GJAHR = i_bsis_main-GJAHR.

i_bsis-BUDAT = i_bsis_main-BUDAT.

i_bsis-BLDAT = i_bsis_main-BLDAT.

i_bsis-GSBER = i_bsis_main-GSBER.

i_bsis-DMBTR = i_bsis_main-DMBTR.

i_bsis-SHKZG = i_bsis_main-SHKZG.

i_bsis-HKONT = i_bsis_main-HKONT.

i_bsis-XBLNR = i_bsis_main-XBLNR.

i_bsis-SGTXT = i_bsis_main-SGTXT.

append i_bsis.

clear i_bsis.

endloop.

endif.

if S_BUDAT IS INITIAL and S_BELNR is not initial.

sort i_bsis_main by belnr.

loop at i_bsis_main where belnr IN S_BELNR.

i_bsis-BUKRS = i_bsis_main-BUKRS.

i_bsis-BELNR = i_bsis_main-BELNR.

i_bsis-GJAHR = i_bsis_main-GJAHR.

i_bsis-BUDAT = i_bsis_main-BUDAT.

i_bsis-BLDAT = i_bsis_main-BLDAT.

i_bsis-GSBER = i_bsis_main-GSBER.

i_bsis-DMBTR = i_bsis_main-DMBTR.

i_bsis-SHKZG = i_bsis_main-SHKZG.

i_bsis-HKONT = i_bsis_main-HKONT.

i_bsis-XBLNR = i_bsis_main-XBLNR.

i_bsis-SGTXT = i_bsis_main-SGTXT.

append i_bsis.

clear i_bsis.

endloop.

endif.

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

SELECT BUKRS HKONT GJAHR BELNR BUDAT BLDAT XBLNR SHKZG

GSBER DMBTR SGTXT

INTO CORRESPONDING FIELDS OF table I_BSIS

FROM BSIS

WHERE

BUKRS EQ P_BUKRS AND

BELNR in S_BELNR AND

BUDAT in S_BUDAT AND

GJAHR EQ P_GJAHR .

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

For a single document it should finish immediately.

I could help you more but I don't have a SAP test system where to check it.

I hope this helps you,

Aubin

Read only

Former Member
0 Likes
426

Hi,

Please try these suggessitions:

1. Do not use SELECT-ENDSELECT below, Instead, use group by addition to get the total.

*******************************For the TDS

SELECT ABUKRS AGJAHR ABELNR AXBLNR A~SHKZG

AGSBER ADMBTR

INTO CORRESPONDING FIELDS OF

I_BSAS

FROM BSAS AS A

WHERE

BELNR IN S_BELNR AND

BUKRS EQ P_BUKRS AND

GJAHR EQ P_GJAHR AND

SHKZG EQ 'H' AND

BUDAT IN S_BUDAT.

COLLECT I_BSAS.

CLEAR I_BSAS.

ENDSELECT.

2. Do not use SELECT statement in the loop below. Instead, use FOR ALL ENTRIES IN addition in the SELECT statement and get the texts in one database access.

                                                          • For G/L TEXT

LOOP AT MAIN_TABLE.

SELECT SAKNR TXT20

INTO CORRESPONDING FIELDS OF TABLE I_SKAT

FROM SKAT

WHERE

SAKNR EQ MAIN_TABLE-HKONT.

ENDLOOP.

3. Do not use SELECT statement in the loop below. Instead, use FOR ALL ENTRIES IN addition in the SELECT statement and get the clearing documents in one database access.

******************************************Clearing Doc

LOOP AT MAIN_TABLE.

SELECT BUKRS BELNR GJAHR AUGBL AUGDT LIFNR

INTO CORRESPONDING FIELDS OF I_CLGDOC

FROM BSAK

WHERE

BELNR EQ MAIN_TABLE-BELNR AND

BUKRS EQ MAIN_TABLE-BUKRS AND

GJAHR EQ MAIN_TABLE-GJAHR.

ENDSELECT.

APPEND I_CLGDOC.

CLEAR I_CLGDOC.

ENDLOOP.

LOOP AT I_CLGDOC.

SELECT BUKRS BELNR AUGDT GJAHR DMBTR LIFNR

INTO CORRESPONDING FIELDS OF I_CLEARED

FROM BSAK

WHERE

BELNR EQ I_CLGDOC-AUGBL AND

BUKRS EQ I_CLGDOC-BUKRS AND

GJAHR EQ I_CLGDOC-GJAHR.

ENDSELECT.

APPEND I_CLEARED.

CLEAR I_CLEARED.

ENDLOOP.

4. Below SELECT statement in loop can also be replaced by a single SELECT statements with FOR ALL ENTRIES IN addition.

*************************************Vendor Details

LOOP AT I_CLGDOC.

SELECT LIFNR NAME1 NAME2 ORT01

INTO CORRESPONDING FIELDS OF I_LFA1

FROM LFA1 AS A

WHERE LIFNR = I_CLGDOC-LIFNR.

ENDSELECT.

APPEND I_LFA1.

CLEAR I_LFA1.

ENDLOOP.

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

Please reward points if helpfull.

Regards,

Prabhas.

Read only

Former Member
0 Likes
426

Alok,

My initial scan of the report says that you have used too many loops which are not required. But I would like to go through it in a bit more detail to give you the complete soln. U can keep watching my reply. Please check on the my comments on the below code in <b>BOLD</b>.

> REPORT ZFI_R018 NO STANDARD PAGE HEADING LINE-SIZE

> 500

> MESSAGE-ID ZMATLIST.

>

> ******************************************************

> ********

>

> * Description: Report on Service Tax

>

> * Author :

>

> * Date :

>

> * Request ID :

>

> ******************************************************

> ********

>

> TABLES : BSIK, BSAK, BSAS, BSIS, LFA1, SKAT.

>

> DATA : CRTP LIKE BSAS-DMBTR,

> VALGS LIKE BSAS-DMBTR.

>

>

> DATA : BEGIN OF I_BSIS_ds OCCURS 0,

> BUKRS LIKE BSIS-BUKRS,

> BELNR LIKE BSIS-BELNR,

> GJAHR LIKE BSIS-GJAHR,

> GSBER LIKE BSIS-GSBER,

> HKONT LIKE BSIS-HKONT,

> SGTXT LIKE BSIS-SGTXT,

> END OF I_BSIS_ds.

>

> DATA : BEGIN OF I_BSIS OCCURS 0,

> BUKRS LIKE BSIS-BUKRS,

> BELNR LIKE BSIS-BELNR,

> GJAHR LIKE BSIS-GJAHR,

> BUDAT LIKE BSIS-BUDAT,

> BLDAT LIKE BSIS-BLDAT,

> GSBER LIKE BSIS-GSBER,

> DMBTR LIKE BSIS-DMBTR,

> SHKZG LIKE BSIS-SHKZG,

> HKONT LIKE BSIS-HKONT,

> XBLNR LIKE BSIS-XBLNR,

> SGTXT LIKE BSIS-SGTXT,

> END OF I_BSIS.

>

> DATA : BEGIN OF I_BSISTBA OCCURS 0,

> BUKRS LIKE BSIS-BUKRS,

> BELNR LIKE BSIS-BELNR,

> GJAHR LIKE BSIS-GJAHR,

> BUDAT LIKE BSIS-BUDAT,

> BLDAT LIKE BSIS-BLDAT,

> GSBER LIKE BSIS-GSBER,

> DMBTR LIKE BSIS-DMBTR,

> SHKZG LIKE BSIS-SHKZG,

> HKONT LIKE BSIS-HKONT,

> XBLNR LIKE BSIS-XBLNR,

> SGTXT LIKE BSIS-SGTXT,

> END OF I_BSISTBA.

>

> DATA : BEGIN OF I_BSISAMT OCCURS 0,

> BUKRS LIKE BSIS-BUKRS,

> BELNR LIKE BSIS-BELNR,

> GJAHR LIKE BSIS-GJAHR,

> BUDAT LIKE BSIS-BUDAT,

> BLDAT LIKE BSIS-BLDAT,

> GSBER LIKE BSIS-GSBER,

> DMBTR LIKE BSIS-DMBTR,

> SHKZG LIKE BSIS-SHKZG,

> HKONT LIKE BSIS-HKONT,

> XBLNR LIKE BSIS-XBLNR,

> END OF I_BSISAMT.

>

> DATA : BEGIN OF I_BSAS OCCURS 0,

> BUKRS LIKE BSAS-BUKRS,

> BELNR LIKE BSAS-BELNR,

> GJAHR LIKE BSAS-GJAHR,

> BUDAT LIKE BSAS-BUDAT,

> BLDAT LIKE BSAS-BLDAT,

> GSBER LIKE BSAS-GSBER,

> DMBTR LIKE BSAS-DMBTR,

> SHKZG LIKE BSAS-SHKZG,

> HKONT LIKE BSAS-HKONT,

> XBLNR LIKE BSAS-XBLNR,

> END OF I_BSAS.

>

> DATA : BEGIN OF I_BSIK OCCURS 0,

> BUKRS LIKE BSIK-BUKRS,

> BELNR LIKE BSIK-BELNR,

> GJAHR LIKE BSIK-GJAHR,

> BUDAT LIKE BSIK-BUDAT,

> BLDAT LIKE BSIK-BLDAT,

> GSBER LIKE BSIK-GSBER,

> DMBTR LIKE BSIK-DMBTR,

> SHKZG LIKE BSIK-SHKZG,

> HKONT LIKE BSIK-HKONT,

> XBLNR LIKE BSIK-XBLNR,

> END OF I_BSIK.

>

> DATA : BEGIN OF I_BSAK OCCURS 0,

> BUKRS LIKE BSAK-BUKRS,

> BELNR LIKE BSAK-BELNR,

> GJAHR LIKE BSAK-GJAHR,

> BUDAT LIKE BSAK-BUDAT,

> BLDAT LIKE BSAK-BLDAT,

> GSBER LIKE BSAK-GSBER,

> DMBTR LIKE BSAK-DMBTR,

> SHKZG LIKE BSAK-SHKZG,

> HKONT LIKE BSAK-HKONT,

> XBLNR LIKE BSAK-XBLNR,

> END OF I_BSAK.

>

> DATA : BEGIN OF I_TOTTEMP1 OCCURS 0,

> BUKRS LIKE BSAK-BUKRS,

> BELNR LIKE BSAK-BELNR,

> GJAHR LIKE BSAK-GJAHR,

> GSBER LIKE BSAK-GSBER,

> DMBTR LIKE BSAK-DMBTR,

> SHKZG LIKE BSAK-SHKZG,

> HKONT LIKE BSAK-HKONT,

> END OF I_TOTTEMP1.

>

> DATA : BEGIN OF I_TOTTEMP2 OCCURS 0,

> BUKRS LIKE BSAK-BUKRS,

> BELNR LIKE BSAK-BELNR,

> GJAHR LIKE BSAK-GJAHR,

> GSBER LIKE BSAK-GSBER,

> DMBTR LIKE BSAK-DMBTR,

> SHKZG LIKE BSAK-SHKZG,

> HKONT LIKE BSAK-HKONT,

> BUDAT LIKE BSAK-BUDAT,

> BLDAT LIKE BSAK-BLDAT,

> XBLNR LIKE BSAK-XBLNR,

> END OF I_TOTTEMP2.

>

> DATA : BEGIN OF I_TOTAMT OCCURS 0,

> BUKRS LIKE BSAK-BUKRS,

> BELNR LIKE BSAK-BELNR,

> GJAHR LIKE BSAK-GJAHR,

> GSBER LIKE BSAK-GSBER,

> DMBTR LIKE BSAK-DMBTR,

> SHKZG LIKE BSAK-SHKZG,

> HKONT LIKE BSAK-HKONT,

> BUDAT LIKE BSAK-BUDAT,

> BLDAT LIKE BSAK-BLDAT,

> XBLNR LIKE BSAK-XBLNR,

> END OF I_TOTAMT.

>

> DATA : BEGIN OF I_TOTAMTGL OCCURS 0,

> BUKRS LIKE BSAK-BUKRS,

> BELNR LIKE BSAK-BELNR,

> GJAHR LIKE BSAK-GJAHR,

> GSBER LIKE BSAK-GSBER,

> DMBTR LIKE BSAK-DMBTR,

> SHKZG LIKE BSAK-SHKZG,

> HKONT LIKE BSAK-HKONT,

> BUDAT LIKE BSAK-BUDAT,

> BLDAT LIKE BSAK-BLDAT,

> XBLNR LIKE BSAK-XBLNR,

> END OF I_TOTAMTGL.

>

>

> DATA : BEGIN OF I_STAX OCCURS 0,

> BUKRS LIKE BSEG-BUKRS,

> BELNR LIKE BSEG-BELNR,

> GJAHR LIKE BSEG-GJAHR,

> GSBER LIKE BSEG-GSBER,

> HKONT LIKE BSEG-HKONT,

> DMBTR LIKE BSEG-DMBTR,

> END OF I_STAX.

>

> DATA : BEGIN OF I_CESS OCCURS 0,

> BUKRS LIKE BSAK-BUKRS,

> BELNR LIKE BSAK-BELNR,

> GJAHR LIKE BSAK-GJAHR,

> GSBER LIKE BSAK-GSBER,

> HKONT LIKE BSAK-HKONT,

> SHKZG LIKE BSAK-SHKZG,

> DMBTR LIKE BSAK-DMBTR,

> END OF I_CESS.

>

> DATA : BEGIN OF I_CLGDOC OCCURS 0,

> BUKRS LIKE BSAK-BUKRS,

> BELNR LIKE BSAK-BELNR,

> GJAHR LIKE BSAK-GJAHR,

> GSBER LIKE BSAK-GSBER,

> HKONT LIKE BSAK-HKONT,

> LIFNR LIKE BSAK-LIFNR,

> DMBTR LIKE BSAK-DMBTR,

> AUGBL LIKE BSAK-AUGBL,

> AUGDT LIKE BSAK-AUGDT,

> END OF I_CLGDOC.

>

> DATA : BEGIN OF I_CLEARED OCCURS 0,

> BUKRS LIKE BSAK-BUKRS,

> BELNR LIKE BSAK-BELNR,

> GJAHR LIKE BSAK-GJAHR,

> GSBER LIKE BSAK-GSBER,

> HKONT LIKE BSAK-HKONT,

> LIFNR LIKE BSAK-LIFNR,

> DMBTR LIKE BSAK-DMBTR,

> END OF I_CLEARED.

>

> DATA : BEGIN OF I_TDS OCCURS 0,

> BUKRS LIKE BSAK-BUKRS,

> BELNR LIKE BSAK-BELNR,

> GJAHR LIKE BSAK-GJAHR,

> SHKZG LIKE BSAK-SHKZG,

> GSBER LIKE BSAK-GSBER,

> DMBTR LIKE BSAK-DMBTR,

> END OF I_TDS.

>

> DATA : BEGIN OF I_CREDIT OCCURS 0,

> BUKRS LIKE BKPF-BUKRS,

> BELNR LIKE BKPF-BELNR,

> GJAHR LIKE BKPF-GJAHR,

> LIFNR LIKE BSEG-LIFNR,

> SHKZG LIKE BSEG-SHKZG,

> DMBTR LIKE BSEG-DMBTR,

> END OF I_CREDIT.

>

> DATA: BEGIN OF I_LFA1 OCCURS 0,

> LIFNR LIKE LFA1-LIFNR,

> NAME1 LIKE LFA1-NAME1,

> NAME2 LIKE LFA1-NAME2,

> ORT01 LIKE LFA1-ORT01,

> END OF I_LFA1.

>

> DATA: BEGIN OF I_SKAT OCCURS 0,

> SAKNR LIKE SKAT-SAKNR,

> TXT20 LIKE SKAT-TXT20,

> END OF I_SKAT.

>

> DATA : BEGIN OF I_BSIS_main OCCURS 0,

> BUKRS LIKE BSIS-BUKRS,

> BELNR LIKE BSIS-BELNR,

> GJAHR LIKE BSIS-GJAHR,

> BUDAT LIKE BSIS-BUDAT,

> BLDAT LIKE BSIS-BLDAT,

> GSBER LIKE BSIS-GSBER,

> DMBTR LIKE BSIS-DMBTR,

> SHKZG LIKE BSIS-SHKZG,

> HKONT LIKE BSIS-HKONT,

> XBLNR LIKE BSIS-XBLNR,

> SGTXT LIKE BSIS-SGTXT,

> END OF I_BSIS_main.

>

> DATA: BEGIN OF MAIN_TABLE OCCURS 0,

> BUKRS LIKE BSEG-BUKRS,

> BELNR LIKE BSEG-BELNR,

> BLDAT LIKE BKPF-BLDAT,

> BUDAT LIKE BKPF-BUDAT,

> GJAHR LIKE BSEG-GJAHR,

> SGTXT LIKE BSEG-SGTXT,

> GSBER LIKE BSEG-GSBER,

> HKONT LIKE BSEG-HKONT,

> TXT20 LIKE SKAT-TXT20,

> LIFNR LIKE BSEG-LIFNR,

> NAME1 LIKE LFA1-NAME1,

> NAME2 LIKE LFA1-NAME2,

> ORT01 LIKE LFA1-ORT01,

> TOTAMT LIKE BSEG-DMBTR,

> STAX LIKE BSEG-DMBTR,

> CESS LIKE BSEG-DMBTR,

> EDCESS LIKE BSEG-DMBTR,

> VALGS LIKE BSEG-DMBTR,

> TDS LIKE BSEG-DMBTR,

> CREDIT LIKE BSEG-DMBTR,

> AUGBL LIKE BSEG-AUGBL,

> AUGDT LIKE BSEG-AUGDT,

> PAYAMT LIKE BSEG-DMBTR,

> XBLNR LIKE BKPF-XBLNR,

> END OF MAIN_TABLE.

>

> **********************

> **SELECTION-SCREEN**

> **********************

>

> SELECTION-SCREEN BEGIN OF BLOCK BLK.

>

> PARAMETERS : P_BUKRS LIKE BSAK-BUKRS.

>

> SELECT-OPTIONS : S_GSBER FOR BSAK-GSBER.

>

> SELECT-OPTIONS : S_BELNR FOR BSAK-BELNR.

>

> SELECT-OPTIONS : S_BUDAT FOR BSAK-BUDAT.

>

> PARAMETERS : P_GJAHR LIKE BSAK-GJAHR.

>

> SELECTION-SCREEN END OF BLOCK BLK.

>

> START-OF-SELECTION.

>

> SELECT BUKRS HKONT GJAHR BELNR BUDAT BLDAT XBLNR

> SHKZG

> GSBER DMBTR SGTXT

> INTO CORRESPONDING FIELDS OF table I_BSIS_main

> FROM BSIS

> WHERE

> BUKRS EQ P_BUKRS AND

> GJAHR EQ P_GJAHR .

>

>

> if S_BUDAT IS NOT INITIAL and S_BELNR is initial.

>

> sort i_bsis_main by budat.

> loop at i_bsis_main where BUDAT IN S_BUDAT.

>

> i_bsis-BUKRS = i_bsis_main-BUKRS.

> i_bsis-BELNR = i_bsis_main-BELNR.

> i_bsis-GJAHR = i_bsis_main-GJAHR.

> i_bsis-BUDAT = i_bsis_main-BUDAT.

> i_bsis-BLDAT = i_bsis_main-BLDAT.

> i_bsis-GSBER = i_bsis_main-GSBER.

> i_bsis-DMBTR = i_bsis_main-DMBTR.

> i_bsis-SHKZG = i_bsis_main-SHKZG.

> i_bsis-HKONT = i_bsis_main-HKONT.

> i_bsis-XBLNR = i_bsis_main-XBLNR.

> i_bsis-SGTXT = i_bsis_main-SGTXT.

>

> append i_bsis.

> clear i_bsis.

> endloop.

> endif.

>

>

> if S_BUDAT IS INITIAL and S_BELNR is not initial.

> sort i_bsis_main by belnr.

> loop at i_bsis_main where belnr IN S_BELNR.

>

> i_bsis-BUKRS = i_bsis_main-BUKRS.

> i_bsis-BELNR = i_bsis_main-BELNR.

> i_bsis-GJAHR = i_bsis_main-GJAHR.

> i_bsis-BUDAT = i_bsis_main-BUDAT.

> i_bsis-BLDAT = i_bsis_main-BLDAT.

> i_bsis-GSBER = i_bsis_main-GSBER.

> i_bsis-DMBTR = i_bsis_main-DMBTR.

> i_bsis-SHKZG = i_bsis_main-SHKZG.

> i_bsis-HKONT = i_bsis_main-HKONT.

> i_bsis-XBLNR = i_bsis_main-XBLNR.

> i_bsis-SGTXT = i_bsis_main-SGTXT.

>

> append i_bsis.

> clear i_bsis.

> endloop.

> endif.

<b>Why dont you use the select options straight way during the select from BSIS rather than having to loop at it twice. If you dont enter any information on the selection-screen for a select-option it means all the records. So ideally change your select to use BELNR in SO_BELNR.</b>

>

> LOOP AT I_BSIS where SHKZG EQ 'S'.

>

> MAIN_TABLE-BUKRS = I_BSIS-BUKRS.

> MAIN_TABLE-BELNR = I_BSIS-BELNR.

> MAIN_TABLE-GJAHR = I_BSIS-GJAHR.

> MAIN_TABLE-BLDAT = I_BSIS-BLDAT.

> MAIN_TABLE-BUDAT = I_BSIS-BUDAT.

> MAIN_TABLE-XBLNR = I_BSIS-XBLNR.

>

> APPEND MAIN_TABLE.

> CLEAR MAIN_TABLE.

> ENDLOOP.

>

>

> SORT MAIN_TABLE BY BELNR.

> LOOP AT MAIN_TABLE.

> DELETE ADJACENT DUPLICATES FROM MAIN_TABLE.

> ENDLOOP.

<b>U dont need to loop at the table to delete adjacent duplicates.</b>

> ************************************FOR G/L UPDATION

>

>

> loop at i_bsis.

> if i_bsis-hkont+4(1) = '4'.

> i_bsis_ds-BUKRS = i_BSIS-BUKRS.

> i_bsis_ds-BELNR = i_BSIS-BELNR.

> i_bsis_ds-GJAHR = i_BSIS-GJAHR.

> i_bsis_ds-GSBER = i_BSIS-GSBER.

> i_bsis_ds-HKONT = i_BSIS-HKONT.

> i_bsis_ds-SGTXT = i_BSIS-SGTXT.

> append i_bsis_ds.

> clear i_bsis_ds.

> endif.

> endloop.

>

>

> LOOP AT I_BSIS_ds.

> LOOP AT MAIN_TABLE WHERE BUKRS =

> I_BSIS_ds-BUKRS AND

> BELNR =

> BELNR = I_BSIS_Ds-BELNR AND

> GJAHR =

> GJAHR = I_BSIS_Ds-GJAHR.

>

> MAIN_TABLE-HKONT = I_BSIS_ds-HKONT.

> MAIN_TABLE-SGTXT = I_BSIS_ds-SGTXT.

> MAIN_TABLE-GSBER = I_BSIS_ds-GSBER.

> MODIFY MAIN_TABLE INDEX SY-TABIX.

>

> ENDLOOP.

> ENDLOOP.

<b>Instead of looping at other internal table and updating MAIN_TABLE so many times ...when you collected all the information required, you should do is LOOP at the main_table..read the other internal table with the key

and modify main_table.</b>

> ********************************For Total Bill

> Amount

>

> LOOP AT I_BSIS WHERE

> BELNR IN S_BELNR AND

> BUKRS EQ P_BUKRS AND

> GJAHR EQ P_GJAHR AND

> BUDAT IN S_BUDAT.

>

> I_BSISTBA-BUKRS = I_BSIS-BUKRS.

> I_BSISTBA-BELNR = I_BSIS-BELNR.

> I_BSISTBA-GJAHR = I_BSIS-GJAHR.

> I_BSISTBA-BUDAT = I_BSIS-BUDAT.

> I_BSISTBA-BLDAT = I_BSIS-BLDAT.

> I_BSISTBA-GSBER = I_BSIS-GSBER.

> I_BSISTBA-DMBTR = I_BSIS-DMBTR.

> I_BSISTBA-SHKZG = I_BSIS-SHKZG.

> I_BSISTBA-HKONT = I_BSIS-HKONT.

> I_BSISTBA-XBLNR = I_BSIS-XBLNR.

> I_BSISTBA-SGTXT = I_BSIS-SGTXT.

>

>

> APPEND I_BSISTBA.

> CLEAR I_BSISTBA.

> ENDLOOP.

>

>

> LOOP AT I_BSISTBA.

>

> I_BSISAMT-BUKRS = I_BSISTBA-BUKRS.

> I_BSISAMT-BELNR = I_BSISTBA-BELNR.

> I_BSISAMT-GJAHR = I_BSISTBA-GJAHR.

> I_BSISAMT-DMBTR = I_BSISTBA-DMBTR.

>

> COLLECT I_BSISAMT.

> CLEAR I_BSISAMT.

> ENDLOOP.

<b>U can combine the above two loops into a single loop.</b>

> LOOP AT I_BSISAMT.

>

> LOOP AT MAIN_TABLE WHERE BUKRS =

> I_BSISAMT-BUKRS AND

> BELNR =

> BELNR = I_BSISAMT-BELNR AND

> GJAHR =

> GJAHR = I_BSISAMT-GJAHR.

>

> MAIN_TABLE-TOTAMT = I_BSISAMT-DMBTR.

>

> MODIFY MAIN_TABLE INDEX SY-TABIX.

>

> ENDLOOP.

> ENDLOOP.

>

> *******************************For SERVICE TAX

>

>

> LOOP AT I_BSIS WHERE HKONT = '0000180201' AND

> SHKZG = 'S'.

>

>

> I_STAX-BUKRS = I_BSIS-BUKRS.

> I_STAX-BELNR = I_BSIS-BELNR.

> I_STAX-GJAHR = I_BSIS-GJAHR.

> I_STAX-GSBER = I_BSIS-GSBER.

> I_STAX-HKONT = I_BSIS-HKONT.

> I_STAX-DMBTR = I_BSIS-DMBTR.

>

> APPEND I_STAX.

> CLEAR I_STAX.

> ENDLOOP.

>

> LOOP AT I_STAX.

>

> LOOP AT MAIN_TABLE WHERE BUKRS = I_STAX-BUKRS

> AND

> BELNR = I_STAX-BELNR

> BELNR = I_STAX-BELNR AND

> GJAHR =

> GJAHR = I_STAX-GJAHR.

>

> MAIN_TABLE-STAX = I_STAX-DMBTR.

>

> MODIFY MAIN_TABLE INDEX SY-TABIX.

>

> ENDLOOP.

> ENDLOOP.

>

> *************************************For the Cess

>

> LOOP AT I_BSIS WHERE HKONT = '0000180203' AND

> SHKZG = 'S'.

>

> I_CESS-BUKRS = I_BSIS-BUKRS.

> I_CESS-BELNR = I_BSIS-BELNR.

> I_CESS-GJAHR = I_BSIS-GJAHR.

> I_CESS-GSBER = I_BSIS-GSBER.

> I_CESS-HKONT = I_BSIS-HKONT.

> I_CESS-DMBTR = I_BSIS-DMBTR.

>

> APPEND I_CESS.

> CLEAR I_CESS.

> ENDLOOP.

>

> LOOP AT I_CESS.

>

> LOOP AT MAIN_TABLE WHERE BUKRS = I_CESS-BUKRS

> S AND

> BELNR = I_CESS-BELNR

> BELNR = I_CESS-BELNR AND

> GJAHR =

> GJAHR = I_CESS-GJAHR.

>

> MAIN_TABLE-CESS = I_CESS-DMBTR.

>

> MODIFY MAIN_TABLE INDEX SY-TABIX.

>

> ENDLOOP.

> ENDLOOP.

> *******************************For the TDS

>

> SELECT ABUKRS AGJAHR ABELNR AXBLNR A~SHKZG

> AGSBER ADMBTR

> INTO CORRESPONDING FIELDS OF

> I_BSAS

> FROM BSAS AS A

> WHERE

> BELNR IN S_BELNR AND

> BUKRS EQ P_BUKRS AND

> GJAHR EQ P_GJAHR AND

> SHKZG EQ 'H' AND

> BUDAT IN S_BUDAT.

>

>

> COLLECT I_BSAS.

> CLEAR I_BSAS.

> ENDSELECT.

<b>Instead of SELECT..ENDSELECT, you can use the GROUP BY variation to get the sum.</b>

> LOOP AT I_BSAS.

>

> LOOP AT MAIN_TABLE WHERE BUKRS =

> = I_BSAS-BUKRS AND

> BELNR =

> BELNR = I_BSAS-BELNR AND

> GJAHR =

> GJAHR = I_BSAS-GJAHR.

> MAIN_TABLE-TDS = I_BSAS-DMBTR.

>

> MODIFY MAIN_TABLE INDEX SY-TABIX.

>

> ENDLOOP.

> ENDLOOP.

<b>Lets say you can update your MAIN_TABLE here</b>

> ***************************** For G/L TEXT

>

> LOOP AT MAIN_TABLE.

>

> SELECT SAKNR TXT20

> INTO CORRESPONDING FIELDS OF TABLE I_SKAT

> FROM SKAT

> WHERE

> SAKNR EQ MAIN_TABLE-HKONT.

> ENDLOOP.

<b>Here again you can use the variation of SELECT statement using the FOR ALL ENTRIES.</b>

> LOOP AT I_SKAT.

>

> LOOP AT MAIN_TABLE WHERE HKONT = I_SKAT-SAKNR.

>

>

> MAIN_TABLE-TXT20 = I_SKAT-TXT20.

>

> MODIFY MAIN_TABLE INDEX SY-TABIX.

>

> ENDLOOP.

> ENDLOOP.

<b>U can push the particular logic above before you loop through the MAIN_TABLE.</b>

> ******************************************Clearing

> Doc

> LOOP AT MAIN_TABLE.

>

> SELECT BUKRS BELNR GJAHR AUGBL AUGDT LIFNR

> INTO CORRESPONDING FIELDS OF I_CLGDOC

> FROM BSAK

> WHERE

> BELNR EQ MAIN_TABLE-BELNR AND

> BUKRS EQ MAIN_TABLE-BUKRS AND

> GJAHR EQ MAIN_TABLE-GJAHR.

> ENDSELECT.

> APPEND I_CLGDOC.

> CLEAR I_CLGDOC.

> ENDLOOP.

>

> LOOP AT I_CLGDOC.

>

> SELECT BUKRS BELNR AUGDT GJAHR DMBTR LIFNR

> INTO CORRESPONDING FIELDS OF I_CLEARED

> FROM BSAK

> WHERE

> BELNR EQ I_CLGDOC-AUGBL AND

> BUKRS EQ I_CLGDOC-BUKRS AND

> GJAHR EQ I_CLGDOC-GJAHR.

> ENDSELECT.

>

> APPEND I_CLEARED.

> CLEAR I_CLEARED.

>

> ENDLOOP.

>

> *************************************Vendor Details

> LOOP AT I_CLGDOC.

> SELECT LIFNR NAME1 NAME2 ORT01

> INTO CORRESPONDING FIELDS OF I_LFA1

> FROM LFA1 AS A

> WHERE LIFNR = I_CLGDOC-LIFNR.

> ENDSELECT.

> APPEND I_LFA1.

> CLEAR I_LFA1.

> ENDLOOP.

>

> ************************Clearing Document

> LOOP AT I_CLGDOC.

>

> LOOP AT MAIN_TABLE WHERE BUKRS =

> KRS = I_CLGDOC-BUKRS AND

> BELNR =

> BELNR = I_CLGDOC-BELNR

> BELNR = I_CLGDOC-BELNR AND

> GJAHR =

> GJAHR = I_CLGDOC-GJAHR.

>

> MAIN_TABLE-AUGBL = I_CLGDOC-AUGBL.

> MAIN_TABLE-AUGDT = I_CLGDOC-AUGDT.

> MAIN_TABLE-LIFNR = I_CLGDOC-LIFNR.

>

> MODIFY MAIN_TABLE INDEX SY-TABIX.

> ENDLOOP.

> ENDLOOP.

> ************************Payment

> LOOP AT I_CLEARED.

> LOOP AT I_CLGDOC WHERE BUKRS = I_CLEARED-BUKRS AND

> AUGBL = I_CLEARED-BELNR AND

> GJAHR = I_CLEARED-GJAHR.

>

> LOOP AT MAIN_TABLE WHERE BUKRS =

> UKRS = I_CLGDOC-BUKRS AND

> BELNR =

> BELNR = I_CLGDOC-BELNR

> BELNR = I_CLGDOC-BELNR AND

> GJAHR =

> GJAHR =

> GJAHR = I_CLGDOC-GJAHR.

>

> MAIN_TABLE-PAYAMT = I_CLEARED-DMBTR.

>

> MODIFY MAIN_TABLE INDEX SY-TABIX.

> ENDLOOP.

> ENDLOOP.

> ENDLOOP.

> ***********************Vendor Details

>

> LOOP AT I_LFA1.

> LOOP AT MAIN_TABLE WHERE LIFNR = I_LFA1-LIFNR.

> MAIN_TABLE-NAME1 = I_LFA1-NAME1.

> MAIN_TABLE-ORT01 = I_LFA1-ORT01.

> MODIFY MAIN_TABLE INDEX SY-TABIX.

> ENDLOOP.

> ENDLOOP.

>

> *****************************

> CLEAR CRTP.

> CLEAR VALGS.

>

> LOOP AT MAIN_TABLE WHERE STAX > 0 .

>

> **********VALUE OF GOODS OR SERVICES

>

> VALGS = ( MAIN_TABLE-TOTAMT - MAIN_TABLE-STAX -

> MAIN_TABLE-CESS ).

>

> **********CREDIT TO PARTY

>

> CRTP = ( MAIN_TABLE-TOTAMT - MAIN_TABLE-TDS ).

>

> WRITE:/5 '|' NO-GAP, MAIN_TABLE-BELNR,

> 16 '|' NO-GAP, MAIN_TABLE-BLDAT,

> 27 '|' NO-GAP, MAIN_TABLE-BUDAT,

> 38 '|' NO-GAP, MAIN_TABLE-XBLNR,

> 48 '|' NO-GAP, MAIN_TABLE-SGTXT,

> 85 '|' NO-GAP, MAIN_TABLE-GSBER,

> 90 '|' NO-GAP, MAIN_TABLE-HKONT,

> 98 '|' NO-GAP, MAIN_TABLE-TXT20,

> 112 '|' NO-GAP, MAIN_TABLE-NAME1,

> 146 '|' NO-GAP, MAIN_TABLE-ORT01,

> 157 '|' NO-GAP, MAIN_TABLE-TOTAMT

> BLE-TOTAMT LEFT-JUSTIFIED,

> 170 '|' NO-GAP, MAIN_TABLE-STAX

> TABLE-STAX LEFT-JUSTIFIED ,

> 180 '|' NO-GAP, MAIN_TABLE-CESS

> TABLE-CESS LEFT-JUSTIFIED,

> 188 '|' NO-GAP, VALGS LEFT-JUSTIFIED,

> 199 '|' NO-GAP, MAIN_TABLE-TDS

> _TABLE-TDS LEFT-JUSTIFIED,

> 210 '|' NO-GAP, CRTP LEFT-JUSTIFIED,

> 222 '|' NO-GAP, MAIN_TABLE-AUGBL,

> 234 '|' NO-GAP, MAIN_TABLE-AUGDT,

> 245 '|' NO-GAP, MAIN_TABLE-PAYAMT

> BLE-PAYAMT LEFT-JUSTIFIED,

> 257 '|'.

> ENDLOOP.

>

> WRITE :/5 SY-ULINE(250).

> WRITE :250 SY-ULINE(8).

>

> END-OF-SELECTION.

> *

> TOP-OF-PAGE.

>

> WRITE :/5 'Service Tax Report'.

>

> WRITE :/5 SY-ULINE(250).

> WRITE :250 SY-ULINE(8).

>

>

> WRITE :/5 '|' NO-GAP, 'AcctDocNo.' COLOR 6 INVERSE

> SE ON,

> 16 '|' NO-GAP, 'Doc Date' COLOR 6 INVERSE

> 6 INVERSE ON,

> 27 '|' NO-GAP, 'Posting Dt' COLOR 6 INVERSE

> 6 INVERSE ON,

> 38 '|' NO-GAP, 'Reference' COLOR 6 INVERSE

> 6 INVERSE ON,

> 48 '|' NO-GAP, 'Text' COLOR 6 INVERSE ON,

> 85 '|' NO-GAP, 'BusA' COLOR 6 INVERSE ON,

> 90 '|' NO-GAP, 'GL Code' COLOR 6 INVERSE

> 6 INVERSE ON,

> 98 '|' NO-GAP, 'GL Desc' COLOR 6 INVERSE

> 6 INVERSE ON,

> 112 '|' NO-GAP, 'Party Name' COLOR 6 INVERSE

> INVERSE ON,

> 146 '|' NO-GAP, 'City' COLOR 6 INVERSE ON,

> 157 '|' NO-GAP, 'TotBillAmt' COLOR 6 INVERSE

> INVERSE ON,

> 170 '|' NO-GAP, 'STax' COLOR 6 INVERSE ON,

> 180 '|' NO-GAP, 'ECess' COLOR 6 INVERSE ON,

> 188 '|' NO-GAP, 'VoSer' COLOR 6 INVERSE ON,

> 199 '|' NO-GAP, 'TDS' COLOR 6 INVERSE ON,

> 210 '|' NO-GAP, 'Cr-Party' COLOR 6 INVERSE

> INVERSE ON,

> 222 '|' NO-GAP, 'PayDocNo.' COLOR 6 INVERSE

> INVERSE ON,

> 234 '|' NO-GAP, 'DocDt' COLOR 6 INVERSE ON,

> 245 '|' NO-GAP, 'PaymentAmt' COLOR 6 INVERSE

> INVERSE ON,

> 257 '|'.

>

>

> WRITE :/5 SY-ULINE(250).

> WRITE :250 SY-ULINE(8).

>

> END-OF-PAGE.