abap prgs -sample

68
http://www.sap-img.com/ab032.htm General - Reporting Tree in ABAP * * An ABAP reporting tree program that allows the user to press enter or double click on any line. The report is updated with new internal table data and re- written. The cursor * and paging returns to the exact same line the user was on, even though the report was * re-written from the internal table. Input fields are filled with data based on ENTER of * DOUBLE CLICK. [+] and [-] is displayed on each line and changes if user selects to expand/collapse. * * Create a gui status (8000) with Functions Keys * ENTER = ENTE * BACK = BACK * EXIT = %EX * CANCEL = RW * PICK = F2 * EXPAND ALL = EXPA * COLLAPSE ALL = COLA * * Written by : SAP Basis, ABAP Programming and Other IMG Stuff * http://www.sap-img.com * REPORT ZTREE NO STANDARD PAGE HEADING LINE-COUNT 65 LINE-SIZE 80. DATA: BEGIN OF IT_DATA OCCURS 0, EXP(1) TYPE C, WERKS LIKE T001W-WERKS, MATNR LIKE MARA-MATNR, VALUE1(13) TYPE C, VALUE2(13) TYPE C, END OF IT_DATA. DATA: W_MATNR LIKE MARA-MATNR, W_COUNT TYPE I, G_FIELD(40) TYPE C. DATA: BEGIN OF PAGE, SCRLLINE LIKE SYST-LILLI, "scroll line to top of screen CURSLINE LIKE SYST-LILLI, "line to put cursor on HDRLINES TYPE I, "lines in header + 1 TWOHDRS TYPE I, "two headers on screen CPOSTOP TYPE I, "position of cursor from top

Upload: ajit-mashannavar-m

Post on 20-Apr-2015

236 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Abap Prgs -Sample

http://www.sap-img.com/ab032.htm

General - Reporting Tree in ABAP ** An ABAP reporting tree program that allows the user to press enter or double click on  any line. The report is updated with new internal table data and re-written. The cursor * and paging returns to the exact same line the user was on, even though the report was * re-written from the internal table. Input fields are filled with data based on ENTER of * DOUBLE CLICK. [+] and [-] is displayed on each line and changes if user selects to expand/collapse.* * Create a gui status (8000) with Functions Keys*                                 ENTER        = ENTE*                                 BACK         = BACK*                                 EXIT         = %EX*                                 CANCEL       = RW*                                 PICK         = F2*                                 EXPAND ALL   = EXPA*                                 COLLAPSE ALL = COLA** Written by : SAP Basis, ABAP Programming and Other IMG Stuff*              http://www.sap-img.com*REPORT ZTREE NO STANDARD PAGE HEADING             LINE-COUNT 65             LINE-SIZE 80.

DATA: BEGIN OF IT_DATA OCCURS 0,        EXP(1) TYPE C,        WERKS LIKE T001W-WERKS,        MATNR LIKE MARA-MATNR,        VALUE1(13) TYPE C,        VALUE2(13) TYPE C,      END OF IT_DATA.

DATA: W_MATNR LIKE MARA-MATNR,      W_COUNT TYPE I,      G_FIELD(40) TYPE C.

DATA: BEGIN OF PAGE,        SCRLLINE LIKE SYST-LILLI,      "scroll line to top of screen        CURSLINE LIKE SYST-LILLI,      "line to put cursor on        HDRLINES TYPE I,               "lines in header + 1        TWOHDRS TYPE I,                "two headers on screen        CPOSTOP TYPE I,                "position of cursor from top        CPOSBOT TYPE I,                "position of cursor from bottom        CPOSIT TYPE I,                 "position on the screen        PAGNO TYPE I,                  "pageno of line        PGELINES TYPE I,               "lines used so far      END OF PAGE.

Page 2: Abap Prgs -Sample

START-OF-SELECTION.  PERFORM BUILD_IT_DATA.

END-OF-SELECTION.  PERFORM WRITE_REPORT.

TOP-OF-PAGE.  PERFORM TOP_OF_PAGE.

TOP-OF-PAGE DURING LINE-SELECTION.  PERFORM TOP_OF_PAGE.

AT LINE-SELECTION.  G_FIELD = SPACE.  GET CURSOR FIELD G_FIELD.  PERFORM LINE_SELECTION.

AT USER-COMMAND.  G_FIELD = SPACE.  GET CURSOR FIELD G_FIELD.  PERFORM USER_COMMAND.

*---------------------------------------------------------------------**       FORM BUILD_IT_DATA                                            **---------------------------------------------------------------------*FORM BUILD_IT_DATA.  IT_DATA-WERKS = '0000'.  WHILE IT_DATA-WERKS < '0100'.    ADD '10' TO IT_DATA-WERKS.    W_MATNR = 0.    WHILE W_MATNR < 10.      ADD 1 TO W_MATNR.      IT_DATA-EXP = '+'.      WRITE W_MATNR TO IT_DATA-MATNR.      IF IT_DATA-WERKS = 10 AND W_MATNR = 1.            WRITE 'ZTEST2' TO IT_DATA-VALUE1.            WRITE 'Testing program 2' TO IT_DATA-VALUE2.      ELSE.            CLEAR: IT_DATA-VALUE1, IT_DATA-VALUE2.      ENDIF.      APPEND IT_DATA.    ENDWHILE.  ENDWHILE.ENDFORM.*---------------------------------------------------------------------**       FORM WRITE_REPORT                                             **---------------------------------------------------------------------*FORM WRITE_REPORT.  SET PF-STATUS '8000'.  SYST-LSIND = '0'.  LOOP AT IT_DATA.    AT NEW WERKS.      FORMAT COLOR COL_HEADING INTENSIFIED OFF.      WRITE: /1 SYST-VLINE NO-GAP,                '[' NO-GAP,                IT_DATA-EXP NO-GAP HOTSPOT ON,                ']'.

Page 3: Abap Prgs -Sample

      FORMAT COLOR COL_NORMAL INTENSIFIED ON.      WRITE:     IT_DATA-WERKS,              AT SYST-LINSZ SYST-VLINE.      PAGE-PAGNO = SYST-PAGNO.      HIDE: IT_DATA-WERKS, PAGE-PAGNO.    ENDAT.    IF IT_DATA-EXP = '-'.      FORMAT COLOR COL_NORMAL INTENSIFIED OFF.      WRITE: /1 SYST-VLINE,              8 IT_DATA-MATNR,                IT_DATA-VALUE1 INPUT ON,                IT_DATA-VALUE2 INPUT ON,             AT SYST-LINSZ SYST-VLINE.      HIDE: IT_DATA, PAGE-PAGNO.    ENDIF.  ENDLOOP.  ULINE.ENDFORM.*---------------------------------------------------------------------**       FORM USER_COMMAND                                             **---------------------------------------------------------------------*FORM USER_COMMAND.  PERFORM SET_SCROLL_LINE.  CASE SY-UCOMM.    WHEN 'ENTE'.      READ TABLE IT_DATA WITH KEY WERKS = IT_DATA-WERKS                                  MATNR = IT_DATA-MATNR.      IF SYST-SUBRC = 0.        CASE G_FIELD.          WHEN 'IT_DATA-VALUE1'.            IF IT_DATA-VALUE1 <> SPACE.               SUBMIT (IT_DATA-VALUE1) VIA SELECTION-SCREEN AND RETURN.            ELSE.               IT_DATA-VALUE1 = 'Enter 1 Press'(001).            ENDIF.          WHEN 'IT_DATA-VALUE2'.            IT_DATA-VALUE2 = 'Enter 2 Press'(001).        ENDCASE.        MODIFY IT_DATA INDEX SYST-TABIX.      ENDIF.      PERFORM WRITE_REPORT.      PERFORM POSITION_LIST.      CASE G_FIELD.        WHEN 'IT_DATA-EXP'.          ADD 1 TO PAGE-CURSLINE.          SET CURSOR FIELD 'IT_DATA-VALUE1' LINE PAGE-CURSLINE.        WHEN 'IT_DATA-VALUE1'.          SET CURSOR FIELD 'IT_DATA-VALUE1' LINE PAGE-CURSLINE.        WHEN 'IT_DATA-VALUE2'.          SET CURSOR FIELD 'IT_DATA-VALUE2' LINE PAGE-CURSLINE.      ENDCASE.    WHEN 'EXPA'.      PERFORM SET_EXPAND USING '-'.      PERFORM WRITE_REPORT.    WHEN 'COLA'.      PERFORM SET_EXPAND USING '+'.      PERFORM WRITE_REPORT.

Page 4: Abap Prgs -Sample

  ENDCASE.ENDFORM.*---------------------------------------------------------------------**       FORM SET_EXPAND                                               **---------------------------------------------------------------------*FORM SET_EXPAND USING W_EXP.  LOOP AT IT_DATA.    IT_DATA-EXP = W_EXP.    MODIFY IT_DATA INDEX SYST-TABIX.  ENDLOOP.ENDFORM.*---------------------------------------------------------------------**       FORM LINE_SELECTION                                           **---------------------------------------------------------------------*FORM LINE_SELECTION.  PERFORM SET_SCROLL_LINE.  READ TABLE IT_DATA WITH KEY WERKS = IT_DATA-WERKS                              MATNR = IT_DATA-MATNR.  CASE G_FIELD.    WHEN 'IT_DATA-EXP'.      LOOP AT IT_DATA WHERE WERKS = IT_DATA-WERKS.        IF IT_DATA-EXP = '-'.          IT_DATA-EXP = '+'.        ELSE.          IT_DATA-EXP = '-'.        ENDIF.        MODIFY IT_DATA INDEX SYST-TABIX.      ENDLOOP.    WHEN 'IT_DATA-VALUE1'.      IT_DATA-VALUE1 = 'Double Click'(004).      MODIFY IT_DATA INDEX SYST-TABIX.    WHEN 'IT_DATA-VALUE2'.      IT_DATA-VALUE2 = 'Double Click'(004).      MODIFY IT_DATA INDEX SYST-TABIX.  ENDCASE.  PERFORM WRITE_REPORT.  PERFORM POSITION_LIST.  CASE G_FIELD.    WHEN 'IT_DATA-EXP'.      ADD 1 TO PAGE-CURSLINE.      SET CURSOR FIELD 'IT_DATA-VALUE1' LINE PAGE-CURSLINE.    WHEN 'IT_DATA-VALUE1'.      SET CURSOR FIELD 'IT_DATA-VALUE1' LINE PAGE-CURSLINE.    WHEN 'IT_DATA-VALUE2'.      SET CURSOR FIELD 'IT_DATA-VALUE2' LINE PAGE-CURSLINE.  ENDCASE.ENDFORM.*---------------------------------------------------------------------**       FORM SET_SCROLL_LINE                                          ** determine the correct line to scroll the re-written report to, so   ** that the user is returned to the same spot on the screen            ** if user is mid way between pages, ie two headers are visable on the ** screen, check if they are on the secondary page and adjust the      ** scroll variable accordingly so as not to jump up lines because the  ** scroll variable will be out by the number of lines in the extra hdr **---------------------------------------------------------------------*FORM SET_SCROLL_LINE.

Page 5: Abap Prgs -Sample

  PAGE-CURSLINE = SYST-LILLI.  PAGE-SCRLLINE = SYST-LILLI - ( SYST-CUROW - PAGE-HDRLINES ).  PAGE-PGELINES = ( PAGE-PAGNO - 1 ) * SYST-LINCT.  PAGE-CPOSTOP = ( PAGE-SCRLLINE + SYST-CUROW ) - PAGE-PGELINES.  PAGE-CPOSBOT = ( PAGE-SCRLLINE - SYST-CUROW ) - PAGE-PGELINES.  PAGE-CPOSIT = PAGE-CPOSTOP + PAGE-CPOSBOT.  PAGE-TWOHDRS = PAGE-HDRLINES * 2.  IF PAGE-CPOSIT LT PAGE-TWOHDRS.    PAGE-SCRLLINE = PAGE-SCRLLINE + 1.  ENDIF.ENDFORM.*---------------------------------------------------------------------**       FORM POSITION_LIST                                            **---------------------------------------------------------------------*FORM POSITION_LIST.  CALL FUNCTION 'LIST_SCROLL_LINE_TOPMOST'       EXPORTING            LIST_INDEX = 1            LIST_LINE  = PAGE-SCRLLINE       EXCEPTIONS            OTHERS     = 1.  CHECK SYST-SUBRC = 0.ENDFORM.*---------------------------------------------------------------------**       FORM TOP_OF_PAGE                                              **---------------------------------------------------------------------*FORM TOP_OF_PAGE.* set page-hdrlines = lines in header + 1 system generated blank line  PAGE-HDRLINES = 5.  ULINE.  WRITE : /1 SYST-VLINE, 'Header'(002), AT SYST-LINSZ SYST-VLINE.  WRITE : /1 SYST-VLINE, 'Lines'(003), AT SYST-LINSZ SYST-VLINE.  ULINE.ENDFORM.

Page 6: Abap Prgs -Sample

General - Number Range Generation * In the 4.6x environment, SAP have included a number range generation* program just like those used for Purchase Order, Sales Order etc.** This SAP number range generation is an include program.** INCLUDE ZRANGENO.** Always have to be included in the main program data declaration** data: wnorange like INRI-NRRANGENR,            "number range,*       wsubobj  like inri-SUBOBJECT,            "sub object*       wdocno(12).** Steps :-* 1. Number range Sub Object must be maintain in table ZSGRP*    You can used transaction SE16 to create a table entries.* 2. Maintain number range and intervals in transaction code SNUM** Written by : SAP Basis, ABAP Programming and Other IMG Stuff*              http://www.sap-img.com*

call function 'NUMBER_RANGE_ENQUEUE'         exporting               object              = 'ZOWNNO'   "Create with SNUM         exceptions               foreign_lock        = 1               object_not_found    = 2               system_failure      = 3               others              = 4.  if sy-subrc ne 0.*   message e086 with 'Lock error' sy-subrc.  endif.

  call function 'NUMBER_GET_NEXT'         exporting               nr_range_nr         = wnorange               object              = 'ZOWNNO'               subobject           = wsubobj         importing               number                  = wdocno  "Number generated by SAP         exceptions               interval_not_found      = 1               number_range_not_intern = 2               object_not_found        = 3               quantity_is_0           = 4               quantity_is_not_1       = 5               internal_overflow       = 6               others                  = 7.  if sy-subrc ne 0.*   message e086 with 'Number Range' sy-subrc.  endif.

  call function 'NUMBER_RANGE_DEQUEUE'    exporting

Page 7: Abap Prgs -Sample

      object                 = 'ZOWNNO'.

  if sy-subrc <> 0.    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.  endif.

Page 8: Abap Prgs -Sample

Run or Display ABAP Report over the web

I need to run or display ABAP/4 report over the web? How is that possible? 

You may not be able to display a report directly on net. However, you need to create BSPs (business server pages) on the SAP Web Application Server and make them available on net.

SAP Web Application Server, a part of mySAP Technology, is SAP's response to these new requirements. SAP Web Application Server offers a stable foundation for Web-centric, mission-critical applications and Web Services. It is more than just a platform for mySAP.com components. The new release 6.20 of SAP Web Application Server offers a fully J2EE compliant environment for quickly developing and deploying dynamic, collaborative Web applications and Web services. SAP's decade of experience in application servers complements the J2EE standard with features that are mandatory in a mission-critical business application environment and thus provides the most reliable and proven Web Application Server today. 

With SAP Web Application Server professional platform-independent business solutions, leveraging J2EE are a reality.  SAP Web Application Server is the underlying technology for all mySAP.com components (such as mySAP Customer Relationship Management, mySAP Business Intelligence, and the forthcoming SAP R/3 Enterprise). It also offers a wide range of services that enable extensive, global e-business solutions, including a development environment, software logistics, security, and connectivity. 

Building on the scalable and reliable SAP application server, SAP Web Application Server delivers innovative, native Web technologies, a J2EE and ABAP environment for architecting applications, and Web services for business-to-business collaboration.

Provision of Web Services

The SAP Web Application Server is the underlying infrastructure for applications that offer Web services to users and other applications either directly or through the portal and exchange infrastructure. Web services provided through the SAP Web Application Server adhere to a common set of open technical Internet standards that enable cooperation and interoperability across different technical platforms. A professional programming model with a development and runtime environment for building top notch user-centric Web services ensure intuitive point-and-click and state-of-the-art Web-based user interfaces. User-centric Web services clearly separate layout (HTML) from data (XML), and thus provide automatic support of multiple languages, personalization, and interface customization help to speed up user-interface development. 

Application-centric Web services fully leverages open standards like HyperText Transfer Protocol (HTTP), Extensible Markup Language (XML), Simple Object Access Protocol (SOAP), Web Services Description Language (WSDL), and Universal Discovery, Description, and Integration (UDDI) providing customers with the opportunity to drive innovative, easy to change business processes without the constraints of a proprietary infrastructure.

Page 9: Abap Prgs -Sample

Content Author: RAKESH SINGH SAP Programer Analyst

I need a code for ‘calling any html page into SAP report’

Or linking sap R/3 with html file.

Used this function module:       CALL FUNCTION 'GUI_RUN'   EXPORTING   command ='IEXPLORE.EXE'   PARAMETER ='WWW.YAHOOMAIL.COM'.   * CD =   * IMPORTING   * RETURNCODE =

Page 10: Abap Prgs -Sample

Common used of Dialog Screen for Display, Change, Delete

It is not required of you to create and maintain different dialog screen for each screen functions for Create, Change, Delete and Dispaly.  You can shared the used of a single Dialog Screen and used the MODIFY SCREEN to make the Field to be modify or not.  Modifications and maintenance will be easier when user request you to change any screen layout.

PROCESS BEFORE OUTPUT.   MODULE 0250_STATUS.   LOOP.       MODULE STATUS_0120.   ENDLOOP.

  LOOP.       MODULE STATUS_0110.   ENDLOOP.

  LOOP.       MODULE STATUS_0100.   ENDLOOP. * PROCESS AFTER INPUT.   MODULE REFRESH_0250.   LOOP.        MODULE USER_COMMAND_0120.   ENDLOOP.

  LOOP.        MODULE USER_COMMAND_0110.   ENDLOOP.

* For example, if the user enter the Delete Screen, you will make all the Fields non-Editable. *&---------------------------------------------------------------------* *&      Module  0250_STATUS  OUTPUT *&---------------------------------------------------------------------* *       text                                                           * *----------------------------------------------------------------------* MODULE 0250_STATUS OUTPUT. SET PF-STATUS 'Z250'. SET TITLEBAR 'Z250'. IF OKSAVE = 'DEL'. * Make the SAVE Menu button inactive    SET PF-STATUS 'Z250' EXCLUDING 'SAVE'.

* Make all the Fields non-Editable    LOOP AT SCREEN.

Page 11: Abap Prgs -Sample

       SCREEN-INPUT = 0.        MODIFY SCREEN.    ENDLOOP. ENDIF.

*  For example, if the user enter the Modify Screen, you will make all the Fields Group 1 that  *  have a 'M' non-Editable. *  You specify the 'M' for Group 1 using the Screen Painter Attribute IF OKSAVE = 'MOD'. *  Make the DELE Menu button inactive    SET PF-STATUS 'Z250' EXCLUDING 'DELE'.

*  Make all the Fields Groups 'M' non-Editable    LOOP AT SCREEN.        check screen-group1 = 'M'.        SCREEN-INPUT = 0.        MODIFY SCREEN.    ENDLOOP. ENDIF. CLEAR OKCODE. ENDMODULE. 

Page 12: Abap Prgs -Sample

Scrolling in Table Control

-----Original Message----- Subject: Scrolling in Table Control From: Amit Purohit

Hey,

I have defined a table control and scrolling is not possible in that even if the number of entries exceeds the window height. Below is the flow logic which I have attached

PROCESS BEFORE OUTPUT. MODULE STATUS_0300. LOOP AT IT1 CURSOR ZTR0300-CURRENT_LINE. ENDLOOP. * PROCESS AFTER INPUT. LOOP AT IT1.   MODULE USER_COMMAND_0300. ENDLOOP.

What could I have done wrong ?

Thanks in advance.

Amit.

-----Reply Message----- Subject: RE: Scrolling in Table Control From: K.Hariprasad

Try defining the table control lines in PBO.

PROCESS BEFORE OUTPUT. ZTR0300-CURRENT_LINE = 100.

-----Reply Message----- Subject: RE: Scrolling in Table Control From: K.Hariprasad 

Iam sorry, i have typed ZTR0300-LINES as ZTR0300-CURRENT_LINE in previous mail.

PROCESS BEFORE OUTPUT. ZTR0300-LINES = 100

Page 13: Abap Prgs -Sample

-----Reply Message----- Subject: RE: Scrolling in Table Control From amit.purohit

That worked.

Thank you for prompt reply.

Amit.

Page 14: Abap Prgs -Sample

SY-UCOMM and OK_CODE in Dialog Program

What is the difference between SY-UCOMM and OK_CODE in Dialog Program?

sy-ucomm is for doing the functions what the user wishes to do at that particular event. You use it in menus and other place . this mainly in using <pfstatus>   ok_code is generally used in screen as of I have used.  You will define the function in the screen. and you can use it in the main program.

ok_code acts just as a temporary variable that stores the value of sy-ucomm. When user interacts with the screen elements, the function code that you have assigned is filled in the sy-ucomm field which is turn gets reflected in OK_CODE.

In your ABAP programs, you should work with the OK_CODE field instead of SY-UCOMM. There are two reasons for this: Firstly, the ABAP program has full control over fields declared within it, and secondly, you should never change the value of an ABAP system field. However, you should also always initialize the OK_CODE field in an ABAP program for the following reason:

In the same way that the OK_CODE field in the ABAP program and the system field SY-UCOMM receive the contents of the corresponding screen fields in the PAI event, their contents are also assigned to the OK_CODE screen field and system field SYST-UCOMM in the PBO event. Therefore, you must clear the OK_CODE field in the ABAP program to ensure that the function code of a screen is not already filled in the PBO event with an unwanted value. This is particularly important when the next PAI event can be triggered with an empty function code (for example, using ENTER). Empty function codes do not affect SY-UCOMM or the OK_CODE field, and consequently, the old field contents are transported.

Page 15: Abap Prgs -Sample

Splash Screen in ABAP I created 2 MODAL screens 0806 & 20090806 was for start of job spash & 20009 was an exit SPLASHUsed this effectively in a lrge DOI Excel download program..

2 JPG files with a nice Indian Welcome & fancy Bengali Text!Each Modal scren had 2 ContainersCUSTOM_1 shaped for Picture control  CUSTOM_2 for CL_GUI_TIMER control

* Create 2 MODAL screens 0806 and 2009* 1 CUSTOM_1 shaped to hold JPG* and 1 CUSTOM_2 to hold TIMER

REPORT zpp_r012 LINE-SIZE  160                LINE-COUNT 72                MESSAGE-ID zpp01.

DATA: container1 TYPE REF TO cl_gui_custom_container,      container2 TYPE REF TO cl_gui_custom_container,      picture TYPE REF TO cl_gui_picture.

DATA: graphic_url(255),      g_result   TYPE i,      g_linesz   TYPE i,      g_filesz   TYPE i,      g_name(100).

TYPES: t_graphic_line(256) TYPE x.

DATA: graphic_line TYPE t_graphic_line,      graphic_table TYPE TABLE OF t_graphic_line.

*---------------------------------------------------------------------**       CLASS lcl_event_handler DEFINITION*---------------------------------------------------------------------*CLASS lcl_event_handler DEFINITION.

  PUBLIC SECTION.    CLASS-METHODS: on_finished FOR EVENT finished OF cl_gui_timer.ENDCLASS. "lcl_event_handler DEFINITION

*---------------------------------------------------------------------**       CLASS lcl_event_handler IMPLEMENTATION*---------------------------------------------------------------------*CLASS lcl_event_handler IMPLEMENTATION.  METHOD on_finished.    IF sy-dynnr = 2009.      LEAVE PROGRAM.    ELSE.      PERFORM f_excel_job.    ENDIF.  ENDMETHOD. "on_finishedENDCLASS. "lcl_event_handler IMPLEMENTATION

Page 16: Abap Prgs -Sample

DATA timer TYPE REF TO cl_gui_timer.DATA event_handler TYPE REF TO lcl_event_handler.DATA timeout TYPE i VALUE '3'.

*&---------------------------------------------------------------------**                      SELECTION-SCREEN DESIGN                         **&---------------------------------------------------------------------*SELECTION-SCREEN: BEGIN OF BLOCK b2sels WITH FRAME TITLE text-002.PARAMETERS: pwerks  LIKE     mseg-werks OBLIGATORY,  "THIS Plant            pbudat  LIKE     mkpf-budat OBLIGATORY.  "THIS DateSELECTION-SCREEN: END OF BLOCK b2sels.

*&---------------------------------------------------------------------**                       INITIALIZATION EVENT                           **&---------------------------------------------------------------------*INITIALIZATION.

*&---------------------------------------------------------------------**                     AT SELECTION-SCREEN EVENT                        **&---------------------------------------------------------------------***Use this EVENT to validate SELECTION-SCREENAT SELECTION-SCREEN.

*&---------------------------------------------------------------------**                      START-OF-SELECTION EVENT                        **&---------------------------------------------------------------------*START-OF-SELECTION.

  CALL SCREEN 0806 STARTING AT 30 4.

*&---------------------------------------------------------------------**&      Form  f_excel_job*&---------------------------------------------------------------------*FORM f_excel_job.

* LOTS of Code

  CALL SCREEN 2009 STARTING AT 30 4.

ENDFORM.                    "f_excel_job

** LOTS of CODE

*&---------------------------------------------------------------------**&      Form  getpicurl*&---------------------------------------------------------------------*FORM getpicurl.

  OPEN DATASET g_name FOR INPUT IN BINARY MODE.

  REFRESH graphic_table.

Page 17: Abap Prgs -Sample

  CLEAR   g_filesz.

  DO.    CLEAR graphic_line.    READ DATASET g_name INTO graphic_line ACTUAL LENGTH g_linesz.

    ADD g_linesz TO g_filesz.

    APPEND graphic_line TO graphic_table.    IF sy-subrc <> 0.      EXIT.    ENDIF.

  ENDDO.

  CLOSE DATASET g_name.

  CLEAR graphic_url.

  CALL FUNCTION 'DP_CREATE_URL'    EXPORTING      type                 = 'IMAGE'      subtype              = 'GIF'    TABLES      data                 = graphic_table    CHANGING      url                  = graphic_url    EXCEPTIONS      dp_invalid_parameter = 1      dp_error_put_table   = 2      dp_error_general     = 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.    EXIT.  ENDIF.

  IF graphic_url IS NOT INITIAL.

    CALL METHOD picture->clear_picture      EXCEPTIONS        error = 1.

    CALL METHOD picture->load_picture_from_url      EXPORTING        url    = graphic_url      IMPORTING        RESULT = g_result.

    CALL METHOD picture->set_display_mode      EXPORTING        display_mode = picture->display_mode_normal_center      EXCEPTIONS

Page 18: Abap Prgs -Sample

        error        = 1.

    CALL METHOD cl_gui_cfw=>update_view.  ENDIF.

ENDFORM.                    "getpicurl

*---------------------------------------------------------------------**  MODULE zjncpbo OUTPUT screen 0806*---------------------------------------------------------------------*MODULE zjncpbo OUTPUT.

  MOVE 'NAMASTE.JPG' TO g_name.

  CREATE OBJECT: container1 EXPORTING container_name = 'CUSTOM_1',                 container2 EXPORTING container_name = 'CUSTOM_2',                 picture    EXPORTING parent = container1,                 timer      EXPORTING parent = container2.

  SET HANDLER lcl_event_handler=>on_finished FOR timer.

* Start Timer  timer->interval = timeout.  CALL METHOD timer->run.

  PERFORM getpicurl.

  CALL METHOD cl_gui_cfw=>flush.

ENDMODULE.                             " PBO

*---------------------------------------------------------------------**  MODULE zjncpbo2 OUTPUT screen 2009*---------------------------------------------------------------------*MODULE zjncpbo2 OUTPUT.

  MOVE 'THANKS.JPG' TO g_name.

  CREATE OBJECT: container1 EXPORTING container_name = 'CUSTOM_1',                 container2 EXPORTING container_name = 'CUSTOM_2',                 picture    EXPORTING parent = container1,                 timer      EXPORTING parent = container2.

  SET HANDLER lcl_event_handler=>on_finished FOR timer.

* Start Timer  timer->interval = timeout.  CALL METHOD timer->run.

  PERFORM getpicurl.

  CALL METHOD cl_gui_cfw=>flush.

ENDMODULE.                            

Page 19: Abap Prgs -Sample

Change the Input Fields Dynamically in a Screen

ABAP Dialog Programming Questions:

How to change the input fields dynamically in a screen which consists of 9 text fields? Moreover the user must not enter values in some of the input fields where the values are given.

1.If you want to change the input fields on some user input then use 'user-command ac' after the field on which you want the action. 2.Specify the modif id 'xxx' for each screen object. 3.Then in the event 'AT SELECTION-SCREEN ON OUTPUT' loop at screen. check the screen-group1(modif id ) of screen objects and change the status of the object. 4.You can view all the screen attribute from se11.

The following example may help you:

SELECTION-SCREEN BEGIN OF BLOCK 001. PARAMETERS: P_MRU  RADIOBUTTON GROUP SEL DEFAULT 'X' USER-COMMAND AC,             P_PART RADIOBUTTON GROUP SEL.     SELECT-OPTIONS P1 FOR <field> MODIF ID PRT.     SELECT-OPTIONS G1 FOR <field>  MODIF ID MRU. SELECTION-SCREEN END OF BLOCK 001.

AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN.   IF P_MRU = 'X'.       IF SCREEN-GROUP1 = 'PRT'.         SCREEN-INPUT = '0'.       ENDIF.       IF SCREEN-GROUP1 = 'MRU'.         SCREEN-INPUT = '1'.       ENDIF.   ELSEIF P_PART = 'X'.      IF SCREEN-GROUP1 = 'MRU'.        SCREEN-INPUT = '0'.      ENDIF.      IF SCREEN-GROUP1 = 'PRT'.        SCREEN-INPUT = '1'.      ENDIF.   ENDIF.   MODIFY SCREEN. ENDLOOP.

Page 20: Abap Prgs -Sample

SAP ABAP : Attach a Search Help to the Screen Field

I have a requirement to attach a search help to the screen field. When I click on the drop-down list, it should automatically pick the company code that is already displayed on the screen and show the results.   It dosent make any sense for search help to wait for user to input the same company code which is already displayed.

Use this functionality to get help.

FORM HELP_CHECK. *-- Set up fields to retrieve data

  ltab_fields-tabname    = 'ZFI_PMNTADV'.   ltab_fields-fieldname  = 'CHECT'.   ltab_fields-selectflag = 'X'.   APPEND ltab_fields.

  ltab_fields-tabname    = 'ZFI_PMNTADV'.   ltab_fields-fieldname  = 'PMNT_ADV'.   ltab_fields-selectflag = 'X'.   APPEND ltab_fields.

  SORT ltab_fields.   DELETE ADJACENT DUPLICATES FROM ltab_fields.

*-- Fill values   SELECT chect   INTO TABLE ltab_values          FROM zfi_pmntadv             WHERE pmnt_adv NE space.   SORT ltab_values.   DELETE ADJACENT DUPLICATES FROM ltab_values.

CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'      EXPORTING           fieldname                 = 'chect'           tabname                   = 'zfi_pmntadv'           title_in_values_list      = 'Select a value'      IMPORTING           select_value              = so_chect      TABLES           fields                    = ltab_fields           valuetab                  = ltab_values      EXCEPTIONS

Page 21: Abap Prgs -Sample

          field_not_in_ddic         = 01           more_then_one_selectfield = 02           no_selectfield            = 03.  

ENDFORM. 

Display Active Exits in a ABAP System

ZMS_ACTIVE_EXITS - This report shows displays the active exits in a ABAP system along with the corresponding SAP Enhancement (SMOD) and Customer Project (CMOD)

*&---------------------------------------------------------------------**& Report ZMS_ACTIVE_EXITS*&---------------------------------------------------------------------**& This report displays all the active customer enhancements in the*& system and also displays whether they are active or implemented*&---------------------------------------------------------------------*REPORT ZMS_ACTIVE_EXITS.* Data declerationtypes: begin of s_function,fname like MOD0-FUNCNAME,ftext like tftit-stext,impl,active,example,end of s_function.TYPEs : BEGIN OF display_str,project type modact-name,enhancement type modact-member,fm type modsap-member,status type char20,END OF display_str.data : lt_member type table of modact-member,ls_member like LINE OF lt_member,lt_fm type table of modsap-member,ls_fm like LINE OF lt_fm,lt_modname type table of modact-name,ls_modname like line of lt_modname,lt_display type TABLE OF display_str,ls_display like LINE OF lt_display,ls_function type s_function,field1(30).START-OF-SELECTION.* Select active customer enhancement.select name from modattr into ls_modnamewhere status = 'A'.append ls_modname to lt_modname.CLEAR ls_modname.

Page 22: Abap Prgs -Sample

ENDSELECT.if lt_modname is INITIAL.WRITE / 'no active enhancements'.endif.* Determine the details about the customer enhancement.LOOP AT lt_modname INTO ls_modname.CLEAR : ls_display.SELECT member from modact into ls_member where name = ls_modname.select member from modsap into ls_fm where name = ls_member and typ = 'E'.ls_display-project = ls_modname.ls_display-enhancement = ls_member.ls_display-fm = ls_fm.clear : ls_function.ls_function-fname = ls_fm.perform get_impl_status USING ls_function.if ls_function-impl = 'X'.ls_display-status = 'Implemented'.ELSE.ls_display-status = 'Active'.endif.APPEND ls_display to lt_display.endselect.ENDSELECT.ENDLOOP.* Displaying resultsformat color = 1.write : 'Please double-click on the object for follow-on action'.new-LINE. uline.write : 'Customer Project', at 30 'SAP Enhancement', at 60 'Exit Function Module', at 100 'Active/Implemented'.ULINE.format color = 0.loop at lt_display into ls_display.new-LINE.write : ls_display-project, at 30 ls_display-enhancement, at 60 ls_displayfm,at 100 ls_display-status.ENDLOOP.* For calling transaction CMOD / SMOD / SE37.at line-selection.get cursor field field1.CASE field1.WHEN 'LS_DISPLAY-PROJECT'.set parameter id 'MON_KUN' field sy-lisel(10).call transaction 'CMOD' and skip first screen.WHEN 'LS_DISPLAY-ENHANCEMENT'.set parameter id 'MON' field sy-lisel+29(10).call transaction 'SMOD' and skip first screen.WHEN 'LS_DISPLAY-FM'.set parameter id 'LIB' field sy-lisel+59(30).call transaction 'SE37' and skip first screen.WHEN OTHERS.message 'Click on the right place.' TYPE 'I'.ENDCASE.*&---------------------------------------------------------------------*

Page 23: Abap Prgs -Sample

*& Form get_impl_status*&---------------------------------------------------------------------** This FORM checks whether an EXIT FM is implemented or not*----------------------------------------------------------------------*form get_impl_status using p_function type s_function.data : l_mand LIKE tfdir-mand,l_incl_names TYPE smod_names OCCURS 1 WITH HEADER LINE.l_incl_names-itype = 'C'.APPEND l_incl_names.CLEAR l_mand.SELECT SINGLE mand FROM tfdir INTO l_mand WHERE funcname = p_function-fname.IF sy-subrc = 0 AND l_mand(1) = 'C'.p_function-active = 'X'.* l_status-active = c_true.ELSE.p_function-active = ' '.* l_status-inactive = c_true.ENDIF.CALL FUNCTION 'MOD_FUNCTION_INCLUDE'EXPORTINGfuncname = p_function-fnameTABLESincl_names = l_incl_namesEXCEPTIONSOTHERS = 4.IF sy-subrc = 0.LOOP AT l_incl_names.SELECT SINGLE name FROM trdir INTO l_incl_names-inameWHERE name = l_incl_names-iname.IF sy-subrc = 0.p_function-impl = 'X'.ELSE.p_function-impl = ' '.ENDIF.ENDLOOP.ENDIF.endform.

Page 24: Abap Prgs -Sample

BAP retrieve statistical data from the STAT file REPORT ZSTATFILE LINE-SIZE 164.************************************************************************* This is an example of how to dig out some interesting performance* and statistical data from the STAT file.* The program creates a rank list of users based upon their database* update and read activity. The results are the accumulated database* time and row number per user for the different categories:* insert/delete/modify and sequential/direct read. The results can be* sorted by any of these categories.* There are a lot more interesting data in the STAT file that can* be used to write similar programs.** Written by : SAP Basis, ABAP Programming and Other IMG Stuff*              http://www.sap-img.com*************************************************************************DATA: STATISTIC_VERSION_USED LIKE  SAPWLPSTRC-VERSION.DATA: SORT_FIELD(20).

* General input parameters: from/to, client, STAT file pathSELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE T7.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 1(30) F1.SELECTION-SCREEN POSITION 40.PARAMETERS: FDAT LIKE SY-DATUM,            FTIM LIKE SY-UZEIT.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 1(30) F2.SELECTION-SCREEN POSITION 40.PARAMETERS: TDAT LIKE SY-DATUM,            TTIM LIKE SY-UZEIT.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 1(30) F4.SELECTION-SCREEN POSITION 40.PARAMETERS: CLI LIKE SY-MANDT.SELECTION-SCREEN END OF LINE.*SELECTION-SCREEN BEGIN OF LINE.*SELECTION-SCREEN COMMENT 1(35) F3.*SELECTION-SCREEN POSITION 40.*PARAMETERS: FILE(128) LOWER CASE.*SELECTION-SCREEN END OF LINE.SELECTION-SCREEN END OF BLOCK B1.

* Sort order inputSELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE T5.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 1(30) F5.SELECTION-SCREEN POSITION 40.

Page 25: Abap Prgs -Sample

PARAMETERS: ASC  RADIOBUTTON GROUP ORD,            DESC RADIOBUTTON GROUP ORD.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN END OF BLOCK B2.

* Sort criteria inputSELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE T6.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 1(30) T1.SELECTION-SCREEN POSITION 62.PARAMETERS: A1 RADIOBUTTON GROUP SORT.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 1(55) T2.SELECTION-SCREEN POSITION 62.PARAMETERS: A2 RADIOBUTTON GROUP SORT.PARAMETERS: A3 RADIOBUTTON GROUP SORT.SELECTION-SCREEN POSITION 67.PARAMETERS: A4 RADIOBUTTON GROUP SORT.PARAMETERS: A5 RADIOBUTTON GROUP SORT.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 1(55) T3.SELECTION-SCREEN POSITION 62.PARAMETERS: A6 RADIOBUTTON GROUP SORT.PARAMETERS: A7 RADIOBUTTON GROUP SORT.SELECTION-SCREEN POSITION 67.PARAMETERS: A8 RADIOBUTTON GROUP SORT.PARAMETERS: A9 RADIOBUTTON GROUP SORT.SELECTION-SCREEN POSITION 72.PARAMETERS: AA RADIOBUTTON GROUP SORT.PARAMETERS: AB RADIOBUTTON GROUP SORT.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 1(50) T4.SELECTION-SCREEN POSITION 62.PARAMETERS: AC RADIOBUTTON GROUP SORT.PARAMETERS: AD RADIOBUTTON GROUP SORT.SELECTION-SCREEN POSITION 67.PARAMETERS: AE RADIOBUTTON GROUP SORT.PARAMETERS: AF RADIOBUTTON GROUP SORT.SELECTION-SCREEN POSITION 72.PARAMETERS: AG RADIOBUTTON GROUP SORT.PARAMETERS: AH RADIOBUTTON GROUP SORT.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN END OF BLOCK B3.

*Internal tablesDATA: BEGIN OF V1_NORMAL_RECORDS OCCURS 100.        INCLUDE STRUCTURE  SAPWLSTATR.DATA: END OF V1_NORMAL_RECORDS.DATA: BEGIN OF V2_NORMAL_RECORDS OCCURS 100.        INCLUDE STRUCTURE  SAPWLPFNRM.DATA: END OF V2_NORMAL_RECORDS.

DATA: BEGIN OF SUM OCCURS 100,        ACCOUNT(32),

Page 26: Abap Prgs -Sample

        READSEQREC TYPE I,        READSEQTI TYPE I,        READDIRREC TYPE I,        READDIRTI TYPE I,        UPDREC TYPE I,        UPDTI TYPE I,        DELREC TYPE I,        DELTI TYPE I,        INSREC TYPE I,        INSTI TYPE I,        SUM_RD_ROW TYPE I,        SUM_RD_TIM TYPE I,        SUM_MOD_ROW TYPE I,        SUM_MOD_TIM TYPE I,        SUM_ALL_ROW TYPE I,        SUM_ALL_TIM TYPE I,END OF SUM.

*Initialize the selection screenINITIALIZATION.  T1 = 'User Name and Report Name'.  T2 = 'READ: Sequential(row/time) Direct(row/time)'.  T3 = 'Update(row/time) Delete(row/time) Insert(row/time)'.  T4 = 'SUM: Read(row/time) Modify(row/time) All(row/time)'.  T5 = 'Sort'.  T6 = 'By'.  T7 = 'Period, Client and STAT file'.

  F1 = 'From: (date/time)'.  F2 = 'To: (date/time)'.* F3 = 'STAT file path(only for old stat)'.  F4 = 'Client'.  F5 = 'Ascending/Descending'.

  FDAT = SY-DATUM. FTIM = SY-UZEIT.  FDAT = FDAT - 1. TTIM = SY-UZEIT.  TDAT = SY-DATUM.  CLI = SY-MANDT.

* Write a page headerTOP-OF-PAGE.  WRITE:        / 'User and Report ' COLOR 2,             34(15) 'Sequential read' COLOR 2,             50(15) 'Direct read' COLOR 2,             66(15) 'Update' COLOR 2,             82(15) 'Delete' COLOR 2,             98(15) 'Insert' COLOR 2,            114(15) 'Sum Read' COLOR 5,            130(15) 'Sum Modify' COLOR 5,            146(15) 'Sum All' COLOR 6.

  WRITE:        / 'name' COLOR 2,            34(6) 'rows' COLOR 2,            41(8) 'time(ms)' COLOR 2,            50(6) 'rows' COLOR 2,            57(8) 'time(ms)' COLOR 2,            66(6) 'rows' COLOR 2,

Page 27: Abap Prgs -Sample

            73(8) 'time(ms)' COLOR 2,            82(6) 'rows' COLOR 2,            89(8) 'time(ms)' COLOR 2,            98(6) 'rows' COLOR 2,           105(8) 'time(ms)' COLOR 2,           114(6) 'rows' COLOR 5,           121(8) 'time(ms)' COLOR 5,           130(6) 'rows' COLOR 5,           137(8) 'time(ms)' COLOR 5,           146(6) 'rows' COLOR 6,           153(8) 'time(ms)' COLOR 6.

* MainSTART-OF-SELECTION.* Figure out the sort field name  IF A1 = 'X'.    SORT_FIELD = 'ACCOUNT'.  ELSEIF A2 = 'X'.    SORT_FIELD = 'READSEQREC'.  ELSEIF A3 = 'X'.    SORT_FIELD = 'READSEQTI'.  ELSEIF A4 = 'X'.    SORT_FIELD = 'READDIRREC'.  ELSEIF A5 = 'X'.    SORT_FIELD = 'READDIRTI'.  ELSEIF A6 = 'X'.    SORT_FIELD = 'UPDREC'.  ELSEIF A7 = 'X'.    SORT_FIELD = 'UPDTI'.  ELSEIF A8 = 'X'.    SORT_FIELD = 'DELREC'.  ELSEIF A9 = 'X'.    SORT_FIELD = 'DELTI'.  ELSEIF AA = 'X'.    SORT_FIELD = 'INSREC'.  ELSEIF AB = 'X'.    SORT_FIELD = 'INSTI'.  ELSEIF AC = 'X'.    SORT_FIELD = 'SUM_RD_ROW'.  ELSEIF AD = 'X'.    SORT_FIELD = 'SUM_RD_TIM'.  ELSEIF AE = 'X'.    SORT_FIELD = 'SUM_MOD_ROW'.  ELSEIF AF = 'X'.    SORT_FIELD = 'SUM_MOD_TIM'.  ELSEIF AG = 'X'.    SORT_FIELD = 'SUM_ALL_ROW'.  ELSEIF AH = 'X'.    SORT_FIELD = 'SUM_ALL_TIM'.  ENDIF.

  CALL FUNCTION 'SAPWL_STATREC_READ_FILE'       EXPORTING            READ_CLIENT            = CLI            READ_END_DATE          = TDAT            READ_END_TIME          = TTIM            READ_START_DATE        = FDAT

Page 28: Abap Prgs -Sample

            READ_START_TIME        = FTIM*           STATISTIC_FILE         = FILE       IMPORTING            STATISTIC_VERSION_USED = STATISTIC_VERSION_USED       TABLES            V1_NORMAL_RECORDS      = V1_NORMAL_RECORDS            V2_NORMAL_RECORDS      = V2_NORMAL_RECORDS.

  LOOP AT V2_NORMAL_RECORDS.    V2_NORMAL_RECORDS-READSEQTI = V2_NORMAL_RECORDS-READSEQTI / 1000.    V2_NORMAL_RECORDS-READDIRTI = V2_NORMAL_RECORDS-READDIRTI / 1000.    V2_NORMAL_RECORDS-UPDTI = V2_NORMAL_RECORDS-UPDTI  / 1000.    V2_NORMAL_RECORDS-DELTI = V2_NORMAL_RECORDS-DELTI / 1000.    V2_NORMAL_RECORDS-INSTI = V2_NORMAL_RECORDS-INSTI / 1000.    MODIFY V2_NORMAL_RECORDS.  ENDLOOP.

  LOOP AT V1_NORMAL_RECORDS.    V1_NORMAL_RECORDS-READSEQTI = V1_NORMAL_RECORDS-READSEQTI / 1000.    V1_NORMAL_RECORDS-READDIRTI = V1_NORMAL_RECORDS-READDIRTI / 1000.    V1_NORMAL_RECORDS-UPDTI = V1_NORMAL_RECORDS-UPDTI  / 1000.    V1_NORMAL_RECORDS-DELTI = V1_NORMAL_RECORDS-DELTI / 1000.    V1_NORMAL_RECORDS-INSTI = V1_NORMAL_RECORDS-INSTI / 1000.    MODIFY V1_NORMAL_RECORDS.  ENDLOOP.

  LOOP AT V2_NORMAL_RECORDS.    MOVE-CORRESPONDING V2_NORMAL_RECORDS TO SUM.    CONCATENATE V2_NORMAL_RECORDS-ACCOUNT V2_NORMAL_RECORDS-CUA_PROGINTO SUM-ACCOUNT SEPARATED BY SPACE.    COLLECT SUM.  ENDLOOP.

  LOOP AT V1_NORMAL_RECORDS.    MOVE-CORRESPONDING V1_NORMAL_RECORDS TO SUM.    CONCATENATE V1_NORMAL_RECORDS-ACCOUNT V1_NORMAL_RECORDS-CUA_PROGINTO SUM-ACCOUNT SEPARATED BY SPACE.    COLLECT SUM.  ENDLOOP.

  LOOP AT SUM.    SUM-SUM_RD_ROW  = SUM-READSEQREC + SUM-READDIRREC.    SUM-SUM_RD_TIM  = SUM-READSEQTI + SUM-READDIRTI.    SUM-SUM_MOD_ROW = SUM-UPDREC + SUM-DELREC + SUM-INSREC.    SUM-SUM_MOD_TIM = SUM-UPDTI + SUM-DELTI + SUM-INSTI.    SUM-SUM_ALL_ROW = SUM-SUM_RD_ROW + SUM-SUM_MOD_ROW.    SUM-SUM_ALL_TIM = SUM-SUM_RD_TIM + SUM-SUM_MOD_TIM.    MODIFY SUM.  ENDLOOP.

  IF ASC = 'X'.    SORT SUM BY (SORT_FIELD) ASCENDING.  ELSE.    SORT SUM BY (SORT_FIELD) DESCENDING.  ENDIF.

Page 29: Abap Prgs -Sample

  LOOP AT SUM.    WRITE: /  SUM-ACCOUNT,              34(7) SUM-READSEQREC,              42(7) SUM-READSEQTI,              54(7) SUM-READDIRREC,              58(7) SUM-READDIRTI,              66(7) SUM-UPDREC,              74(7) SUM-UPDTI,              82(7) SUM-DELREC,              90(7) SUM-DELTI,              98(7) SUM-INSREC,             106(7) SUM-INSTI,             114(7) SUM-SUM_RD_ROW,             122(7) SUM-SUM_RD_TIM,             130(7) SUM-SUM_MOD_ROW,             138(7) SUM-SUM_MOD_TIM,             146(7) SUM-SUM_ALL_ROW,             154(7) SUM-SUM_ALL_TIM.

  ENDLOOP.*-------- END OF PROGRAM --------------------------------------------*

How to call one report to another?

Here ZREP2 CALLS report ZREP1 when you click on output of report ZREP2.

REPORT ZREP1.

parameter : paramet(18) type c.

write : paramet. 

REPORT ZREP2 NO STANDARD PAGE HEADING. tables: qals.

RANGES seltab for qals-prueflos.

WRITE: 'Select a Selection!', / '--------------------'. SKIP.

FORMAT HOTSPOT COLOR 5 INVERSE ON. WRITE: 'Selection 1', / 'Selection 2'.

Page 30: Abap Prgs -Sample

AT LINE-SELECTION. CASE SY-LILLI. WHEN 4. SUBMIT zrep1 VIA SELECTION-SCREEN WITH PARAMET EQ 'Selection 1' WITH SELECTO IN SELTAB WITH SELECTO NE 3 AND RETURN. WHEN 5.  

SUBMIT zrep1 VIA SELECTION-SCREEN WITH PARAMET EQ 'Selection 1'

AND RETURN. ENDCASE. 

Page 31: Abap Prgs -Sample

Events Related to Reporting

Content Author: Shibu Mathew

Well I wanted to get details about the events in reporting/interactive... and the statements which trigeer those events...

Event related to reports are not triggered based on any statements in ABAP.  

The event are triggered depended on the way the output is generated . 

for eg: Initialization : triggered when the report is loaded in memory.

At selection-screen output : triggered when the selection screen is loaded in memory before being displayed.

At selection-screen / <field> : before leaving the selection screen.

start-of-selection : the first event for displaying the report.

end-of-selection : after the start-of-selection is completed.

classiscal report events.

top-of-page : every time a new page is started in the list.

end-of-page : every time the list data reaches the footer region of the page.

interactive report events.

top of page during line selection : top of page event for secondary list.

at line-selection : evey time user dbl-clicks(F2) on the list data.

at pF<key> : function key from F5 to F12 to perform interactive action on the list.

Page 32: Abap Prgs -Sample

How to edit entries of table in se11 ?

To update the data of any table, go to transaction SE16N, type “&SAP_EDIT”. It will activate SAP editing function.

---

Go to table and press Ctrl+ shift + F10 where you will go to table entries. Click on F8 (execute).

And then select the entries that you want to edit by selecting the checkbox and goto menu Table entry - > select change. There you edit and save the entries.

---

You cannot edit entries in SE11 unless it contains a Table maintenance generator.

So just build a Table maintenance generator.

Do not delete any entries using &SAP_EDIT...it is not recommended.

---

You can edit through debugging.  

How to delete a record in SE16 ?

To delete the records from particular table its easy.

Goto : se11

- Give the table name

- Execute the table with the selection fields

- Then data (list) screen will be displayed. 

- Now select the record which has to be deleted 

- Select that and switch 'on' the Debugging mode press enter

- Then press F6 goes to subroutine where there is field called display

- Instead change it to edit and then save the changes then it will take you to the screen where you can edit that records & also delete that particular records.

Page 33: Abap Prgs -Sample

Note:

After displaying the contents of the list. 

Switch ON the Debug Mode the select the particular record then click display then it will take u to Debug Screen when there is a program for sy-ucomm then click F7 Button and then Change Code = EDIT then save the code the afterwards it will take u to edit mode of that particular record.  

How can I insert new data in the table? 

Give the transaction code as se11

In that give the table name and press display

Then in that field name above there is delivery and maintenance click the same and change it as display maintenance allowed.

How to write abap codes to delete from Z table?

Try with FM SE16N_INTERFACE 

I_TAB = Name of the table(MARA) I_EDIT = 'X' I_SAPEDIT = 'X'

Tables IT_SELFIELDS pass the value of the fields in table and then append that to IT_SELFIELDS Field MATNR S I OP EQ LOW value 

or  you can use  delete db from table itab. Here itab should be a internal table and contain the data to be deleted.

or

delete from db where condition.

Page 34: Abap Prgs -Sample

update db from table itab. 

Check this program its for update and delete the records from a table

*&---------------------------------------------------------------------* *& Report  ZTEST6                                                      * *&                                                                     * *&---------------------------------------------------------------------* *&                                                                     * *&                                                                     * *&---------------------------------------------------------------------*

REPORT  ZTEST6      NO STANDARD PAGE HEADING MESSAGE-ID SAPLWOSA.

*======================================================================= * Variables *======================================================================= DATA DESCR_STRUCT_REF TYPE REF TO CL_ABAP_STRUCTDESCR. DATA WA_FCAT TYPE LVC_S_FCAT. DATA IT_FIELDCATALOG TYPE LVC_T_FCAT. DATA DATAREF TYPE REF TO DATA.

DATA: ONE  LIKE PCFILE-DRIVE,       TWO  LIKE PCFILE-PATH,       LONG TYPE I,       FLAG TYPE C,       FILEPATH(128) TYPE C,       FILE_TAB TYPE STRING,       TABNAME LIKE DD02L-TABNAME.

*======================================================================= * Field-Symbols. *======================================================================= FIELD-SYMBOLS:               <ROW> TYPE ANY TABLE,               <TABLE> TYPE STANDARD TABLE,               <COMPONENT> TYPE ABAP_COMPDESCR,               <FS>  TYPE ANY.

*======================================================================= * Selection screen *======================================================================= SELECTION-SCREEN BEGIN OF BLOCK DATA WITH FRAME TITLE TEXT-T01. PARAMETERS:     TABNAM(128) TYPE C,     FUNCTION(1) TYPE C OBLIGATORY,

Page 35: Abap Prgs -Sample

    LISTNAME LIKE RLGRAP-FILENAME. SELECTION-SCREEN END OF BLOCK DATA.

*======================================================================= * At Selection screen *======================================================================= AT SELECTION-SCREEN ON VALUE-REQUEST FOR LISTNAME.   PERFORM GET_FILENAME CHANGING LISTNAME.

*======================================================================= * Start-of-selection *======================================================================= START-OF-SELECTION.   CLEAR FLAG.   PERFORM LOAD_DATA USING TABNAM.   PERFORM VERIFY_TABLE USING TABNAM CHANGING FLAG.   IF FLAG NE 'X'.     IF FUNCTION EQ 'D'.       PERFORM CREATE_TABLE USING TABNAM.       PERFORM DOWNLOAD_TABLE USING TABNAM.     ELSE.      IF FUNCTION EQ 'U'.       PERFORM CREATE_TABLE USING TABNAM.       PERFORM UPLOAD_TABLE USING TABNAM.     ENDIF. *  ELSE.     MESSAGE S000 WITH 'The proposed table doesn''t exist.'.   ENDIF.     ENDIF.

*---------------------------------------------------------------------* *       FORM GET_FILENAME                                             * *---------------------------------------------------------------------* *       Name of the directory. *---------------------------------------------------------------------* FORM GET_FILENAME CHANGING LISTNAME.

  CALL FUNCTION 'WS_FILENAME_GET'        EXPORTING             DEF_FILENAME     = LISTNAME             DEF_PATH         = 'C:\downloads\list'             MASK             = ',*.*,*.*. '             MODE             = 'S'             TITLE            = 'Save as'        IMPORTING             FILENAME         = LISTNAME

Page 36: Abap Prgs -Sample

       EXCEPTIONS             INV_WINSYS       = 1             NO_BATCH         = 2             SELECTION_CANCEL = 3             SELECTION_ERROR  = 4             OTHERS           = 5. ENDFORM.

*---------------------------------------------------------------------* *       FORM LOAD_DATA                                                * *---------------------------------------------------------------------* *       Specifies the path and table name *---------------------------------------------------------------------* FORM LOAD_DATA USING MY_TAB.

  DATA: W_FILE LIKE PCFILE-PATH.   W_FILE = LISTNAME.   CALL FUNCTION 'PC_SPLIT_COMPLETE_FILENAME'        EXPORTING             COMPLETE_FILENAME = W_FILE        IMPORTING             DRIVE             = ONE             PATH              = TWO        EXCEPTIONS             INVALID_DRIVE     = 1             INVALID_EXTENSION = 2             INVALID_NAME      = 3             INVALID_PATH      = 4             OTHERS            = 5.   CONCATENATE ONE ':' TWO INTO FILEPATH.   CONCATENATE FILEPATH MY_TAB '.txt' INTO FILE_TAB.

ENDFORM.

*---------------------------------------------------------------------* *       FORM DOWNLOAD_TABLE                                           * *---------------------------------------------------------------------* *       Downloads the table data. *---------------------------------------------------------------------* FORM DOWNLOAD_TABLE USING MY_TAB.

  SELECT *   INTO TABLE <ROW>   FROM (MY_TAB).

  ASSIGN <ROW> TO <TABLE>.

Page 37: Abap Prgs -Sample

  CALL FUNCTION 'GUI_DOWNLOAD'        EXPORTING             FILENAME                = FILE_TAB             FILETYPE                = 'ASC'        TABLES             DATA_TAB                = <TABLE>        EXCEPTIONS             FILE_WRITE_ERROR        = 1             NO_BATCH                = 2             GUI_REFUSE_FILETRANSFER = 3             INVALID_TYPE            = 4             NO_AUTHORITY            = 5             UNKNOWN_ERROR           = 6.

  IF SY-SUBRC EQ 0.     CALL FUNCTION 'POPUP_TO_INFORM'          EXPORTING               TITEL = 'Successful Download'               TXT1  = 'All the data from the table'               TXT2  = 'was correctly downloaded.'.   ELSE.     CALL FUNCTION 'POPUP_TO_INFORM'          EXPORTING               TITEL = 'Download Error!'               TXT1  = 'The data of the table'               TXT2  = 'couldn''t be downloaded.'.   ENDIF.

ENDFORM.

*---------------------------------------------------------------------* *       FORM UPLOAD_TABLE                                           * *---------------------------------------------------------------------* *       Table Upload. *---------------------------------------------------------------------* FORM UPLOAD_TABLE USING MY_TAB.

  ASSIGN <ROW> TO <TABLE>.

  CALL FUNCTION 'GUI_UPLOAD'        EXPORTING             FILENAME                = FILE_TAB             FILETYPE                = 'ASC'        IMPORTING             FILELENGTH              = LONG        TABLES

Page 38: Abap Prgs -Sample

            DATA_TAB                = <TABLE>        EXCEPTIONS             FILE_OPEN_ERROR         = 1             FILE_READ_ERROR         = 2             NO_BATCH                = 3             GUI_REFUSE_FILETRANSFER = 4             INVALID_TYPE            = 5             NO_AUTHORITY            = 6             UNKNOWN_ERROR           = 7.

  MODIFY (MY_TAB) FROM TABLE <TABLE>.

  IF SY-SUBRC EQ 0.     CALL FUNCTION 'POPUP_TO_INFORM'          EXPORTING               TITEL = 'Successful Upload'               TXT1  = 'All the data from the table'               TXT2  = 'was correctly uploaded.'.   ELSE.     CALL FUNCTION 'POPUP_TO_INFORM'          EXPORTING               TITEL = 'Upload Error!'               TXT1  = 'The data of the table'               TXT2  = 'couldn''t be uploaded.'.   ENDIF.

ENDFORM.

*---------------------------------------------------------------------* *       FORM CREATE_TABLE                                             * *---------------------------------------------------------------------* *       Creates a dynamic internal table. *---------------------------------------------------------------------* FORM CREATE_TABLE USING MY_TAB.   CREATE DATA DATAREF TYPE (MY_TAB).

  ASSIGN DATAREF->* TO <FS>.

  DESCR_STRUCT_REF ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( <FS> ).

  LOOP AT DESCR_STRUCT_REF->COMPONENTS ASSIGNING <COMPONENT>.     WA_FCAT-FIELDNAME     = <COMPONENT>-NAME.     WA_FCAT-REF_TABLE     = MY_TAB.     WA_FCAT-REF_FIELD     = <COMPONENT>-NAME.     APPEND WA_FCAT TO IT_FIELDCATALOG.   ENDLOOP.

Page 39: Abap Prgs -Sample

  CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE      EXPORTING        IT_FIELDCATALOG           = IT_FIELDCATALOG      IMPORTING        EP_TABLE                  = DATAREF      EXCEPTIONS        GENERATE_SUBPOOL_DIR_FULL = 1        OTHERS                    = 2.

  ASSIGN DATAREF->* TO <ROW>. ENDFORM.

*&---------------------------------------------------------------------* *&      Form  VERIFY_TABLE *&---------------------------------------------------------------------* *       The table must exist! *----------------------------------------------------------------------* FORM VERIFY_TABLE USING TABNAM CHANGING FLAG.   SELECT SINGLE TABNAME   INTO (TABNAME)   FROM DD02L   WHERE TABNAME EQ TABNAM.

  IF SY-SUBRC NE 0.     FLAG = 'X'.   ENDIF. ENDFORM.

Page 40: Abap Prgs -Sample

Program to Hide ABAP's Source Code and Protects it  report zsam_hide no standard page heading.

************************************************************************* This program hides any ABAP's source code and protects it with a* password in this source code.** After hiding, you can still run the abap (the load version is intact)* but it cannot be displayed, edited, traced, transported or generated.** If the ABAP is not hidden, the program hides it, if it is hidden, it* unhide it.* Remember to hide this program first!************************************************************************

selection-screen begin of block block.parameters: program(30) obligatory.selection-screen begin of line.selection-screen comment 1(8) pwd.selection-screen position 35.parameters: password(8) modif id aaa.selection-screen end of line.selection-screen end of block block.

*data: message(60) type c.*

at selection-screen output.

loop at screen.if screen-group1 = 'AAA'.screen-invisible = '1'.modify screen.endif.endloop.

*initialization.pwd = 'Password'.*

start-of-selection.

tables: trdir.

* User name and password checkif password <> 'ABCDEFG'.write: / 'Wrong password'.exit.endif.

* SAP owned?if not program cp 'Z*' and not program cp 'Y*'.write: / 'Do not hide original SAP programs!'.

Page 41: Abap Prgs -Sample

exit.endif.

* Exists?select single * from trdir where name = program.if sy-subrc <> 0.write: / 'Program does not exists!'.exit.endif.

* Does it have a current generated version?data: f1 type d, f3 type d.data: f2 type t, f4 type t.EXEC SQL.SELECT UDAT, UTIME, SDAT, STIME INTO :F1, :F2, :F3, :F4 FROM D010LINFWHERE PROG = :PROGRAMENDEXEC.

if f1 < f3 or ( f1 = f3 and f2 < f4 ).write: / 'The program has no recent generated version!'.exit.endif.

* Compose a new program namedata: new_name(30), i type i, j type i.new_name = program.do 30 times.i = sy-index - 1.new_name+i(1) = '_'.* Search for acceptable program name variationsj = 0.

select * from trdir where name like new_name.j = j + 1.endselect.

if j = 1.exit.endif.

new_name = program.enddo.

* Cannot generate appropriate program nameif j > 1.write: / 'Cannot generate appropriate program name'.exit.endif.

* Check if it is already hiddendata: f5(30).EXEC SQL.SELECT PROG INTO :F5 FROM D010S WHERE PROG = :NEW_NAMEENDEXEC.

if f5 is initial.

Page 42: Abap Prgs -Sample

* There is no such hidden program, hide itEXEC SQL.UPDATE D010S SET PROG = :NEW_NAME WHERE PROG = :PROGRAMENDEXEC.concatenate 'Program' :program 'was hidden.'into message separated by space.else.

* There is already a hidden program there, unhide itEXEC SQL.UPDATE D010S SET PROG = :PROGRAM WHERE PROG = :NEW_NAMEENDEXEC.

concatenate 'Program' :program 'was restored.'into message separated by space.

endif.

write message.

*** end of program

Page 43: Abap Prgs -Sample

Creating new program via ABAP

* * Creating new program via ABAP * WARNING : It Overwrite Original Report with same name * Written by : SAP Basis, ABAP Programming and Other IMG Stuff *                  http://www.sap-img.com * REPORT ZCREATE_NEW_PROGRAM_VIA_ABAP.

* Type of an editor line: rssource-line DATA: code TYPE TABLE OF rssource-line.

* Report Name APPEND  'REPORT ZTESTING.'          TO code.

* Report Code APPEND  'WRITE / ''Program created via ABAP!''.'          TO code.

* Report Name in SE38 INSERT REPORT 'ZTESTING' FROM code.

WRITE: / 'Report created (old report with same name overwritten).'. WRITE: / 'Please check via transaction SE38'.

*-- End of Program

Page 44: Abap Prgs -Sample

New Site Address: http://abap.mirrorz.com

Home

Definitions

OK Code Values Other Useful Tips

SAP and ABAP Links SAP Functions SAP Reports SAP Tables Source Code Transaction Codes

Site Map (Index)

Upload and Download ABAP Source Code

This is a program that I have had kicking around for a couple of years in various incarnations. I really liked the file format that Wolfgang Morgenthaler had, that I updated my program to use the same format. The one thing that this program does, that Wolfgang's does not is to up/download the program documentation as well as source code and program texts. Wolfgang's Home Page -

Source Code Listing

*----------------------------------------------------------------------** Report: ZKBPROGS **----------------------------------------------------------------------** Function : Up/Download ABAP reports complete with texts **----------------------------------------------------------------------** Change Log : ** July 5, 1999 ** - Combined existing programs that did the upload and download into** - one program. ** - Changed format that the reports are saved in to be compatible ** with Wolfgang Morgenthaler's upload/download program(YSTRASN00 ** at www.antarcon.de). Major differences between this program and*

Page 45: Abap Prgs -Sample

ABAP Keyword Help

* Wolfgang's are:* - this program does not update TRDIR with the ** TRDIR entries that are in the program uploaded. Instead, ** current users stats are used. ** - this program allows selection of reports from a list or ** a single report can be tuped in and uploaded ** - this program also updates TADIR so that a development class** is assigned to the program ** - this program checks to see if the program already has a ** TRDIR entry, and if it does, warns the user ** - this program will save/restore the program documenation too** ** ** **----------------------------------------------------------------------*REPORT ZKBPROGS NO STANDARD PAGE HEADING LINE-SIZE 255.*----------------------------------------------------------------------** Declare Database Objects **----------------------------------------------------------------------*tables: DOKIL, TRDIR.*----------------------------------------------------------------------** Constants*CONSTANTS: MC_TRDIR_IDENTIFIER(72) TYPE C VALUE '%&%& RDIR', MC_REPORT_IDENTIFIER(72) TYPE C VALUE '%&%& REPO', MC_TEXT_IDENTIFIER(72) TYPE C VALUE '%&%& TEXP', MC_THEAD_IDENTIFIER(72) TYPE C VALUE '%&%& HEAD', MC_DOC_IDENTIFIER(72) TYPE C VALUE '%&%& DOKL', MC_TRDIR_SHORT(4) TYPE C VALUE 'RDIR', MC_REPORT_SHORT(4) TYPE C VALUE 'REPO', MC_TEXT_SHORT(4) TYPE C VALUE 'TEXP', MC_THEAD_SHORT(4) TYPE C VALUE 'HEAD', MC_DOC_SHORT(4) TYPE C VALUE 'DOKP'.*----------------------------------------------------------------------**----------------------------------------------------------------------** Declare Module level data structures **----------------------------------------------------------------------*

Page 46: Abap Prgs -Sample

DATA: BEGIN OF MTAB_PROGRAM_SOURCE OCCURS 0, LINE(72) TYPE C, END OF MTAB_PROGRAM_SOURCE.DATA: MTAB_PROGRAM_TRDIR LIKE TRDIR OCCURS 0 WITH HEADER LINE.DATA: MTAB_PROGRAM_TEXTS LIKE TEXTPOOL OCCURS 0 WITH HEADER LINE.DATA: MSTR_THEAD LIKE THEAD.DATA: BEGIN OF MTAB_PROGRAM_FILE OCCURS 0, LINE(275) TYPE C, END OF MTAB_PROGRAM_FILE.DATA: BEGIN OF MTAB_DIRECTORY OCCURS 0, NAME LIKE TRDIR-NAME, DESC(72) TYPE C, SAVENAME LIKE RLGRAP-FILENAME, END OF MTAB_DIRECTORY.DATA: BEGIN OF MTAB_PROGRAM_DOCUMENTATION OCCURS 0, LINE(255) TYPE C, END OF MTAB_PROGRAM_DOCUMENTATION.*----------------------------------------------------------------------** Selection Screen **----------------------------------------------------------------------**-- Options for upload/download of programsSELECTION-SCREEN BEGIN OF BLOCK FRM_OPTIONS WITH FRAME TITLE TEXT-UDL.PARAMETERS: RB_DOWN RADIOBUTTON GROUP UDL DEFAULT 'X'. " Download reportsSELECTION-SCREEN BEGIN OF BLOCK FRM_TRDIR WITH FRAME TITLE TEXT-DIR.SELECT-OPTIONS: S_NAME FOR TRDIR-NAME, " Program Name S_SUBC FOR TRDIR-SUBC " Program Type DEFAULT 'F' OPTION EQ SIGN E," Exclude Functions by default S_CNAM FOR TRDIR-CNAM " Created by DEFAULT SY-UNAME, S_UNAM FOR TRDIR-UNAM, " Last Changed by S_CDAT FOR TRDIR-CDAT, " Creation date S_UDAT FOR TRDIR-UDAT. " Last update dateSELECTION-SCREEN END OF BLOCK FRM_TRDIR.*-- Options for uploading programsPARAMETERS: RB_UP RADIOBUTTON GROUP UDL. " Upload reportsSELECTION-SCREEN BEGIN OF BLOCK FRM_UPLOAD WITH FRAME TITLE TEXT-UPL.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT 1(29) TEXT-SNG.PARAMETERS: RB_FILE RADIOBUTTON GROUP HOW DEFAULT 'X'.SELECTION-SCREEN COMMENT 33(42) TEXT-FNA.SELECTION-SCREEN END OF LINE.PARAMETERS: RB_LIST RADIOBUTTON GROUP HOW.SELECTION-SCREEN END OF BLOCK FRM_UPLOAD.SELECTION-SCREEN END OF BLOCK FRM_OPTIONS.*-- Options for up/downloading programsSELECTION-SCREEN BEGIN OF BLOCK FRM_FILEN WITH FRAME TITLE TEXT-FIL.PARAMETERS: RB_DOS RADIOBUTTON GROUP FIL DEFAULT 'X', " Save to local

Page 47: Abap Prgs -Sample

RB_UNIX RADIOBUTTON GROUP FIL, " Save to UNIX P_PATH LIKE RLGRAP-FILENAME " Path to save files to DEFAULT 'c:\temp\'.SELECTION-SCREEN END OF BLOCK FRM_FILEN.AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_NAME-LOW. CALL FUNCTION 'F4_PROGRAM' EXPORTING OBJECT = S_NAME-LOW SUPPRESS_SELECTION = 'X' IMPORTING RESULT = S_NAME-LOW EXCEPTIONS OTHERS = 1.AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_NAME-HIGH. CALL FUNCTION 'F4_PROGRAM' EXPORTING OBJECT = S_NAME-HIGH SUPPRESS_SELECTION = 'X' IMPORTING RESULT = S_NAME-HIGH EXCEPTIONS OTHERS = 1.AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_UNAM-LOW. PERFORM GET_NAME USING 'S_UNAM-LOW' CHANGING S_UNAM-LOW.AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_UNAM-HIGH. PERFORM GET_NAME USING 'S_UNAM-HIGH' CHANGING S_UNAM-HIGH.AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_CNAM-LOW. PERFORM GET_NAME USING 'S_CNAM-LOW' CHANGING S_CNAM-LOW.AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_CNAM-HIGH. PERFORM GET_NAME USING 'S_CNAM-HIGH' CHANGING S_CNAM-HIGH.TOP-OF-PAGE. IF RB_LIST = 'X'. FORMAT COLOR COL_HEADING. NEW-LINE. WRITE: AT 3 TEXT-H01, AT 15 TEXT-H03. FORMAT COLOR OFF. ENDIF.AT LINE-SELECTION. CHECK RB_LIST = 'X'. " only do in list mode READ LINE SY-CUROW FIELD VALUE MTAB_DIRECTORY-SAVENAME.*-- Read file into an internal table PERFORM READ_REPORT_FROM_DISK TABLES MTAB_PROGRAM_FILE USING MTAB_DIRECTORY-SAVENAME.*-- Split table into TADIR entry, report lines, and report text PERFORM SPLIT_INCOMING_FILE TABLES MTAB_PROGRAM_FILE MTAB_PROGRAM_SOURCE MTAB_PROGRAM_TEXTS MTAB_PROGRAM_DOCUMENTATION CHANGING TRDIR MSTR_THEAD.*-- Save all of the data

Page 48: Abap Prgs -Sample

PERFORM INSERT_NEW_REPORT TABLES MTAB_PROGRAM_SOURCE MTAB_PROGRAM_TEXTS MTAB_PROGRAM_DOCUMENTATION USING TRDIR MSTR_THEAD.*----------------------------------------------------------------------** Start of processing **----------------------------------------------------------------------*START-OF-SELECTION. FORMAT COLOR COL_NORMAL. IF RB_DOWN = 'X'. PERFORM DOWNLOAD_REPORTS. ELSEIF RB_UP = 'X'. PERFORM UPLOAD_REPORTS. ENDIF.END-OF-SELECTION. IF RB_DOWN = 'X'. CONCATENATE P_PATH 'directory.txt' INTO P_PATH. PERFORM SAVE_TABLE_TO_FILE TABLES MTAB_DIRECTORY USING P_PATH. ENDIF.*---------------------------------------------------------------------** FORM UPLOAD_REPORTS **---------------------------------------------------------------------*FORM UPLOAD_REPORTS.*-- Can upload a reports entered in selection criteria or*-- select from a list. List can be from index.txt in same directory*-- (created by the download) or by reading the first line of each file*-- in the directory. IF RB_FILE = 'X'. " Upload single program from a file*-- Read file into an internal table PERFORM READ_REPORT_FROM_DISK TABLES MTAB_PROGRAM_FILE USING P_PATH.*-- Split table into TADIR entry, report lines, and report text PERFORM SPLIT_INCOMING_FILE TABLES MTAB_PROGRAM_FILE MTAB_PROGRAM_SOURCE MTAB_PROGRAM_TEXTS MTAB_PROGRAM_DOCUMENTATION CHANGING TRDIR MSTR_THEAD.*-- Save all of the data PERFORM INSERT_NEW_REPORT TABLES MTAB_PROGRAM_SOURCE MTAB_PROGRAM_TEXTS MTAB_PROGRAM_DOCUMENTATION USING TRDIR MSTR_THEAD. ELSEIF RB_LIST = 'X'. " Show list for user to choose from*-- get list of report names/descriptions from directory text CONCATENATE P_PATH

Page 49: Abap Prgs -Sample

'directory.txt' INTO P_PATH. PERFORM READ_REPORT_FROM_DISK TABLES MTAB_DIRECTORY USING P_PATH. SORT MTAB_DIRECTORY.*-- Write out list of report names/descriptions LOOP AT MTAB_DIRECTORY. WRITE: / MTAB_DIRECTORY-NAME UNDER TEXT-H01, MTAB_DIRECTORY-DESC UNDER TEXT-H03, MTAB_DIRECTORY-SAVENAME. ENDLOOP.*-- Process user selections for reports to upload. ENDIF.ENDFORM. " upload_reports*---------------------------------------------------------------------** FORM DOWNLOAD_REPORTS **---------------------------------------------------------------------** From the user selections, get all programs that meet the ** criteria, and save them in ftab_program_directory. ** Also save the report to disk. **---------------------------------------------------------------------*FORM DOWNLOAD_REPORTS. DATA: LC_FULL_FILENAME LIKE RLGRAP-FILENAME.*-- The table is put into an internal table because the program will*-- abend if multiple transfers to a dataset occur within a SELECT/*-- ENDSELCT (tested on 3.1H) SELECT * FROM TRDIR INTO TABLE MTAB_PROGRAM_TRDIR WHERE NAME IN S_NAME AND SUBC IN S_SUBC AND CNAM IN S_CNAM AND UNAM IN S_UNAM AND CDAT IN S_CDAT AND UDAT IN S_UDAT. LOOP AT MTAB_PROGRAM_TRDIR.*-- Clear out text and source code tables CLEAR: MTAB_PROGRAM_FILE, MTAB_PROGRAM_SOURCE, MTAB_PROGRAM_TEXTS, MTAB_PROGRAM_DOCUMENTATION. REFRESH: MTAB_PROGRAM_FILE, MTAB_PROGRAM_SOURCE, MTAB_PROGRAM_TEXTS, MTAB_PROGRAM_DOCUMENTATION.*-- Get the report READ REPORT MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_SOURCE.*-- Get the text for the report

Page 50: Abap Prgs -Sample

READ TEXTPOOL MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_TEXTS.*-- Get the documentation for the report CLEAR DOKIL. SELECT * UP TO 1 ROWS FROM DOKIL WHERE ID = 'RE' AND OBJECT = MTAB_PROGRAM_TRDIR-NAME AND LANGU = SY-LANGU AND TYP = 'E' ORDER BY VERSION DESCENDING. ENDSELECT.*-- Documentation exists for this object IF SY-SUBRC = 0. CALL FUNCTION 'DOCU_READ' EXPORTING ID = DOKIL-ID LANGU = DOKIL-LANGU OBJECT = DOKIL-OBJECT TYP = DOKIL-TYP VERSION = DOKIL-VERSION IMPORTING HEAD = MSTR_THEAD TABLES LINE = MTAB_PROGRAM_DOCUMENTATION EXCEPTIONS OTHERS = 1. ENDIF.*-- Put the report code and texts into a single file*-- Put the identifier line in so that the start of the TRDIR line*-- is marked CONCATENATE MC_TRDIR_IDENTIFIER MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_FILE-LINE. APPEND MTAB_PROGRAM_FILE.*-- Add the TRDIR line MTAB_PROGRAM_FILE-LINE = MTAB_PROGRAM_TRDIR. APPEND MTAB_PROGRAM_FILE.*-- Put the identifier line in so that the start of the report code*-- is marked CONCATENATE MC_REPORT_IDENTIFIER MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_FILE-LINE. APPEND MTAB_PROGRAM_FILE.*-- Add the report code LOOP AT MTAB_PROGRAM_SOURCE. MTAB_PROGRAM_FILE = MTAB_PROGRAM_SOURCE. APPEND MTAB_PROGRAM_FILE. ENDLOOP.*-- Put the identifier line in so that the start of the report text*-- is marked CONCATENATE MC_TEXT_IDENTIFIER MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_FILE-LINE. APPEND MTAB_PROGRAM_FILE.*-- Add the report texts LOOP AT MTAB_PROGRAM_TEXTS. MTAB_PROGRAM_FILE = MTAB_PROGRAM_TEXTS.

Page 51: Abap Prgs -Sample

APPEND MTAB_PROGRAM_FILE. ENDLOOP.*-- Put the identifier line in so that the start of the THEAD record*-- is marked CONCATENATE MC_THEAD_IDENTIFIER MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_FILE-LINE. APPEND MTAB_PROGRAM_FILE. MTAB_PROGRAM_FILE = MSTR_THEAD. APPEND MTAB_PROGRAM_FILE.*-- Put the identifier line in so that the start of the report*-- documentation is marked CONCATENATE MC_DOC_IDENTIFIER MTAB_PROGRAM_TRDIR-NAME INTO MTAB_PROGRAM_FILE-LINE. APPEND MTAB_PROGRAM_FILE.*-- Add the report documentation LOOP AT MTAB_PROGRAM_DOCUMENTATION. MTAB_PROGRAM_FILE = MTAB_PROGRAM_DOCUMENTATION. APPEND MTAB_PROGRAM_FILE. ENDLOOP.*-- Make the fully pathed filename that report will be saved to CONCATENATE P_PATH MTAB_PROGRAM_TRDIR-NAME '.txt' INTO LC_FULL_FILENAME. PERFORM SAVE_TABLE_TO_FILE TABLES MTAB_PROGRAM_FILE USING LC_FULL_FILENAME.*-- Write out message with Program Name/Description READ TABLE MTAB_PROGRAM_TEXTS WITH KEY ID = 'R'. IF SY-SUBRC = 0. MTAB_DIRECTORY-NAME = MTAB_PROGRAM_TRDIR-NAME. MTAB_DIRECTORY-DESC = MTAB_PROGRAM_TEXTS-ENTRY. MTAB_DIRECTORY-SAVENAME = LC_FULL_FILENAME. APPEND MTAB_DIRECTORY. WRITE: / MTAB_PROGRAM_TRDIR-NAME, MTAB_PROGRAM_TEXTS-ENTRY(65) COLOR COL_HEADING. ELSE. MTAB_DIRECTORY-NAME = MTAB_PROGRAM_TRDIR-NAME. MTAB_DIRECTORY-DESC = 'No description available'. MTAB_DIRECTORY-SAVENAME = LC_FULL_FILENAME. APPEND MTAB_DIRECTORY. WRITE: / MTAB_PROGRAM_TRDIR-NAME. ENDIF. ENDLOOP.ENDFORM. " BUILD_PROGRAM_DIRECTORY*---------------------------------------------------------------------** FORM SAVE_TABLE_TO_FILE **---------------------------------------------------------------------** ........ **---------------------------------------------------------------------** --> FTAB_TABLE ** --> F_FILENAME *

Page 52: Abap Prgs -Sample

*---------------------------------------------------------------------*FORM SAVE_TABLE_TO_FILE TABLES FTAB_TABLE USING F_FILENAME. IF RB_DOS = 'X'. " Save file to presentation server CALL FUNCTION 'WS_DOWNLOAD' EXPORTING FILENAME = F_FILENAME FILETYPE = 'ASC' TABLES DATA_TAB = FTAB_TABLE EXCEPTIONS OTHERS = 4. IF SY-SUBRC NE 0. WRITE: / 'Error opening dataset' COLOR COL_NEGATIVE, F_FILENAME COLOR COL_NEGATIVE. ENDIF. ELSE. " Save file to application server OPEN DATASET F_FILENAME FOR OUTPUT IN TEXT MODE. IF SY-SUBRC = 0. LOOP AT FTAB_TABLE. TRANSFER FTAB_TABLE TO F_FILENAME. IF SY-SUBRC NE 0. WRITE: / 'Error writing record to file;' COLOR COL_NEGATIVE, F_FILENAME COLOR COL_NEGATIVE. ENDIF. ENDLOOP. ELSE. WRITE: / 'Error opening dataset' COLOR COL_NEGATIVE, F_FILENAME COLOR COL_NEGATIVE. ENDIF. ENDIF. " End RB_DOSENDFORM. " SAVE_PROGRAM*---------------------------------------------------------------------** FORM READ_REPORT_FROM_DISK **---------------------------------------------------------------------** Read report into internal table. Can read from local or ** remote computer **---------------------------------------------------------------------*FORM READ_REPORT_FROM_DISK TABLES FTAB_TABLE USING F_FILENAME. DATA: LC_MESSAGE(128) TYPE C. CLEAR FTAB_TABLE. REFRESH FTAB_TABLE. IF RB_DOS = 'X'. TRANSLATE F_FILENAME USING '/\'. " correct slash for Dos PC file CALL FUNCTION 'WS_UPLOAD' EXPORTING

Page 53: Abap Prgs -Sample

FILENAME = F_FILENAME FILETYPE = 'ASC' TABLES DATA_TAB = FTAB_TABLE EXCEPTIONS CONVERSION_ERROR = 1 FILE_OPEN_ERROR = 2 FILE_READ_ERROR = 3 INVALID_TABLE_WIDTH = 4 INVALID_TYPE = 5 NO_BATCH = 6 UNKNOWN_ERROR = 7 OTHERS = 8. IF SY-SUBRC >< 0. WRITE: / 'Error reading file from local PC' COLOR COL_NEGATIVE. ENDIF. ELSEIF RB_UNIX = 'X'. TRANSLATE F_FILENAME USING '\/'. " correct slash for unix OPEN DATASET F_FILENAME FOR INPUT MESSAGE LC_MESSAGE IN TEXT MODE. IF SY-SUBRC = 0. DO. READ DATASET F_FILENAME INTO FTAB_TABLE. IF SY-SUBRC = 0. APPEND FTAB_TABLE. ELSE. EXIT. ENDIF. ENDDO. CLOSE DATASET F_FILENAME. ELSE. WRITE: / 'Error reading file from remote computer' COLOR COL_NEGATIVE, / LC_MESSAGE, / F_FILENAME. SY-SUBRC = 4. ENDIF. ENDIF.

ENDFORM. " READ_REPORT_FROM_DISK*---------------------------------------------------------------------** FORM SPLIT_INCOMING_FILE **---------------------------------------------------------------------** ........ **---------------------------------------------------------------------** --> FTAB_PROGRAM_FILE ** --> FTAB_PROGRAM_SOURCE ** --> ` ** --> FTAB_PROGRAM_TEXTS **---------------------------------------------------------------------*FORM SPLIT_INCOMING_FILE TABLES FTAB_PROGRAM_FILE

Page 54: Abap Prgs -Sample

STRUCTURE MTAB_PROGRAM_FILE FTAB_PROGRAM_SOURCE STRUCTURE MTAB_PROGRAM_SOURCE FTAB_PROGRAM_TEXTS STRUCTURE MTAB_PROGRAM_TEXTS FTAB_PROGRAM_DOCUMENTATION STRUCTURE MTAB_PROGRAM_DOCUMENTATION CHANGING FSTR_TRDIR FSTR_THEAD. DATA: LC_DATATYPE(4) TYPE C, " Type of data, REPO, TEXP, RDIR LC_PROGRAM_FILE LIKE MTAB_PROGRAM_FILE. LOOP AT FTAB_PROGRAM_FILE. LC_PROGRAM_FILE = FTAB_PROGRAM_FILE. CASE LC_PROGRAM_FILE(9). WHEN MC_TRDIR_IDENTIFIER. LC_DATATYPE = MC_TRDIR_SHORT. WHEN MC_REPORT_IDENTIFIER. LC_DATATYPE = MC_REPORT_SHORT. WHEN MC_TEXT_IDENTIFIER. LC_DATATYPE = MC_TEXT_SHORT. WHEN MC_DOC_IDENTIFIER. LC_DATATYPE = MC_DOC_SHORT. WHEN MC_THEAD_IDENTIFIER. LC_DATATYPE = MC_THEAD_SHORT. WHEN OTHERS. " Actual contents of report, trdir, or text CASE LC_DATATYPE. WHEN MC_TRDIR_SHORT. FSTR_TRDIR = FTAB_PROGRAM_FILE. WHEN MC_REPORT_SHORT. FTAB_PROGRAM_SOURCE = FTAB_PROGRAM_FILE. APPEND FTAB_PROGRAM_SOURCE. WHEN MC_TEXT_SHORT. FTAB_PROGRAM_TEXTS = FTAB_PROGRAM_FILE. APPEND FTAB_PROGRAM_TEXTS. WHEN MC_THEAD_SHORT. FSTR_THEAD = FTAB_PROGRAM_FILE. WHEN MC_DOC_SHORT. FTAB_PROGRAM_DOCUMENTATION = FTAB_PROGRAM_FILE. APPEND FTAB_PROGRAM_DOCUMENTATION. ENDCASE. ENDCASE. ENDLOOP.ENDFORM. " SPLIT_INCOMING_FILE*---------------------------------------------------------------------** FORM INSERT_NEW_REPORT**---------------------------------------------------------------------** ........ **---------------------------------------------------------------------** --> FTAB_PROGRAM_SOURCE ** --> FTAB_PROGRAM_TEXTS ** --> F_TRDIR *

Page 55: Abap Prgs -Sample

*---------------------------------------------------------------------*FORM INSERT_NEW_REPORT TABLES FTAB_PROGRAM_SOURCE STRUCTURE MTAB_PROGRAM_SOURCE FTAB_PROGRAM_TEXTS STRUCTURE MTAB_PROGRAM_TEXTS FTAB_PROGRAM_DOCUMENTATION STRUCTURE MTAB_PROGRAM_DOCUMENTATION USING FSTR_TRDIR LIKE TRDIR FSTR_THEAD LIKE MSTR_THEAD. DATA: LC_OBJ_NAME LIKE E071-OBJ_NAME, LC_LINE2(40) TYPE C, LC_ANSWER(1) TYPE C.*-- read trdir to see if the report already exists, if it does, prompt*-- user to overwrite or abort. SELECT SINGLE * FROM TRDIR WHERE NAME = FSTR_TRDIR-NAME. IF SY-SUBRC = 0. " Already exists CONCATENATE 'want to overwrite report' FSTR_TRDIR-NAME INTO LC_LINE2 SEPARATED BY SPACE. CONCATENATE LC_LINE2 '?' INTO LC_LINE2. CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' EXPORTING DEFAULTOPTION = 'N' TEXTLINE1 = 'The selected report already exists, do you' TEXTLINE2 = LC_LINE2 TITEL = 'Report already exists' CANCEL_DISPLAY = SPACE IMPORTING ANSWER = LC_ANSWER EXCEPTIONS OTHERS = 1. ELSE. LC_ANSWER = 'J'. ENDIF. IF LC_ANSWER = 'J'.*-- Create the TADIR entry. (TRDIR entry created by INSERT REPORT) LC_OBJ_NAME = TRDIR-NAME. CALL FUNCTION 'TR_TADIR_POPUP_ENTRY_E071' EXPORTING WI_E071_PGMID = 'R3TR' WI_E071_OBJECT = 'PROG' WI_E071_OBJ_NAME = LC_OBJ_NAME WI_TADIR_DEVCLASS = '$TMP' EXCEPTIONS EXIT = 3 OTHERS = 4. IF SY-SUBRC = 0.*-- Create Report INSERT REPORT FSTR_TRDIR-NAME FROM FTAB_PROGRAM_SOURCE.*-- Create Texts

Page 56: Abap Prgs -Sample

INSERT TEXTPOOL FSTR_TRDIR-NAME FROM FTAB_PROGRAM_TEXTS LANGUAGE SY-LANGU.*-- Save Documentation CALL FUNCTION 'DOCU_UPDATE' EXPORTING HEAD = FSTR_THEAD STATE = 'A' TYP = 'E' VERSION = '1' TABLES LINE = FTAB_PROGRAM_DOCUMENTATION EXCEPTIONS OTHERS = 1. ELSE. WRITE: / 'Error updating the TADIR entry' COLOR COL_NEGATIVE, 'Program' COLOR COL_NEGATIVE INTENSIFIED OFF, FSTR_TRDIR-NAME, 'was not loaded into SAP.' COLOR COL_NEGATIVE INTENSIFIED OFF. ENDIF. ELSE. WRITE: / FSTR_TRDIR-NAME COLOR COL_NEGATIVE, 'was not uploaded into SAP. Action cancelled by user' COLOR COL_NEGATIVE INTENSIFIED OFF. ENDIF.ENDFORM. " INSERT_NEW_REPORT*---------------------------------------------------------------------** FORM GET_NAME **---------------------------------------------------------------------** ........ **---------------------------------------------------------------------** --> VALUE(F_FIELD) ** --> F_NAME **---------------------------------------------------------------------*FORM GET_NAME USING VALUE(F_FIELD) CHANGING F_NAME. DATA: LTAB_FIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE, LC_PROG LIKE D020S-PROG, LC_DNUM LIKE D020S-DNUM. TRANSLATE F_FIELD TO UPPER CASE. refresh ltab_fields. LTAB_FIELDS-FIELDNAME = F_FIELD. append ltab_fields. LC_PROG = SY-REPID . LC_DNUM = SY-DYNNR . CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING DYNAME = LC_PROG DYNUMB = LC_DNUM TABLES dynpfields = ltab_fields EXCEPTIONS OTHERS = 01.

Page 57: Abap Prgs -Sample

read table ltab_fields index 1. IF SY-SUBRC EQ 0. F_NAME = LTAB_FIELDS-FIELDVALUE. refresh ltab_fields. ENDIF. CALL FUNCTION 'F4_USER' EXPORTING OBJECT = F_NAME IMPORTING RESULT = F_NAME.ENDFORM. " GET_NAME

Program Texts

DIR File Download Options (File Selection)FIL File Options FNA Enter filename below (under File Options)H01 Prog NameH03 Program DescriptionSNG Upload a single fileUDL Upload to SAP/Download from SAPUPL File Upload OptionsR Backup/Restore program source code with textsP_PATH Path to save programs toRB_DOS Files on local computerRB_DOWN Download ProgramsRB_FILE Upload a single fileRB_LIST Select program(s) from a list RB_UNIX Files on remote computer RB_UP Upload Programs to SAP S_CDAT Date Created S_CNAM Created by UserID S_NAME Program Name S_SUBC Program Type S_UDAT Date Changed S_UNAM Last Changed by UserID

New Site Address: http://abap.mirrorz.com

Send any hints or tips to ABAP Hints & Tips . All submissions will be recognized along with the tip.

Get a cool web addressFree subdomains from ShortURL.com