Wednesday, 9 July 2014

First Module Pool Program in SAP

First Module Pool Program in SAP

+ -
In the below example we will create a simple Module Pool Program to display hello world.
Go to SE80, select program from drop down, provide name as ZSAPN_HELLO_WORLD and press enter.
Creating Module Pool Program in SAP
A pop up will open click Yes.
Creating Module Pool Program in SAP
Provide a program name ZSAPN_HELLO_WORLD (same name as given above), select create with top include check box and enter.
Creating Module Pool Program in SAP
Provide a top include name, enter.
Creating Module Pool Program in SAP
Click Save on the pop up window.
Creating Module Pool Program in SAP
Save it in a local object.
Go to change mode, double click on program name, uncomment all include programs, double click on each include and create (TIP- Just double click on each include enter, enter, save in local object, save, back(F3)) .Now to double click on program name, right click , activate.
Creating Module Pool Program in SAP
Right click on program name, create, screen.
Creating Module Pool Program in SAP
Provide Screen number as (0100), enter.
Creating Module Pool Program in SAP
Provide short description and click on flow logic tab.
Creating Module Pool Program in SAP
Uncomment the available MODULES, double click to create them.
Creating Module Pool Program in SAP
Double click on MODULE STATUS_0100,yes, select main include and enter.
Creating Module Pool Program in SAP
Save, click back (F3) and create another module.
Click on Layout ( toolbar button), it will open Module Pool layout designer (If you are using it first time it might take some time...If you failed to open layout it might be due to some missing configuration, at that time contact basis/admin).
Creating Module Pool Program in SAP
The layout will be like below, drag and drop Text Field element on to screen area.
Creating Module Pool Program in SAP
Provide name and text.
Creating Module Pool Program in SAP
Save, close windows, go to flow logic, double click on each module and add below code.
Creating Module Pool Program in SAP
Double click on menu name and title to create GUI status for the program...checkout creating a custom menu in SAP to create menu.
Double click on program name, right click, activate.
To execute a module pool program we need to create a t-code, to create a t-code right click on program name, create, transaction.
Creating Module Pool Program in SAP
Provide a T-code name, short text and enter.
Creating Module Pool Program in SAP
Provide program name, screen number, save.
Creating Module Pool Program in SAP
Now T-code is created, execute the T-code and test.
Creating Module Pool Program in SAP

Thursday, 3 July 2014

ALV Report with Field Catelogue

+ -

Field Catalog

Field catalog is an internal table which is used to pass list of fields to display in ALV report, we can set different properties to fields which are going to display in ALV.

Type Group

It is a data dictionary objects which contains all the reusable user-defined types.
Example for a type group is SLIS, which contains all the user-defined types for developing ALV reports.
TYPE-POOLS is a keyword which is used to assign the type-group to a ALV report .
Syntax : 
TYPE-POOLS SLIS . "TO USE FIELD CATALOG WE HAVE TO INCLUDE SLIS TYPE-POOLS
DATA : <IT_FCAT> TYPE SLIS_T_FIELDCAT_ALV . "INTERNAL TABLE FOR FIELD CATALOG
DATA : <WA_FCAT> TYPE SLIS_FIELDCAT_ALV  . " WORK AREA FOR FIELD CATLOG
Options/properties of field catalog.
  WA_FCAT-COL_POS = '1' . "Specify position of a field
  WA_FCAT-FIELDNAME = 'MATNR' . "Specify field name
  WA_FCAT-TABNAME = 'IT_MARA' . "Specify internal table name
  WA_FCAT-SELTEXT_M = 'MATERIALNO' . "Specify text to display column header
  WA_FCAT-KEY = 'X' . "Specify if it is a key field
  APPEND WA_FCAT TO IT_FCAT . "Append to field catalog internal table
Requirement: Develop a ALV report to display Material no(MATNR), Material type(MTART), Industry Sector(MBRSH) and Basic Unit Of measure(MEINS) for a range of material input (Select-Options).
To develop above report we have to use field catalog (because we have to display four fields only from MARA) and we have to pass foeld catalog parameter to Function ModuleREUSE_ALV_GIRD_DISPLAY.
REPORT ZSAPN_ALV_FCAT.
TABLES : MARA.
TYPE-POOLS SLIS .

TYPES : BEGIN OF TY_MARA,  "User defined internal table type
        MATNR TYPE MARA-MATNR,
        MTART TYPE MARA-MTART,
        MBRSH TYPE MARA-MBRSH,
        MEINS TYPE MARA-MEINS,
      END OF TY_MARA.

DATA : IT_MARA TYPE TABLE OF TY_MARA .
DATA : WA_MARA TYPE TY_MARA .

DATA : IT_FCAT TYPE SLIS_T_FIELDCAT_ALV .
DATA : WA_FCAT LIKE LINE OF IT_FCAT .
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR.

START-OF-SELECTION .
  PERFORM GET_DATA .
  PERFORM CREATE_FCAT.

END-OF-SELECTION .
  PERFORM DISP_ALV .

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .
  SELECT MATNR MTART MBRSH MEINS FROM MARA
      INTO TABLE IT_MARA
      WHERE MATNR IN S_MATNR.
  .
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  DISP_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISP_ALV .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM = SY-REPID
      IT_FIELDCAT        = IT_FCAT "PASS FIELD CATALOG TO ALV
    TABLES
      T_OUTTAB           = IT_MARA.


ENDFORM.                    " DISP_ALV
*&---------------------------------------------------------------------*
*&      Form  CREATE_FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CREATE_FCAT .
  WA_FCAT-COL_POS = '1' .
  WA_FCAT-FIELDNAME = 'MATNR' .
  WA_FCAT-TABNAME = 'IT_MARA' .
  WA_FCAT-SELTEXT_M = 'MATERIALNO' .
  WA_FCAT-KEY = 'X' .
  APPEND WA_FCAT TO IT_FCAT .
  CLEAR WA_FCAT .

  WA_FCAT-COL_POS = '2' .
  WA_FCAT-FIELDNAME = 'MTART' .
  WA_FCAT-TABNAME = 'IT_MARA' .
  WA_FCAT-SELTEXT_M = 'MATERIALTYPE' .
*  WA_FCAT-NO_OUT = 'X' .
  WA_FCAT-HOTSPOT = 'X' .
  APPEND WA_FCAT TO IT_FCAT .
  CLEAR WA_FCAT .

  WA_FCAT-COL_POS = '3' .
  WA_FCAT-FIELDNAME = 'MBRSH' .
  WA_FCAT-REF_FIELDNAME = 'MBRSH' .
  WA_FCAT-REF_TABNAME = 'MARA' .
*  WA_FCAT-TABNAME = 'IT_MARA' .
*  WA_FCAT-SELTEXT_M = 'INDSECTOR' .
*  WA_FCAT-EDIT = 'X' .
  APPEND WA_FCAT TO IT_FCAT .
  CLEAR WA_FCAT .

  WA_FCAT-COL_POS = '4' .
  WA_FCAT-FIELDNAME = 'MEINS' .
  WA_FCAT-TABNAME = 'IT_MARA' .
  WA_FCAT-SELTEXT_M = 'MAT.UNITS' .
  WA_FCAT-EMPHASIZE = 'C610'.
  APPEND WA_FCAT TO IT_FCAT .
  CLEAR WA_FCAT .

ENDFORM.                    " CREATE_FCAT

Develop a ALV report to display material details with all fields from MARA table for a material range input(Select-Options input).

+ -
Requirement: Develop a ALV report to display material details with all fields from MARA table for a material range input(Select-Options input).
In this requirement we have to display all fields from MARA (Material master table) in ALV format. We use REUSE_ALV_GRID_DISPLAY Function module to display ALV report.

Steps to create ALV Report with Structure .

Step1: Declare Internal table for MARA table.
Step2: Print Select-Options.
Step3: Get data from database using select statements.
Step4: Call Function Module REUSE_ALV_GRID_DISPLAY and pass structure name, program name and itab name.
TABLES : MARA. "DECLARE TABLE FOR SELECT-OPTIONS
DATA : IT_MARA TYPE TABLE OF MARA. "DECLARE INTERNAL TABLE FOR MARA
DATA : WA_MARA TYPE MARA.
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR. "PRINT SELECT-OPTIONS FOR MATNR
START-OF-SELECTION.
SELECT * FROM MARA INTO TABLE IT_MARA
                   WHERE MATNR IN S_MATNR .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' "CALL FUNCTION MODULE TO DISPLAY ALV GRID
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID "SY-REPID IS A SYSTEM VARIABLE WHICH STORES CURRENT PROGRAM NAME
I_STRUCTURE_NAME = 'MARA'
TABLES
T_OUTTAB = IT_MARA. "PASS INTERNAL TABLE TO DISPLAY ALV FORMAT
The above report after modularization
The below one is full report after using modularization techniques.
*&---------------------------------------------------------------------*
*& Report  ZALV_STR
*&
*&---------------------------------------------------------------------*

REPORT  ZALV_STR.
TABLES: MARA.
DATA : IT_MARA TYPE TABLE OF MARA .


SELECT-OPTIONS : S_MATNR FOR MARA-MATNR.

START-OF-SELECTION .
  PERFORM GET_MARA_DATA . "Double click to create below form

END-OF-SELECTION .
  PERFORM DISP_MARA_ALV . "Double click to create below form

*&---------------------------------------------------------------------*
*&      Form  GET_MARA_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_MARA_DATA .
  SELECT * FROM MARA
      INTO TABLE IT_MARA 
      WHERE MATNR IN S_MATNR
       .
ENDFORM.                    " GET__MARA_DATA
*&---------------------------------------------------------------------*
*&      Form  DISP_MARA_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISP_MARA_ALV .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM = SY-REPID
      I_STRUCTURE_NAME   = 'MARA'
    TABLES
      T_OUTTAB           = IT_MARA.

ENDFORM.                    " DISP_MARA_ALV

Tuesday, 1 July 2014

Real-time delivery report in SAP ABAP (All models in classical reports)

Real-time delivery report in SAP ABAP

Real-time example of displaying delivery details for a range of sales orders in SAP ABAP.
REPORT  ZPROJECT_RANGE NO STANDARD PAGE HEADING LINE-COUNT 37(3).

TABLES : VBAK,VBAP,VBFA,LIKP,LIPS.

TYPES: BEGIN OF TY_VBAK,
        VBELN TYPE VBAK-VBELN,
        VKORG TYPE VBAK-VKORG,
        VTWEG TYPE VBAK-VTWEG,
        SPART TYPE VBAK-SPART,
      END OF TY_VBAK.
TYPES: BEGIN OF TY_VBAP,
        VBELN TYPE VBAP-VBELN,
        POSNR TYPE VBAP-POSNR,
        MATNR TYPE VBAP-MATNR,
        ZMENG TYPE VBAP-ZMENG,
        NETPR TYPE VBAP-NETPR,
      END OF TY_VBAP.
TYPES: BEGIN OF TY_LIKP,
        VBELN TYPE LIKP-VBELN,
      END OF TY_LIKP.
TYPES: BEGIN OF TY_LIPS,
        VBELN TYPE LIPS-VBELN,
        POSNR TYPE LIPS-POSNR,
        LFIMG TYPE LIPS-LFIMG,
        NETPR TYPE LIPS-NETPR,
      END OF TY_LIPS.
TYPES: BEGIN OF TY_VBFA,
        VBELV TYPE VBFA-VBELV,
        POSNV TYPE VBFA-POSNV,
        VBELN TYPE VBFA-VBELN,
        POSNN TYPE VBFA-POSNN,
        VBTYP_N TYPE VBFA-VBTYP_N,
      END OF TY_VBFA.
TYPES: BEGIN OF TY_FINAL,
        VBELN TYPE VBAP-VBELN,
        POSNR TYPE VBAP-POSNR,
        MATNR TYPE VBAP-MATNR,
        ZMENG TYPE VBAP-ZMENG,
        NETPR TYPE VBAP-NETPR,
        VBELN1 TYPE LIPS-VBELN,
        POSNR1 TYPE LIPS-POSNR,
        LFIMG TYPE LIPS-LFIMG,
        NETPR1 TYPE LIPS-NETPR,
      END OF TY_FINAL.

DATA : I_VBAK TYPE TABLE OF TY_VBAK,WA_VBAK TYPE TY_VBAK.
DATA : I_VBAP TYPE TABLE OF TY_VBAP,WA_VBAP TYPE TY_VBAP.
DATA : I_LIKP TYPE TABLE OF TY_LIKP,WA_LIKP TYPE TY_LIKP.
DATA : I_LIPS TYPE TABLE OF TY_LIPS,WA_LIPS TYPE TY_LIPS.
DATA : I_VBFA TYPE TABLE OF TY_VBFA,WA_VBFA TYPE TY_VBFA.
DATA : I_FINAL TYPE TABLE OF TY_FINAL,WA_FINAL TYPE TY_FINAL.

DATA : V_TITLE TYPE STRING.
DATA : V_FNAME TYPE STRING.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_VBELN FOR VBAK-VBELN NO-EXTENSION.
SELECT-OPTIONS : S_VKORG FOR VBAK-VKORG NO INTERVALS NO-EXTENSION.
SELECT-OPTIONS : S_VTWEG FOR VBAK-VTWEG NO INTERVALS NO-EXTENSION.
SELECT-OPTIONS : S_SPART FOR VBAK-SPART NO INTERVALS NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN SKIP.

PARAMETERS : P_FILE TYPE RLGRAP-FILENAME.
PARAMETERS : DOWNLOAD AS CHECKBOX.

INITIALIZATION.
  V_TITLE = 'SALES DOCUMENT:ITEM DATA AND DELIVERY DETAILS'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
  PERFORM GET_FILE_PATH.

AT SELECTION-SCREEN ON HELP-REQUEST FOR P_FILE.
  PERFORM GET_HELP_FOR_FILE_PATH.

AT SELECTION-SCREEN.
  PERFORM VALIDATE_SALESDOCUMENT.
  PERFORM VALIDATE_SALESORGANIZATION.
  PERFORM VALIDATE_DISTRIBUTIONCHANNEL.
  PERFORM VALIDATE_DIVISION.

START-OF-SELECTION.
  PERFORM GET_DATA.
  PERFORM DISPLAY_DATA.
  PERFORM DOWNLOAD_DATA.

END-OF-SELECTION.

TOP-OF-PAGE.
  PERFORM DISPLAY_HEADING.

END-OF-PAGE.
  PERFORM DISPLAY_FOOTER.


FORM GET_FILE_PATH .
  CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
    EXPORTING
      PROGRAM_NAME  = SYST-REPID
      DYNPRO_NUMBER = SYST-DYNNR
      FIELD_NAME    = P_FILE
    CHANGING
      FILE_NAME     = P_FILE.
ENDFORM.                    " GET_FILE_PATH

FORM GET_HELP_FOR_FILE_PATH .
  MESSAGE 'PLEASE SELECT FILE PATH' TYPE 'I'.
ENDFORM.                    " GET_HELP_FOR_FILE_PATH

FORM VALIDATE_SALESDOCUMENT .
  SELECT SINGLE VBELN FROM VBAK INTO WA_VBAK WHERE VBELN IN S_VBELN.
  IF SY-SUBRC <> 0.
    MESSAGE 'INVALID SALES DOCUMENT NO' TYPE 'I'.
  ENDIF.
ENDFORM.                    " VALIDATE_SALESDOCUMENT

FORM VALIDATE_SALESORGANIZATION .
  SELECT VKORG FROM VBAK INTO WA_VBAK UP TO 1 ROWS WHERE VKORG IN S_VKORG.
  ENDSELECT.
  IF SY-SUBRC <> 0.
    MESSAGE 'INVALID SALES ORGANIZATION' TYPE 'I'.
  ENDIF.
ENDFORM.                    " VALIDATE_SALESORGANIZATION

FORM VALIDATE_DISTRIBUTIONCHANNEL.
  SELECT VTWEG FROM VBAK INTO WA_VBAK UP TO 1 ROWS WHERE VTWEG IN S_VTWEG.
  ENDSELECT.
  IF SY-SUBRC <> 0.
    MESSAGE 'INVALID DISTRIBUTION CHANNEL' TYPE 'I'.
  ENDIF.
ENDFORM.                    " VALIDATE_DISTRIBUTIONCHANNEL

FORM VALIDATE_DIVISION .
  SELECT SPART FROM VBAK INTO WA_VBAK UP TO 1 ROWS WHERE SPART IN S_SPART.
  ENDSELECT.
  IF SY-SUBRC <> 0.
    MESSAGE 'INVALID DIVISION' TYPE 'I'.
  ENDIF.
ENDFORM.                    " VALIDATE_DIVISION

FORM GET_DATA .

  SELECT VBELN VKORG VTWEG SPART FROM VBAK INTO TABLE I_VBAK WHERE VBELN IN S_VBELN AND VKORG IN S_VKORG
                                                               AND VTWEG IN S_VTWEG AND SPART IN S_SPART.
  IF I_VBAK IS NOT INITIAL.

    SELECT VBELN POSNR MATNR ZMENG NETPR FROM VBAP INTO TABLE I_VBAP FOR ALL ENTRIES IN I_VBAK
                                                                    WHERE VBELN = I_VBAK-VBELN.

    SELECT VBELV POSNV VBELN POSNN VBTYP_N FROM VBFA INTO TABLE I_VBFA FOR ALL ENTRIES IN I_VBAP
                                                    WHERE VBELV = I_VBAP-VBELN AND VBTYP_N = 'J'.

    SELECT VBELN FROM LIKP INTO TABLE I_LIKP FOR ALL ENTRIES IN I_VBFA WHERE VBELN = I_VBFA-VBELN.


    SELECT VBELN POSNR LFIMG NETPR FROM LIPS INTO TABLE I_LIPS FOR ALL ENTRIES IN I_LIKP
                                                              WHERE VBELN = I_LIKP-VBELN.
    SORT I_VBAP.
    SORT I_LIPS.

    LOOP AT I_VBFA INTO WA_VBFA.
      READ TABLE I_LIPS INTO WA_LIPS WITH KEY VBELN = WA_VBFA-VBELN POSNR = WA_VBFA-POSNN BINARY SEARCH.
      READ TABLE I_VBAP INTO WA_VBAP WITH KEY VBELN = WA_VBFA-VBELV POSNR = WA_VBFA-POSNV BINARY SEARCH.
      WA_FINAL-VBELN = WA_VBAP-VBELN.
      WA_FINAL-POSNR = WA_VBAP-POSNR.
      WA_FINAL-MATNR = WA_VBAP-MATNR.
      WA_FINAL-ZMENG = WA_VBAP-ZMENG.
      WA_FINAL-NETPR = WA_VBAP-NETPR.
      WA_FINAL-VBELN1 = WA_LIPS-VBELN.
      WA_FINAL-POSNR1 = WA_LIPS-POSNR.
      WA_FINAL-LFIMG = WA_LIPS-LFIMG.
      WA_FINAL-NETPR1 = WA_LIPS-NETPR.
      APPEND WA_FINAL TO I_FINAL.
      CLEAR WA_FINAL.
    ENDLOOP.
  ENDIF.

ENDFORM.                    " GET_DATA

FORM DISPLAY_DATA .
  LOOP AT I_FINAL INTO WA_FINAL.
    WRITE : / WA_FINAL-VBELN,WA_FINAL-POSNR,WA_FINAL-MATNR,WA_FINAL-ZMENG,WA_FINAL-NETPR,
              WA_FINAL-VBELN1,WA_FINAL-POSNR1,WA_FINAL-LFIMG,WA_FINAL-NETPR.
  ENDLOOP.
ENDFORM.                    " DISPLAY_DATA

FORM DOWNLOAD_DATA .
  IF DOWNLOAD = 'X'.
    V_FNAME = P_FILE.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        FILENAME              = V_FNAME
        FILETYPE              = 'ASC'
        WRITE_FIELD_SEPARATOR = 'X'
      TABLES
        DATA_TAB              = I_FINAL.
    IF SY-SUBRC = 0.
      MESSAGE 'DATA SUCCESSFULLY DOWNLOADED' TYPE 'I'.
    ENDIF.
  ENDIF.
ENDFORM.                    " DOWNLOAD_DATA

FORM DISPLAY_HEADING .
  WRITE: SY-ULINE.
  WRITE :/45 V_TITLE.
  WRITE: SY-ULINE.
ENDFORM.                    " DISPLAY_HEADING

FORM DISPLAY_FOOTER .
  WRITE: SY-ULINE.
  WRITE :/45 'INTEL GROUP OF COMPANIES'.
  WRITE: SY-ULINE.
ENDFORM.                    " DISPLAY_FOOTER


Classical Report with top of page and end of page in SAP ABAP

Real-time classical report with top of page and end of page in SAP ABAP
*&---------------------------------------------------------------------*
*& Report  ZCLASSICAL_REPORT                                           *
*&                                                                     *

REPORT  ZCLASSICAL_REPORT
        NO STANDARD PAGE HEADING
        LINE-SIZE 120
        LINE-COUNT 10(1).

TABLES: MARA,   "Material Master
        T001W.  "Plant Master

DATA: V_LINE TYPE I.

DATA: BEGIN OF IT_MARD OCCURS 1,
        MATNR LIKE MARA-MATNR,
        MAKTX LIKE MAKT-MAKTX,
        WERKS LIKE MARD-WERKS,
        LGORT LIKE MARD-LGORT,
        LABST LIKE MARD-LABST,
      END OF IT_MARD.

SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-H01.
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR,
                S_WERKS FOR T001W-WERKS.
PARAMETERS: P1 TYPE I.
SELECTION-SCREEN: END OF BLOCK B1.



INITIALIZATION.
  S_MATNR-LOW = '100-100'.  S_MATNR-HIGH = '100-500'.
  S_MATNR-SIGN = 'I'. S_MATNR-OPTION = 'BT'.
  APPEND S_MATNR.


  S_WERKS-LOW = '0001'.  S_WERKS-HIGH = '3800'.
  S_WERKS-SIGN = 'I'. S_WERKS-OPTION = 'BT'.
  APPEND S_WERKS.
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF SCREEN-NAME = 'S_WERKS-LOW'.
      SCREEN-REQUIRED = 1.
*      SCREEN-INPUT = 0.
*      SCREEN-INVISIBLE = 1.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.


AT SELECTION-SCREEN.
AT SELECTION-SCREEN ON S_WERKS.
  IF NOT S_WERKS[] IS initial.
    PERFORM VALIDATE_PLANT.
  ENDIF.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_WERKS-LOW.
  MESSAGE I000(Z00) WITH 'On Value Request'.


AT SELECTION-SCREEN ON HELP-REQUEST FOR P1.
  MESSAGE I000(Z00) WITH 'On Help Request'.



START-OF-SELECTION.
  PERFORM GET_DATA.


END-OF-SELECTION.
  PERFORM SHOW_LIST.

*----------------------------------------------------------------------*
*       TOP-OF-PAGE
*----------------------------------------------------------------------*
TOP-OF-PAGE.
  PERFORM BUILD_PAGE_HEADER.


END-OF-PAGE.
  PERFORM BUILD_PAGE_FOOTER.


FORM VALIDATE_PLANT .
  SELECT WERKS
    FROM T001W
    INTO T001W-WERKS
    UP TO 1 ROWS
    WHERE WERKS IN S_WERKS.

  ENDSELECT.

  IF SY-SUBRC <> 0.
    MESSAGE E000(Z00) WITH 'Invalid Range of Plants' S_WERKS-LOW 'And'
S_WERKS-HIGH.
  ENDIF.

ENDFORM.                    " VALIDATE_PLANT
FORM GET_DATA .
  SELECT A~MATNR
         B~MAKTX
         C~WERKS
         C~LGORT
         C~LABST
    INTO TABLE IT_MARD
    FROM MARA AS A
    INNER JOIN MAKT AS B
    ON B~MATNR = A~MATNR
    INNER JOIN MARD AS C
    ON C~MATNR = A~MATNR
    WHERE A~MATNR IN S_MATNR
    AND   C~WERKS IN S_WERKS
    AND     SPRAS = SY-LANGU.

ENDFORM.                    " GET_DATA
FORM BUILD_PAGE_HEADER .
  FORMAT INTENSIFIED ON COLOR COL_HEADING.
  ULINE AT (105).
  WRITE:/ SY-VLINE,
          'Material No',
       20 SY-VLINE,
          'Material Desc',
       62 SY-VLINE,
          'Plant',
       72 SY-VLINE,
          'Str.Loc',
       81 SY-VLINE,
          'Qty',
      105 SY-VLINE.
  ULINE AT (105).
  FORMAT RESET.
ENDFORM.                    " BUILD_PAGE_HEADER
FORM SHOW_LIST .
  LOOP AT IT_MARD.
    WRITE:/ SY-VLINE,
            IT_MARD-MATNR,
         20 SY-VLINE,
            IT_MARD-MAKTX,
         62 SY-VLINE,
           IT_MARD-WERKS,
         72 SY-VLINE,
            IT_MARD-LGORT,
         81 SY-VLINE,
            IT_MARD-LABST,
        105 SY-VLINE.
  ENDLOOP.
  ULINE AT (105).

*--footer for last page conditionally
  V_LINE = ( SY-LINCT - SY-LINNO ) - 1.
  SKIP V_LINE.

ENDFORM.                    " SHOW_LIST
FORM BUILD_PAGE_FOOTER .
  WRITE:/90 'Page :', SY-PAGNO.
ENDFORM.                    " BUILD_PAGE_FOOTER

Interactive Report -1

Example for Interactive Report :

*&---------------------------------------------------------------------*
*& Report  ZINT_REPORT                                                 *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
REPORT  ZINT_REPORT
        NO STANDARD PAGE HEADING
        LINE-SIZE 120
        LINE-COUNT 20(2).

DATA: IT_VBRK LIKE VBRK OCCURS 1 WITH HEADER LINE,
      IT_VBRP LIKE VBRP OCCURS 1 WITH HEADER LINE.

DATA: V_LINE TYPE I,
      V_VBELN LIKE VBRK-VBELN.

SELECT-OPTIONS: S_VBELN FOR IT_VBRK-VBELN.


START-OF-SELECTION.
  PERFORM GET_DATA.


END-OF-SELECTION.
  IF NOT IT_VBRK[] IS INITIAL.
    PERFORM SHOW_BLIST.
  ELSE.
    MESSAGE I000(Z00) WITH 'No Data found to display'.
  ENDIF.

TOP-OF-PAGE.
  PERFORM BUILD_PAGE_HEADER.

END-OF-PAGE.
  PERFORM BUILD_PAGE_FOOTER.

TOP-OF-PAGE DURING LINE-SELECTION.
  IF SY-LSIND = 1.
    PERFORM SEC_PAGE_HEADER.
*  ELSEIF SY-LSIND = 2.
*    WRITE:/ 'PAGE HEADER FOR 2ND SECONDARY LIST'.
*  ELSE.
*    WRITE:/ 'PAGE HEADER FOR SECONDARY LIST'.
  ENDIF.

AT LINE-SELECTION.
  IF SY-LSIND = 1.
    PERFORM SHOW_SLIST.
  ENDIF.

AT PF5.
  MESSAGE I000(Z00) WITH 'You clicked on F5 key'.


*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_DATA .

*--Billing doc header data
  SELECT *
    FROM VBRK
    INTO TABLE IT_VBRK
    WHERE VBELN IN S_VBELN.

  IF SY-SUBRC = 0.
*--Billing doc Item data
    SELECT *
      FROM VBRP
      INTO TABLE IT_VBRP
      WHERE VBELN IN S_VBELN.
  ENDIF.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_PAGE_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BUILD_PAGE_HEADER .
  ULINE AT (50).
  FORMAT INTENSIFIED ON COLOR COL_HEADING.
  WRITE:/ SY-VLINE,
          'Biiling Doc',
       16  SY-VLINE,
           'Billing Date',
       30  SY-VLINE,
           'Billing Type',
       50  SY-VLINE.
  ULINE AT /(50).

ENDFORM.                    " BUILD_PAGE_HEADER
*&---------------------------------------------------------------------*
*&      Form  BUILD_PAGE_FOOTER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BUILD_PAGE_FOOTER .
  ULINE AT (50).
  WRITE:/30 'Page :', SY-PAGNO.
ENDFORM.                    " BUILD_PAGE_FOOTER
*&---------------------------------------------------------------------*
*&      Form  SHOW_BLIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SHOW_BLIST .
  LOOP AT IT_VBRK.
    WRITE:/ SY-VLINE,
            IT_VBRK-VBELN COLOR COL_KEY HOTSPOT ON,
         16  SY-VLINE,
             IT_VBRK-FKDAT,
         30  SY-VLINE,
             IT_VBRK-FKART,
         50  SY-VLINE.
      HIDE IT_VBRK-VBELN.
  ENDLOOP.
  V_LINE = ( SY-LINCT - SY-LINNO ) - 1.
ENDFORM.                    " SHOW_BLIST
*&---------------------------------------------------------------------*
*&      Form  SHOW_SLIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SHOW_SLIST .

*   CONDENSE SY-LISEL+1(10).
*   V_VBELN = SY-LISEL+1(10).
*
*CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*  EXPORTING
*    INPUT         = V_VBELN
*  IMPORTING
*    OUTPUT        = V_VBELN.

*  LOOP AT IT_VBRP WHERE VBELN = V_VBELN.
  LOOP AT IT_VBRP WHERE VBELN = IT_VBRK-VBELN.
    WRITE:/ SY-VLINE,
            IT_VBRP-POSNR,
          11 SY-VLINE,
            IT_VBRP-MATNR,
         30 SY-VLINE,
            IT_VBRP-ARKTX,
         73 SY-VLINE,
            IT_VBRP-FKIMG,
        95 SY-VLINE,
            IT_VBRP-NETWR,
       120 SY-VLINE.
  ENDLOOP.

ENDFORM.                    " SHOW_SLIST
*&---------------------------------------------------------------------*
*&      Form  SEC_PAGE_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SEC_PAGE_HEADER .
  ULINE AT (120).
  FORMAT INTENSIFIED ON COLOR COL_HEADING.
  WRITE:/ SY-VLINE,
          'Item No',
        11 SY-VLINE,
          'Material',
       30 SY-VLINE,
          'Material Desc',
       73 SY-VLINE,
          'Qty',
      95 SY-VLINE,
          'Amount',
     120 SY-VLINE.
  ULINE AT (120).
  FORMAT RESET.
ENDFORM.                    " SEC_PAGE_HEADER

Classical report with events in SAP ABAP

Developing classical report with classical report events in SAP ABAP.
REPORT  ZCLASSICAL_REPORT
        NO STANDARD PAGE HEADING
        LINE-SIZE 120
        LINE-COUNT 10(1).

*----------------------------------------------------------------------*
*       TYPES DECLARATIONS
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
*       TABLES DECLARATIONS
*----------------------------------------------------------------------*
TABLES: MARA,   "Material Master
        T001W.  "Plant Master


*----------------------------------------------------------------------*
*       DATA DECLARATIONS
*----------------------------------------------------------------------*
DATA: V_LINE TYPE I.


*----------------------------------------------------------------------*
*       CONSTANTS DECLARATIONS
*----------------------------------------------------------------------*



*----------------------------------------------------------------------*
*       INTERNAL TABLE DECLARATIONS
*----------------------------------------------------------------------*
DATA: BEGIN OF IT_MARD OCCURS 1,
        MATNR LIKE MARA-MATNR,
        MAKTX LIKE MAKT-MAKTX,
        WERKS LIKE MARD-WERKS,
        LGORT LIKE MARD-LGORT,
        LABST LIKE MARD-LABST,
      END OF IT_MARD.

*----------------------------------------------------------------------*
*       SELECTION SCREEN DESIGN
*----------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-H01.
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR,
                S_WERKS FOR T001W-WERKS.
PARAMETERS: P1 TYPE I.
SELECTION-SCREEN: END OF BLOCK B1.


*----------------------------------------------------------------------*
*       INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
  S_MATNR-LOW = '100-100'.  S_MATNR-HIGH = '100-500'.
  S_MATNR-SIGN = 'I'. S_MATNR-OPTION = 'BT'.
  APPEND S_MATNR.


  S_WERKS-LOW = '0001'.  S_WERKS-HIGH = '3800'.
  S_WERKS-SIGN = 'I'. S_WERKS-OPTION = 'BT'.
  APPEND S_WERKS.



*----------------------------------------------------------------------*
*       AT SELECTION SCREEN OUTPUT
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF SCREEN-NAME = 'S_WERKS-LOW'.
      SCREEN-REQUIRED = 1.
*      SCREEN-INPUT = 0.
*      SCREEN-INVISIBLE = 1.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

*----------------------------------------------------------------------*
*       AT SELECTION SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.

*----------------------------------------------------------------------*
*       AT SELECTION SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON S_WERKS.
  IF NOT S_WERKS[] IS initial.
    PERFORM VALIDATE_PLANT.
  ENDIF.

*----------------------------------------------------------------------*
*       AT SELECTION SCREEN ON VALUE REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_WERKS-LOW.
  MESSAGE I000(Z00) WITH 'On Value Request'.

*----------------------------------------------------------------------*
*       AT SELECTION SCREEN ON HELP REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON HELP-REQUEST FOR P1.
  MESSAGE I000(Z00) WITH 'On Help Request'.


*----------------------------------------------------------------------*
*       START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM GET_DATA.


*----------------------------------------------------------------------*
*       END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
  PERFORM SHOW_LIST.

*----------------------------------------------------------------------*
*       TOP-OF-PAGE
*----------------------------------------------------------------------*
TOP-OF-PAGE.
  PERFORM BUILD_PAGE_HEADER.


*----------------------------------------------------------------------*
*       END-OF-PAGE
*----------------------------------------------------------------------*
END-OF-PAGE.
  PERFORM BUILD_PAGE_FOOTER.


*&---------------------------------------------------------------------*
*&      Form  VALIDATE_PLANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM VALIDATE_PLANT .
  SELECT WERKS
    FROM T001W
    INTO T001W-WERKS
    UP TO 1 ROWS
    WHERE WERKS IN S_WERKS.

  ENDSELECT.

  IF SY-SUBRC <> 0.
    MESSAGE E000(Z00) WITH 'Invalid Range of Plants' S_WERKS-LOW 'And'
S_WERKS-HIGH.
  ENDIF.

ENDFORM.                    " VALIDATE_PLANT
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_DATA .
  SELECT A~MATNR
         B~MAKTX
         C~WERKS
         C~LGORT
         C~LABST
    INTO TABLE IT_MARD
    FROM MARA AS A
    INNER JOIN MAKT AS B
    ON B~MATNR = A~MATNR
    INNER JOIN MARD AS C
    ON C~MATNR = A~MATNR
    WHERE A~MATNR IN S_MATNR
    AND   C~WERKS IN S_WERKS
    AND     SPRAS = SY-LANGU.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_PAGE_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BUILD_PAGE_HEADER .
  FORMAT INTENSIFIED ON COLOR COL_HEADING.
  ULINE AT (105).
  WRITE:/ SY-VLINE,
          'Material No',
       20 SY-VLINE,
          'Material Desc',
       62 SY-VLINE,
          'Plant',
       72 SY-VLINE,
          'Str.Loc',
       81 SY-VLINE,
          'Qty',
      105 SY-VLINE.
  ULINE AT (105).
  FORMAT RESET.
ENDFORM.                    " BUILD_PAGE_HEADER
*&---------------------------------------------------------------------*
*&      Form  SHOW_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SHOW_LIST .
  LOOP AT IT_MARD.
    WRITE:/ SY-VLINE,
            IT_MARD-MATNR,
         20 SY-VLINE,
            IT_MARD-MAKTX,
         62 SY-VLINE,
           IT_MARD-WERKS,
         72 SY-VLINE,
            IT_MARD-LGORT,
         81 SY-VLINE,
            IT_MARD-LABST,
        105 SY-VLINE.
  ENDLOOP.
  ULINE AT (105).

*--footer for last page conditionally
  V_LINE = ( SY-LINCT - SY-LINNO ) - 1.
  SKIP V_LINE.

ENDFORM.                    " SHOW_LIST
*&---------------------------------------------------------------------*
*&      Form  BUILD_PAGE_FOOTER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BUILD_PAGE_FOOTER .
  WRITE:/90 'Page :', SY-PAGNO.
ENDFORM.                    " BUILD_PAGE_FOOTER

Classical Reports in SAP ABAP

Classical reports are simple reports in SAP ABAP, these are normal reports with only one output screen with out any user interaction.We will just out put dat with in the loop to develop a classical report.

CLASSICAL REPORTS CAN BE DEVELOPPED USING SOME EVENTS, REFER LIST OF EVENTS AVAILABLE IN SAP ABAP CLASSICAL REPORTS

.
REPORT  ZCLASSICAL_REPORT
        NO STANDARD PAGE HEADING
        LINE-SIZE 120
        LINE-COUNT 10(1).

*----------------------------------------------------------------------*
*       TYPES DECLARATIONS
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
*       TABLES DECLARATIONS
*----------------------------------------------------------------------*
TABLES: MARA,   "Material Master
        T001W.  "Plant Master

*----------------------------------------------------------------------*
*       DATA DECLARATIONS
*----------------------------------------------------------------------*
DATA: V_LINE TYPE I.

*----------------------------------------------------------------------*
*       CONSTANTS DECLARATIONS
*----------------------------------------------------------------------*

*----------------------------------------------------------------------*
*       INTERNAL TABLE DECLARATIONS
*----------------------------------------------------------------------*
DATA: BEGIN OF IT_MARD OCCURS 1,
        MATNR LIKE MARA-MATNR,
        MAKTX LIKE MAKT-MAKTX,
        WERKS LIKE MARD-WERKS,
        LGORT LIKE MARD-LGORT,
        LABST LIKE MARD-LABST,
      END OF IT_MARD.

*----------------------------------------------------------------------*
*       SELECTION SCREEN DESIGN
*----------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-H01.
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR,
                S_WERKS FOR T001W-WERKS.
PARAMETERS: P1 TYPE I.
SELECTION-SCREEN: END OF BLOCK B1.

*----------------------------------------------------------------------*
*       INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
  S_MATNR-LOW = '100-100'.  S_MATNR-HIGH = '100-500'.
  S_MATNR-SIGN = 'I'. S_MATNR-OPTION = 'BT'.
  APPEND S_MATNR.


  S_WERKS-LOW = '0001'.  S_WERKS-HIGH = '3800'.
  S_WERKS-SIGN = 'I'. S_WERKS-OPTION = 'BT'.
  APPEND S_WERKS.

*----------------------------------------------------------------------*
*       AT SELECTION SCREEN OUTPUT
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF SCREEN-NAME = 'S_WERKS-LOW'.
      SCREEN-REQUIRED = 1.
*      SCREEN-INPUT = 0.
*      SCREEN-INVISIBLE = 1.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

*----------------------------------------------------------------------*
*       AT SELECTION SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.

*----------------------------------------------------------------------*
*       AT SELECTION SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON S_WERKS.
  IF NOT S_WERKS[] IS initial.
    PERFORM VALIDATE_PLANT.
  ENDIF.

*----------------------------------------------------------------------*
*       AT SELECTION SCREEN ON VALUE REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_WERKS-LOW.
  MESSAGE I000(Z00) WITH 'On Value Request'.

*----------------------------------------------------------------------*
*       AT SELECTION SCREEN ON HELP REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON HELP-REQUEST FOR P1.
  MESSAGE I000(Z00) WITH 'On Help Request'.


*----------------------------------------------------------------------*
*       START-OF-SELECTION
*----------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM GET_DATA.


*----------------------------------------------------------------------*
*       END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
  PERFORM SHOW_LIST.

*----------------------------------------------------------------------*
*       TOP-OF-PAGE
*----------------------------------------------------------------------*
TOP-OF-PAGE.
  PERFORM BUILD_PAGE_HEADER.


*----------------------------------------------------------------------*
*       END-OF-PAGE
*----------------------------------------------------------------------*
END-OF-PAGE.
  PERFORM BUILD_PAGE_FOOTER.


*&---------------------------------------------------------------------*
*&      Form  VALIDATE_PLANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM VALIDATE_PLANT .
  SELECT WERKS
    FROM T001W
    INTO T001W-WERKS
    UP TO 1 ROWS
    WHERE WERKS IN S_WERKS.

  ENDSELECT.

  IF SY-SUBRC <> 0.
    MESSAGE E000(Z00) WITH 'Invalid Range of Plants' S_WERKS-LOW 'And'
S_WERKS-HIGH.
  ENDIF.

ENDFORM.                    " VALIDATE_PLANT
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_DATA .
  SELECT A~MATNR
         B~MAKTX
         C~WERKS
         C~LGORT
         C~LABST
    INTO TABLE IT_MARD
    FROM MARA AS A
    INNER JOIN MAKT AS B
    ON B~MATNR = A~MATNR
    INNER JOIN MARD AS C
    ON C~MATNR = A~MATNR
    WHERE A~MATNR IN S_MATNR
    AND   C~WERKS IN S_WERKS
    AND     SPRAS = SY-LANGU.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_PAGE_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BUILD_PAGE_HEADER .
  FORMAT INTENSIFIED ON COLOR COL_HEADING.
  ULINE AT (105).
  WRITE:/ SY-VLINE,
          'Material No',
       20 SY-VLINE,
          'Material Desc',
       62 SY-VLINE,
          'Plant',
       72 SY-VLINE,
          'Str.Loc',
       81 SY-VLINE,
          'Qty',
      105 SY-VLINE.
  ULINE AT (105).
  FORMAT RESET.
ENDFORM.                    " BUILD_PAGE_HEADER
*&---------------------------------------------------------------------*
*&      Form  SHOW_LIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SHOW_LIST .
  LOOP AT IT_MARD.
    WRITE:/ SY-VLINE,
            IT_MARD-MATNR,
         20 SY-VLINE,
            IT_MARD-MAKTX,
         62 SY-VLINE,
           IT_MARD-WERKS,
         72 SY-VLINE,
            IT_MARD-LGORT,
         81 SY-VLINE,
            IT_MARD-LABST,
        105 SY-VLINE.
  ENDLOOP.
  ULINE AT (105).

*--footer for last page conditionally
  V_LINE = ( SY-LINCT - SY-LINNO ) - 1.
  SKIP V_LINE.

ENDFORM.                    " SHOW_LIST
*&---------------------------------------------------------------------*
*&      Form  BUILD_PAGE_FOOTER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BUILD_PAGE_FOOTER .
  WRITE:/90 'Page :', SY-PAGNO.
ENDFORM.                    " BUILD_PAGE_FOOTER