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

control break processing

Former Member
0 Likes
633

how and where can we use the following statements

1. at first/endat.

2.at last/endat .

3.at new/endat .

4. sum .

5.on change of/endon

Can anyone also provide me defination of these .

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
593

these all statements are can oly be used in Loops ...u cant use it anywhere else in the program..

check the help on this statements u will get the sample programs for it.

reward points please...

4 REPLIES 4
Read only

Former Member
0 Likes
594

these all statements are can oly be used in Loops ...u cant use it anywhere else in the program..

check the help on this statements u will get the sample programs for it.

reward points please...

Read only

Former Member
0 Likes
593

Hi ,

You must use these statements for logical processing within the loop. These are used for display of headings at the top, sums etc. Just check out the sample code

&----


*& Report ZFI_BA_ANALYSIS *

*& *

&----


*& *

*& *

&----


REPORT ZFI_BA_ANALYSIS NO STANDARD PAGE HEADING LINE-SIZE 132

LINE-COUNT 65.

*TABLE DECLARATION

TABLES: BKPF,BSEG.

*TYPE POOLS

TYPE-POOLS: ABAP,SLIS,KKBLO.

*INTERNAL TABLE DECLARATION

DATA: BEGIN OF IT_BKPF OCCURS 0,

MFD,

BUKRS LIKE BKPF-BUKRS,

BELNR LIKE BKPF-BELNR,

BELNR1 LIKE BKPF-XBLNR,

GJAHR LIKE BKPF-GJAHR,

BLART LIKE BKPF-BLART,

BKTXT LIKE BKPF-BKTXT,

XBLNR LIKE BKPF-XBLNR,

USNAM LIKE BKPF-USNAM,

END OF IT_BKPF.

DATA:BEGIN OF IT_BSEG OCCURS 0,

BUKRS LIKE BSEG-BUKRS,

BELNR LIKE BSEG-BELNR,

GJAHR LIKE BSEG-GJAHR,

DMBTR LIKE BSEG-DMBTR,

HKONT LIKE BSEG-HKONT,

SHKZG LIKE BSEG-SHKZG,

ZUONR LIKE BSEG-ZUONR,

GSBER LIKE BSEG-GSBER,

END OF IT_BSEG.

DATA: BEGIN OF IT_BKPF1 OCCURS 0.

INCLUDE STRUCTURE IT_BKPF.

DATA: END OF IT_BKPF1.

DATA: BEGIN OF IT_OUTPUT OCCURS 0,

HKONT LIKE BSEG-HKONT,

GSBER LIKE BSEG-GSBER,

GJAHR LIKE BKPF-GJAHR,

BELNR LIKE BKPF-BELNR,

ZUONR LIKE BSEG-ZUONR,

XBLNR LIKE BKPF-XBLNR,

BKTXT LIKE BKPF-BKTXT,

DMBTR LIKE BSEG-DMBTR,

USNAM LIKE BKPF-USNAM,

END OF IT_OUTPUT.

DATA: BEGIN OF IT_OUTPUT1 OCCURS 0,

GSBER LIKE BSEG-GSBER,

HKONT LIKE BSEG-HKONT,

GJAHR LIKE BKPF-GJAHR,

BELNR LIKE BKPF-BELNR,

ZUONR LIKE BSEG-ZUONR,

XBLNR LIKE BKPF-XBLNR,

BKTXT LIKE BKPF-BKTXT,

DMBTR LIKE BSEG-DMBTR,

USNAM LIKE BKPF-USNAM,

END OF IT_OUTPUT1.

DATA: BEGIN OF IT_USNAM OCCURS 0,

SIGN,

OPTION(2),

LOW LIKE BKPF-USNAM,

HIGH LIKE BKPF-USNAM,

END OF IT_USNAM.

*DATA DECLARATION

DATA: LINES LIKE SY-TABIX.

DATA: TOT_BA LIKE BSEG-WRBTR,

TOT_GL LIKE BSEG-WRBTR,

GRATOT LIKE BSEG-DMBTR .

DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV,

LS_FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV,

LS_SLIS_LAYO TYPE SLIS_LAYOUT_ALV.

DATA: AMOUNT(17).

DATA: DATEFROM(10),

DATETO(10),

DATEYEARF(4),

DATEYEART(4).

DATA: PAGE TYPE I.

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

PARAMETERS: P_BUKRS LIKE BKPF-BUKRS OBLIGATORY,

P_GJAHR LIKE BKPF-GJAHR OBLIGATORY,

P_USNAM LIKE BKPF-USNAM,

P_GSBER LIKE BSEG-GSBER OBLIGATORY.

SELECT-OPTIONS:SO_DOTYP FOR BKPF-BLART,

SO_POSTD FOR BKPF-BUDAT OBLIGATORY,

SO_CPUDT FOR BKPF-CPUDT.

SELECTION-SCREEN END OF BLOCK BLK1.

SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-002.

PARAMETERS: P_RD1 RADIOBUTTON GROUP GRP1 DEFAULT 'X',

P_RD2 RADIOBUTTON GROUP GRP1.

SELECTION-SCREEN END OF BLOCK BLK2.

AT SELECTION-SCREEN.

IF SY-BATCH <> 'X' AND SY-UCOMM EQ 'ONLI'.

MESSAGE 'Program can only be executed in background' TYPE 'E'.

ENDIF.

AT SELECTION-SCREEN ON SO_POSTD.

CLEAR: DATEYEARF , DATEYEART.

MOVE SO_POSTD-LOW+0(4) TO DATEYEARF.

MOVE SO_POSTD-HIGH+0(4) TO DATEYEART.

IF SO_POSTD-LOW+4(2) GE 4.

DATEYEARF = DATEYEART + 1.

ENDIF.

IF SO_POSTD-HIGH+4(2) GE 4.

DATEYEART = DATEYEART + 1.

ENDIF.

IF SO_POSTD-HIGH IS NOT INITIAL.

IF DATEYEARF NE DATEYEART.

MESSAGE 'YOU CAN ENTER DOCUMENTS OF ONE FISCAL YEAR ONLY' TYPE 'E'.

ENDIF.

ENDIF.

IF DATEYEARF NE P_GJAHR.

MESSAGE 'PLEASE CORRECT THE FISCAL YEAR ENTRY' TYPE 'E'.

ENDIF.

START-OF-SELECTION.

CLEAR PAGE.

PERFORM GETCUSBUS.

PERFORM GETDATA.

END-OF-SELECTION.

PERFORM PROCDATA. " TO FILL UP O/P TABLE

PERFORM DISPLAY. " Report Display

TOP-OF-PAGE.

FORMAT COLOR COL_BACKGROUND.

WRITE: 1(80) 'Mahindra & Mahindra Ltd' CENTERED ,

100(10) SY-DATUM CENTERED .

WRITE: /10 'Intra Company transactions for Company code',P_BUKRS,

'Business Area', P_GSBER,'for period',

DATEFROM .

IF DATETO IS NOT INITIAL.

WRITE: 'to', DATETO .

ENDIF.

WRITE:/(110) SY-ULINE.

SKIP 1.

FORMAT COLOR COL_HEADING.

WRITE: /1(119) SY-ULINE.

WRITE: /(1) SY-VLINE , 2(10) 'Doc Numb' CENTERED INTENSIFIED ON,

12(1) SY-VLINE, 13(4) 'F. Y.' ,17(1) SY-VLINE.

IF P_RD2 EQ 'X'.

WRITE: 18(12) 'GL Account' CENTERED INTENSIFIED ON,

29(1) SY-VLINE , 30(4) 'B/L' CENTERED

INTENSIFIED ON, 34(1) SY-VLINE .

ELSE.

WRITE: 18(4) 'B/L' CENTERED INTENSIFIED ON,

22(1) SY-VLINE , 23(12) 'GL Account' CENTERED INTENSIFIED ON,

34(1) SY-VLINE.

ENDIF.

WRITE:35(17) 'Amount' CENTERED INTENSIFIED ON,

52(1) SY-VLINE , 53(15) 'Assignment' CENTERED INTENSIFIED ON,

68(1) SY-VLINE , 69(25) 'Header Text' CENTERED INTENSIFIED ON,

94(1) SY-VLINE , 95(16) 'Reference' CENTERED INTENSIFIED ON,

111(1) SY-VLINE , 112(7) 'User' CENTERED INTENSIFIED ON,

119(1) SY-VLINE.

WRITE: /1(119) SY-ULINE.

&----


*& Form GETCUSBUS

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GETCUSBUS .

CLEAR: DATEFROM , DATETO.

CLEAR: IT_USNAM , IT_USNAM[].

IF P_USNAM IS NOT INITIAL.

MOVE: 'I' TO IT_USNAM-SIGN,

'EQ' TO IT_USNAM-OPTION,

P_USNAM TO IT_USNAM-LOW.

ENDIF.

CLEAR SO_DOTYP.

MOVE: 'E' TO SO_DOTYP-SIGN,

'EQ' TO SO_DOTYP-OPTION,

'ZZ' TO SO_DOTYP-LOW.

APPEND SO_DOTYP.

CONCATENATE SO_POSTD-LOW6(2) '.' SO_POSTD-LOW4(2) '.'

SO_POSTD-LOW+0(4) INTO DATEFROM.

IF SO_POSTD-HIGH IS NOT INITIAL.

CONCATENATE SO_POSTD-HIGH6(2) '.' SO_POSTD-HIGH4(2) '.'

SO_POSTD-HIGH+0(4) INTO DATETO.

ENDIF.

ENDFORM. " GETCUSBUS

&----


*& Form GETDATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GETDATA .

CLEAR: IT_BKPF,IT_BKPF[].

SELECT * FROM BKPF INTO CORRESPONDING FIELDS OF TABLE IT_BKPF

WHERE BUKRS EQ P_BUKRS

AND GJAHR EQ P_GJAHR

AND USNAM IN IT_USNAM

AND BLART IN SO_DOTYP

AND BUDAT IN SO_POSTD

AND CPUDT IN SO_CPUDT.

IF SY-SUBRC EQ 0.

CLEAR: IT_BSEG , IT_BSEG[].

SELECT * FROM BSEG INTO CORRESPONDING FIELDS OF TABLE IT_BSEG

FOR ALL ENTRIES IN IT_BKPF WHERE BUKRS EQ P_BUKRS

AND BELNR EQ IT_BKPF-BELNR

AND GJAHR EQ IT_BKPF-GJAHR

AND GSBER EQ P_GSBER.

IF SY-SUBRC EQ 0.

CLEAR LINES.

LOOP AT IT_BKPF.

LINES = SY-TABIX.

READ TABLE IT_BSEG WITH KEY BUKRS = P_BUKRS

BELNR = IT_BKPF-BELNR

GJAHR = IT_BKPF-GJAHR.

IF SY-SUBRC NE 0.

DELETE IT_BKPF INDEX LINES.

ELSE.

CLEAR IT_BKPF-BELNR1.

MOVE IT_BKPF-BELNR TO IT_BKPF-BELNR1.

MODIFY IT_BKPF INDEX LINES TRANSPORTING BELNR1.

ENDIF.

ENDLOOP.

SELECT * FROM BKPF INTO CORRESPONDING FIELDS OF TABLE IT_BKPF1

FOR ALL ENTRIES IN IT_BKPF WHERE BUKRS EQ P_BUKRS

AND GJAHR EQ IT_BKPF-GJAHR

AND BLART EQ 'ZZ'

AND XBLNR EQ IT_BKPF-BELNR1.

IF SY-SUBRC EQ 0.

CLEAR LINES.

LOOP AT IT_BKPF.

LINES = SY-TABIX.

READ TABLE IT_BKPF1 WITH KEY BUKRS = P_BUKRS

XBLNR = IT_BKPF-BELNR

GJAHR = IT_BKPF-GJAHR.

IF SY-SUBRC NE 0.

DELETE IT_BKPF INDEX LINES.

ENDIF.

ENDLOOP.

CLEAR: IT_BSEG,IT_BSEG[].

SELECT * FROM BSEG INTO CORRESPONDING FIELDS OF TABLE IT_BSEG

FOR ALL ENTRIES IN IT_BKPF WHERE BUKRS EQ P_BUKRS

AND BELNR EQ IT_BKPF-BELNR

AND GJAHR EQ IT_BKPF-GJAHR

AND GSBER NE P_GSBER.

.

ELSE.

MESSAGE 'NO ZZ DOCUEMNTS POSTED FOR THE GIVEN CRITERAI' TYPE 'E'.

ENDIF.

ELSE.

MESSAGE 'NO DATA FOUND FOR THE GIVEN CRITERIA' TYPE 'E'.

ENDIF.

ELSE.

MESSAGE 'NO DATA FOUND FOR THE GIVEN CRITERIA' TYPE 'E'.

ENDIF.

ENDFORM. " GETDATA

&----


*& Form DISPLAY

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM DISPLAY .

*FILLING UP FIELD CATALOG.

  • LS_FIELDCAT-FIELDNAME = 'BELNR'.

  • LS_FIELDCAT-TABNAME = 'IT_OUTPUT'.

  • LS_FIELDCAT-SELTEXT_L = 'Document Number'.

  • LS_FIELDCAT-SELTEXT_M = 'Document Num'.

  • LS_FIELDCAT-SELTEXT_S = 'Doc. Num'.

  • APPEND LS_FIELDCAT TO LS_FIELDCATALOG.

*

  • LS_FIELDCAT-FIELDNAME = 'ZUONR'.

  • LS_FIELDCAT-TABNAME = 'IT_OUTPUT'.

  • LS_FIELDCAT-SELTEXT_L = 'Assignment'.

  • LS_FIELDCAT-SELTEXT_M = 'Assign.'.

  • LS_FIELDCAT-SELTEXT_S = 'Asg'.

  • APPEND LS_FIELDCAT TO LS_FIELDCATALOG.

*

  • LS_FIELDCAT-FIELDNAME = 'XBLNR'.

  • LS_FIELDCAT-TABNAME = 'IT_OUTPUT'.

  • LS_FIELDCAT-SELTEXT_L = 'Reference'.

  • LS_FIELDCAT-SELTEXT_M = 'Refer.'.

  • LS_FIELDCAT-SELTEXT_S = 'Ref'.

  • APPEND LS_FIELDCAT TO LS_FIELDCATALOG.

*

  • LS_FIELDCAT-FIELDNAME = 'BKTXT'.

  • LS_FIELDCAT-TABNAME = 'IT_OUTPUT'.

  • LS_FIELDCAT-SELTEXT_L = 'Document Header Text'.

  • LS_FIELDCAT-SELTEXT_M = 'Doc. Hea. Text'.

  • LS_FIELDCAT-SELTEXT_S = 'Doc. Hea'.

  • APPEND LS_FIELDCAT TO LS_FIELDCATALOG.

*

  • LS_FIELDCAT-FIELDNAME = 'WRBTR'.

  • LS_FIELDCAT-TABNAME = 'IT_OUTPUT'.

  • LS_FIELDCAT-SELTEXT_L = 'Total Value'.

  • LS_FIELDCAT-SELTEXT_M = 'Tot. Val.'.

  • LS_FIELDCAT-SELTEXT_S = 'T.V.'.

  • APPEND LS_FIELDCAT TO LS_FIELDCATALOG.

*

  • LS_FIELDCAT-FIELDNAME = 'HKONT'.

  • LS_FIELDCAT-TABNAME = 'IT_OUTPUT'.

  • LS_FIELDCAT-SELTEXT_L = 'General Ledger Account'.

  • LS_FIELDCAT-SELTEXT_M = 'G.L Account'.

  • LS_FIELDCAT-SELTEXT_S = 'G.L'.

  • APPEND LS_FIELDCAT TO LS_FIELDCATALOG.

*

  • LS_FIELDCAT-FIELDNAME = 'GSBER'.

  • LS_FIELDCAT-TABNAME = 'IT_OUTPUT'.

  • LS_FIELDCAT-SELTEXT_L = 'Business Area'.

  • LS_FIELDCAT-SELTEXT_M = 'Bus. Area'.

  • LS_FIELDCAT-SELTEXT_S = 'B.A'.

  • APPEND LS_FIELDCAT TO LS_FIELDCATALOG.

*

  • CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

  • EXPORTING

  • I_CALLBACK_PROGRAM = 'ZFI_BA_ANALYSIS'

  • I_CALLBACK_TOP_OF_PAGE = 'B.A. Document Display'

  • IT_FIELDCAT = LS_FIELDCATALOG

  • TABLES

  • T_OUTTAB = IT_OUTPUT

  • EXCEPTIONS

  • PROGRAM_ERROR = 1

  • OTHERS = 2.

  • IF SY-SUBRC <> 0.

    • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  • ENDIF.

*

CLEAR: TOT_BA, TOT_GL ,GRATOT.

IF P_RD1 EQ 'X'.

LOOP AT IT_OUTPUT1.

AT NEW GSBER.

FORMAT COLOR 5.

WRITE: /1 SY-VLINE ,2 'For Business Area' ,

IT_OUTPUT1-GSBER , 119(1) SY-VLINE.

FORMAT COLOR OFF.

ENDAT.

WRITE: /(1) SY-VLINE,2(10) IT_OUTPUT1-BELNR LEFT-JUSTIFIED

COLOR COL_KEY , 12(1) SY-VLINE , 13(4) IT_OUTPUT1-GJAHR.

FORMAT COLOR COL_NORMAL.

WRITE:17(1) SY-VLINE , 18(4) IT_OUTPUT1-GSBER CENTERED ,

22(1) SY-VLINE , 23(12) IT_OUTPUT1-HKONT CENTERED ,

34(1) SY-VLINE , 35(17) IT_OUTPUT1-DMBTR RIGHT-JUSTIFIED,

52(1) SY-VLINE , 53(15) IT_OUTPUT1-ZUONR(10) LEFT-JUSTIFIED,

68(1) SY-VLINE , 69(25) IT_OUTPUT1-BKTXT(20) LEFT-JUSTIFIED,

94(1) SY-VLINE , 95(16) IT_OUTPUT1-XBLNR LEFT-JUSTIFIED,

111(1) SY-VLINE ,112(7) IT_OUTPUT1-USNAM LEFT-JUSTIFIED,

119(1) SY-VLINE.

TOT_BA = TOT_BA + IT_OUTPUT1-DMBTR.

TOT_GL = TOT_GL + IT_OUTPUT1-DMBTR.

AT END OF HKONT.

WRITE: /(1) SY-VLINE , 12(1) SY-VLINE, 13(10) 'Subtotal' COLOR 4,

22(1) SY-VLINE, 23(12) IT_OUTPUT1-HKONT COLOR 4,

34(1) SY-VLINE , 35(17) TOT_GL COLOR 4,

52(1) SY-VLINE , 68(1) SY-VLINE , 94(1) SY-VLINE ,

111(1) SY-VLINE , 119(1) SY-VLINE.

CLEAR TOT_GL.

ENDAT.

AT END OF GSBER.

FORMAT COLOR COL_TOTAL.

WRITE: /(1) SY-VLINE , 2 'Total for Business Area' ,

IT_OUTPUT1-GSBER, 35(17) TOT_BA COLOR COL_TOTAL,

119(1) SY-VLINE.

FORMAT COLOR OFF.

GRATOT = GRATOT + TOT_BA.

CLEAR TOT_BA.

ENDAT.

ENDLOOP.

WRITE: /(1) SY-VLINE , 12(1) SY-VLINE , 17(1) SY-VLINE ,

18(12) 'Grand Total' COLOR COL_TOTAL INTENSIFIED ON,

29(1) SY-VLINE,

35(17) GRATOT COLOR COL_TOTAL INTENSIFIED ON,

52(1) SY-VLINE , 68(1) SY-VLINE , 94(1) SY-VLINE ,

111(1) SY-VLINE , 119(1) SY-VLINE.

ELSE.

LOOP AT IT_OUTPUT.

AT NEW HKONT.

FORMAT COLOR 5.

WRITE: /1 SY-VLINE , 2 'For GL Account' ,

IT_OUTPUT-HKONT , 119(1) SY-VLINE.

FORMAT COLOR OFF.

ENDAT.

WRITE: /(1) SY-VLINE,2(10) IT_OUTPUT-BELNR LEFT-JUSTIFIED

COLOR COL_KEY, 12(1) SY-VLINE , 13(4) IT_OUTPUT-GJAHR.

FORMAT COLOR COL_NORMAL.

WRITE:17(1) SY-VLINE , 18(12) IT_OUTPUT-HKONT CENTERED ,

29(1) SY-VLINE , 30(4) IT_OUTPUT-GSBER CENTERED ,

34(1) SY-VLINE , 35(17) IT_OUTPUT-DMBTR RIGHT-JUSTIFIED,

52(1) SY-VLINE , 53(15) IT_OUTPUT-ZUONR(15) LEFT-JUSTIFIED,

68(1) SY-VLINE , 69(25) IT_OUTPUT-BKTXT(20) LEFT-JUSTIFIED,

94(1) SY-VLINE , 95(16) IT_OUTPUT-XBLNR LEFT-JUSTIFIED,

111(1) SY-VLINE , 112(7) IT_OUTPUT-USNAM LEFT-JUSTIFIED,

119(1) SY-VLINE.

TOT_BA = TOT_BA + IT_OUTPUT-DMBTR.

TOT_GL = TOT_GL + IT_OUTPUT-DMBTR.

AT END OF GSBER.

WRITE: /(1) SY-VLINE , 12(1) SY-VLINE , 17(1) SY-VLINE ,

18(12) 'Subtotal' COLOR 4, 29(1) SY-VLINE ,

30(4) IT_OUTPUT-GSBER COLOR 4, 34(1) SY-VLINE ,

35(17) TOT_BA COLOR 4,

52(1) SY-VLINE , 68(1) SY-VLINE , 94(1) SY-VLINE ,

111(1) SY-VLINE , 119(1) SY-VLINE.

CLEAR TOT_BA.

ENDAT.

AT END OF HKONT.

FORMAT COLOR COL_TOTAL.

WRITE: /(1) SY-VLINE , 2 'Total for GL Account', IT_OUTPUT-HKONT,

35(17) TOT_GL , 119(1) SY-VLINE.

FORMAT COLOR OFF.

GRATOT = GRATOT + TOT_GL.

CLEAR TOT_GL.

ENDAT.

ENDLOOP.

WRITE: /(1) SY-VLINE ,

18(12) 'Grand Total' COLOR COL_TOTAL INTENSIFIED ON ,

35(17) GRATOT COLOR COL_TOTAL INTENSIFIED ON,

119(1) SY-VLINE.

ENDIF.

WRITE: /1(119) SY-ULINE.

ENDFORM. " DISPLAY

&----


*& Form PROCDATA

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM PROCDATA .

IF P_RD1 EQ 'X'.

LOOP AT IT_BKPF.

LOOP AT IT_BSEG WHERE BUKRS EQ IT_BKPF-BUKRS

AND BELNR EQ IT_BKPF-BELNR

AND GJAHR EQ IT_BKPF-GJAHR.

MOVE: IT_BKPF-BELNR TO IT_OUTPUT1-BELNR,

IT_BKPF-BKTXT TO IT_OUTPUT1-BKTXT,

IT_BKPF-XBLNR TO IT_OUTPUT1-XBLNR,

IT_BKPF-USNAM TO IT_OUTPUT1-USNAM,

IT_BKPF-GJAHR TO IT_OUTPUT1-GJAHR,

IT_BSEG-HKONT TO IT_OUTPUT1-HKONT,

IT_BSEG-ZUONR TO IT_OUTPUT1-ZUONR,

IT_BSEG-GSBER TO IT_OUTPUT1-GSBER.

CLEAR AMOUNT.

IF IT_BSEG-SHKZG EQ 'H'.

IT_OUTPUT1-DMBTR = IT_BSEG-DMBTR * ( -1 ).

ELSE.

IT_OUTPUT1-DMBTR = IT_BSEG-DMBTR.

ENDIF.

APPEND IT_OUTPUT1.

CLEAR IT_OUTPUT1.

ENDLOOP.

ENDLOOP.

SORT IT_OUTPUT1 BY GSBER HKONT.

ELSE.

LOOP AT IT_BKPF.

LOOP AT IT_BSEG WHERE BUKRS EQ IT_BKPF-BUKRS

AND BELNR EQ IT_BKPF-BELNR

AND GJAHR EQ IT_BKPF-GJAHR.

MOVE: IT_BKPF-BELNR TO IT_OUTPUT-BELNR,

IT_BKPF-BKTXT TO IT_OUTPUT-BKTXT,

IT_BKPF-XBLNR TO IT_OUTPUT-XBLNR,

IT_BKPF-USNAM TO IT_OUTPUT-USNAM,

IT_BKPF-GJAHR TO IT_OUTPUT-GJAHR,

IT_BSEG-HKONT TO IT_OUTPUT-HKONT,

IT_BSEG-ZUONR TO IT_OUTPUT-ZUONR,

IT_BSEG-GSBER TO IT_OUTPUT-GSBER.

IF IT_BSEG-SHKZG EQ 'H'.

IT_OUTPUT-DMBTR = IT_BSEG-DMBTR * ( -1 ).

ELSE.

IT_OUTPUT-DMBTR = IT_BSEG-DMBTR.

ENDIF.

APPEND IT_OUTPUT.

CLEAR IT_OUTPUT.

ENDLOOP.

ENDLOOP.

SORT IT_OUTPUT BY HKONT GSBER.

ENDIF.

ENDFORM. " PROCDATA

Read only

Former Member
0 Likes
593

at new at end at first & at last are control break state ments.

before you take up control break statements u need to check two conditions.First the internal table should be checked for existing values which means internal tabe should not be empty.Then it must be soretd on the basis of key fields so that the out put will be relavent.then loop at the internal table.Once can have a control on only at new and at end.but no control on at first and at last.at new triggers not only with respect to change in the values of that columns but also triggers even if there is a change with respect any of the columns to the left of it.

at end and at new behave in the same way.if we want to carry out sub totals then keep then in at new and totals with respect to totals use at end and grand totals with at last.Just look at the following sameple which helps you understand in total.

table structure:

material number batch movement quantity

121 abc 261 10

121 abc 261 10

121 abc 262 10

121 bcd 261 40

121 bcd 262 10

121 abc 261 10

Movement:261---goods issue

Movement:262---goods return

if the data has come in this way then we need to sort the itab like

sort itab by material no(matnr) batch(charg) movement(bwart) and quantity(erfmg).

then the table data looks like this.

material number batch movement quantity

121 abc 261 10

121 abc 261 10

121 abc 261 10

121 abc 262 10

121 bcd 261 40

121 bcd 262 10

CREATE ANOTHER TABLE(ITAB1) OF THE FOLLOWING STRUCTURE :

MATERIAL BATCH QUANTITY.

then i need to calculate the quantity per movement,per batch per material then (qty per material per batch per movement)

data : v_261 type mseg-erfmg,

v_262 type mseg-erfmg,

v_net type mseg-erfmg ,

v_total type mseg-erfmg.

loop at itab.

at new bwart.

sum.

case itab-bwart.

when '261'.

v_261 = itab-erfmg.(which gives the total value for quantity under the

movemnet --261)

when '262'.

v_262 = itab-erfmg..(which gives the total value for quantity under the

movemnet --262)

endcase.

end at.

at end of charg.

v_net = v_261 - v_262.(which gives the sub total(material consumed) for the

batch 'ABC' )

ITAB1-MATNR = ITAB-MATNR.

ITAB1-CHARG = ITAB-CHARG.

ITAB1-ERFMG = V_NET.

APPEND ITAB1.

CLEAR : V_261,V_262,V_NET,ITAB1.

endat.

CLEAR ITAB.

endloop.

AT THIS JUNCTURE WE HAVE THE TABLE(ITAB1 WITH THE FOLLOWING VALUES:

ITAB1.

material number batch quantity

121 abc 20

121 bcd 30

ITAB1-QUANTITY:

(V_261 = 30; V_262 = 10 ; V_NET = V_261 - V_262) FOR THE BATCH :ABC

(V_261 = 40; V_262 = 10 ; V_NET = V_261 - V_262) FOR THE BATCH :BCD

Now to find the grand total like total issued qty for the material:

loop at itab1.

at last.

sum.(Adds all the numeric values in the table)

v_total = itab1-erfmg.(The value here will be 50)

endat.

clear itab1.

endloop.

at new triggers:when ever new value comes.

at end triggers :when ever the value changes

at first:for the first time it triggers(Generally to display comman header for values in the control brak statements out put)

at last:triggers for the last time.

I hope my explanation gives you proper under standing.In case this serves ur purpose give me proper rating by giving marks

Read only

Former Member
0 Likes
593

Hi,

The AT statement introduces a statement block that you end with the ENDAT statement.

AT <level>.

<statement block>

ENDAT.

You can react to the following control level changes:

<u><level> Meaning</u>

FIRST First line of the internal table

LAST Last line of the internal table

NEW <f> Beginning of a group of lines with the same contents in the field <f> and in the fields left of <f>

END Of <f> End of a group of lines with the same contents in the field <f> and in the fields left of <f>

You can use control level statements to react to control breaks in internal tables instead of programming them yourself with logical expressions. Within the loop, you must order the ATENDAT statement blocks according to the hierarchy of the control levels. If the internal table has the columns <f1>, <f2>, ...., and if it is sorted by these columns, you must program the loop as follows:

LOOP AT <itab>.

AT FIRST. ... ENDAT.

AT NEW <f1>. ...... ENDAT.

AT NEW <f2>. ...... ENDAT.

.......

<single line processing>

.......

AT END OF <f2>. ... ENDAT.

AT END OF <f1>. ... ENDAT.

AT LAST. .... ENDAT.

ENDLOOP.

The innermost hierarchy level <single line processing> processes the table lines that do not correspond to a control level change. You do not have to use all control level statements. But you must place the used ones in the above sequence. You should not use control level statements in loops where the line selection is restricted by WHERE or FROM and TO. Neither should the table be modified during the loop.

If a control level field <fi> is not known until runtime, you can specify it dynamically as (<ni>) where <ni> contains the field of <fi>. If <ni> is empty at runtime, the criterion for changing the control level is ignored. You can restrict the search to partial fields [Page 196] by specifying offset and length.

If you are working with a work area <wa>, it does not contain the current line in the AT... ENDAT statement block. All character fields to the right of the current group key are filled with asterisks (*). All other fields to the right of the current group key contain their initial value.

Within an AT...ENDAT block, you can calculate the contents of the numeric fields of the corresponding control level using the SUM statement.

SUM.

You can only use this statement within a LOOP. If you use SUM in an AT - ENDAT block, the system calculates totals for the numeric fields of all lines in the current line group and writes them to the corresponding fields in the work area (see example in ). If you use the SUM statement outside an AT - ENDAT block (single entry processing), the system calculates totals for the numeric fields of all lines of the internal table in each loop pass and writes them to the corresponding fields of the work area. It therefore only makes sense to use the SUM statement in

AT...ENDAT blocks.

If the table contains a nested table, you cannot use the SUM statement. Neither can you use it if you are using a field symbol instead of a work area in the LOOP statement.

Ex.

DATA: BEGIN OF LINE,

CARRID TYPE SBOOK-CARRID,

CONNID TYPE SBOOK-CONNID,

FLDATE TYPE SBOOK-FLDATE,

CUSTTYPE TYPE SBOOK-CUSTTYPE,

CLASS TYPE SBOOK-CLASS,

BOOKID TYPE SBOOK-BOOKID,

END OF LINE.

DATA ITAB LIKE SORTED TABLE OF LINE WITH UNIQUE KEY TABLE

LINE.

SELECT CARRID CONNID FLDATE CUSTTYPE CLASS BOOKID

FROM SBOOK INTO CORRESPONDING FIELDS OF TABLE ITAB.

LOOP AT ITAB INTO LINE.

AT FIRST.

WRITE / 'List of Bookings'.

ULINE.

ENDAT.

AT NEW CARRID.

WRITE: / 'Carrid:', LINE-CARRID.

ENDAT.

AT NEW CONNID.

WRITE: / 'Connid:', LINE-CONNID.

ENDAT.

AT NEW FLDATE.

WRITE: / 'Fldate:', LINE-FLDATE.

ENDAT.

AT NEW CUSTTYPE.

WRITE: / 'Custtype:', LINE-CUSTTYPE.

ENDAT.

WRITE: / LINE-BOOKID, LINE-CLASS.

AT END OF CLASS.

ULINE.

ENDAT.

ENDLOOP.

Regards,

Bhaskar