Defining Watch-Points in a abap report

hi folks,
does anyone has an idea who i can generate dynamically in abap watchpoints - with coding - in an application?
i thinks it should be possible as debugger is written now in abap, and there are lots of classes  , but how to use them correctly.
any ideas would be great.
kind regads,
oliver

Hi Micky,
but with the assert statement i have to put this statement in my coding where i want to have this checked, but what we would need is that we can check variables against values whereever these values are reached somewhere in the program.
so we thought it could be possible as the debugger itself is written in abap and can handle watchpoints, maybe someone has done that before.
best regards,
oliver
Edited by: Oliver Russinger on Mar 5, 2011 3:01 AM

Similar Messages

  • ABAP Reports

    Hi All ,
                  I am new to ABAP ,can someone please tell me how to do the following.
    1-Created an interactive report for displaying vendor information based on the selection made by the client.The transactions made by the vendor with the client till date will be displayed in details.On selection, further details of the selected line is made available in
    the secondary list like credits availed by the client on purchase, delivery details of tyhe vendor, payment details by the clients etc.
    2-Created an interactive report to display details of vendor and all bank transactions done with the client.
    3-Created a report on material master.The report gives stock grouped by  material type and plant.The output also shows material no., storage location and unit of measure and description in addition to group totals.
    Thanks in Advance,
    Sujata

    Hi
       i want to know how to get the screen and solution in brief about the following:
    1-Created an interactive report for displaying vendor information based on the selection made by the client.The transactions made by the vendor with the client till date will be displayed in details.On selection, further details of the selected line is made available in
    the secondary list like credits availed by the client on purchase, delivery details of tyhe vendor, payment details by the clients etc.
    2-Created an interactive report to display details of vendor and all bank transactions done with the client.
    3-Created a report on material master.The report gives stock grouped by material type and plant.The output also shows material no., storage location and unit of measure and description in addition to group totals.
    Thanks in Advance,
    Sujata
    Bharat Kalagara  
    Posts: 156
    Questions: 6
    Registered: 2/27/07
    Forum points: 116 
    Solved problem (10)
    Very helpful answer (6)
    Helpful answer (2)
       Re: ABAP Reports  
    Posted: Mar 21, 2007 5:21 AM    in response to: jita dash       Reply      E-mail this post 
    HI,
    u just check this code.
    this is very simple toundersatnd interactive report concept.
    REPORT ZBHREP3 LINE-COUNT 15(1) LINE-SIZE 75.
    TABLES: SFLIGHT,ZEMP.
    DATA VAR LIKE SFLIGHT-CONNID.
    DATA ITAB LIKE SFLIGHT OCCURS 0 WITH HEADER LINE.
    PARAMETERS NAME TYPE ZEMP-NAME DEFAULT 'BHARAT'.
    WRITE: 25 NAME COLOR 6.
    SELECT-OPTIONS CARRID1 FOR SFLIGHT-CARRID.
    SET PF-STATUS 'MENU'.
    SET TITLEBAR 'TIT'.
    FORMAT HOTSPOT ON.
    WRITE:/10 'AIRLINE CODE',25 'CONNECTION ID',40 'FLIGHT DATE'.
    SELECT * FROM SFLIGHT WHERE CARRID IN CARRID1.
    WRITE:/10 SFLIGHT-CARRID,25 SFLIGHT-CONNID,40 SFLIGHT-FLDATE.
    HIDE SFLIGHT-CONNID.
    ENDSELECT.
    *END-OF-PAGE.
    END-OF-PAGE.
    WRITE:/64 'P.NO:',SY-PAGNO.
    *TOP-OF-PAGE.
    TOP-OF-PAGE.
    WRITE:/ 'THIS IS MY FIRST REPORTS PROGRAM.'.
    *START-OF-SELECTION.
    START-OF-SELECTION.
    DO 5 TIMES.
    WRITE:/ SY-INDEX.
    ENDDO.
    *THESE 3 STATEMENTS ARE FOR THE END-OF-PAGE CONTENTS IN LAST PAGE.
    DATA M TYPE I.
    M = SY-LINCT - SY-LINNO - 1.
    SKIP M.
    *AT LINE-SELECTION.
    AT LINE-SELECTION.
    CASE SY-LSIND.
    WHEN '1'.
    READ LINE SY-LILLI FIELD VALUE SFLIGHT-CONNID INTO VAR.
    SELECT * FROM SFLIGHT INTO CORRESPONDING FIELDS OF ITAB WHERE
    CONNID = VAR.
    WRITE:/ ITAB-CARRID,ITAB-PLANETYPE,ITAB-PAYMENTSUM.
    ENDSELECT.
    WRITE:/ VAR.
    SELECT * FROM SFLIGHT INTO CORRESPONDING FIELDS OF ITAB WHERE
    CONNID = SY-LISEL+24(4).
    WRITE:/ ITAB-CARRID,ITAB-PLANETYPE,ITAB-PAYMENTSUM.
    ENDSELECT.
    SKIP 1.
    WRITE:/ SY-LISEL+24(4).
    SELECT * FROM SFLIGHT INTO CORRESPONDING FIELDS OF ITAB WHERE
    CONNID = SFLIGHT-CONNID.
    WRITE:/ ITAB-CARRID,ITAB-PLANETYPE,ITAB-PAYMENTSUM.
    ENDSELECT.
    WRITE:/ SFLIGHT-CONNID.
    WHEN '2'.
    WRITE:/ SY-LILLI.
    WHEN '3'.
    WRITE :/ 'BHARAT'.
    ENDCASE.
    regards,
    bharat.
    keerthi kiran v...  
    Posts: 915
    Questions: 11
    Registered: 12/15/05
    Forum points: 1,078 
    Solved problem (10)
    Very helpful answer (6)
    Helpful answer (2)
       Re: ABAP Reports  
    Posted: Mar 21, 2007 5:29 AM    in response to: jita dash       Reply      E-mail this post 
    Hi ,
    chk this code for interactive report,this also covers totals concept
    *& Report ZTRAINING5_KEERTHI *
    REPORT ZTRAINING5_KEERTHI NO STANDARD PAGE HEADING
    LINE-SIZE 258
    LINE-COUNT 28(4).
    tables declaration *
    TABLES: VBAK,VBAP,VBUK,VBKD,TVKO,KNA1,MARA,KONV,T685T,TVKOV.
    data declaration *
    DATA: V_TAB LIKE SY-TABIX,
    V_KNUMV LIKE VBAK-KNUMV,
    L_TABIX LIKE SY-TABIX,
    DATE1 LIKE SY-DATUM.
    DATA: BEGIN OF IT_VBAK OCCURS 0,
    VBELN LIKE VBAK-VBELN,
    VKORG LIKE VBAK-VKORG,
    VTWEG LIKE VBAK-VTWEG,
    SPART LIKE VBAK-SPART,
    AUART LIKE VBAK-AUART,
    AUDAT LIKE VBAK-AUDAT,
    KUNNR LIKE VBAK-KUNNR,
    NETWR LIKE VBAK-NETWR,
    END OF IT_VBAK.
    DATA: BEGIN OF IT_VBAP OCCURS 0,
    VBELN LIKE VBAP-VBELN,
    POSNR LIKE VBAP-POSNR,
    MATNR LIKE VBAP-MATNR,
    ARKTX LIKE VBAP-ARKTX,
    KWMENG LIKE VBAP-KWMENG,
    WERKS LIKE VBAP-WERKS,
    LGORT LIKE VBAP-LGORT,
    NETPR LIKE VBAP-NETPR,
    END OF IT_VBAP.
    DATA: BEGIN OF IT_VBPA OCCURS 0,
    KUNNR LIKE VBPA-KUNNR,
    PARVW LIKE VBPA-PARVW,
    VBELN LIKE VBPA-VBELN,
    END OF IT_VBPA.
    DATA: BEGIN OF IT_VBKD OCCURS 0,
    BSTKD LIKE VBKD-BSTKD,
    BSARK LIKE VBKD-BSARK,
    POSNR LIKE VBKD-POSNR,
    END OF IT_VBKD.
    DATA: BEGIN OF IT_FINAL OCCURS 0,
    KUNNR LIKE VBAK-KUNNR,
    VBELN LIKE VBAK-VBELN,
    VKORG LIKE VBAK-VKORG,
    VTWEG LIKE VBAK-VTWEG,
    SPART LIKE VBAK-SPART,
    AUART LIKE VBAK-AUART,
    AUDAT LIKE VBAK-AUDAT,
    NETWR LIKE VBAK-NETWR,
    POSNR LIKE VBAP-POSNR,
    MATNR LIKE VBAP-MATNR,
    ARKTX LIKE VBAP-ARKTX,
    KWMENG LIKE VBAP-KWMENG,
    WERKS LIKE VBAP-WERKS,
    LGORT LIKE VBAP-LGORT,
    NETPR LIKE VBAP-NETPR,
    KUNNR1 LIKE VBPA-KUNNR,
    BSTKD LIKE VBKD-BSTKD,
    BSARK LIKE VBKD-BSARK,
    END OF IT_FINAL.
    DATA: BEGIN OF IT_KONV OCCURS 0,
    KNUMV LIKE KONV-KNUMV,
    KPOSN LIKE KONV-KPOSN,
    KSCHL LIKE KONV-KSCHL,
    KBETR LIKE KONV-KBETR,
    KWERT LIKE KONV-KWERT,
    END OF IT_KONV.
    DATA: BEGIN OF IT_TEXT OCCURS 0,
    KSCHL LIKE T685T-KSCHL,
    VTEXT LIKE T685T-VTEXT,
    END OF IT_TEXT.
    selection screen *
    PARAMETERS:P_VKORG LIKE VBAK-VKORG OBLIGATORY,
    P_VTWEG LIKE VBAK-VTWEG OBLIGATORY,
    P_SPART LIKE VBAK-SPART OBLIGATORY.
    SELECT-OPTIONS: S_AUDAT FOR VBAK-AUDAT ,
    S_VBELN FOR VBAK-VBELN ,
    S_KUNNR FOR VBAK-KUNNR ,
    S_MATNR FOR VBAP-MATNR.
    PARAMETERS: OPENORD RADIOBUTTON GROUP RAD1 DEFAULT 'X',
    ALLORD RADIOBUTTON GROUP RAD1.
    initialization *
    INITIALIZATION.
    DATE1 = SY-DATUM - 30.
    S_AUDAT-LOW = DATE1.
    S_AUDAT-HIGH = SY-DATUM.
    APPEND S_AUDAT.
    validations *
    AT SELECTION-SCREEN.
    validating sales org
    SELECT SINGLE VKORG FROM TVKO
    INTO TVKO
    WHERE VKORG = P_VKORG.
    IF SY-SUBRC <> 0.
    WRITE:/ 'Invalid sales organisation'.
    ENDIF.
    validating distribution channel.
    SELECT SINGLE VTWEG
    FROM TVKOV
    INTO TVKOV
    WHERE VTWEG = P_VTWEG.
    IF SY-SUBRC NE 0.
    WRITE:/ 'Invalid distribution channel'.
    ENDIF.
    validating division.
    SELECT SINGLE SPART
    FROM TVTA
    INTO P_SPART
    WHERE SPART = P_SPART.
    IF SY-SUBRC NE 0.
    WRITE:/ 'Invalid division'.
    ENDIF.
    validating customer.
    SELECT SINGLE KUNNR FROM KNA1
    INTO KNA1
    WHERE KUNNR IN S_KUNNR.
    IF SY-SUBRC NE 0.
    WRITE:/ 'Invalid customer'.
    ENDIF.
    validating material.
    SELECT SINGLE MATNR FROM MARA
    INTO MARA
    WHERE MATNR IN S_MATNR.
    IF SY-SUBRC NE 0.
    WRITE:/ 'Invalid MATERIAL NUMBER'.
    ENDIF.
    start of selection *
    START-OF-SELECTION.
    SELECT VBELN
    VKORG
    VTWEG
    SPART
    AUART
    AUDAT
    KUNNR
    NETWR
    FROM VBAK
    INTO TABLE IT_VBAK
    WHERE VBELN IN S_VBELN AND
    VKORG = P_VKORG AND
    VTWEG = P_VTWEG AND
    SPART = P_SPART AND
    AUDAT IN S_AUDAT AND
    KUNNR IN S_KUNNR .
    IF OPENORD = 'X'.
    LOOP AT IT_VBAK.
    READ TABLE IT_VBAK INDEX SY-TABIX.
    SELECT SINGLE VBELN FROM VBUK
    INTO VBUK
    WHERE VBELN = IT_VBAK-VBELN AND
    GBSTK <> 'C'.
    IF SY-SUBRC <> 0.
    DELETE IT_VBAK INDEX SY-TABIX.
    ENDIF.
    ENDLOOP.
    ENDIF.
    SELECT VBELN
    POSNR
    MATNR
    ARKTX
    KWMENG
    WERKS
    LGORT
    NETPR
    FROM VBAP
    INTO TABLE IT_VBAP
    FOR ALL ENTRIES IN IT_VBAK
    WHERE VBELN = IT_VBAK-VBELN AND
    MATNR IN S_MATNR.
    SELECT KUNNR
    PARVW
    VBELN
    FROM VBPA
    INTO TABLE IT_VBPA
    FOR ALL ENTRIES IN IT_VBAP
    WHERE VBELN = IT_VBAP-VBELN AND
    POSNR = IT_VBAP-POSNR AND
    PARVW = 'WE'.
    IF SY-SUBRC <> 0.
    SELECT KUNNR
    PARVW
    VBELN
    FROM VBPA
    INTO TABLE IT_VBPA
    FOR ALL ENTRIES IN IT_VBAP
    WHERE VBELN = IT_VBAP-VBELN AND
    POSNR = '000000' AND
    PARVW = 'we'.
    ENDIF.
    SELECT BSTKD
    BSARK
    POSNR
    FROM VBKD
    INTO TABLE IT_VBKD
    FOR ALL ENTRIES IN IT_VBAP
    WHERE VBELN = IT_VBAP-VBELN AND
    POSNR = IT_VBAP-POSNR .
    IF SY-SUBRC <> 0.
    SELECT BSTKD
    BSARK
    POSNR
    FROM VBKD
    INTO TABLE IT_VBKD
    FOR ALL ENTRIES IN IT_VBAP
    WHERE VBELN = IT_VBAP-VBELN AND
    POSNR = '000000' .
    ENDIF.
    LOOP AT IT_VBAK.
    L_TABIX = SY-TABIX.
    MOVE: IT_VBAK-KUNNR TO IT_FINAL-KUNNR,
    IT_VBAK-VBELN TO IT_FINAL-VBELN,
    IT_VBAK-VKORG TO IT_FINAL-VKORG,
    IT_VBAK-VTWEG TO IT_FINAL-VTWEG,
    IT_VBAK-SPART TO IT_FINAL-SPART,
    IT_VBAK-AUART TO IT_FINAL-AUART,
    IT_VBAK-AUDAT TO IT_FINAL-AUDAT,
    IT_VBAK-NETWR TO IT_FINAL-NETWR.
    READ TABLE IT_VBAP WITH KEY VBELN = IT_VBAK-VBELN.
    READ TABLE IT_VBAK INDEX L_TABIX.
    MOVE: IT_VBAP-POSNR TO IT_FINAL-POSNR,
    IT_VBAP-MATNR TO IT_FINAL-MATNR ,
    IT_VBAP-ARKTX TO IT_FINAL-ARKTX,
    IT_VBAP-KWMENG TO IT_FINAL-KWMENG,
    IT_VBAP-WERKS TO IT_FINAL-WERKS,
    IT_VBAP-LGORT TO IT_FINAL-LGORT,
    IT_VBAP-NETPR TO IT_VBAP-NETPR.
    READ TABLE IT_VBPA WITH KEY VBELN = IT_VBAK-VBELN.
    MOVE IT_VBPA-KUNNR TO IT_FINAL-KUNNR1.
    READ TABLE IT_VBKD WITH KEY POSNR = IT_VBAP-POSNR.
    MOVE: IT_VBKD-BSTKD TO IT_FINAL-BSTKD,
    IT_VBKD-BSARK TO IT_FINAL-BSARK.
    APPEND IT_FINAL.
    ENDLOOP.
    end of selection *
    END-OF-SELECTION.
    SORT IT_FINAL BY KUNNR VBELN.
    LOOP AT IT_FINAL.
    AT NEW KUNNR.
    NEW-PAGE.
    WRITE:/ SY-ULINE(255),/ SY-VLINE.
    FORMAT COLOR COL_POSITIVE.
    WRITE: 2 'customer no.',10 SY-VLINE,'sales doc.',25 SY-VLINE,'dis.ch.',
    30 SY-VLINE,'division',35 SY-VLINE,'salesordtype',50 SY-VLINE,'doc.date'
    ,62 SY-VLINE,'netvalue',85 SY-VLINE,'item no.',92 SY-VLINE,'materialno.'
    ,105 SY-VLINE,'item text',150 SY-VLINE,'ord.qty.',170 SY-VLINE,'plant',
    175 SY-VLINE,'sto.loc.',180 SY-VLINE,'net price',196 SY-VLINE,
    'ship2party',206 SY-VLINE,'pur.ord.',245 SY-VLINE,'purordtype' ,255
    SY-VLINE.
    WRITE:/ SY-ULINE(255).
    ENDAT.
    V_TAB = SY-TABIX MOD 2.
    IF V_TAB <> 0.
    FORMAT COLOR COL_HEADING INTENSIFIED ON.
    ELSE.
    FORMAT COLOR COL_HEADING INTENSIFIED OFF.
    ENDIF.
    WRITE:/ SY-VLINE,2 IT_FINAL-KUNNR,10 SY-VLINE, IT_FINAL-VBELN,25
    SY-VLINE,
    IT_FINAL-VTWEG,30 SY-VLINE,IT_FINAL-SPART,35 SY-VLINE,
    IT_FINAL-AUART,50 SY-VLINE,IT_FINAL-AUDAT,62 SY-VLINE,IT_FINAL-NETWR,85
    SY-VLINE,IT_FINAL-POSNR,92 SY-VLINE,
    IT_FINAL-MATNR,105 SY-VLINE,IT_FINAL-ARKTX,150 SY-VLINE
    ,IT_FINAL-KWMENG,170 SY-VLINE,IT_FINAL-WERKS,175 SY-VLINE,
    IT_FINAL-LGORT,180 SY-VLINE,IT_FINAL-NETPR,196 SY-VLINE
    ,IT_FINAL-KUNNR1,206 SY-VLINE,IT_FINAL-BSTKD,245 SY-VLINE,
    IT_FINAL-BSARK,255 SY-VLINE.
    HIDE IT_FINAL-VBELN.
    WRITE:/ SY-ULINE(255).
    AT END OF KUNNR.
    SUM.
    WRITE:/ SY-VLINE,'TOTAL',63 IT_FINAL-NETWR,181 IT_FINAL-NETPR,255
    SY-VLINE.
    WRITE:/ SY-ULINE.
    ENDAT.
    ENDLOOP.
    AT LINE-SELECTION.
    AT LINE-SELECTION.
    CASE SY-LSIND.
    WHEN '1'.
    TO GET SECONDARY LIST
    PERFORM INTERACT.
    ENDCASE.
    *& Form interact
    text
    --> p1 text
    <-- p2 text
    FORM INTERACT .
    SELECT SINGLE KNUMV FROM VBAK
    INTO V_KNUMV
    WHERE VBELN = IT_FINAL-VBELN.
    SELECT KNUMV
    KPOSN
    KSCHL
    KBETR
    KWERT
    FROM KONV
    INTO TABLE IT_KONV
    WHERE KNUMV = V_KNUMV.
    SELECT KSCHL
    VTEXT FROM T685T
    INTO TABLE IT_TEXT
    FOR ALL ENTRIES IN IT_KONV
    WHERE KSCHL = IT_KONV-KSCHL AND
    SPRAS = SY-LANGU AND
    KVEWE = 'A' AND
    KAPPL = 'V'.
    CLEAR IT_KONV.
    CLEAR IT_TEXT.
    WRITE:/ SY-ULINE(72).
    FORMAT COLOR COL_NEGATIVE.
    WRITE:/ SY-VLINE,'COITEM',10 SY-VLINE,'RATE',28 SY-VLINE,
    'COND.VALUE',48 SY-VLINE,'NAME',72 SY-VLINE.
    WRITE:/ SY-ULINE(72).
    LOOP AT IT_KONV.
    L_TABIX = SY-TABIX.
    READ TABLE IT_KONV INDEX L_TABIX.
    READ TABLE IT_TEXT WITH KEY KSCHL = IT_KONV-KSCHL.
    L_TABIX = SY-TABIX MOD 2.
    IF L_TABIX <> 0.
    FORMAT COLOR COL_HEADING INTENSIFIED ON.
    ELSE.
    FORMAT COLOR COL_HEADING INTENSIFIED OFF.
    ENDIF.
    WRITE:/ SY-VLINE,IT_KONV-KPOSN,10 SY-VLINE, IT_KONV-KBETR,28
    SY-VLINE,IT_KONV-KWERT,48 SY-VLINE,IT_TEXT-VTEXT,72 SY-VLINE.
    ENDLOOP.
    WRITE:/ SY-ULINE(72).
    ENDFORM. " interact
    regards,
    keerthi
    Sankar M  
    Posts: 543
    Questions: 18
    Registered: 11/20/06
    Forum points: 622 
    Solved problem (10)
    Very helpful answer (6)
    Helpful answer (2)
       Re: ABAP Reports  
    Posted: Mar 21, 2007 5:39 AM    in response to: jita dash       Reply      E-mail this post 
    Hi,
    This is the very simple INTERACTIVE REPORT. It will help really helps to u to understand the concept.
    REPORT YMS_INTERACTIVETEST LINE-SIZE 50 NO STANDARD PAGE HEADING.
    TABLES: VBAP,KNA1,VBAK.
    SELECT-OPTIONS: CUST FOR KNA1-KUNNR.
    DATA: BEGIN OF ITAB OCCURS 0,
    KUNNR LIKE KNA1-KUNNR,
    NAME1 LIKE KNA1-NAME1,
    VBELN LIKE VBAK-VBELN,
    AUDAT LIKE VBAK-AUDAT,
    AUART LIKE VBAK-AUART,
    POSNR LIKE VBAP-POSNR,
    POSAR LIKE VBAP-POSAR,
    END OF ITAB.
    DATA: ITAB1 LIKE ITAB OCCURS 0 WITH HEADER LINE.
    INITIALIZATION.
    START-OF-SELECTION.
    SELECT KNA1KUNNR KNA1NAME1 INTO CORRESPONDING FIELDS OF TABLE ITAB1
    FROM KNA1 WHERE KNA1~KUNNR IN CUST.
    LOOP AT ITAB1.
    WRITE:/10 ITAB1-KUNNR HOTSPOT, 30 ITAB1-NAME1.
    HIDE: ITAB1-KUNNR.
    ENDLOOP.
    AT LINE-SELECTION.
    CASE SY-LSIND.
    WHEN '1'.
    SELECT KNA1KUNNR VBAKVBELN VBAKAUDAT VBAKERDAT INTO CORRESPONDING FIELDS OF TABLE ITAB1
    FROM KNA1 INNER JOIN VBAK ON KNA1KUNNR = VBAKKUNNR.
    LOOP AT ITAB1.
    WRITE:/ ITAB1-VBELN HOTSPOT, ITAB1-AUDAT, ITAB1-AUART.
    HIDE: ITAB1-VBELN, ITAB1-AUDAT, ITAB1-AUART.
    ENDLOOP.
    WHEN '2'.
    SELECT VBAKVBELN VBAPPOSNR VBAP~POSAR
    INTO CORRESPONDING FIELDS OF TABLE ITAB1 FROM VBAK INNER JOIN VBAP ON VBAKVBELN = VBAPVBELN.
    LOOP AT ITAB1.
    WRITE:/ ITAB1-POSNR, ITAB1-POSAR.
    ENDLOOP.
    ENDCASE.
    TOP-OF-PAGE.
    WRITE:/ SY-VLINE,TEXT-001 COLOR COL_NEGATIVE.
    ULINE.
    Thanks,
    Shankar
    jita dash  
    Posts: 8
    Questions: 3
    Registered: 3/20/07
    Forum points: 0 
       Re: ABAP Reports  
    Posted: Mar 21, 2007 1:05 PM    in response to: jita dash         Reply      E-mail this post 
    2-Created an interactive report to display details of vendor and all bank transactions done with the client.
    jita dash  
    Posts: 8
    Questions: 3
    Registered: 3/20/07
    Hi
    i want to know how to get the screen and solution in brief about the following:
    Message was edited by:
            jita dash

  • Regarding watch points in ABAP debugger

    Hi,
    Could u explain , why we use watch points, what is the use of it
    and how to use it.
    Thanks & regards,
    [email protected]

    Watch points
    http://help.sap.com/saphelp_nw04/helpdata/en/c6/617cdce68c11d2b2ab080009b43351/content.htm
    http://help.sap.com/saphelp_47x200/helpdata/en/14/6d1c370c468b7be10000009b38f936/frameset.htm
    Like a breakpoint, a watchpoint is an indicator in a program that tells the ABAP runtime processor to interrupt the program at a particular point. Unlike breakpoints, however, watchpoints are not activated until the contents of a specified field change. Watchpoints, like dynamic breakpoints, are user-specific, and so do not affect other users running the same program. You can only define watchpoints in the Debugger.
    Use
    You set watchpoints in the Debugger to monitor the contents of specific fields. They inform you when the value of a field changes. When the value changes, the Debugger interrupts the program.
    Features
    You can set up to five watchpoints in a program.
    See also Setting Watchpoints.
    You can also specify the conditions on which a watchpoint is to become active.
    You can specify logical conditions between up to five conditional watchpoints.
    See Specifying a Logical Expression.
    You can define watchpoints as either local or global. If you define a global watchpoint, it is active in all called programs. Local watchpoints are only active in the specified program.
    You can change and delete watchpoints.
    See Changing Watchpoints.
    You can use watchpoints to display changes to the references of strings, data and object references, and internal tables.
    See Memory Monitoring with Watchpoints
    If you want to interrupt a program when the contents of a field or structure change, use a watchpoint. You can set up to five watchpoints, including watchpoints for strings.
    A watchpoint can be either local or global. Local watchpoints are only valid in the specified program. Global watchpoints are valid in the specified program, and also in all the other programs it calls.
    Procedure
    To set a watchpoint, start the Debugger and proceed as follows:
    Choose Breakpoint ® Create watchpoint or the corresponding pushbutton. The Create Watchpoint dialog box appears:
    ashish
    Message was edited by:
            Ashish Gundawar

  • What is the utility of watch point and break point in ABAP DEBUGGING !

    What is the utility of watch point and break point in ABAP DEBUGGING !
    PLEASE TELL ME IN DETAILS AND IF POSSIBLE WITH SCREEN SHOTS !

    Hi,
    Breakpoints, Watchpoints, and Checkpoints
    Summary
    The standard Breakpoints tool is always located on the Breakpoints desktop. With this tool, you can manage breakpoints, watchpoints and checkpoints. In addition, you can monitor the current status of the different breakpoint types.
    Detailed Description
    Breakpoints
    In the Breakpoints area, you will see a list of all the breakpoints set so far. If one of the breakpoints has just been reached, this is marked with a yellow arrow. The visibility (Debugger, session, user) and type (line, ABAP command, …) is displayed for each breakpoint.
    If you double click the Navigation() column, the system will display the breakpoint in the respective source code.
    The visibility of a breakpoint can be changed through the dropdown list. To change the visibility of several breakpoints, mark them and select the pushbutton Save as Session Breakpoint or Save as User Breakpoint.
    You can change the visibility of all Debugger breakpoints using the menu path Breakpoints-> Save Debugger BPs as -> ....
    In addition, you have functions for creating, changing, activating and deactivating breakpoints at your disposal.
    Watchpoints
    In the Watchpoints area, you will see a list of all the watchpoints set so far. The watchpoint last set is highlighted with a yellow arrow.
    For each watchpoint you will see not only the current value but the value before the last changed. (Technically speaking, each time you create the watchpoint and each time the watchpoint variable is changed, a clone of this variable is created.)
    In this way, you can always determine what changes have been made to the monitored variable. For complicated data structures, such as internal tables or structures, select the pushbutton „Compare Variables“( ) and choose the Diff tool to compare the old and new variable values.
    In addition, you have functions for creating, changing, activating and deactivating watchpoints at your disposal.
    Checkpoints
    In addition, you can edit conditional and unconditional checkpoints using the Breakpoints tool. This function is provided in the new Debugger only. Conditional checkpoints are set first in the source code using the ASSERTstatement; unconditional checkpoints are set using the BREAK-POINT statement. These have the effect that programs will be continued only if a preset condition is fulfilled. In the following window, these checkpoints can be searched for, activated, or deactivated.
    Pls refer to :
    http://help.sap.com/saphelp_nw70/helpdata/en/e2/5f5a42ed221253e10000000a155106/frameset.htm
    Regards,
    Renjith Michael.

  • What is utility of watch points and break point  in ABAp debugging !

    What is utility of watch points and break point  in ABAp debugging !

    Hi,
    Breakpoints, Watchpoints, and Checkpoints
    Summary
    The standard Breakpoints tool is always located on the Breakpoints desktop. With this tool, you can manage breakpoints, watchpoints and checkpoints. In addition, you can monitor the current status of the different breakpoint types.
    Detailed Description
    Breakpoints
    In the Breakpoints area, you will see a list of all the breakpoints set so far. If one of the breakpoints has just been reached, this is marked with a yellow arrow. The visibility (Debugger, session, user) and type (line, ABAP command, …) is displayed for each breakpoint.
    If you double click the Navigation() column, the system will display the breakpoint in the respective source code.
    The visibility of a breakpoint can be changed through the dropdown list. To change the visibility of several breakpoints, mark them and select the pushbutton Save as Session Breakpoint or Save as User Breakpoint.
    You can change the visibility of all Debugger breakpoints using the menu path Breakpoints-> Save Debugger BPs as -> ....
    In addition, you have functions for creating, changing, activating and deactivating breakpoints at your disposal.
    Watchpoints
    In the Watchpoints area, you will see a list of all the watchpoints set so far. The watchpoint last set is highlighted with a yellow arrow.
    For each watchpoint you will see not only the current value but the value before the last changed. (Technically speaking, each time you create the watchpoint and each time the watchpoint variable is changed, a clone of this variable is created.)
    In this way, you can always determine what changes have been made to the monitored variable. For complicated data structures, such as internal tables or structures, select the pushbutton „Compare Variables“( ) and choose the Diff tool to compare the old and new variable values.
    In addition, you have functions for creating, changing, activating and deactivating watchpoints at your disposal.
    Checkpoints
    In addition, you can edit conditional and unconditional checkpoints using the Breakpoints tool. This function is provided in the new Debugger only. Conditional checkpoints are set first in the source code using the ASSERTstatement; unconditional checkpoints are set using the BREAK-POINT statement. These have the effect that programs will be continued only if a preset condition is fulfilled. In the following window, these checkpoints can be searched for, activated, or deactivated.
    Regards,
    Renjith Michael.

  • ABAP Report to HTML in BSP

    Hi,
    I have read the very interesting posts about calling ABAP reports from BSP applications.
    Nevertheless, I noticed 2 constraints in order for a Report to be called :
    - the <b>sap/bc/report</b> must be active in Transaction SICF
    - the report must have an <b>Authorization Group</b> defined
    <b>Am i right, so far ?</b>
    Besides, I tried to implement the solution given in the forum as follows :
    DATA: html TYPE TABLE OF w3html. " occurs 10 with header line.
    DATA: html_wa TYPE w3html.
    DATA: listobject TYPE TABLE OF abaplist. " occurs 10.
    DATA: report_name TYPE syrepid.
    DATA: result TYPE string.
    report_name = 'SHOWCOLO'.
    SUBMIT (report_name) EXPORTING LIST TO MEMORY AND RETURN .
    CALL FUNCTION 'LIST_FROM_MEMORY'
      TABLES
        listobject = listobject.
    CALL FUNCTION 'WWW_HTML_FROM_LISTOBJECT'
      EXPORTING
        report_name = 'WEBREPORTING_REPORT'
      TABLES
        html        = html
        listobject  = listobject.
    LOOP AT html INTO html_wa.
      CONCATENATE result html_wa INTO result SEPARATED BY space.
    ENDLOOP.
    The problem is that the 'WWW_HTML_FROM_LISTOBJECT' is fauly. There is a call to the FM 'RECORDER_PLAY_BACK' which itself calls 'ABAPLIST_VERSION %_RFC' and the code stops !
    <b>Any idea why this is happening ?
    Am I missing a service in SICF ?</b>
    Of course, when I do the same code in a classic ABAP Program everything works fine...
    Thanks in advance.
    Cheers,
    Guillaume
    Message was edited by: Guillaume Garcia

    <i> the sap/bc/report must be active in Transaction SICF
    - the report must have an Authorization Group defined</i>
    both the points above are correct, more than that, using sap/bc/report  you cannot pass selection screen values or variants.
    regarding
    'WWW_HTML_FROM_LISTOBJECT'
    i have been using this and no problem at all. where is your BSP you wrote the logic using 'WWW_HTML_FROM_LISTOBJECT'.
    also dose it generate a dump? if so can you give us the gist of the dump analysis.
    REgards
    Raja

  • Use of foreign key check in ABAP reports

    Hi,
    I'm trying to understand if it's possible to use a foreign key integrity check in an ABAP reports. I have understood that this kind of check is deactivated for performance reasons, is it right?
    In this case I'd like to know if it is possible to activate the foreign key check "on demand", or just for a particular table.
    As an example, I'd like to use the foreign key defined on attribute AKONT of table KNB1, that points on the related attribute of table SKB1.
    Thanks,
    Gabriele

    Welcome on SCN!
    I'm trying to understand if it's possible to use a foreign key integrity check in an ABAP reports. I have understood that this kind of check is deactivated for performance reasons, is it right?
    Most likely yes. Integrity is turned OFF for Open SQL statements but is turned ON for screen fields.
    If you just create screen parameter like
    parameters pa_akont type knb1-akont.
    ...then input help for that field will be automatically provided. This means that you will not be able to pick or enter value different that this allowed from SKB1 table (foreign key relationship will be checked).
    You can explicitly assign different input help or search help for certain screen field independently of type it is refering i.e by means of fm F4IF_FIELD_VALUE_REQUEST .
    This however still relates only to screen fields, not fields used directly in ABAP statement.
    Regards
    Marcin

  • Hi Can any one help in creating a New Change history log for ABAP Report

    SE38, put your cursor on an empty line within the source code editor, and click the pattern button. In the dialog, select the radiobutton for “Pattern” and enter the name of the pattern and click the green check. The wizard will then be triggered. Using the ABAP Report Wizard This first screen of the wizard is simply for information purposes.
    How to create that log. How to Enter our user defined into SAP. I mean how to create and get our own one in other patterns F4 help

    Hi Mohan
    To create a custom patter please go through the following Menu option in SE38,
    Utilities --> More Utilities --> Edit Pattern --> Create/Change/Delete/Display Pattern.
    Hope this helps !
    Regards
    Ranganath
    PS : Reward points for all useful answers !

  • ABAP Reports and SAP Query

    Hi Experts,
    I have question regarding ABAP Reports, SAP Query, and Transaction with variant.  How are we securing one the above reports that we assign them through pfcg.  We can secure custom program by custom transaction or define the auth group in S_PROGRAM auth object but in this case we have to assign SA38 in production. is that correct?
    Please help me understand difference between the ABAP reports and SAP query. Is the ABAP reports same as Program or they are different.
    Thanks in advance
    Faisal
    Edited by: Faisal on Jun 30, 2009 11:06 PM

    Hi,
    1) End user security (role matrix coordinate with process team)
    This role Matrix design is most important where we can put restrictions and use SoD.
    2) Secure Table (by auth group)
    Table TDDAT and use of transaction se54 for security tables to right auth Groups. Secure s_tabu_dis, s_tabu_cli.
    3) Secure program (as you said ABAP reports are referred to Program)
    Use of table TPGP and program RSCSAUTH for assignment of groups to Program. SA38 Running of SA38 requires a minimum SUBMIT in user Action. A user having SA38 is dangerous as he/she is now enabled to run any report. Hence protection in Auth Group is needed. Verify each and every program is having authority check statement and Auth Group or not before assigning sa38. As you mentioned its best to avoid SA38 and create CUSTOM TXN for each report.
    (We should also SECURE S_DEVELOP in Production properly along with ur points. Please Note).
    4) Secure some batch jobs roles for batch job
    Secure by s_btch* objects and less access to se36.
    5) Create support roles for cutover activity during Go-live
    That is always needed. Go ahead.
    6) Emergency roles & IT roles for support
    This is very much needed as a role of Mitigation and Fire Fighting for Temporary access. Ensure to enable ur audit parameters in RZ10 (rsau* sm20,RSLG* for sm21). Give emergency access but enable audit via sm19 and get audit reports from sm20 and sm21 immediately after the use of emergency access.
    There are also other auth objects we need to be care ful which is a long list and hope every body ensures that (s_cts,a_admi,s_trans, tables ssm_cust, prgn,t000) etc and a host of others. Besh wishes. Let us know if any issue.
    Regards
    Aveek.

  • What is watch point and break points?what are there types?

    what is watch point and break points?what are there types?

    Static Breakpoints
    Static breakpoints are always user-independent if there is no specification of a user name. Once a user has inserted the statement BREAK-POINT or BREAK name in an ABAP program, the system always interrupts the program at that point for that user or only for the user name. This procedure is only useful in the development phase of an application when program execution is always to be interrupted at the same place. For more information, refer to the chapter Static Breakpoints.
    In HTTP sessions, a static breakpoint is skipped if you did not set additional dynamic HTTP breakpoints in the editor of a BSP page. Instead, a corresponding system log entry is written, which can be checked using transaction SM21.
    Dynamic Breakpoints
    Dynamic breakpoints are user-specific. Therefore, you should use them if you only want the program to be interrupted when you run it yourself, not when it is being executed by other users. All dynamic breakpoints are deleted when you log off from the R/3 System.
    Dynamic breakpoints are more flexible than static breakpoints because you can deactivate or delete them at runtime. They have the following advantages:
    · You do not have to change the program code.
    · You can set them even when the program is locked by another programmer.
    · You can define a counter that only activates the breakpoint after it has been reached.
    Special dynamic breakpoints are useful when you want to interrupt a program directly before a particular ABAP statement, a subroutine, or an event, but do not know exactly where to find it in the source code. Event here is used to refer to the occurrence of a particular statement, for example, or calling up a method. Special dynamic breakpoints are user-specific. You can only set them in the Debugger. For more information, refer to the chapter Dynamic Breakpoints.
    In HTTP sessions, the system stops both at static and dynamic breakpoints if a dynamic breakpoint was set in the editor of a BSP page before program execution.
    Watch point are used to put logical break point for a certain condition..Example..If you want to know when the internal table is getting append..Then you have to give the program name and the internal table in the watch point.. 
    Steps to create a watch point.
    Start debugging '/H'.
    In the debugging screen press the create watch point button in the application tool bar..
    In the program give the program name..
    in the field give the field name.
    In the relational operator given '='
    In the comp. field/value give the value ..
    Hope this helps..
    Regards,
    Parvez.

  • Break points and watch points

    Hi all
       Can anybody help me using break points and watch points.what do they exactly do as well..
    Thanks
    abap user

    Hi
    <b>Breakpoints</b>
    Instead of starting an ABAP program directly in the Debugger, you can also debug a program by creating one or more breakpoints in the program. A breakpoint is a signal at a particular point in the program that tells the ABAP runtime processor to interrupt processing and start the Debugger. The program runs normally until the breakpoint is reached.
    There is also a special kind of breakpoint called a watchpoint. When you use watchpoints, the Debugger is not activated until the contents of a particular field <b>change. For further information, refer to Watchpoints.
    Breakpoint Variants</b>
    The Debugger contains different breakpoint variants:
    <b>Static</b>     The BREAK-POINT statement in an ABAP program. Static breakpoints are not normally user-specific. However, you can make them user-specific.
    <b>Directly-set</b>
    dynamic breakpoints     Can be set in the ABAP Editor or the Debugger. Dynamic breakpoints are always user-specific, and are deleted when you log off from the R/3 System.
    <b>Breakpoint</b>
    at statement     The Debugger stops the program directly before the specified statement is executed.
    <b>Breakpoint at subroutine</b>     The Debugger stops the program directly before the specified subroutine is called.
    <b>Breakpoint at function module</b>     The Debugger stops the program directly before the specified function module is called.
    Breakpoint at method     The Debugger stops the program directly before the specified method is called.
    <b>Breakpoints at system exceptions</b>     The Debugger stops the program directly after a system exception, that is, after a runtime error has been intercepted.
    <b>Use</b>
    <b>Static Breakpoints</b>
    Static breakpoints are not normally user-specific. Once a user has inserted a BREAK-POINT statement in an ABAP program, the system always interrupts the program at that point. You should only use static breakpoints during the development phase of an application. You should set static breakpoints whenever more than one programmer is working on the same program and you always want to stop the program in the same place.
    <b>Dynamic Breakpoints</b>
    Dynamic breakpoints are user-specific. You should, therefore, use them when you only want the program to be interrupted when you run it yourself. All dynamic breakpoints are deleted when you log off from the R/3 System.
    Dynamic breakpoints are more flexible than static breakpoints, because you can deactivate or delete them at runtime. They have the following advantages:
    •     You do not have to change the program code
    •     You can set them even when the program is locked by another programmer
    •     You can define a counter (for example, only activate the breakpoint after it has been reached five times).
    <b>Special Dynamic Breakpoints</b>
    Special dynamic breakpoints are useful when you want to interrupt a program directly before a particular ABAP statement, a subroutine, or an event, but do not know exactly where to find it in the program code. Event here is used to refer to the occurrence of a particular statement, for example, or calling up a method. Special dynamic breakpoints are user-specific. You can only set them in the Debugger.
    <b>Transferring Breakpoints to HTTP and Update Sessions</b>
    If an HTTP or update session is called from a Logical Unit of Work (LUW), new work processes are started for these new sessions. Breakpoints that were defined beforehand in the calling LUW are copied to these sessions where they can be displayed under breakpoints.
    If, for example, the update module func is called via CALL FUNCTION func IN UPDATE TASK, the new work process is displayed in a second window if Update debugging was selected under Settings in the debugging mode. All the breakpoints that were set in the calling LUW can then be processed here.
    <b>Static Breakpoints</b>
    You should only use static breakpoints during the development phase of an application. You must remove them from your program before you transport it.
    Setting Breakpoints
    To set a static breakpoint, use the ABAP statement BREAK-POINT . Place the breakpoint in the line at which you want to interrupt the program.
    program RSDEBUG_01.
    if SY-SUBRC <> 0.
    break-point.
    endif.
    When you run the program, the runtime processor interrupts it when the breakpoints occur. You can number your breakpoints to make them easier to identify ( BREAK-POINT 1, BREAK-POINT 2 …).
    Static breakpoints are not normally user-specific. The program is, therefore, always interrupted as soon as the runtime processor reaches the line containing the breakpoint. The program is interrupted regardless of the user who executes it.
    However, you can set user-specific static breakpoints using the BREAK statement followed by your user name. For example, if you use the statement BREAK SMITH , the program is only interrupted when user Smith runs it. Although user-specific breakpoints appear in the program code, they are not active when other users run the program. You should, however, be careful if an application is being used by several users with the same name.
    Deleting Breakpoints
    Since static breakpoints apply to all users, you must remove them from the program once you have finished testing it. In the ABAP Editor, you can find breakpoints quickly by choosing Utilities &#61614; Global search. You can also use the Extended Program Check to find them.
    If you do not remove static breakpoints from your program, they will be transported to your production system. This could cause serious problems in the production system.
    <b>Dynamic Breakpoints</b>
    You can set up to 30 dynamic breakpoints without changing the program code. Dynamic breakpoints can be set either in the ABAP Editor or directly in the Debugger.
    Setting Dynamic Breakpoints in the ABAP Editor
    You can set dynamic breakpoints in the ABAP Editor regardless of whether you are in display or change mode. You can also set breakpoints directly from within the Debugger at runtime. To set a dynamic breakpoint in the ABAP Editor:
    1.     Position the cursor on the line of the source code at which you want to set the breakpoint.
    2.     Choose Utilities &#61614; Breakpoints &#61614; Set or the Stop icon. The system confirms that the breakpoint has been set.
    To display a list of all dynamic breakpoints in a program, choose Utilities &#61614; Breakpoints &#61614; Display. You can use this list to navigate to a particular breakpoint or to delete one or more breakpoints from the program.
    Setting Dynamic Breakpoints in Debugging Mode
    To set a dynamic breakpoint in the Debugger:
    1.     Position the cursor on the line in which you want to set the breakpoint.
    2.     Select the line by double-clicking it or choosing Breakpoint &#61614; Set/delete.
    The system sets the breakpoint, and displays a small stop sign to the left of the relevant line. If the line already contained a breakpoint, it is deleted.
    When you finish your debugging session, the breakpoint is automatically deleted unless you have explicitly saved it.
    <b>
    Breakpoints at Statements</b>
    You can use this special kind of dynamic breakpoint to interrupt a program directly before an ABAP statement is processed.
    Prerequisites
    You must already be running the program in the Debugger.
    Procedure
    To set a breakpoint at an ABAP statement:
    1.     Choose Breakpoint &#61614; Breakpoint at &#61614; Statement...
    2.     Enter the ABAP statement.
    The system sets a breakpoint at all points in the program at which the ABAP statement occurs.
    3.     Choose ENTER.
    The breakpoint applies to all lines containing the specified statement.
    Result
    The system confirms the breakpoint and adds it to the list in the display. When you finish your debugging session, the breakpoint is automatically deleted unless you have explicitly saved it.
    <b>Breakpoints at Subroutines</b>
    You can use this special kind of dynamic breakpoint to interrupt a program directly before a subroutine is called.
    Prerequisites
    You must already be running the program in the Debugger.
    Procedure
    To set a breakpoint for a subroutine:
    1.     Choose Breakpoint &#61614; Breakpoint at &#61614; Event/Subroutine.
    2.     Enter the name of the subroutine before which you want to interrupt the program. By default, the Program field contains the name of the program that is currently active. The system sets a breakpoint wherever the specified subroutine occurs in the program code.
    3.     Choose ENTER.
    Result
    The system confirms the breakpoint. The breakpoint is added to the breakpoints displayed.
    <b>Breakpoints at Function Module</b>
    You can use this kind of dynamic breakpoint to interrupt a program directly before a function module is called.
    Prerequisites
    You must already be running the program in the Debugger.
    Procedure
    <b>To set a breakpoint for a function module</b>:
    1.     Choose Breakpoint &#61614; Breakpoint at &#61614; Function module... 
    2.     Enter the name of the function module before which you want to interrupt the program. The system sets a breakpoint wherever the specified event, module pool, or subroutine occurs in the program code.
    3.     Choose ENTER.
    Result
    If you entered a valid function module name, the system confirms that the breakpoint has been set. If the function module exists in the system, the new breakpoint is added to the display list.
    <b>Breakpoints at System Exceptions</b>
    You can use this special form of dynamic breakpoint to interrupt a program immediately after a runtime error has occurred.
    Prerequisites
    You must already be running the program in the Debugger.
    Procedure
    To set a breakpoint at a system exception:
    Choose Breakpoint &#61614; Breakpoint at &#61614; System exception.
    Result
    The system confirms the breakpoint. The breakpoint is added to the breakpoints displayed.
    When a system exception is triggered, a warning triangle appears in the line containing the statement that caused it. If you double-click the warning triangle, the internal name of the runtime error appears.
    <b>Saving Breakpoints</b>
    If you want to leave the Debugger temporarily, you can save your dynamic breakpoints so that they are still active when you return to the Debugger within the same terminal session.
    To save the breakpoints that you have set in the Debugger:
    Choose Breakpoint &#61614; Save.
    The system saves all of the breakpoints that you have set in the current program. These breakpoints will remain active until you either explicitly delete them or log off from the system.
    <u>You can also delete breakpoints that you have saved</u>:
    •     By deleting individual breakpoints from the display and then saving again. In this case, only your selected breakpoints will be deleted.
    •     By choosing Breakpoint &#61614; Delete all. In this case, the system deletes all dynamic breakpoints.
    <b>Managing Dynamic Breakpoints</b>
    The ABAP Debugger provides a convenient user interface for managing breakpoints. To open the breakpoint display, choose Breakpoints, or, from the menu, Goto &#61614; Control debugging &#61614; Breakpoints.
    Functions
    This display mode contains the following functions for breakpoints:
    Breakpoint Display
    The scrollable breakpoint display contains up to 30 dynamic breakpoints. For breakpoints that you set directly, the program name and line number at which the breakpoint occurs are displayed. For special breakpoint forms, the list displays the statements, events, subroutines, and module calls at which the relevant breakpoints are set.
    Counter
    In the breakpoint display, you can specify a counter. When you use a counter, the breakpoint is not activated until it has been reached a specified number of times. For example, if you enter 5 for the counter, the breakpoint is not activated until it is reached for the fifth time. After the breakpoint has been activated, it remains so, and the counter no longer appears in the breakpoint display.
    Deleting Breakpoints
    Position the cursor on the breakpoint that you want to delete, and either double-click the line or choose Breakpoint &#61614; Set/delete. To delete all breakpoints, choose Breakpoint &#61614; Delete all.
    Activating and Deactivating Breakpoints
    Position the cursor on the breakpoint that you want to activate or deactivate and choose Breakpoint &#61614; Activate/deactivate.
    <b>Watchpoints</b>
    Like a breakpoint, a watchpoint is an indicator in a program that tells the ABAP runtime processor to interrupt the program at a particular point. Unlike breakpoints, however, watchpoints are not activated until the contents of a specified field change. Watchpoints, like dynamic breakpoints, are user-specific, and so do not affect other users running the same program. You can only define watchpoints in the Debugger.
    Use
    You set watchpoints in the Debugger to monitor the contents of specific fields. They inform you when the value of a field changes. When the value changes, the Debugger interrupts the program.
    Features
    •     You can set up to five watchpoints in a program.
    •     You can also specify the conditions on which a watchpoint is to become active.
    •     You can specify logical conditions between up to five conditional watchpoints.
    •     You can define watchpoints as either local or global. If you define a global watchpoint, it is active in all called programs. Local watchpoints are only active in the specified program.
    •     You can change and delete watchpoints.
    <b>Setting Watchpoints</b>
    If you want to interrupt a program when the contents of a field or structure change, use a watchpoint. You can set up to five watchpoints, including watchpoints for strings.
    A watchpoint can be either local or global. Local watchpoints are only valid in the specified program. Global watchpoints are valid in the specified program, and also in all the other programs it calls.
    Procedure
    <u>To set a watchpoint, start the Debugger and proceed as follows:</u>
    1.     Choose Breakpoint &#61614; Create watchpoint or the corresponding pushbutton. The Create Watchpoint dialog box appears.
    2.     Decide whether you want to set a local or global watchpoint.
    3.     Enter the program and the name of the field for which you want to set the watchpoint. In the Program field, the name of the program currently running is always defaulted.
    4.     If you want your watchpoint to be activated each time the contents of the field change, the definition is now complete, and you can return to the Debugger by pressing ENTER .
    5.     To create a conditional watchpoint, that is only activated when a particular situation arises, choose one of the following relational operators.
    Operator     Meaning
    <     Less than
    <=     Less than or equal
    =     Equal
    <>     Not equal
    >=      Greater than or equal
    >      Greater than
    6.     
    7.     You can use the Comparison field option to specify whether the comparison is to be carried out with a value that you specify or with the contents of another field. Depending on your choice from step 6, enter a value or a field for the comparison.
    <b>Result</b>
    The system confirms the watchpoint and adds it to the list in the display. When you finish your debugging session, the watchpoint is automatically deleted unless you have explicitly saved it.
    <b>Specifying Logical Links</b>
    If you have more than one conditional watchpoint, you can specify a logical link between them:
    OR     Only one of the specified conditions must be met
    AND     All of the conditions must be met.
    <u>To create a logical link between watchpoints:</u>
    1.     Choose Goto &#61614; Control debugging &#61614; Watchpoints or the Watchpoints pushbutton to open the watchpoint display.
    2.     Set the Logical operator between watchpoints option.
    The default value is always OR .
    Changing Watchpoints
    1.     Choose Goto &#61614; Control debugging &#61614; Watchpoints or the Watchpoints pushbutton to display the watchpoint list.
    2.     Choose the pencil icon in the line containing the watchpoint you want to change.
    3.     Change the watchpoint attributes in the Create/Change Watchpoint.
    3.     Choose ENTER .
    <b>Deleting Watchpoints</b>
    You cannot delete watchpoints by choosing Breakpoint &#61614; Delete or Breakpoint &#61614; Deactivate/activate. Instead, proceed as follows:
    1.     Choose Goto &#61614; Control debugging &#61614; Watchpoints or the Watchpoints pushbutton to display the watchpoint list.
    2.     Choose the trashcan icon in the line containing the watchpoint you want to delete.
    <b>Memory Monitoring with Watchpoints</b>
    You can use watchpoints to display changes to the references of strings, data and object references, and internal tables. By placing an ampersand (&) in front of the object name, you can display the reference in question in hexadecimal format. With internal tables, you can also display the table header by placing an asterisk (*) at the beginning of the name.
    <b>Reward ifusefull</b>

  • Serious Performance Problems in ABAP Reports

    Hi All,
    We are developing ABAP reports for SAP IS-U/CCS Modules and facing Performance issues.Whole scenario is given below.Please suggest some solution.
    1. Total No. Of Business Partners = 1500000
    2. Reports Selection Criteria are of two types:
         a) GSBER(Business Area) - Selection for atleast 200000 Business Partners
         b) Cokey(Division)     - Selection for around 1000 to 50000 Business Partners
    3. For implementing our reports logic we have to access several tables all of which are very large.They are :
         Table Name     No. of records (Appx)          
         DBERCHV               20000000
         DBERCHZ1              20000000
         DBERDLB               20000000
         DFKKKO                20000000
         DFKKOP                20000000
         EANLH                  4000000
         ERCH                  10000000
         ERCHC                 10000000
         ETTIFN                30000000
         EVER                   1500000
         FKKVKP                 1500000
         TECOKT                     500     
         TGSBT                       12
    4. Due to large no. of records we are facing problems at two levels:
         a) OpenSQL Statement is taking too much time for data selection
         b) Since large no. of records are selected Corresponding loops and data processing also takes much time
    5. We have tried almost all ABAP Performance optimization techniques such as using Index, SQL optimization techniques,Read Table Optimization, Loop Statement Optimization etc. but there is not much improvement.
    6. For example one of our Reports "R15" takes around 1500 seconds for 1000 Business Partners.
    Its Code is attached below:
    <b>a) ZISU_SCHL_LTR15_BAPI - Program which schedules actual R15 report in background</b>
    *& Report  ZISU_SCHL_LTR15_BAPI                                        *
    *& Developed By : Piyusha Kirwai                                       *
    *& Date         : 02/12/2005                                           *
    *& Purpose      : To Schedule the LT R 15 prog in background and store
    *& the File for Manual R-15 into server.
    REPORT  ZISU_SCHL_LTR15_BAPI  NO STANDARD PAGE HEADING.
    TABLES ZEVERFKKVKP.
    DATA:  DYFIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE.
    DATA: IT_TAB TYPE FILETABLE,
          GD_SUBRC TYPE I.
    DATA: LV_GSBER TYPE TGSBT-GSBER.
    RANGES R_COKEY FOR ZEVERFKKVKP-COKEY.
    DATA: BEGIN OF GT_TECOKT OCCURS 100,
            COKEY TYPE TECOKT-COKEY,
            LTEXT TYPE TECOKT-LTEXT,
          END   OF GT_TECOKT,
          BEGIN OF GT_TE422 OCCURS 100,
            TERMSCHL TYPE TE422-TERMSCHL,
            TERMTEXT TYPE TE422-TERMTEXT,
          END   OF GT_TE422.
    DATA: BEGIN OF GWA_MANUAL_DATA,
            COL_1(5)        TYPE C,
            COL_2(10)       TYPE C,
            COL_3(40)       TYPE C,
            COL_4(40)       TYPE C,
            COL_5(10)       TYPE C,
            COL_6(19)       TYPE C,
            COL_7(19)       TYPE C,
            COL_8(19)       TYPE C,
            COL_9(19)       TYPE C,
            COL_10(19)      TYPE C,
            COL_11(19)      TYPE C,
            COL_12(10)      TYPE C,
            COL_13(19)      TYPE C,
            COL_14(19)      TYPE C,
            COL_15(19)      TYPE C,
            COL_16(19)      TYPE C,
            COL_17(19)      TYPE C,
            COL_18(19)      TYPE C,
          END   OF GWA_MANUAL_DATA,
          GT_MANUAL_DATA LIKE GWA_MANUAL_DATA OCCURS 0,
          GT_INTERN_DATA TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
    *&-----FOR UPLOADING FILE TO SERVER------------------------------------*
    DATA: LV_SERVER_FILE_PREFIX(60) TYPE C.
    DATA: LV_SERVER_DATAFILE_NAME(60) TYPE C.
    DATA: LV_SERVER_ERRFILE_NAME(60) TYPE C.
    DATA: ENDT LIKE SY-UZEIT,
          ENDD LIKE SY-DATUM,
          JOBCOUNT TYPE TBTCJOB-JOBCOUNT.
    SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS: SO_GSBER FOR ZEVERFKKVKP-GSBER OBLIGATORY,
                    SO_COKEY FOR ZEVERFKKVKP-COKEY OBLIGATORY,
                    SO_MRU   FOR ZEVERFKKVKP-ABLEINH.
    PARAMETERS:     P_BMNTH(7) TYPE C OBLIGATORY.
    SELECT-OPTIONS: SO_GPART FOR ZEVERFKKVKP-GPART.
    SELECTION-SCREEN END  OF BLOCK 001.
    SELECTION-SCREEN BEGIN OF BLOCK 002 WITH FRAME TITLE TEXT-003.
    PARAMETERS:  P_COMPUT RADIOBUTTON GROUP R15,
                 P_INCLUD RADIOBUTTON GROUP R15,
                 P_FILE  TYPE  RLGRAP-FILENAME MODIF ID ACT.
    SELECTION-SCREEN END   OF BLOCK 002.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(83) TEXT-004.
    SELECTION-SCREEN END   OF LINE.
    *SELECTION-SCREEN BEGIN OF LINE.
    *  SELECTION-SCREEN COMMENT 8(40) TEXT-005.
    *SELECTION-SCREEN END   OF LINE.
    SELECTION-SCREEN BEGIN OF BLOCK 003 WITH FRAME TITLE TEXT-002.
    PARAMETERS   P_SCHL TYPE C AS CHECKBOX.
    PARAMETERS : P_IMMED RADIOBUTTON GROUP SCH ,
                 P_DT_TM  RADIOBUTTON GROUP SCH,
                 P_DATE TYPE SY-DATUM MODIF ID SHL,
                 P_TIME TYPE SY-UZEIT MODIF ID SHL.
    SELECTION-SCREEN END   OF BLOCK 003.
    AT SELECTION-SCREEN.
    AT SELECTION-SCREEN ON SO_GSBER.
      IF NOT SO_GSBER-LOW IS INITIAL.
        SELECT SINGLE GSBER FROM TGSBT INTO LV_GSBER
          WHERE GSBER = SO_GSBER-LOW.
        IF SY-SUBRC <> 0.
          MESSAGE E007(ZISU).
        ENDIF.
      ENDIF.
      IF NOT SO_GSBER-HIGH IS INITIAL .
        SELECT SINGLE GSBER FROM TGSBT INTO LV_GSBER
          WHERE GSBER = SO_GSBER-HIGH.
        IF SY-SUBRC <> 0.
          MESSAGE E007(ZISU).
        ENDIF.
      ENDIF.
    AT SELECTION-SCREEN ON P_BMNTH.
    **check the validity of Billing month format and for valid billing month
      IF P_BMNTH CO '0123456789/'.
        IF P_BMNTH CP '++++/++'.
          IF P_BMNTH+5(2) > 12.
            MESSAGE E002(ZISU) WITH 'from'.
          ENDIF.
    ** current year is less than year entered
          IF SY-DATUM(4) < P_BMNTH(4).
            MESSAGE E003(ZISU) WITH 'from'.
          ELSEIF SY-DATUM(4) = P_BMNTH(4).
    ** month in future
            IF SY-DATUM+4(2) < P_BMNTH+5(2).
              MESSAGE E004(ZISU) WITH 'from'.
            ENDIF.
          ENDIF.
        ELSE.
          MESSAGE E001(ZISU) WITH 'from'.
        ENDIF.
      ELSE.
    **  entry have some invalid char
        MESSAGE E010(ZISU).
      ENDIF.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-LOW.
    **for geting the CO account assigment key of the entered Business area
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-LOW.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-HIGH.
    **for geting the CO account assigment key of the entered Business area
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-HIGH.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_MRU-LOW.
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM MRU_DATA_GET CHANGING SO_MRU-LOW.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_MRU-HIGH.
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM MRU_DATA_GET CHANGING SO_MRU-HIGH.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
      REFRESH: IT_TAB.
    **Opens File Open Dialog Box for selecting input file.
      CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
        EXPORTING
          WINDOW_TITLE     = 'Select File'
          DEFAULT_FILENAME = '*.xls'
          MULTISELECTION   = ' '
        CHANGING
          FILE_TABLE       = IT_TAB
          RC               = GD_SUBRC.
      LOOP AT IT_TAB INTO P_FILE.
    *    so_fpath-sign = 'I'.
    *    so_fpath-option = 'EQ'.
    *    append so_fpath.
      ENDLOOP.
    AT SELECTION-SCREEN OUTPUT.
      LOOP AT SCREEN.
        IF SCREEN-GROUP1 = 'ACT'.
          IF P_INCLUD = ' '.
            SCREEN-INPUT = '0'.
          ELSE.
            SCREEN-INPUT = '1'.
          ENDIF.
        ENDIF.
        IF SCREEN-GROUP1 = 'SHL'.
          IF P_DT_TM = 'X'.
            SCREEN-INPUT = '1'.
          ELSE.
            SCREEN-INPUT = '0'.
          ENDIF.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.
    INITIALIZATION.
      P_DATE = SY-DATUM.
      P_TIME = SY-UZEIT + 180.
    START-OF-SELECTION.
      IF P_INCLUD = 'X' AND P_FILE IS INITIAL.
        MESSAGE 'Enter the Manual R-15 File' TYPE 'E'.
      ENDIF.
    *  IF P_INCLUD = 'X'.
    *    PERFORM UPLOAD_EXCEL_FILE.
    *    CONCATENATE 'R15' SY-DATUM '-' SY-UZEIT INTO LV_SERVER_FILE_PREFIX.
    *    CONCATENATE LV_SERVER_FILE_PREFIX '-' 'LT.TMP' INTO
    *    LV_SERVER_DATAFILE_NAME.
    *    OPEN DATASET LV_SERVER_DATAFILE_NAME
    *      FOR OUTPUT
    *      IN TEXT MODE
    *      ENCODING DEFAULT.
    *    LOOP AT GT_MANUAL_DATA INTO GWA_MANUAL_DATA.
    *      IF ( GWA_MANUAL_DATA-COL_6 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_7 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_8 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_9 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_10 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_11 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_13 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_14 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_15 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_16 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_17 CN '0123456789 '
    *      AND GWA_MANUAL_DATA-COL_18 CN '0123456789 ' ).
    *        MESSAGE 'Character Data in Numerical Field' TYPE 'E'.
    *      ENDIF.
    *      TRANSFER GWA_MANUAL_DATA TO LV_SERVER_DATAFILE_NAME.
    *    ENDLOOP.
    *    CLOSE DATASET LV_SERVER_DATAFILE_NAME.
    *  ENDIF.  "  P_INCLUD = 'X'.
      IF P_SCHL = 'X'.
        IF P_IMMED = 'X'.
          CALL FUNCTION 'C14B_ADD_TIME'
            EXPORTING
              I_STARTTIME = SY-UZEIT
              I_STARTDATE = SY-DATUM
              I_ADDTIME   = '000010'
            IMPORTING
              E_ENDTIME   = ENDT
              E_ENDDATE   = ENDD.
        ELSEIF P_DT_TM = 'X'.
          ENDD = P_DATE.
          ENDT = P_TIME.
        ENDIF.
        CALL FUNCTION 'JOB_OPEN'
          EXPORTING
    *     DELANFREP              = ' '
    *     JOBGROUP               = ' '
            JOBNAME                = 'R15JOB'
    *      SDLSTRTDT              = ENDD
    *      SDLSTRTTM              = ENDT
    *     JOBCLASS               =
         IMPORTING
           JOBCOUNT               = JOBCOUNT
    *   CHANGING
    *     RET                    =
    *   EXCEPTIONS
    *     CANT_CREATE_JOB        = 1
    *     INVALID_JOB_DATA       = 2
    *     JOBNAME_MISSING        = 3
    *     OTHERS                 = 4
        IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
        IF P_INCLUD = 'X'.
          PERFORM UPLOAD_EXCEL_FILE.
         CONCATENATE 'R15' SY-DATUM '-' SY-UZEIT INTO LV_SERVER_FILE_PREFIX.
          CONCATENATE LV_SERVER_FILE_PREFIX '-' JOBCOUNT 'LT.TMP' INTO
          LV_SERVER_DATAFILE_NAME.
          CONDENSE LV_SERVER_DATAFILE_NAME.
          OPEN DATASET LV_SERVER_DATAFILE_NAME
            FOR OUTPUT
            IN TEXT MODE
            ENCODING DEFAULT.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
          LOOP AT GT_MANUAL_DATA INTO GWA_MANUAL_DATA.
            IF ( GWA_MANUAL_DATA-COL_6 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_7 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_8 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_9 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_10 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_11 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_13 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_14 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_15 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_16 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_17 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_18 CN '0123456789 ' ).
              MESSAGE 'Character Data in Numerical Field' TYPE 'E'.
            ENDIF.
            TRANSFER GWA_MANUAL_DATA TO LV_SERVER_DATAFILE_NAME.
          ENDLOOP.
          CLOSE DATASET LV_SERVER_DATAFILE_NAME.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
        ENDIF.  "  P_INCLUD = 'X'.
        SUBMIT ZISU_LTR15_TUNE
          WITH SO_GSBER IN SO_GSBER
          WITH SO_COKEY IN SO_COKEY
          WITH SO_MRU   IN SO_MRU
          WITH SO_GPART IN SO_GPART
          WITH P_BMNTH  =  P_BMNTH
          WITH P_COMPUT = P_COMPUT
          WITH P_INCLUD = P_INCLUD
          WITH P_FILE   = LV_SERVER_DATAFILE_NAME
          USER SY-UNAME VIA JOB 'R15JOB' NUMBER JOBCOUNT AND RETURN.
        CALL FUNCTION 'JOB_CLOSE'
          EXPORTING
    *   AT_OPMODE                         = ' '
    *   AT_OPMODE_PERIODIC                = ' '
    *   CALENDAR_ID                       = ' '
    *   EVENT_ID                          = ' '
    *   EVENT_PARAM                       = ' '
    *   EVENT_PERIODIC                    = ' '
            JOBCOUNT                          = JOBCOUNT
            JOBNAME                           = 'R15JOB'
    *   LASTSTRTDT                        = NO_DATE
    *   LASTSTRTTM                        = NO_TIME
    *   PRDDAYS                           = 0
    *   PRDHOURS                          = 0
    *   PRDMINS                           = 0
    *   PRDMONTHS                         = 0
    *   PRDWEEKS                          = 0
    *   PREDJOB_CHECKSTAT                 = ' '
    *   PRED_JOBCOUNT                     = ' '
    *   PRED_JOBNAME                      = ' '
            SDLSTRTDT                         = ENDD
            SDLSTRTTM                         = ENDT
    *   STARTDATE_RESTRICTION             = BTC_PROCESS_ALWAYS
            STRTIMMED                         = P_IMMED
    *   TARGETSYSTEM                      = ' '
    *   START_ON_WORKDAY_NOT_BEFORE       = SY-DATUM
    *   START_ON_WORKDAY_NR               = 0
    *   WORKDAY_COUNT_DIRECTION           = 0
    *   RECIPIENT_OBJ                     =
    *   TARGETSERVER                      = ' '
    *   DONT_RELEASE                      = ' '
    *   TARGETGROUP                       = ' '
    *   DIRECT_START                      =
    * IMPORTING
    *   JOB_WAS_RELEASED                  =
    * CHANGING
    *   RET                               =
    * EXCEPTIONS
    *   CANT_START_IMMEDIATE              = 1
    *   INVALID_STARTDATE                 = 2
    *   JOBNAME_MISSING                   = 3
    *   JOB_CLOSE_FAILED                  = 4
    *   JOB_NOSTEPS                       = 5
    *   JOB_NOTEX                         = 6
    *   LOCK_FAILED                       = 7
    *   INVALID_TARGET                    = 8
    *   OTHERS                            = 9
        IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ELSE.  " IF NOT TO RUN IN BACKGROUND
        IF P_INCLUD = 'X'.
          PERFORM UPLOAD_EXCEL_FILE.
         CONCATENATE 'R15' SY-DATUM '-' SY-UZEIT INTO LV_SERVER_FILE_PREFIX.
          CONCATENATE LV_SERVER_FILE_PREFIX '-' 'LT.TMP' INTO
          LV_SERVER_DATAFILE_NAME.
          CONDENSE LV_SERVER_DATAFILE_NAME.
          OPEN DATASET LV_SERVER_DATAFILE_NAME
            FOR OUTPUT
            IN TEXT MODE
            ENCODING DEFAULT.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
          LOOP AT GT_MANUAL_DATA INTO GWA_MANUAL_DATA.
            IF ( GWA_MANUAL_DATA-COL_6 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_7 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_8 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_9 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_10 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_11 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_13 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_14 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_15 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_16 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_17 CN '0123456789 '
            AND GWA_MANUAL_DATA-COL_18 CN '0123456789 ' ).
              MESSAGE 'Character Data in Numerical Field' TYPE 'E'.
            ENDIF.
            TRANSFER GWA_MANUAL_DATA TO LV_SERVER_DATAFILE_NAME.
          ENDLOOP.
          CLOSE DATASET LV_SERVER_DATAFILE_NAME.
          IF SY-SUBRC NE 0.
            MESSAGE 'Error in Creating File on Server' TYPE 'E'.
          ENDIF.
        ENDIF.  "  P_INCLUD = 'X'.
        IF NOT SY-BATCH IS INITIAL.
          SUBMIT ZISU_LTR15_TUNE
            WITH SO_GSBER IN SO_GSBER
            WITH SO_COKEY IN SO_COKEY
            WITH SO_MRU   IN SO_MRU
            WITH SO_GPART IN SO_GPART
            WITH P_BMNTH  =  P_BMNTH
            WITH P_COMPUT = P_COMPUT
            WITH P_INCLUD = P_INCLUD
            WITH P_FILE   = LV_SERVER_DATAFILE_NAME
            TO SAP-SPOOL WITHOUT SPOOL DYNPRO.
        ELSE.
          SUBMIT ZISU_LTR15_TUNE
            WITH SO_GSBER IN SO_GSBER
            WITH SO_COKEY IN SO_COKEY
            WITH SO_MRU   IN SO_MRU
            WITH SO_GPART IN SO_GPART
            WITH P_BMNTH  =  P_BMNTH
            WITH P_COMPUT = P_COMPUT
            WITH P_INCLUD = P_INCLUD
            WITH P_FILE   = LV_SERVER_DATAFILE_NAME.
        ENDIF.
      ENDIF.
    *&      Form  divison_data_get
    *       text
    *      <--P_SO_COKEY_LOW  text
    FORM DIVISON_DATA_GET  CHANGING P_SO_COKEY_LOW.
    **to get the search help for division
      DATA : LV_LINES TYPE SY-TFILL,
            LT_RETURN_TAB LIKE DDSHRETVAL OCCURS 0, " with header line.
            LWA_RETURN_TAB LIKE DDSHRETVAL.
      DATA: LV_COKEY TYPE ZEVERFKKVKP-COKEY.
    **according to the Business area entered]
    *  break csebdev1.
      REFRESH R_COKEY[].
      DESCRIBE TABLE SO_GSBER LINES LV_LINES.
    **  when user has neither pressed the enter key nor selected the values
    **using search help
      IF LV_LINES = 0.
    *  loop at so_gsber.
        CLEAR R_COKEY.
    *    if so_gsber-high is initial.
    *    break csebdev1.
        DYFIELDS-FIELDNAME = 'SO_GSBER-LOW'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
    *      r_cokey-sign = 'I'.
    *      r_cokey-option = 'CP'.
    *r_cokey-low = so_gsber-low+0(2).
        CONCATENATE DYFIELDS-FIELDVALUE+0(2) '*' INTO R_COKEY-LOW.
    *    elseif not so_gsber-high is initial.
        DYFIELDS-FIELDNAME = 'SO_GSBER-HIGH'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
        IF NOT DYFIELDS-FIELDVALUE IS INITIAL.
          CONCATENATE DYFIELDS-FIELDVALUE+0(2) '99999999' INTO R_COKEY-HIGH.
        ENDIF.
    *    endif.
        IF NOT R_COKEY-HIGH IS INITIAL.
          R_COKEY-SIGN = 'I'.
          R_COKEY-OPTION = 'BT'.
        ELSEIF R_COKEY-HIGH IS INITIAL.
          R_COKEY-SIGN = 'I'.
          R_COKEY-OPTION = 'CP'.
        ENDIF.
        APPEND R_COKEY.
      ENDIF.
    *  endloop.
    *  APPEND DYFIELDS.
      IF LV_LINES > 0.
    *    break-point.
        IF NOT SO_GSBER[] IS INITIAL.
          LOOP AT SO_GSBER.
    *        r_cokey-sign = 'I'.
    *        r_cokey-option = 'CP'.
    *r_cokey-low = so_gsber-low+0(2).
            CONCATENATE SO_GSBER-LOW+0(2) '*' INTO R_COKEY-LOW.
            IF NOT SO_GSBER-HIGH IS INITIAL.
              CONCATENATE SO_GSBER-HIGH+0(2) '99999999' INTO R_COKEY-HIGH.
            ENDIF.
            IF NOT R_COKEY-HIGH IS INITIAL.
              R_COKEY-SIGN = 'I'.
              R_COKEY-OPTION = 'BT'.
            ELSEIF R_COKEY-HIGH IS INITIAL.
              R_COKEY-SIGN = 'I'.
              R_COKEY-OPTION = 'CP'.
            ENDIF.
            APPEND R_COKEY TO R_COKEY.
          ENDLOOP.
        ENDIF.
      ENDIF.
      IF NOT R_COKEY[] IS INITIAL.
    * break csebdev1.
        REFRESH GT_TECOKT[].
        SELECT COKEY LTEXT
        FROM TECOKT
        INTO TABLE GT_TECOKT
        WHERE COKEY IN R_COKEY AND SPRAS = 'EN'.
    *    %_HINTS ORACLE '("TECOKT","TECOKT~1")'.
      ENDIF.
    **now call the search help
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
    *   DDIC_STRUCTURE         = ' '
          RETFIELD               = 'COKEY'
    *   PVALKEY                = ' '
    *   DYNPPROG               = ' '
    *   DYNPNR                 = ' '
    *   DYNPROFIELD            = ' '
    *   STEPL                  = 0
         WINDOW_TITLE           = 'Division'
         VALUE                  = DYFIELDS-FIELDVALUE
         VALUE_ORG              = 'S'
    *   MULTIPLE_CHOICE        = ' '
    *   DISPLAY                = ' '
    *   CALLBACK_PROGRAM       = ' '
    *   CALLBACK_FORM          = ' '
    *   MARK_TAB               =
    * IMPORTING
    *   USER_RESET             =
        TABLES
          VALUE_TAB              = GT_TECOKT
    *   FIELD_TAB              =
         RETURN_TAB             = LT_RETURN_TAB
    *   DYNPFLD_MAPPING        =
    * EXCEPTIONS
    *   PARAMETER_ERROR        = 1
    *   NO_VALUES_FOUND        = 2
    *   OTHERS                 = 3
      IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      READ TABLE LT_RETURN_TAB INTO LWA_RETURN_TAB INDEX 1.
      LV_COKEY = LWA_RETURN_TAB-FIELDVAL.
    *break csebdev1.
    ENDFORM.                    " divison_data_get
    *&      Form  upload_excel_file
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM UPLOAD_EXCEL_FILE .
      DATA: LV_INDEX TYPE I.
      FIELD-SYMBOLS <VAL> TYPE ANY.
      CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
        EXPORTING
          FILENAME                = P_FILE
          I_BEGIN_COL             = 1
          I_BEGIN_ROW             = 8
          I_END_COL               = 18
          I_END_ROW               = 94
        TABLES
          INTERN                  = GT_INTERN_DATA
        EXCEPTIONS
          INCONSISTENT_PARAMETERS = 1
          UPLOAD_OLE              = 2
          OTHERS                  = 3.
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      IF NOT GT_INTERN_DATA[] IS INITIAL.
        SORT GT_INTERN_DATA BY ROW COL.
        LOOP AT GT_INTERN_DATA.
          MOVE GT_INTERN_DATA-COL TO LV_INDEX.
          ASSIGN COMPONENT LV_INDEX OF STRUCTURE GWA_MANUAL_DATA TO <VAL>.
          MOVE GT_INTERN_DATA-VALUE TO <VAL>.
          AT END OF ROW.
            APPEND GWA_MANUAL_DATA TO GT_MANUAL_DATA.
            CLEAR GWA_MANUAL_DATA.
          ENDAT.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    " upload_excel_file
    *&      Form  MRU_DATA_GET
    *       text
    *      <--P_SO_MRU_LOW  text
    FORM MRU_DATA_GET  CHANGING LV_MRU.
    **to get the search help for Group
      DATA : LV_LINES TYPE SY-TFILL,
            LT_RETURN_TAB LIKE DDSHRETVAL OCCURS 0,
            LWA_RETURN_TAB LIKE DDSHRETVAL.
    *        lv_mru_p(3) type c.
      RANGES  R_MRU FOR EANLH-ABLEINH.
    **according to the Business area entered
    **  break csebdev1.
      REFRESH R_MRU[].
      DESCRIBE TABLE SO_GSBER LINES LV_LINES.
    **  when user has neither pressed the enter key nor selected the values
    **using search help
      IF LV_LINES = 0.
        CLEAR R_MRU[].
        DYFIELDS-FIELDNAME = 'SO_GSBER-LOW'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
        CONCATENATE DYFIELDS-FIELDVALUE+0(2) '*' INTO R_MRU-LOW.
        DYFIELDS-FIELDNAME = 'SO_GSBER-HIGH'.
        APPEND DYFIELDS.
        CALL FUNCTION 'DYNP_VALUES_READ'
          EXPORTING
            DYNAME     = SY-CPROG
            DYNUMB     = SY-DYNNR
          TABLES
            DYNPFIELDS = DYFIELDS.
        IF NOT DYFIELDS-FIELDVALUE IS INITIAL.
          CONCATENATE DYFIELDS-FIELDVALUE+0(2) '99999999' INTO R_MRU-HIGH.
        ENDIF.
        IF NOT R_MRU-HIGH IS INITIAL.
          R_MRU-SIGN   = 'I'.
          R_MRU-OPTION = 'BT'.
        ELSEIF R_MRU-HIGH IS INITIAL.
          R_MRU-SIGN   = 'I'.
          R_MRU-OPTION = 'CP'.
        ENDIF.
        APPEND R_MRU.
      ENDIF. " end lv_lines =0
      IF LV_LINES > 0.
        IF NOT SO_GSBER[] IS INITIAL.
          LOOP AT SO_GSBER.
            CONCATENATE SO_GSBER-LOW+0(2) '*' INTO R_MRU-LOW.
            IF NOT SO_GSBER-HIGH IS INITIAL.
              CONCATENATE SO_GSBER-HIGH+0(2) '99999999' INTO R_MRU-HIGH.
            ENDIF.
            IF R_MRU-HIGH IS INITIAL.
              R_MRU-SIGN   = 'I'.
              R_MRU-OPTION = 'CP'.
            ELSEIF NOT R_MRU-HIGH IS INITIAL.
              R_MRU-SIGN   = 'I'.
              R_MRU-OPTION = 'BT'.
            ENDIF.
            APPEND R_MRU.
          ENDLOOP.
        ENDIF. " end so_GSBER[]
      ENDIF. " end lv_lines > 0
      IF NOT R_MRU[] IS INITIAL.
    * break csebdev1.
        REFRESH GT_TE422[].
        SELECT TERMSCHL TERMTEXT FROM TE422 INTO CORRESPONDING FIELDS OF
    TABLE GT_TE422 WHERE TERMSCHL IN R_MRU .
      ENDIF.
    **now call the search help
      CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
    *   DDIC_STRUCTURE         = ' '
          RETFIELD               = 'TERMSCHL'
    *   PVALKEY                = ' '
    *   DYNPPROG               = ' '
    *   DYNPNR                 = ' '
    *   DYNPROFIELD            = ' '
    *   STEPL                  = 0
         WINDOW_TITLE           = 'Group'
         VALUE                  = DYFIELDS-FIELDVALUE
         VALUE_ORG              = 'S'
    *   MULTIPLE_CHOICE        = ' '
    *   DISPLAY                = ' '
    *   CALLBACK_PROGRAM       = ' '
    *   CALLBACK_FORM          = ' '
    *   MARK_TAB               =
    * IMPORTING
    *   USER_RESET             =
        TABLES
          VALUE_TAB              = GT_TE422
    *   FIELD_TAB              =
         RETURN_TAB             = LT_RETURN_TAB
    *   DYNPFLD_MAPPING        =
    * EXCEPTIONS
    *   PARAMETER_ERROR        = 1
    *   NO_VALUES_FOUND        = 2
    *   OTHERS                 = 3
      IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
      READ TABLE LT_RETURN_TAB INTO LWA_RETURN_TAB INDEX 1.
      LV_MRU = LWA_RETURN_TAB-FIELDVAL.
    ENDFORM.                    " MRU_DATA_GET
    <b>b) ZISU_LTR15_TUNE - Actual R15 report</b>
    *& Report  ZISU_LTR15_TUNE                                             *
    REPORT  ZISU_LTR15_TUNE NO STANDARD PAGE HEADING  MESSAGE-ID ZISU
    LINE-SIZE 250 LINE-COUNT 65.
    **Tables
    TABLES :  EVER,
              FKKVKP,
              EANLH.
    SELECTION-SCREEN BEGIN OF BLOCK SELECTION
                              WITH FRAME TITLE TEXT-001 . "no intervals.
    SELECT-OPTIONS: SO_GSBER FOR EVER-GSBER OBLIGATORY,
                    SO_COKEY FOR EVER-COKEY,
                    SO_MRU   FOR EANLH-ABLEINH.
    PARAMETERS:     P_BMNTH(7) TYPE C OBLIGATORY.
    PARAMETERS:     P_CONT TYPE EVER-VERTRAG.
    SELECT-OPTIONS: SO_GPART FOR FKKVKP-GPART.
    SELECTION-SCREEN END OF BLOCK SELECTION.
    SELECTION-SCREEN BEGIN OF BLOCK PROCESS WITH FRAME.
    PARAMETERS:     P_COMPUT RADIOBUTTON GROUP R15.
    PARAMETERS:     P_INCLUD RADIOBUTTON GROUP R15,
                    P_FILE(60) TYPE C.
    SELECTION-SCREEN END OF BLOCK PROCESS.
    *              Start of Type declaration
    TYPES: BEGIN OF ST_TB024 ,
            IND_SECTOR TYPE TB024-IND_SECTOR,
            TEXTLONG TYPE TB024-TEXTLONG,
          END   OF ST_TB024,
          BEGIN OF ST_TECOKT,
            COKEY TYPE TECOKT-COKEY,
            LTEXT TYPE TECOKT-LTEXT,
          END   OF ST_TECOKT,
          BEGIN OF ST_TGSBT,
            GSBER   TYPE TGSBT-GSBER,
            GTEXT   TYPE TGSBT-GTEXT,
          END   OF ST_TGSBT,
          BEGIN OF ST_TE422,
            TERMSCHL  TYPE TE422-TERMSCHL,
            TERMTEXT  TYPE TE422-TERMTEXT,
          END   OF ST_TE422.
    *              Start of data declaration
    DATA: IT_TAB TYPE FILETABLE,
          GD_SUBRC TYPE I.
    DATA : GT_TB024 TYPE STANDARD TABLE OF ST_TB024 WITH HEADER LINE
             INITIAL SIZE 0,
           GT_TECOKT TYPE STANDARD TABLE OF ST_TECOKT
             WITH HEADER LINE,
          GT_TGSBT TYPE SORTED TABLE OF ST_TGSBT
          WITH UNIQUE KEY GSBER WITH HEADER LINE,
          GT_TE422 TYPE TABLE OF ST_TE422 WITH HEADER LINE INITIAL SIZE 0,
          BEGIN OF GWA_EVER,
            VKONT    TYPE EVER-VKONTO,
            ANLAGE   TYPE EVER-ANLAGE,
            ABRSPERR TYPE EVER-ABRSPERR,
          END   OF GWA_EVER,
          GT_EVER LIKE TABLE OF GWA_EVER INITIAL SIZE 0,
          BEGIN OF GWA_EANLH,
          ANLAGE     TYPE EANLH-ANLAGE,
          BRANCHE    TYPE EANLH-BRANCHE,
          END   OF GWA_EANLH,
          GT_EANLH LIKE TABLE OF GWA_EANLH INITIAL SIZE 0,
          BEGIN OF GWA_FKKVKP,
            VKONT   TYPE FKKVKP-VKONT,
            KTOKL   TYPE FKKVKP-KTOKL,
          END   OF GWA_FKKVKP,
          GT_FKKVKP LIKE TABLE OF GWA_FKKVKP INITIAL SIZE 0,
          BEGIN OF GWA_EVER_EANLH_FKKVKP,
            VKONT   TYPE FKKVKP-VKONT,
            ANLAGE   TYPE EVER-ANLAGE,
            ABRSPERR TYPE EVER-ABRSPERR,
            BRANCHE  TYPE EANLH-BRANCHE,
            KTOKL    TYPE FKKVKP-KTOKL,
          END OF GWA_EVER_EANLH_FKKVKP,
          GT_EVER_EANLH_FKKVKP LIKE TABLE OF GWA_EVER_EANLH_FKKVKP
            INITIAL SIZE 0,
          GT_EVER_EANLH_FKKVKP_INACT LIKE STANDARD TABLE OF
            GWA_EVER_EANLH_FKKVKP INITIAL SIZE 0,
          BEGIN OF GWA_ERCH,
            BELNR      TYPE ERCH-BELNR,
            VKONT      TYPE ERCH-VKONT,
          END OF GWA_ERCH,
          GT_ERCH LIKE TABLE OF GWA_ERCH INITIAL SIZE 0,
          BEGIN OF GWA_PRINTDOC,
            OPBEL    TYPE ERDK-OPBEL,
            GPART    TYPE ERDK-PARTNER,
            VKONT    TYPE ERDK-VKONT,
            BUDAT    TYPE ERDK-BUDAT,
            FAEDN    TYPE ERDK-FAEDN,
          END   OF GWA_PRINTDOC,
          GT_PRINTDOC LIKE TABLE OF GWA_PRINTDOC INITIAL SIZE 0,
          BEGIN OF GWA_DBERCHZ1,
            BELNR      TYPE DBERCHZ1-BELNR,
            EIN01      TYPE DBERCHZ1-EIN01,
            V_ABRMENGE TYPE DBERCHZ1-V_ABRMENGE,
          END OF GWA_DBERCHZ1,
          GT_DBERCHZ1 LIKE TABLE OF GWA_DBERCHZ1 INITIAL SIZE 0,
          BEGIN OF GWA_ERCHC,
            BELNR     TYPE ERCHC-BELNR,
            OPBEL     TYPE ERCHC-OPBEL,
            BUDAT     TYPE ERCHC-BUDAT,
          END   OF GWA_ERCHC,
          GT_ERCHC LIKE TABLE OF GWA_ERCHC INITIAL SIZE 0,
    * arrears for inactive consumers.
          BEGIN OF GWA_DFKKOP_INACTIVE_ARR,
              OPBEL       TYPE DFKKOP-OPBEL,
              VKONT       TYPE DFKKOP-VKONT,
              BETRH       TYPE DFKKOP-BETRH,
          END OF GWA_DFKKOP_INACTIVE_ARR,
          GT_DFKKOP_INACTIVE_ARR LIKE TABLE OF GWA_DFKKOP_INACTIVE_ARR
            INITIAL SIZE 0,
          BEGIN OF GWA_ETTIFN,
            ANLAGE    TYPE ETTIFN-ANLAGE,
            OPERAND   TYPE ETTIFN-OPERAND,
            WERT1     TYPE ETTIFN-WERT1,
          END OF GWA_ETTIFN,
          GT_ETTIFN LIKE SORTED TABLE OF GWA_ETTIFN
            WITH NON-UNIQUE KEY ANLAGE OPERAND INITIAL SIZE 0,
          BEGIN OF GWA_DBERDLB,
            PRINTDOC     TYPE DBERDLB-PRINTDOC,
            BILLDOC      TYPE DBERDLB-BILLDOC,
            BILLDOCLINE  TYPE DBERDLB-BILLDOCLINE,
            NETTOBTR     TYPE DBERDLB-NETTOBTR,
          END OF GWA_DBERDLB,
          GT_DBERDLB LIKE TABLE OF GWA_DBERDLB INITIAL SIZE 0,
          BEGIN OF GWA_DBERCHZ1_BILL,
            BELNR       TYPE DBERCHZ1-BELNR,
            BELZEILE    TYPE DBERCHZ1-BELZEILE,
            TVORG       TYPE DBERCHZ1-TVORG,
          END   OF GWA_DBERCHZ1_BILL,
          GT_DBERCHZ1_BILL LIKE TABLE OF GWA_DBERCHZ1_BILL INITIAL SIZE 0,
          BEGIN OF GWA_BILLDOC,
            PRINTDOC TYPE ERDK-OPBEL,
            BILLDOC TYPE DBERDLB-BILLDOC,
          END OF GWA_BILLDOC,
          GT_BILLDOC LIKE TABLE OF GWA_BILLDOC INITIAL SIZE 0,
          BEGIN OF GWA_DBERCHV,
            BELNR    TYPE DBERCHV-BELNR,
            OPERAND  TYPE DBERCHV-OPERAND,
            EZ_ABRMENGE TYPE DBERCHV-EZ_ABRMENGE,
            ABLESGR  TYPE DBERCHV-ABLESGR,
            ABLESGRV TYPE DBERCHV-ABLESGRV,
          END OF GWA_DBERCHV,
          GT_DBERCHV LIKE TABLE OF GWA_DBERCHV INITIAL SIZE 0,
          BEGIN OF GWA_DFKKOP_ARREAR,
            OPBEL     TYPE DFKKOP-OPBEL,
            VKONT     TYPE DFKKOP-VKONT,
            HVORG     TYPE DFKKOP-HVORG,
            TVORG     TYPE DFKKOP-TVORG,
            BUDAT     TYPE DFKKOP-BUDAT,
            BETRH     TYPE DFKKOP-BETRH,
            AUGDT     TYPE DFKKOP-AUGDT,
            XBLNR     TYPE DFKKOP-XBLNR,
          END OF GWA_DFKKOP_ARREAR,
          GT_DFKKOP_ARREAR LIKE TABLE OF GWA_DFKKOP_ARREAR INITIAL SIZE 0,
          BEGIN OF GWA_MASTER_DATA,
            SLNO(4)      TYPE C,
            IND_SECTOR   TYPE TB024-IND_SECTOR,
            TEXTLONG     TYPE TB024-TEXTLONG,
            AC_CODE      TYPE TFK033D-FUN01,
          END   OF GWA_MASTER_DATA,
          GT_MASTER_DATA LIKE TABLE OF GWA_MASTER_DATA INITIAL SIZE 0,
    **      internal table for final prepared data
          BEGIN OF GWA_FINAL_DATA,
              SLNO(4) TYPE C,
              IND_SECTOR      TYPE TB024-IND_SECTOR, " for testing
              INDUSTRY        TYPE TB024-TEXTLONG,
              AC_CODE         TYPE TFK033D-FUN01,
    *    *for urban partners
              UPARTNER        TYPE I , "(6) type n,
              UBAD_METER      TYPE I, "(4) type n,
              UINACTIVE       TYPE I,
              ULOAD(8)        TYPE P DECIMALS 2,
              UUNITS(8)       TYPE P DECIMALS 2,
              UDEMANDS(8)     TYPE P DECIMALS 2,
              UARREARS(8)     TYPE P DECIMALS 2, "FKKMAKO-Msalm,
              UINACT_ARR(8)   TYPE P DECIMALS 2,
              BLANK(10)       TYPE C,
    *    *for rural partners
              RPARTNER        TYPE I , "(6) type n,
              RBAD_METER      TYPE I , "(4) type n,
              RINACTIVE       TYPE I,
              RLOAD(8)        TYPE P DECIMALS 2,
              RUNITS(8)       TYPE P DECIMALS 2,
              RDEMANDS(8)     TYPE P DECIMALS 2,
              RARREARS(8)     TYPE P DECIMALS 2,
              RINACT_ARR(8)   TYPE P DECIMALS 2,
          END OF GWA_FINAL_DATA,
          GT_FINAL_DATA LIKE TABLE OF GWA_FINAL_DATA INITIAL SIZE 0,
          BEGIN OF GWA_MANUAL_DATA,
            COL_1(5)        TYPE C,
            COL_2(10)       TYPE C,
            COL_3(40)       TYPE C,
            COL_4(40)       TYPE C,
            COL_5(10)       TYPE C,
            COL_6(19)       TYPE C,
            COL_7(19)       TYPE C,
            COL_8(19)       TYPE C,
            COL_9(19)       TYPE C,
            COL_10(19)      TYPE C,
            COL_11(19)      TYPE C,
            COL_12(10)      TYPE C,
            COL_13(19)      TYPE C,
            COL_14(19)      TYPE C,
            COL_15(19)      TYPE C,
            COL_16(19)      TYPE C,
            COL_17(19)      TYPE C,
            COL_18(19)      TYPE C,
          END   OF GWA_MANUAL_DATA,
          GT_MANUAL_DATA LIKE TABLE OF GWA_MANUAL_DATA INITIAL SIZE 0.
    ** Variables for grand total of all heads.
    DATA : GV_T_UPART        TYPE I,
           GV_T_RPART        TYPE I,
           GV_T_RINACTIVE    TYPE I,
           GV_T_UINACTIVE    TYPE I,
           GV_UDEF_MTR       TYPE I,
           GV_RDEF_MTR       TYPE I,
           GV_UCON_LOAD(16)  TYPE P DECIMALS 2,
           GV_RCON_LOAD(16)  TYPE P DECIMALS 2,
           GV_UUNITS(16)     TYPE P DECIMALS 2,
           GV_RUNITS(16)     TYPE P DECIMALS 2,
           GV_UDEMAND(16)    TYPE P DECIMALS 2,
           GV_RDEMAND(16)    TYPE P DECIMALS 2,
           GV_UARREAR(16)    TYPE P DECIMALS 2,
           GV_RARREAR(16)    TYPE P DECIMALS 2,
           GV_UINACT_ARR(16) TYPE P DECIMALS 2,
           GV_RINACT_ARR(16) TYPE P DECIMALS 2,
           GV_U_SD_DMD(16)       TYPE P DECIMALS 2,
           GV_R_SD_DMD(16)       TYPE P DECIMALS 2,
           GV_U_SD_ARR(16)       TYPE P DECIMALS 2,
           GV_R_SD_ARR(16)       TYPE P DECIMALS 2,
           GV_UR_PART         TYPE I,
           GV_UR_DEF_MTR      TYPE I,
           GV_UR_CON_LOAD(16) TYPE P DECIMALS 2,
           GV_UR_UNITS(16)    TYPE P DECIMALS 2,
           GV_UR_DEMAND(16)   TYPE P DECIMALS 2,
           GV_UR_ARREARS(16)  TYPE P DECIMALS 2,
           GV_LOWDATE         TYPE SY-DATUM,
           GV_HIGHDATE        TYPE SY-DATUM,
           GV_YEAR   LIKE DBERCHV-EZ_ABRMENGE,
           GV_MONTH  LIKE DBERCHZ1-V_ABRMENGE,
           GV_MNTH_NAME TYPE T247-KTX.
    DATA:
    **total meter rent
          GV_UTOTMETERRENT TYPE P LENGTH 16 DECIMALS 2,
          GV_RTOTMETERRENT TYPE P LENGTH 16 DECIMALS 2,
    **for total surcharge
          GV_UTOTSURCHRG TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
          GV_RTOTSURCHRG TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
    **for total ED
          GV_UTOTED TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
          GV_RTOTED TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
    **for total ED Cess
          GV_UTOTEDCESS TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
          GV_RTOTEDCESS TYPE P LENGTH 16 DECIMALS 2, "dberdlb-nettobtr,
    **for total other misc rev
          GV_UTOTMISCREV  TYPE P LENGTH 16 DECIMALS 2,
          GV_RTOTMISCREV TYPE P LENGTH 16 DECIMALS 2,
    **for total ED of Free agricultural pump
          GV_RTOTEDAGRI TYPE P LENGTH 16 DECIMALS 2,
          GV_UTOTEDAGRI TYPE P LENGTH 16 DECIMALS 2,
    **for ED cess of Free agriculture pump
          GV_RTOTCESSAGRI TYPE P LENGTH 16 DECIMALS 2,
          GV_UTOTCESSAGRI TYPE P LENGTH 16 DECIMALS 2,
    ***data for selection screen data validation
          GV_GSBER TYPE EVER-GSBER,
          GV_COKEY TYPE EVER-COKEY,
          DYFIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE,
          GT_INTERN_DATA TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
    RANGES: R_COKEY FOR TECOKT-COKEY.
    AT SELECTION-SCREEN.
    AT SELECTION-SCREEN ON SO_GSBER.
      IF NOT SO_GSBER-LOW IS INITIAL.
        SELECT SINGLE GSBER FROM TGSBT INTO GT_TGSBT-GSBER WHERE
        GSBER = SO_GSBER-LOW.
        IF SY-SUBRC <> 0.
          MESSAGE E007.
        ENDIF.
      ENDIF.
      IF NOT SO_GSBER-HIGH IS INITIAL .
        SELECT SINGLE GSBER FROM TGSBT INTO GT_TGSBT-GSBER WHERE
        GSBER = SO_GSBER-HIGH.
        IF SY-SUBRC <> 0.
          MESSAGE E007.
        ENDIF.
      ENDIF.
    AT SELECTION-SCREEN ON P_BMNTH.
    **check the validity of Billing month format and for valid billing month
      IF P_BMNTH CO '0123456789/'.
        IF P_BMNTH CP '++++/++'.
          IF P_BMNTH+5(2) > 12.
            MESSAGE E002 WITH 'from'.
          ENDIF.
    ** current year is less than year entered
          IF SY-DATUM(4) < P_BMNTH(4).
            MESSAGE E003 WITH 'from'.
          ELSEIF SY-DATUM(4) = P_BMNTH(4).
    ** month in future
            IF SY-DATUM+4(2) < P_BMNTH+5(2).
              MESSAGE E004 WITH 'from'.
            ENDIF.
          ENDIF.
        ELSE.
          MESSAGE E001 WITH 'from'.
        ENDIF.
      ELSE.
    **  entry have some invalid char
        MESSAGE E010.
      ENDIF.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-LOW.
    **for geting the CO account assigment key of the entered Business area
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-LOW.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_COKEY-HIGH.
      CLEAR: DYFIELDS[], DYFIELDS.
      PERFORM DIVISON_DATA_GET CHANGING SO_COKEY-HIGH.
    *AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
    *  REFRESH: IT_TAB.
    ***Opens File Open Dialog Box for selecting input file.
    *  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    *    EXPORTING
    *      WINDOW_TITLE     = 'Select File'
    *      DEFAULT_FILENAME = '*.xls'
    *      MULTISELECTION   = ' '
    *    CHANGING
    *      FILE_TABLE       = IT_TAB
    *      RC               = GD_SUBRC.
    *  LOOP AT IT_TAB INTO P_FILE.
    **    so_fpath-sign = 'I'.
    **    so_fpath-option = 'EQ'.
    **    append so_fpath.
    *  ENDLOOP.
    AT SELECTION-SCREEN OUTPUT.
      LOOP AT SCREEN.
        IF SCREEN-GROUP1 = 'ACT'.
          IF P_INCLUD = ' '.
            SCREEN-INPUT = '0'.
          ELSE.
            SCREEN-INPUT = '1'.
          ENDIF.
        ENDIF.
        MODIFY SCREEN.
      ENDLOOP.
    *              End of Selection screen processing
    TOP-OF-PAGE.
      DATA : LV_TEXT(70) TYPE C.
      FORMAT INTENSIFIED OFF.
      WRITE:/50 'CHHATTISGARH STATE ELECTRICITY BOARD',
            /42 'R-15 REPORT FOR LT CONSUMERS FOR THE MONTH OF',
                 GV_MNTH_NAME NO-GAP,'-' NO-GAP, P_BMNTH(4) NO-GAP,
            180 'PAGE-NO. -', SY-PAGNO LEFT-JUSTIFIED.
      SKIP.
      WRITE:/2 'RAO', 15 ':'.
      LOOP AT GT_TGSBT WHERE GSBER IN SO_GSBER.
        IF STRLEN( LV_TEXT ) > 60.
          WRITE: 16 LV_TEXT, / ''.
          CLEAR LV_TEXT.
        ENDIF.
        CONCATENATE LV_TEXT GT_TGSBT-GSBER '-' GT_TGSBT-GTEXT
          INTO LV_TEXT SEPARATED BY SPACE.
      ENDLOOP.
      WRITE: 16 LV_TEXT.
      CLEAR LV_TEXT.
      WRITE: /2 'Division',15 ':'.
      LOOP AT GT_TECOKT.
        IF STRLEN( LV_TEXT ) > 60.
          WRITE: 16 LV_TEXT, /.
          CLEAR LV_TEXT.
        ENDIF.
        CONCATENATE LV_TEXT GT_TECOKT-COKEY '-' GT_TECOKT-LTEXT
          INTO LV_TEXT SEPARATED BY SPACE.
      ENDLOOP.
      WRITE: 16 LV_TEXT.
      CLEAR LV_TEXT.
      WRITE: /2 'Group',15 ':'.
      LOOP AT GT_TE422 .
        IF STRLEN( LV_TEXT ) > 60.
          WRITE: 16 LV_TEXT, /.
          CLEAR LV_TEXT.
        ENDIF.
        CONCATENATE LV_TEXT GT_TE422-TERMSCHL '-' GT_TE422-TERMTEXT
          INTO LV_TEXT SEPARATED BY SPACE.
      ENDLOOP.
      WRITE: 16 LV_TEXT.
      CLEAR LV_TEXT.
    **legends
    *  write :/ text-028, 15 ':',16 text-029.
    **now write the headings on every page
      SET LEFT SCROLL-BOUNDARY COLUMN 50.
      FORMAT COLOR 1 ON.
      WRITE :/1(244) SY-ULINE.
      WRITE :/1 SY-VLINE,6 SY-VLINE,50 SY-VLINE, 58 SY-VLINE, 59
                '<----------------------------------',
                'U R B A N   A R E A',
                '----------------------------------->'.
      WRITE : 151 SY-VLINE, 152
                  '<----------------------------------',
                  'R U R A L   A R E A',
                  '----------------------------------->',
              244 SY-VLINE.
      WRITE :/1 SY-VLINE,
              2 'Slno',
              6 SY-VLINE,
              7 'Revenue Category',
              50 SY-VLINE,
              51 'A/C',
              58 SY-VLINE,
              59 'Cons-',
              67 SY-VLINE,
              68 'Deff',
              75 SY-VLINE,
              76 'Conn',
              89 SY-VLINE,
              90 'Sold',
              108 SY-VLINE,
              109 'Demand',
              129 SY-VLINE,
              130 'Previous',
              151 SY-VLINE,
              152 'Cons-',
              160 SY-VLINE,
              161 'Deff',
              168 SY-VLINE,
              169 'Conn',
              182 SY-VLINE,
              183 'Sold',
              201 SY-VLINE,
              202 'Demand',
              222 SY-VLINE,
              223 'Previous',
              244 SY-VLINE.
      WRITE :/1 SY-VLINE,
              6 SY-VLINE,
              50 SY-VLINE,
              51 'Code',
              58 SY-VLINE,
              59 'umers',
              67 SY-VLINE,
              68 'mtrs',
              75 SY-VLINE,
              76 'Load-KW',
              89 SY-VLINE,
              90 'Units',
              108 SY-VLINE,
              129 SY-VLINE,
              130 'Arrear',
              151 SY-VLINE,
              152 'umers',
              160 SY-VLINE,
              161 'mtrs',
              168 SY-VLINE,
              169 'Load-KW',
              182 SY-VLINE,
              183 'Units',
              201 SY-VLINE,
              222 SY-VLINE,
              223 'Arrear',
              244 SY-VLINE.
      WRITE :/1(244) SY-ULINE.
      SET LEFT SCROLL-BOUNDARY COLUMN 59.
    *              Start of Data Selection
    START-OF-SELECTION.
      SELECT GSBER GTEXT INTO TABLE GT_TGSBT FROM TGSBT
        WHERE SPRAS = SY-LANGU.
      SELECT IND_SECTOR TEXTLONG INTO TABLE GT_TB024
        FROM TB024 WHERE SPRAS = SY-LANGU
                     AND ( ( IND_SECTOR >= '01' AND IND_SECTOR <= '55' )
                      OR ( IND_SECTOR = '57' OR IND_SECTOR = '58'
                      OR IND_SECTOR = '94' ) ).
      SELECT SINGLE KTX INTO GV_MNTH_NAME FROM T247
       WHERE MNR = P_BMNTH+5(2) AND SPRAS = SY-LANGU.
    ***master data selection
      PERFORM CONSUMER_DATA_SELECTION.
    *&--Get Meter Status Connected Load & MF for each installation
      PERFORM OPERAND_DATA_SELECTION.
    *&--Get the Demand corresponding to each Print documents selected
      PERFORM BILLING_DATA_SELECTION.
    *&--Get the arrears corresponding to each Print document selected
      PERFORM ARREAR_DATA_SELECTION.
    *&--To include Mannual R-15 into computerized R-15.
      IF P_INCLUD = 'X'.
        OPEN DATASET P_FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.
        DO.
          READ DATASET P_FILE INTO GWA_MANUAL_DATA.
          IF SY-SUBRC <> 0.
            EXIT.
          ELSE.
            APPEND GWA_MANUAL_DATA TO GT_MANUAL_DATA.
          ENDIF.
        ENDDO.
        CLOSE DATASET P_FILE.
        DELETE DATASET P_FILE.
      ENDIF.
    END-OF-SELECTION.
    *              End of data Selection
    *            Start of Data Processing
      PERFORM FINAL_TABLE_PREPARE.
      PERFORM FINAL_OUTPUT_PREPARE.
      PERFORM FINAL_OUTPUT_DISPLAY.
    *              End of Data Processing
      PERFORM FREE_MEMORY.
    *&      Form  master_data_selection
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM CONSUMER_DATA_SELECTION .
      DATA: LV_MAX_DAYS TYPE I,
            LV_LAST_DAY(2) TYPE C,
            LV_IMONTH TYPE I,
            LV_IYEAR TYPE I,
            LV_BMNTH TYPE ZERDK_ERCHC-V_ABRMENGE,
            LV_BYEAR TYPE ZERDK_ERCHC-EZ_ABRMENGE,
    *&----Temporary tables for global internal tables.
            LT_DBERCHZ1_TEMP LIKE TABLE OF GWA_DBERCHZ1,
            LWA_DBERCHZ1_TEMP LIKE GWA_DBERCHZ1,
            LT_ERCH LIKE TABLE OF GWA_ERCH,
            LWA_ERCH LIKE GWA_ERCH,
            LT_EVER LIKE TABLE OF GWA_EVER.
    *DATA: lt_ever_fkkvkp like gwa_ever_eanlh_fkkvkp occurs 0.
      LV_IMONTH = P_BMNTH+5(2).
      LV_IYEAR  = P_BMNTH(4).
      LV_BMNTH  = P_BMNTH+5(2).
      LV_BYEAR  = P_BMNTH(4).
      CALL FUNCTION 'RTP_US_API_MAX_DAYS_IN_MONTH'
        EXPORTING
          I_DATE_MONTH = LV_IMONTH
          I_DATE_YEAR  = LV_IYEAR
        IMPORTING
          E_MAX_DAYS   = LV_MAX_DAYS.
      LV_LAST_DAY = LV_MAX_DAYS.
      CONCATENATE P_BMNTH(4) P_BMNTH+5(2)  LV_LAST_DAY INTO GV_HIGHDATE.
      IF SO_GPART[] IS INITIAL.
        SELECT VKONTO ANLAGE ABRSPERR
        INTO TABLE GT_EVER
        FROM EVER
        WHERE GSBER IN SO_GSBER
          AND COKEY IN SO_COKEY
          AND   BUKRS = 'CSEB'
          AND   SPARTE = '01'
          AND   KOFIZ  = '02'.
    **get installation no from contract data and check biling class in eanlh
        IF GT_EVER[] IS INITIAL.
    MESSAGE 'No Business Partner exist for entered selection data' TYPE 'A'.
        ENDIF.
        IF NOT GT_EVER[] IS INITIAL.
          SELECT VKONT KTOKL INTO TABLE GT_FKKVKP
            FROM FKKVKP
            FOR ALL ENTRIES IN GT_EVER
            WHERE VKONT = GT_EVER-VKONT
            AND   GPART IN SO_GPART.
          IF GT_FKKVKP[] IS INITIAL.
         MESSAGE 'No Business Partner exist for entered Selection' TYPE 'A'.
          ENDIF.
        ENDIF.
      ELSE.
        SELECT VKONT KTOKL INTO TABLE GT_FKKVKP
          FROM FKKVKP
          WHERE GPART IN SO_GPART.
        IF NOT GT_FKKVKP[] IS INITIAL.
          SELECT VKONTO ANLAGE INTO TABLE GT_EVER
            FROM EVER
            FOR ALL ENTRIES IN GT_FKKVKP
            WHERE VKONTO  EQ GT_FKKVKP-VKONT
              AND GSBER   IN SO_GSBER
              AND COKEY   IN SO_COKEY
              AND BUKRS   EQ 'CSEB'
              AND SPARTE  EQ '01'
              AND KOFIZ   EQ '02'.
        ENDIF.
      ENDIF.
      IF GT_EVER[] IS INITIAL AND GT_FKKVKP[] IS INITIAL.
        MESSAGE 'No Business Partner exist for entered Selection' TYPE 'A'.
      ENDIF.
      SELECT ANLAGE BRANCHE INTO TABLE GT_EANLH
        FROM EANLH
        FOR ALL ENTRIES IN GT_EVER
        WHERE ANLAGE EQ GT_EVER-ANLAGE
        AND   ABLEINH IN SO_MRU
        AND   AKLASSE EQ'0002'
        AND   AB <= GV_HIGHDATE
        AND   BIS => GV_HIGHDATE.
      IF GT_EANLH[] IS INITIAL.
        MESSAGE 'No Business Partner exist for entered Selection' TYPE 'A'.
      ENDIF.
      SORT : GT_EVER BY VKONT ANLAGE,
             GT_FKKVKP BY VKONT,
             GT_EANLH BY ANLAGE.
      LOOP AT GT_EANLH INTO GWA_EANLH.
        READ TABLE GT_EVER INTO GWA_EVER WITH KEY ANLAGE = GWA_EANLH-ANLAGE.
        IF SY-SUBRC = 0.
          READ TABLE GT_FKKVKP INTO GWA_FKKVKP
            WITH KEY VKONT = GWA_EVER-VKONT.
          IF SY-SUBRC = 0.
            GWA_EVER_EANLH_FKKVKP-VKONT = GWA_EVER-VKONT.
            GWA_EVER_EANLH_FKKVKP-ANLAGE = GWA_EVER-ANLAGE.
            GWA_EVER_EANLH_FKKVKP-ABRSPERR = GWA_EVER-ABRSPERR.
            GWA_EVER_EANLH_FKKVKP-BRANCHE  = GWA_EANLH-BRANCHE.
            GWA_EVER_EANLH_FKKVKP-KTOKL    = GWA_FKKVKP-KTOKL.
            APPEND GWA_EVER_EANLH_FKKVKP TO GT_EVER_EANLH_FKKVKP.
            CLEAR GWA_EVER_EANLH_FKKVKP.
          ENDIF.
        ENDIF.
      ENDLOOP.
      IF GT_EVER_EANLH_FKKVKP[] IS INITIAL.
        MESSAGE 'No Business Partner exist for Selection Data' TYPE 'A'.
      ENDIF.
    *&----get all the billdocuments for the busines partner's contract
    *&----account
      SELECT BELNR VKONT INTO TABLE GT_ERCH
        FROM ERCH
        FOR ALL ENTRIES IN GT_EVER_EANLH_FKKVKP
        WHERE VKONT EQ GT_EVER_EANLH_FKKVKP-VKONT.
    *&----get the BILL MONTH & BILL YEAR FOR THE BILLDOCUMENTS.
      IF NOT GT_ERCH[] IS INITIAL.
        SELECT BELNR EIN01 V_ABRMENGE INTO TABLE GT_DBERCHZ1
          FROM DBERCHZ1
          FOR ALL ENTRIES IN GT_ERCH
          WHERE BELNR EQ GT_ERCH-BELNR
            AND AKLASSE = '0002'
            AND ( ( EIN01 = 'BILL_MNTH1'
            AND V_ABRMENGE = P_BMNTH+5(2) )
            OR ( EIN01 = 'BILL_YEAR1'
            AND V_ABRMENGE = P_BMNTH(4) ) ).
    *&---- GET THOSE BILL DOCUMENTS WHICH ARE FOR THE ENTERED BILL MONTH
        IF NOT GT_DBERCHZ1[] IS INITIAL.
          LOOP AT GT_DBERCHZ1 INTO GWA_DBERCHZ1 WHERE EIN01 = 'BILL_MNTH1'
                                              AND V_ABRMENGE = P_BMNTH+5(2).
            READ TABLE GT_DBERCHZ1 INTO LWA_DBERCHZ1_TEMP
            WITH KEY BELNR = GWA_DBERCHZ1-BELNR EIN01 = 'BILL_YEAR1'
            V_ABRMENGE = P_BMNTH(4).
            IF SY-SUBRC = 0.
              APPEND LWA_DBERCHZ1_TEMP TO LT_DBERCHZ1_TEMP.
              CLEAR: LWA_DBERCHZ1_TEMP.
            ENDIF.
          ENDLOOP.
          GT_DBERCHZ1[] = LT_DBERCHZ1_TEMP[].
        ENDIF.
      ENDIF.
    *&---NOW FIND THE PRINT DOCUMENTS FOR THE SELECTED BILLDOCUMENTS.
      IF NOT GT_DBERCHZ1[] IS INITIAL.
        SELECT BELNR OPBEL BUDAT FROM ERCHC
          INTO TABLE GT_ERCHC
          FOR ALL ENTRIES IN GT_DBERCHZ1
          WHERE BELNR = GT_DBERCHZ1-BELNR
            AND INTOPBEL EQ SPACE
            AND SIMULATED EQ SPACE
            AND INVOICED EQ 'X'.
      ENDIF.
      IF NOT GT_ERCHC[] IS INITIAL.
        LOOP AT GT_ERCHC INTO GWA_ERCHC.
          READ TABLE GT_ERCH INTO GWA_ERCH WITH KEY BELNR = GWA_ERCHC-BELNR.
          IF SY-SUBRC = 0.
            APPEND GWA_ERCH TO LT_ERCH.
            CLEAR GWA_ERCH.
          ENDIF.
          CLEAR GWA_ERCHC.
        ENDLOOP.
      ENDIF.
      GT_ERCH[] = LT_ERCH[].
      FREE: LT_ERCH, LT_DBERCHZ1_TEMP,LWA_DBERCHZ1_TEMP.
      LOOP AT GT_EVER_EANLH_FKKVKP INTO GWA_EVER_EANLH_FKKVKP.
    *  READ TABLE gt_erdk_erchc INTO gwa_erdk_erchc
    *  WITH KEY vkont = gwa_ever_eanlh_fkkvkp-vkont.
        READ TABLE GT_ERCH INTO GWA_ERCH
          WITH KEY VKONT = GWA_EVER_EANLH_FKKVKP-VKONT.
        IF SY-SUBRC <> 0.
          IF GWA_EVER_EANLH_FKKVKP-ABRSPERR = SPACE.
            GWA_EVER_EANLH_FKKVKP-ABRSPERR = '01'.
            MODIFY GT_EVER_EANLH_FKKVKP FROM GWA_EVER_EANLH_FKKVKP
              TRANSPORTING ABRSPERR.
            APPEND GWA_EVER_EANLH_FKKVKP TO GT_EVER_EANLH_FKKVKP_INACT.
          ENDIF.
        ELSE.
          IF GWA_EVER_EANLH_FKKVKP-ABRSPERR <> SPACE.
            GWA_EVER_EANLH_FKKVKP-ABRSPERR = SPACE.
            MODIFY GT_EVER_EANLH_FKKVKP FROM GWA_EVER_EANLH_FKKVKP
              TRANSPORTING ABRSPERR.
          ENDIF.
        ENDIF.
        CLEAR GWA_ERCH.
      ENDLOOP.
      REFRESH GT_TECOKT[].
      IF NOT SO_COKEY[] IS INITIAL.
        SELECT COKEY LTEXT INTO TABLE GT_TECOKT
        FROM TECOKT
        WHERE COKEY IN SO_COKEY
          AND SPRAS = SY-LANGU .
    *    %_HINTS ORACLE '("TECOKT","TECOKT~1")'.
      ENDIF.
      IF NOT SO_MRU[] IS INITIAL.
        SELECT TERMSCHL TERMTEXT INTO TABLE GT_TE422
          FROM TE422
          WHERE TERMSCHL IN SO_MRU.
      ENDIF.
    *FREE lt_ever_fkkvkp[].
    ENDFORM.                    " consumer_data_selection
    *&      Form  Operand_data_selection
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM OPERAND_DATA_SELECTION .
      DATA: LT_EVER_EANLH_FKKVKP_ACT LIKE TABLE OF GWA_EVER_EANLH_FKKVKP.
    *  SORT gt_ever_eanlh_fkkvkp BY vkont.
      CHECK NOT GT_EVER_EANLH_FKKVKP[] IS INITIAL.
    **now depending upon the billing month check the time slice date
    **the last date of the billing month or the range of billing month
    *should fall in between the time slice of the installation
    ** billing month to is space
    **now select operands for processed installation
      LT_EVER_EANLH_FKKVKP_ACT[] = GT_EVER_EANLH_FKKVKP[].
      DELETE LT_EVER_EANLH_FKKVKP_ACT WHERE ABRSPERR NE SPACE.
      IF NOT LT_EVER_EANLH_FKKVKP_ACT[] IS INITIAL.
        SELECT ANLAGE OPERAND WERT1
        FROM ETTIFN
        INTO TABLE GT_ETTIFN
        FOR ALL ENTRIES IN LT_EVER_EANLH_FKKVKP_ACT
        WHERE ANLAGE = LT_EVER_EANLH_FKKVKP_ACT-ANLAGE
          AND OPERAND IN ('MTR_STS','CONN_LOAD','LOAD_CODE','KWH_MF')
          AND ( AB <= GV_HIGHDATE AND BIS >= GV_HIGHDATE ).
    *    %_HINTS ORACLE '("ETTIFN","ETTIFN~003")'.
      ENDIF.
    ENDFORM.                    " Operand_data_selection
    *&      Form  billing_data_selection
    *&------------------------------

    Hi,
    Please do run time analysis as Rob correctly mentioned or do SQL trace(ST05) to find where the program is consuming more time.
    Lanka

  • HR ABAP- Report Performance Issue

    Can you please any body tell me how to debug a report program by putting watch points and break points.
    Waiting for your Reply.
    Anu
    Bangalore

    Hi,
               If you have programm name then proceed with SE38 or take the programm name from Trasaction code which  you are using.
    Break Points:   If it is performance issue , put external break points around select querie and loop ---end loop.
    Watch Points :  in the debug screen choose the watch  point option and  give the field name from  your internal table for which you want to put watch point.
    After that give the range which you record you want to see in the range options.
    for these steps:  1. Execute your programm.
           2. In the selection screen enter /h in the command window to start debugging screen or put break points before excuting.
         3. Once you are in debug screen then start woring with F5 or F6 or F7 and create watch points where ever you like.

  • Create ABAP Report  for  Infoprovider

    Could anyone tell me Function module to fetch Infoprovider(s) for creating ABAP report on.
    The report should provide:
    Input:
    - Infoprovider(s)
    - Date-range: default: last 6 months
    Output:
    - data which is shown in the requests tab as described before, preceeded with the name of the infoprovider and having the possibility to download to Excel.
    Thanks

    Hi,
    you can easily use it as a template to create your own program. The program just shows what to do and how you need to populate the tables in order to pass selection parameters to the fm to get the required data back.
    Here a little demo I created to do it a bit flexible from different cubes:
    DATA: ref_data_tab TYPE REF TO data,
          ref_data_line TYPE REF TO data,
          it_sfc TYPE rsdri_th_sfc,
          l_sfc TYPE rsdri_s_sfc,
          it_sfc2 TYPE rsdd_th_sfc,
          l_sfc2 TYPE rrsfc01,
          it_sfk TYPE rsdri_th_sfk,
          l_sfk TYPE rsdri_s_sfk,
          it_sfk2 TYPE rsdd_th_sfk,
          l_sfk2 TYPE rrsfk01,
          l_first_call TYPE rs_bool,
          l_end_of_data TYPE rs_bool,
          l_tabname(30) TYPE c,
          l_cube(30) TYPE c,
          it_cobpro TYPE rsd_t_cob_pro,
          l_cobpro TYPE rsd_s_cob_pro.
    FIELD-SYMBOLS: <e_t_data> TYPE table,
                   <l_data> TYPE ANY,
                   <fs_field>.
    PARAMETERS: pa_cube TYPE rsinfoprov OBLIGATORY DEFAULT '/NBAG/CML_C05',
                pa_debug AS CHECKBOX.
    IF pa_cube(1) = '0'.
      CONCATENATE '/BI0/V' pa_cube '2' INTO l_tabname.
    ELSE.
      CONCATENATE '/BIC/V' pa_cube '2' INTO l_tabname.
    ENDIF.
    CREATE DATA ref_data_tab TYPE TABLE OF (l_tabname).
    CREATE DATA ref_data_line TYPE (l_tabname).
    ASSIGN ref_data_tab->* TO <e_t_data>.
    ASSIGN ref_data_line->* TO <l_data>.
    IF pa_debug = 'X'.
      BREAK-POINT.
    ENDIF.
    CALL FUNCTION 'RSD_COB_PRO_ALL_GET'
      EXPORTING
        i_infocube                      = pa_cube
      I_WITH_ATR_NAV                  = RS_C_FALSE
      I_WITH_META_IOBJ                = RS_C_FALSE
      I_OBJVERS                       = RS_C_OBJVERS-ACTIVE
      I_BYPASS_BUFFER                 = RS_C_FALSE
    IMPORTING
       e_t_cob_pro                     = it_cobpro
      E_T_IOBJ_CMP                    =
      E_T_ATR                         =
      E_TLOGO                         =
    EXCEPTIONS
       infocube_not_found              = 1
       error_reading_infocatalog       = 2
       illegal_input                   = 3
       OTHERS                          = 4.
    IF sy-subrc <> 0.
      WRITE: / sy-subrc, sy-msgno, sy-msgid, sy-msgv1, sy-msgv2, sy-msgv3.
    ENDIF.
    CLEAR: it_sfk[], it_sfc[].
    LOOP AT it_cobpro INTO l_cobpro.
      IF l_cobpro-iobjtp = 'KYF'.
        IF l_cobpro-ncumfl IS INITIAL.
          l_sfk-kyfnm = l_cobpro-iobjnm.
          l_sfk-kyfalias = l_cobpro-iobjnm.
          l_sfk-aggr = l_cobpro-aggrgen.
          INSERT l_sfk INTO TABLE it_sfk.
          MOVE-CORRESPONDING l_cobpro TO l_sfk2.
          INSERT l_sfk2 INTO TABLE it_sfk2.
        ENDIF.
      ELSE.
        IF l_cobpro-dimension NP '*P'.
          l_sfc-chanm = l_cobpro-iobjnm.
          l_sfc-chaalias = l_cobpro-iobjnm.
          l_sfc-orderby = 0.
          INSERT l_sfc INTO TABLE it_sfc.
          MOVE-CORRESPONDING l_cobpro TO l_sfc2.
          INSERT l_sfc2 INTO TABLE it_sfc2.
        ENDIF.
      ENDIF.
    ENDLOOP.
    CLEAR l_end_of_data.
    l_first_call = 'X'.
    WHILE l_end_of_data = space.
      CALL FUNCTION 'RSDRI_INFOPROV_READ'
        EXPORTING
          i_infoprov                   = pa_cube
          i_th_sfc                     = it_sfc
          i_th_sfk                     = it_sfk
      I_T_RANGE                    =
      I_TH_TABLESEL                =
      I_T_RTIME                    =
       i_reference_date             = sy-datum
      I_T_REQUID                   =
      I_SAVE_IN_TABLE              = ' '
      I_TABLENAME                  =
      i_save_in_file               = 'X'
      i_filename           = 'C:\test.csv'
       i_packagesize                = 1000
      I_MAXROWS                    = 0
         i_authority_check            = ' '
      I_CURRENCY_CONVERSION        = RS_C_TRUE
       i_use_db_aggregation         = ' '
       i_use_aggregates             = ' '
       i_rollup_only                = ' '
      I_READ_ODS_DELTA             = RS_C_FALSE
      I_CALLER                     = RSDRS_C_CALLER-RSDRI
      I_DEBUG                      = RS_C_FALSE
       IMPORTING
         e_t_data                     = <e_t_data>
         e_end_of_data                = l_end_of_data
      E_AGGREGATE                  =
      E_SPLIT_OCCURRED             =
        CHANGING
          c_first_call                 = l_first_call
       EXCEPTIONS
         illegal_input                = 1
         illegal_input_sfc            = 2
         illegal_input_sfk            = 3
         illegal_input_range          = 4
         illegal_input_tablesel       = 5
         no_authorization             = 6
         ncum_not_supported           = 7
         illegal_download             = 8
         illegal_tablename            = 9
         trans_no_write_mode          = 10
         inherited_error              = 11
         x_message                    = 12
         OTHERS                       = 13.
      IF sy-subrc <> 0.
        WRITE: / sy-subrc, sy-msgno, sy-msgid, sy-msgv1, sy-msgv2, sy-msgv3.
        EXIT.
      ELSE.
        LOOP AT <e_t_data> INTO <l_data>.
          WRITE: / sy-tabix, ':'.
          LOOP AT it_cobpro INTO l_cobpro.
            IF l_cobpro-ncumfl IS INITIAL.
              ASSIGN COMPONENT l_cobpro-iobjnm OF STRUCTURE <l_data>
                  TO <fs_field>.
              IF sy-subrc = 0.
                WRITE: <fs_field>.
              ENDIF.
            ENDIF.
          ENDLOOP.
        ENDLOOP.
      ENDIF.
      CLEAR: l_first_call, <e_t_data>[].
      IF l_end_of_data <> space.
        EXIT.
      ENDIF.
    ENDWHILE
    Hope this helps a bit
    regards
    Siggi

  • ABAP report to run other ABAP reports dynamically

    Hi there,
    I'm looking for an standard SAP or commercial solution ABAP Report that completely or partially meet the following requirements:
    The report must start ABAP reports on the system and write the result in files on the SAP server.
           * The reports that must be started are not defined before, thus a kind of parameter file with the list of reports to be started.
           * Most of the reports have 1 selection screens. The value of the selection screens can/must be specified in the parameter file.
           *  Most of the reports started have a list as a result. No interaction is required.
           * Authorization of the user that started the report can and must be used.
    It must be executable on every basis release of SAP R/3 e.g. basis 4.6x, 4.7 single code page (+MDMP) & unicode and SAP ECC.
    Does anybody have an idea if such an ABAP report exists?
    Thanks in advance for your support.
    Yannick.

    First thanks for the answer
    I don't think it is so. I mean, currently we have a hard coded solution. In this solution the calling report requests the called report to send its output to the spool. When finished the calling report retrieves the output of the report from the spool and write it into a file.
    The problem is taht we do not have time and ressource to implement a fully dynamic solution on our own
    Best regards
    Yannick

Maybe you are looking for

  • Exchange commands in VB (PLEASE HELP!)

    Hey everyone, I'm running exchange PowerShell commands from my VB program and I have a quick question. Would it be possible to input my server name where I want to pull the information off of right after it says Get-MailBoxDatabaseCopyStatus. For an

  • "Field Catalog not found" ...problem in ALV reporting !!

    Hi, When i execute my report program where in I generate a Selection screen, I am able to select the values in the selection screen. Once I click on the execute button I get the message "Field Catalog not found"... The elabore message is "Field Catal

  • My PB froze while playin DVD (twice)~!

    Hi~! i have the latest Ti model (super-drive), the one before the Al PB... My PB has been 'good' and never given me 'big trouble'.... today i was watching a movie (DVD) and this dvd disk (which is not an 'original' one... borrowed for the weekend fro

  • Updating Quicksilver: Need Help Starting Project

    Hello fellows. Awhile ago I was able to purchase a used PowerPC G4 Quicksilver model from my former University for a very wonderful price of $40. I've finally got around to wanting to updating it. I currently have an iMac which is less than a year ol

  • Hebrew is backward (left-to-right) in Calendar view, but not in edit mode

    Hey all, I'm wondering if there's a workaround for a bug where Hebrew appears backward in most Calendar views, for example the day and list views. If you go to edit the event, it appears correctly. Thanks Apple very much for adding the Hebrew charact