Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Sales order

Former Member
0 Kudos

develoed an ALv report for incomplete sales order and to provide facility to release the oreder for billing.

Could you tell me from which tables i will get the information and what to do?

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi Kumar,

if you click on the customer number/sales order you should get the customer details/sales details etc

This is an interactive report..

Example program

This is your grid FM..

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' Or grid display

EXPORTING

I_CALLBACK_PROGRAM = GT_REPID

:

I_CALLBACK_USER_COMMAND = 'F_USER_COMMAND' " FORM NAME

:

:

IT_FIELDCAT = GT_FIELDCAT

.....................................

TABLES

T_OUTTAB = ITAB

...........................

This you should write for your double click

FORM F_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM

RS_SELFIELD TYPE SLIS_SELFIELD.

CASE r_ucomm.

WHEN '&Ic1'. "double click

CASE rs_selfield-fieldname. "field name

WHEN <your field name>.

IF NOT fp_selfield-value IS INITIAL.

*Setting parameter id for sales order

SET PARAMETER ID c_aun FIELD fp_selfield-value.

*FM for Call transaction "VA03"

CALL FUNCTION 'ABAP4_CALL_TRANSACTION'

EXPORTING

tcode = l_c_va03 " VA03

skip_screen = c_x. "'X'

ENDIF.

WHEN OTHERS.

MESSAGE i078. "Wrong Click msg

LEAVE LIST-PROCESSING.

ENDCASE.

ENDCASE.

ENDFORM.

Program displays data using function modules like REUSE_ALV_LIST_DISPLAY, REUSE_ALV_POPUP_TO_SELECT, REUSE_ALV_GRID_DISPLAY

&----


*& Report ZALV_SAMPLE *

*& *

&----


*& Program for displaying data using function modules : *

*& REUSE_ALV_LIST_DISPLAY *

*& REUSE_ALV_POPUP_TO_SELECT *

*& REUSE_ALV_GRID_DISPLAY *

*& *

&----


REPORT ZALV_SAMPLE .

TABLES VBAK.

DATA it_vbak LIKE VBAK OCCURS 0 WITH HEADER LINE.

SELECTION-SCREEN uline.

PARAMETERS: ALV1 RADIOBUTTON GROUP ALV, "REUSE_ALV_LIST_DISPLAY

ALV2 RADIOBUTTON GROUP ALV, "REUSE_ALV_POPUP_TO_SELECT

ALV3 RADIOBUTTON GROUP ALV, "REUSE_ALV_GRID_DISPLAY

ALV4 RADIOBUTTON GROUP ALV. " NORMAL DISPLAY

SELECTION-SCREEN uline.

SELECT * FROM VBAK

INTO CORRESPONDING FIELDS OF TABLE it_vbak

UP TO 10 ROWS.

IF ALV1 = 'X'.

PERFORM ALV_FUNC1.

ELSEIF ALV2 = 'X'.

PERFORM ALV_FUNC2.

ELSEIF ALV3 = 'X'.

PERFORM ALV_FUNC3.

ELSEIF ALV4 = 'X'.

PERFORM NORM.

ENDIF.

&----


*& Form ALV_FUNC1

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM ALV_FUNC1 .

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

I_STRUCTURE_NAME = 'VBAK'

TABLES

T_OUTTAB = it_vbak

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2

.

IF SY-SUBRC <> 0.

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

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

ENDIF.

ENDFORM. " ALV_FUNC1

&----


*& Form ALV_FUNC2

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM ALV_FUNC2 .

CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'

EXPORTING

I_TITLE = 'SALES ORDER INFO'

I_ZEBRA = 'X'

I_TABNAME = 1

I_STRUCTURE_NAME = 'vbak'

TABLES

T_OUTTAB = it_vbak

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2

.

IF SY-SUBRC <> 0.

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

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

ENDIF.

ENDFORM. " ALV_FUNC2

&----


*& Form ALV_FUNC3

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM ALV_FUNC3 .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

I_STRUCTURE_NAME = 'vbak'

I_GRID_TITLE = 'SALES ORDER INFO'

TABLES

T_OUTTAB = it_vbak

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2

.

IF SY-SUBRC <> 0.

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

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

ENDIF.

ENDFORM. " ALV_FUNC3

&----


*& Form NORM

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM NORM .

format intensified.

skip 1.

WRITE: /'SALES DOC.',

' Created on ',

' Time',

' Created by',

' Valid from ',

' Sold-to party'.

format intensified off.

skip 2.

LOOP AT it_vbak.

write: / it_vbak-vbeln,' ',

it_vbak-erdat,' ',

it_vbak-erzet,' ',

it_vbak-ERNAM,' ',

it_vbak-ANGDT,' ',

it_vbak-KUNNR.

endloop.

ENDFORM. " NORM

see this link too

http://www.sap-basis-abap.com/abap/to-call-transaction-in-alv.htm

thanks

abdul

reward me if usfull

3 REPLIES 3

Former Member
0 Kudos

Hi Kumar,

if you click on the customer number/sales order you should get the customer details/sales details etc

This is an interactive report..

Example program

This is your grid FM..

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' Or grid display

EXPORTING

I_CALLBACK_PROGRAM = GT_REPID

:

I_CALLBACK_USER_COMMAND = 'F_USER_COMMAND' " FORM NAME

:

:

IT_FIELDCAT = GT_FIELDCAT

.....................................

TABLES

T_OUTTAB = ITAB

...........................

This you should write for your double click

FORM F_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM

RS_SELFIELD TYPE SLIS_SELFIELD.

CASE r_ucomm.

WHEN '&Ic1'. "double click

CASE rs_selfield-fieldname. "field name

WHEN <your field name>.

IF NOT fp_selfield-value IS INITIAL.

*Setting parameter id for sales order

SET PARAMETER ID c_aun FIELD fp_selfield-value.

*FM for Call transaction "VA03"

CALL FUNCTION 'ABAP4_CALL_TRANSACTION'

EXPORTING

tcode = l_c_va03 " VA03

skip_screen = c_x. "'X'

ENDIF.

WHEN OTHERS.

MESSAGE i078. "Wrong Click msg

LEAVE LIST-PROCESSING.

ENDCASE.

ENDCASE.

ENDFORM.

Program displays data using function modules like REUSE_ALV_LIST_DISPLAY, REUSE_ALV_POPUP_TO_SELECT, REUSE_ALV_GRID_DISPLAY

&----


*& Report ZALV_SAMPLE *

*& *

&----


*& Program for displaying data using function modules : *

*& REUSE_ALV_LIST_DISPLAY *

*& REUSE_ALV_POPUP_TO_SELECT *

*& REUSE_ALV_GRID_DISPLAY *

*& *

&----


REPORT ZALV_SAMPLE .

TABLES VBAK.

DATA it_vbak LIKE VBAK OCCURS 0 WITH HEADER LINE.

SELECTION-SCREEN uline.

PARAMETERS: ALV1 RADIOBUTTON GROUP ALV, "REUSE_ALV_LIST_DISPLAY

ALV2 RADIOBUTTON GROUP ALV, "REUSE_ALV_POPUP_TO_SELECT

ALV3 RADIOBUTTON GROUP ALV, "REUSE_ALV_GRID_DISPLAY

ALV4 RADIOBUTTON GROUP ALV. " NORMAL DISPLAY

SELECTION-SCREEN uline.

SELECT * FROM VBAK

INTO CORRESPONDING FIELDS OF TABLE it_vbak

UP TO 10 ROWS.

IF ALV1 = 'X'.

PERFORM ALV_FUNC1.

ELSEIF ALV2 = 'X'.

PERFORM ALV_FUNC2.

ELSEIF ALV3 = 'X'.

PERFORM ALV_FUNC3.

ELSEIF ALV4 = 'X'.

PERFORM NORM.

ENDIF.

&----


*& Form ALV_FUNC1

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM ALV_FUNC1 .

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

I_STRUCTURE_NAME = 'VBAK'

TABLES

T_OUTTAB = it_vbak

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2

.

IF SY-SUBRC <> 0.

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

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

ENDIF.

ENDFORM. " ALV_FUNC1

&----


*& Form ALV_FUNC2

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM ALV_FUNC2 .

CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'

EXPORTING

I_TITLE = 'SALES ORDER INFO'

I_ZEBRA = 'X'

I_TABNAME = 1

I_STRUCTURE_NAME = 'vbak'

TABLES

T_OUTTAB = it_vbak

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2

.

IF SY-SUBRC <> 0.

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

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

ENDIF.

ENDFORM. " ALV_FUNC2

&----


*& Form ALV_FUNC3

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM ALV_FUNC3 .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

I_STRUCTURE_NAME = 'vbak'

I_GRID_TITLE = 'SALES ORDER INFO'

TABLES

T_OUTTAB = it_vbak

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2

.

IF SY-SUBRC <> 0.

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

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

ENDIF.

ENDFORM. " ALV_FUNC3

&----


*& Form NORM

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM NORM .

format intensified.

skip 1.

WRITE: /'SALES DOC.',

' Created on ',

' Time',

' Created by',

' Valid from ',

' Sold-to party'.

format intensified off.

skip 2.

LOOP AT it_vbak.

write: / it_vbak-vbeln,' ',

it_vbak-erdat,' ',

it_vbak-erzet,' ',

it_vbak-ERNAM,' ',

it_vbak-ANGDT,' ',

it_vbak-KUNNR.

endloop.

ENDFORM. " NORM

see this link too

http://www.sap-basis-abap.com/abap/to-call-transaction-in-alv.htm

thanks

abdul

reward me if usfull

Former Member
0 Kudos

Hi,

You can get the Sales Order Status from the below tables.

VBUK - Header

VBUP - Item

Delivery tables are>

LIPS,LIKP

Billing Related tables are>

VBRK,VBRP.

Regards

Kiran Sure

Former Member
0 Kudos

Hi Kumar,

I developed a report which will display all open return orders which is similar to your requirement.I used the table VBAK,VBAP,VBRK(to know the status of order),VBFA(document flow),VBUK

Find the report which i wrote


REPORT  ZVSAR152A_SO_RETURN_ORDER.
*&---------------------------------------------------------------------------*
*&                          TYPE-POOLS                                       *
*&---------------------------------------------------------------------------*

TYPE-POOLS : SLIS.

*&---------------------------------------------------------------------------*
*&                     TYPES DECLARATION                                     *
*&---------------------------------------------------------------------------*
*****Final Output Structure****
TYPES : BEGIN OF TY_FINAL,
          RFBSK   TYPE RFBSK,                               "Status for transfer to accounting
          AUART   TYPE AUART,                               "Sales Document Type
          KUNNR   TYPE KUNAG,                               "Sold-to party
          VBELN   TYPE VBELN,                               "Sales Document
          POSNR   TYPE POSNR_VA,                            "Sales Document Item
          MATNR   TYPE MATNR,                               "Material Number
          WWBRD   TYPE RKEG_WWBRD,                          "Brand
          WWCAT   TYPE RKEG_WWCAT,                          "Category
          KWMENG  TYPE KWMENG,                              "Cumulative order quantity in sales units
          WWSCT   TYPE RKEG_WWSCT,                          "Sub Category
          VRKME   TYPE VRKME,                               "Sales Unit
          NTGEW   TYPE NTGEW_AP,                            "Net Weight of the Item
          GEWEI   TYPE GEWEI,                               "Weight Unit
          PRCTR   TYPE PRCTR,                               "Profit Center
          VDATU   TYPE EDATU_VBAK,                          "Requested delivery date
          KSCHL   TYPE KSCHA,                               "Condition type
          STPRS   TYPE STPRS,                               "Standard price
          ZCOGS   TYPE ZCOGS_CHECKBOX,                      "Cogs Flag
          KWERT   TYPE KWERT,                               "Condition value
          FAKSK   TYPE FAKSK,                               "Billing block in SD document
          ERPGI   TYPE ZERPGI,                              "Flag for failed PGI
          PRODH   TYPE PRODH_D,                             "Product hierarchy
        END OF TY_FINAL.

* Structure and table types for Sales doc.no.
TYPES: BEGIN OF TY_S_VBELN,
         VBELN    TYPE VBELN_VA,
         MESTYP   TYPE EDI_MESTYP,
       END OF TY_S_VBELN.

****VBAK Structure****
TYPES : BEGIN OF TY_VBAK,
          VBELN   TYPE VBELN,                               "Sales Document
          AUART   TYPE AUART,                               "Sales Document Type
          FAKSK   TYPE FAKSK,                               "Billing block in SD document
          KNUMV   TYPE KNUMV,                               "Number of the document condition
          VDATU   TYPE EDATU_VBAK,                          "Requested delivery date
          KUNNR   TYPE KUNAG,                               "Sold-to party
          ERPGI   TYPE CHAR1,                               "Flag for Failed PGI
          MESTYP  TYPE EDI_MESTYP,                          "
        END OF TY_VBAK.

****VBFA Structure****
TYPES : BEGIN OF TY_VBFA,
         VBELV    TYPE VBELN_VON,                           "Preceding sales and distribution document
         POSNV    TYPE POSNR_VON,                           "Preceding item of an SD document
         VBELN    TYPE VBELN_NACH,                          "Subsequent sales and distribution document
         POSNN    TYPE POSNR_NACH,                          "Subsequent item of an SD document
         VBTYP_N  TYPE VBTYP_N,                             "Document category of subsequent document
         VBTYP_V  TYPE VBTYP_V,                             "Document category of preceding SD document
       END OF TY_VBFA.

****VBAP Structure****
TYPES : BEGIN OF TY_VBAP,
          VBELN   TYPE VBELN,                               "Sales Document
          POSNR   TYPE POSNR_VA,                            "Sales Document Item
          MATNR   TYPE MATNR,                               "Material Number
          PRODH   TYPE PRODH_D,                             "Product hierarchy
          KWMENG  TYPE KWMENG,                              "Cumulative order quantity in sales units
          VRKME   TYPE VRKME,                               "Sales Unit
          NTGEW   TYPE NTGEW_AP,                            "Net Weight of the Item
          GEWEI   TYPE GEWEI,                               "Weight Unit
          WERKS   TYPE WERKS_EXT,                           "Plant
          BWTAR   TYPE BWTAR_D,                             "Valuation type
          PRCTR   TYPE PRCTR,                               "Profit Center
        END OF TY_VBAP.

****VBRK Structure
TYPES : BEGIN OF TY_VBRK,
          VBELN   TYPE VBELN,                               "Sales Document
          KNUMV   TYPE KNUMV,                               "Number of the document condition
          RFBSK   TYPE RFBSK,                               "Status for transfer to accounting
        END OF TY_VBRK.

****KONV Structure****
TYPES : BEGIN OF TY_KONV,
          KNUMV   TYPE KNUMV,                               "Number of the document condition
          KPOSN   TYPE KPOSN,                               "Condition item number
          KSCHL   TYPE KSCHA,                               "Condition type
          KWERT   TYPE KWERT,                               "Condition value
        END OF TY_KONV.


****MBEW Structure****
TYPES :  BEGIN OF TY_MBEW,
          MATNR   TYPE MATNR,                               "Material Number
          BWKEY   TYPE BWKEY,                               "Valuation area
          BWTAR   TYPE BWTAR_D,                             "Valuation type
          STPRS   TYPE STPRS,                               "Standard price
         END OF TY_MBEW.

*-----------------------------------------------------------------------------*
*                  G L O B A L  C O N S T A N T S                             *
*-----------------------------------------------------------------------------*
CONSTANTS: GC_X           TYPE CHAR1 VALUE 'X',
           GC_Z1LIKP1     TYPE EDILSEGTYP VALUE 'Z1LIKP1',
           GC_E1EDL20     TYPE EDILSEGTYP VALUE 'E1EDL20'.
CONSTANTS: GC_BETWEEN(2)  TYPE C VALUE 'BT',      "Between
           GC_EQUAL(2)    TYPE C VALUE 'EQ',      "Equal
           GC_TO(4)       TYPE C VALUE ' to '.    "To

DATA : V_VBTYP_N_R TYPE VBFA-VBTYP_N VALUE 'R',
       V_VBTYP_N_O TYPE VBFA-VBTYP_N VALUE 'O',
             SLIS_LIST_TYPE    TYPE SLIS_LIST_TYPE VALUE '0'.

*IDOC
CONSTANTS : LC_51         TYPE EDI_STATUS VALUE '51',
            LC_2          TYPE EDI_DIRECT VALUE '2',
            LC_ZDELVRY    TYPE EDI_MESTYP VALUE 'ZDELVRY',
            LC_ZEDIDELVRY TYPE EDI_MESTYP VALUE 'ZEDIDELVRY'.
*              LC_VFX3       type EDI_MESTYP value 'ZFX3'.



*-----------------------------------------------------------------------------*
*                       FIELD-SYMBOLS
*-----------------------------------------------------------------------------*
FIELD-SYMBOLS: <L_EVENT>  TYPE SLIS_ALV_EVENT.


*&----------------------------------------------------------------------------*
*&                    WorkAreas                                               *
*&----------------------------------------------------------------------------*
DATA : W_VBAK TYPE TY_VBAK,                           " work area for VBAK
       W_VBAK_IDOC TYPE TY_VBAK,                      " work area for VBAK
       W_VBFA TYPE TY_VBFA,                           " work area for VBFA
       W_VBRK TYPE TY_VBRK,                           " work area for VBRK
       W_KONV TYPE TY_KONV,                           " work area for KONV
       W_VBAP TYPE TY_VBAP,                           " work area for VBAP
       W_MARA TYPE TY_MARA,                           "
       W_MBEW TYPE TY_MBEW,                           " work area for MBEW
       W_FINAL TYPE TY_FINAL,                         " work area for FINAL OUTPUT
       W_LAYOUT TYPE SLIS_LAYOUT_ALV,                 " Layout for the output
       W_FIELDCAT TYPE SLIS_FIELDCAT_ALV.             " work area forfield catalog.

*&---------------------------------------------------------------------------*
*&                    INTERNAL TABLES                                        *
*&---------------------------------------------------------------------------*
DATA : I_VBAK      TYPE TABLE OF TY_VBAK,             " Internal table for VBAK
       I_VBAK_IDOC TYPE TABLE OF TY_VBAK,             " Internal table for VBAK
       I_VBFA      TYPE TABLE OF TY_VBFA,             " Internal table for VBFA
       I_VBRK      TYPE TABLE OF TY_VBRK,             " Internal table for VBRK
       IT_KONV     TYPE TABLE OF TY_KONV,             " Internal table for KONV
       I_VBAP      TYPE TABLE OF TY_VBAP,             " Internal table for VBAP
       I_MARA      TYPE TABLE OF TY_MARA,             "
       I_MBEW      TYPE TABLE OF TY_MBEW,             " Internal table for MBEW
       I_FINAL     TYPE TABLE OF TY_FINAL,            " Internal table for final output
       I_FIELDCAT  TYPE SLIS_T_FIELDCAT_ALV,          " Internal table for fieldcatlog
       I_EVENTS    TYPE SLIS_T_EVENT.

*&---------------------------------------------------------------------------*
*&                    VARIABLES                                              *
*&---------------------------------------------------------------------------*
DATA : V_AUART     TYPE VBAK-AUART,                   "document type
       V_VDATU     TYPE VBAK-VDATU,                   "delivery date
       V_TVAK      TYPE TVAK-AUART.                   "check table field for document type.

DATA : GT_OUTPUT   TYPE STANDARD TABLE OF ZCOPA_REVENUE_RECOGNITION.

*&---------------------------------------------------------------------------*
*&                 SELECTION-SCREEN DESIGN                                   *
*&---------------------------------------------------------------------------*
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_DOCTYP FOR V_AUART,            "Sales Document Type
                 S_DATE FOR V_VDATU.              "delivery date
SELECTION-SCREEN : END OF BLOCK B1.

*&---------------------------------------------------------------------------*
*&                    AT SELECTION SCREEN ON FIELD                           *
*&---------------------------------------------------------------------------*
AT SELECTION-SCREEN ON S_DOCTYP.
*  Perform to Validate sales document type.
  PERFORM FIELD_VALIDATION.




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

* Get SO from all the failed ship confirms(PGI)IDoc'S.(msg type:ZDELVRY)
  PERFORM FETCH_FAILED_IDOCS.

*  Perform to get Sales Document: Header Data
  PERFORM GET_DATA_VBAK.
  IF I_VBAK[] IS NOT INITIAL.
*  Perform to get Sales Document Flow
    PERFORM GET_DATA_VBAK_VBFA.
*  Perform to get Billing Document: Header Data
    PERFORM GET_VBAK_VBRK.
*  Perform to get the Conditions (Transaction Data)
    PERFORM GET_VBAK_KONV.
*  Perform to get Sales Document: Item Data
    PERFORM GET_VBAK_VBAP.
  ENDIF.
  IF I_VBAP[] IS NOT INITIAL.
*  Perform to get Material Valuation
    PERFORM GET_VBAP_MBEW.
  ENDIF.
*  Perform to populate the output data
  PERFORM POPULATE_FINAL_TABLE.
*  Perform to populate layout of the output data
  PERFORM POPULATE_LAYOUT.
*  Perform to populate fieldcatalog of the output data
  PERFORM POPULATE_FIELDCAT.
*  Perform to populate Events table
  PERFORM GET_EVENTS.
*  Perform to add events
  PERFORM ADD_EVENT USING SLIS_EV_TOP_OF_PAGE .
**  Perform to display  the output data in grid pattern
  PERFORM GRID_DISPLAY.

*
*&---------------------------------------------------------------------------*
*&      Form  field_validation
*&---------------------------------------------------------------------------*
FORM FIELD_VALIDATION .

  SELECT SINGLE
         AUART
         FROM TVAK
         INTO V_TVAK
         WHERE AUART IN S_DOCTYP.

  IF SY-SUBRC <> 0 .
    MESSAGE E000(ZSD)." WITH 'Enter Valid Document Type'.
  ENDIF.

ENDFORM.                    " field_validation



*&---------------------------------------------------------------------------*
FORM FETCH_FAILED_IDOCS .
*----------------------------------------------------------------------------*
  TYPES: BEGIN OF TY_IDOC,
          MESTYP  TYPE EDI_MESTYP,
          DOCNUM  TYPE EDI_DOCNUM,
         END OF TY_IDOC,
    TY_T_IDOC TYPE STANDARD TABLE OF TY_IDOC.

  DATA:
    LS_F_IDOC   TYPE TY_IDOC,                    "Work area for ty_Idoc structure
    LT_F_IDOC   TYPE TY_T_IDOC,                  "Internal table for ty_Idoc structure
    LT_EDIDD    TYPE STANDARD TABLE OF EDIDD,    "Internal table for IDoc Data records
    LS_EDIDD    TYPE EDIDD,                      "Work area for IDoc Data Record
    LS_LIKP1    TYPE Z1LIKP1,                    "
    LS_E1EDL20  TYPE E1EDL20,                    "Work are for Delivery Header
    LS_VBELN    TYPE TY_S_VBELN.                 "Work are for Sales Document number

  DATA : GT_VBELN  TYPE TABLE OF  TY_S_VBELN.    "Int table to store SO numbers

* Get all the ship confirm idoc no. that have failed (Status 51)
  SELECT MESTYP DOCNUM
         INTO TABLE LT_F_IDOC
         FROM EDIDC
         WHERE STATUS EQ LC_51
           AND DIRECT EQ LC_2
           AND MESTYP IN (LC_ZDELVRY, LC_ZEDIDELVRY).

* Sort all IDOC's by message type...
  SORT LT_F_IDOC BY MESTYP DOCNUM.
  LOOP AT LT_F_IDOC INTO LS_F_IDOC.

* Initialize workarea...
    REFRESH: LT_EDIDD.
    CLEAR:  LS_EDIDD.

* Read compelete IDOC...
    CALL FUNCTION 'IDOC_READ_COMPLETELY'
      EXPORTING
        DOCUMENT_NUMBER         = LS_F_IDOC-DOCNUM
      TABLES
        INT_EDIDD               = LT_EDIDD
      EXCEPTIONS
        DOCUMENT_NOT_EXIST      = 1
        DOCUMENT_NUMBER_INVALID = 2
        OTHERS                  = 3.

    IF SY-SUBRC <> 0.
      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
              WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

* IDOC's coming from Internal warehouses via MQ...
    IF LS_F_IDOC-MESTYP EQ LC_ZDELVRY.
*   Read Segment Z1LIKP1 fields
      READ TABLE LT_EDIDD INTO LS_EDIDD WITH KEY SEGNAM = GC_Z1LIKP1.
      IF SY-SUBRC EQ 0.
        MOVE LS_EDIDD-SDATA TO LS_LIKP1.
        LS_VBELN-VBELN = LS_LIKP1-VBELN.
        LS_VBELN-MESTYP = LC_ZDELVRY.
        APPEND LS_VBELN TO GT_VBELN.
        CLEAR LS_VBELN.
      ENDIF.

* IDOC's coming from 3PL's via Gentran...
    ELSEIF LS_F_IDOC-MESTYP EQ LC_ZEDIDELVRY.
*   Read Segment Z1LIKP1 fields
      READ TABLE LT_EDIDD INTO LS_EDIDD WITH KEY SEGNAM = GC_E1EDL20.
      IF SY-SUBRC EQ 0.
        MOVE LS_EDIDD-SDATA TO LS_E1EDL20.
        LS_VBELN-VBELN  = LS_E1EDL20-VBELN.
        LS_VBELN-MESTYP = LC_ZEDIDELVRY.
        APPEND LS_VBELN TO GT_VBELN.
        CLEAR LS_VBELN.
      ENDIF.
    ENDIF.
  ENDLOOP.

* Sort SO's retrieved
  SORT GT_VBELN BY VBELN MESTYP.

* Delete duplicate orders records if any...
  DELETE ADJACENT DUPLICATES FROM GT_VBELN.

  IF NOT GT_VBELN[] IS INITIAL.
* Select order header data...
    SELECT VBELN
           AUART
           FAKSK
           KNUMV
           VDATU
           KUNNR
      FROM VBAK
      INTO TABLE I_VBAK_IDOC
      FOR ALL ENTRIES IN GT_VBELN
      WHERE VBELN = GT_VBELN-VBELN
        AND AUART IN S_DOCTYP
        AND FAKSK NE SPACE
        AND VDATU IN S_DATE.
  ENDIF.

* Mark these orders as Failed PGI idocs
  LOOP AT I_VBAK_IDOC INTO W_VBAK_IDOC.
    W_VBAK_IDOC-ERPGI = GC_X.
* Read message type where the order came from...
    READ TABLE GT_VBELN INTO LS_VBELN WITH KEY VBELN = W_VBAK-VBELN.
    IF SY-SUBRC EQ 0.
      W_VBAK_IDOC-MESTYP = LS_VBELN-MESTYP.
    ENDIF.
    MODIFY I_VBAK_IDOC FROM W_VBAK_IDOC TRANSPORTING ERPGI MESTYP.
  ENDLOOP.

ENDFORM.                    " fetch_failed_idocs

*&---------------------------------------------------------------------------*
*&      Form  get_data_vbak
*&---------------------------------------------------------------------------*
FORM GET_DATA_VBAK .
  SELECT VBELN
         AUART
         FAKSK
         KNUMV
         VDATU
         KUNNR
    FROM VBAK
    INTO TABLE I_VBAK
*    WHERE VBELN LIKE '4%'
*      AND AUART IN S_DOCTYP
*      AND FAKSK NE SPACE
*      AND VDATU IN S_DATE.
WHERE  AUART IN S_DOCTYP
      AND FAKSK NE SPACE
      AND VDATU IN S_DATE.
  IF SY-SUBRC EQ 0.
    SORT I_VBAK BY VBELN.
  else.
    MESSAGE E001(ZSD).
  ENDIF.
ENDFORM.                    " get_data_vbak

*&---------------------------------------------------------------------------*
*&      Form  GET_DATA_VBAK_vbfa
*&---------------------------------------------------------------------------*
FORM GET_DATA_VBAK_VBFA .
  DATA : V_TABIX TYPE SY-TABIX.

  SELECT VBELV
         POSNV
         VBELN
         POSNN
         VBTYP_N
         VBTYP_V
    FROM VBFA
    INTO TABLE I_VBFA
    FOR ALL ENTRIES IN I_VBAK
    WHERE VBELV = I_VBAK-VBELN
*     AND  ( VBTYP_N NE V_VBTYP_N_R
*     OR   VBTYP_N NE V_VBTYP_N_O ).
      AND  VBTYP_N EQ V_VBTYP_N_R.

  LOOP AT I_VBAK INTO W_VBAK.
    V_TABIX = SY-TABIX.
    READ TABLE I_VBFA INTO W_VBFA
         WITH KEY VBELV = W_VBAK-VBELN.

    IF SY-SUBRC NE 0.
      DELETE I_VBAK  INDEX V_TABIX.
    ENDIF.
  ENDLOOP.

  LOOP AT I_VBAK INTO W_VBAK.
    READ TABLE I_VBAK_IDOC INTO W_VBAK_IDOC
       WITH KEY VBELN = W_VBAK-VBELN.
    IF SY-SUBRC NE 0.
* Record exists...dont update...continue...
      CONTINUE.
    ELSE.
      W_VBAK-ERPGI = W_VBAK_IDOC-ERPGI.
      W_VBAK-MESTYP = W_VBAK_IDOC-MESTYP.
      MODIFY I_VBAK FROM W_VBAK TRANSPORTING ERPGI MESTYP.

    ENDIF.

  ENDLOOP.
  SORT I_VBAK BY VBELN.
ENDFORM.                    " GET_DATA_VBAK_vbfa

*&---------------------------------------------------------------------------*
*&      Form  get_vbak_vbrk
*&---------------------------------------------------------------------------*
FORM GET_VBAK_VBRK .
  SELECT VBELN
         KNUMV
         RFBSK
    FROM VBRK
    INTO TABLE I_VBRK
    FOR ALL ENTRIES IN I_VBAK
    WHERE VBELN = I_VBAK-VBELN.
  IF SY-SUBRC EQ 0.
    SORT I_VBRK BY VBELN.
  ENDIF.
ENDFORM.                    " get_vbap_vbrk

*&---------------------------------------------------------------------------*
*&      Form  get_vbrk_konv
*&---------------------------------------------------------------------------*
FORM GET_VBAK_KONV .

  SELECT KNUMV
         KPOSN
         KSCHL
         KWERT
    FROM KONV
    INTO TABLE IT_KONV
    FOR ALL ENTRIES IN I_VBAK
    WHERE KNUMV = I_VBAK-KNUMV
*Suppress lines with zero amounts.
  AND KWERT NE 0
  AND NOT ( KSTAT = 'X' AND KRUEK = ' ' ).
  IF SY-SUBRC EQ 0.
    SORT IT_KONV BY KNUMV.
  ENDIF.
ENDFORM.                    " get_vbrk_konv





*&---------------------------------------------------------------------------*
*&      Form  get_vbak_vbap
*&---------------------------------------------------------------------------*
FORM GET_VBAK_VBAP .
  SELECT VBELN
         POSNR
         MATNR
         PRODH
         KWMENG
         VRKME
         NTGEW
         GEWEI
         WERKS
         BWTAR
         PRCTR
    FROM VBAP
    INTO TABLE I_VBAP
    FOR ALL ENTRIES IN I_VBAK
    WHERE VBELN = I_VBAK-VBELN.
  IF SY-SUBRC EQ 0.
    SORT I_VBAP BY VBELN.
  ENDIF.
ENDFORM.                    " get_vbak_vbap


*&---------------------------------------------------------------------------*
*&      Form  get_vbap_mbew
*&---------------------------------------------------------------------------*
FORM GET_VBAP_MBEW .
  SELECT MATNR
         BWKEY
         BWTAR
         STPRS
    FROM MBEW
    INTO TABLE I_MBEW
    FOR ALL ENTRIES IN I_VBAP
    WHERE MATNR = I_VBAP-MATNR
*      AND BWTAR = I_VBAP-BWTAR.
     AND  BWKEY = I_VBAP-WERKS.
  IF SY-SUBRC EQ 0.
    SORT I_MBEW BY MATNR.
  ENDIF.
ENDFORM.                    " get_vbap_mbew


*&---------------------------------------------------------------------------*
*&      Form  populate_final_table
*&---------------------------------------------------------------------------*
FORM POPULATE_FINAL_TABLE.
  LOOP AT I_VBAK INTO W_VBAK.
    IF W_VBAK-VDATU IS NOT INITIAL.
      W_FINAL-AUART    = W_VBAK-AUART.
      W_FINAL-KUNNR    = W_VBAK-KUNNR.
      W_FINAL-VDATU    = W_VBAK-VDATU.
      W_FINAL-ERPGI    = W_VBAK-ERPGI.
      W_FINAL-FAKSK    = W_VBAK-FAKSK.
      IF W_FINAL-FAKSK NE ''.
        W_FINAL-FAKSK = 'Y'.
      ENDIF.
      LOOP AT  IT_KONV INTO W_KONV WHERE KNUMV = W_VBAK-KNUMV.
        AT NEW KPOSN.
          READ TABLE I_VBAP INTO W_VBAP WITH KEY VBELN = W_VBAK-VBELN
                                                   POSNR = W_KONV-KPOSN.
          IF SY-SUBRC = 0.
            READ TABLE I_MBEW INTO W_MBEW WITH KEY MATNR = W_VBAP-MATNR
                                                  BWKEY = W_VBAP-WERKS.

            READ TABLE I_VBRK INTO W_VBRK WITH KEY VBELN = W_VBAP-VBELN.
          ENDIF.
        ENDAT.

        W_FINAL-VBELN   = W_VBAP-VBELN.
        W_FINAL-POSNR   = W_VBAP-POSNR.
        W_FINAL-MATNR   = W_VBAP-MATNR.
        W_FINAL-WWBRD   = W_VBAP-PRODH+8(3).
        W_FINAL-WWCAT   = W_VBAP-PRODH+2(3).
        W_FINAL-KWMENG  = W_VBAP-KWMENG.
        W_FINAL-WWSCT   = W_VBAP-PRODH+5(3).
        W_FINAL-VRKME   = W_VBAP-VRKME.
        W_FINAL-NTGEW   = W_VBAP-NTGEW.
        W_FINAL-GEWEI   = W_VBAP-GEWEI.
        W_FINAL-PRCTR   = W_VBAP-PRCTR.
        W_FINAL-PRODH   = W_VBAP-PRODH.
        W_FINAL-STPRS   = W_MBEW-STPRS.
        W_FINAL-RFBSK   = W_VBRK-RFBSK.
        W_FINAL-KSCHL   = W_KONV-KSCHL.
        W_FINAL-KWERT   = W_KONV-KWERT.

* Evaluate whether each output line has ZCGS condition type on it.
        IF W_FINAL-KSCHL NE 'ZCGS'.
          W_FINAL-ZCOGS   = 'X'.
        ENDIF.
        FREE : W_VBAP-KWMENG,W_VBAP-NTGEW.
        APPEND W_FINAL TO I_FINAL.

      ENDLOOP.
      CLEAR :W_FINAL, W_VBAK,W_VBRK,W_KONV,W_VBAP,W_MBEW.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " populate_final_table

*&---------------------------------------------------------------------------*
*&      Form  populate_layout
*&---------------------------------------------------------------------------*
FORM POPULATE_LAYOUT .
  W_LAYOUT-ZEBRA = 'X'.
ENDFORM.                    " populate_layout

*&---------------------------------------------------------------------------*
*&      Form  populate_fieldcat
*&---------------------------------------------------------------------------*
FORM POPULATE_FIELDCAT .

  W_FIELDCAT-FIELDNAME      = 'RFBSK' .
  W_FIELDCAT-REF_FIELDNAME  = 'RFBSK'.
  W_FIELDCAT-REF_TABNAME    = 'VBRK'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'AUART' .
  W_FIELDCAT-REF_FIELDNAME  = 'AUART'.
  W_FIELDCAT-REF_TABNAME    = 'VBAK'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'KUNNR' .
  W_FIELDCAT-REF_FIELDNAME  = 'KUNNR'.
  W_FIELDCAT-REF_TABNAME    = 'KNA1'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'VBELN' .
  W_FIELDCAT-REF_FIELDNAME  = 'VBELN'.
  W_FIELDCAT-REF_TABNAME    = 'VBAK'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'POSNR' .
  W_FIELDCAT-REF_FIELDNAME  = 'POSNR'.
  W_FIELDCAT-REF_TABNAME    = 'VBAP'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'MATNR' .
  W_FIELDCAT-REF_FIELDNAME  = 'MATNR'.
  W_FIELDCAT-REF_TABNAME    = 'VBAP'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'WWBRD' .
  W_FIELDCAT-REF_FIELDNAME  = 'WWBRD'.
  W_FIELDCAT-REF_TABNAME    = 'ZCOPA_REVENUE_RECOGNITION'.
  W_FIELDCAT-SELTEXT_M      = 'Brand'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'WWCAT' .
  W_FIELDCAT-REF_FIELDNAME  = 'WWCAT'.
  W_FIELDCAT-REF_TABNAME    = 'ZCOPA_REVENUE_RECOGNITION'.
  W_FIELDCAT-SELTEXT_M      = 'Category'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'KWMENG' .
  W_FIELDCAT-REF_FIELDNAME  = 'KWMENG'.
  W_FIELDCAT-REF_TABNAME    = 'VBAP'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'WWSCT' .
  W_FIELDCAT-REF_FIELDNAME  = 'WWSCT'.
  W_FIELDCAT-REF_TABNAME    = 'ZCOPA_REVENUE_RECOGNITION'.
  W_FIELDCAT-SELTEXT_M      = 'Sub Category'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'VRKME' .
  W_FIELDCAT-REF_FIELDNAME  = 'VRKME'.
  W_FIELDCAT-REF_TABNAME    = 'VBAP'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'NTGEW' .
  W_FIELDCAT-REF_FIELDNAME  = 'NTGEW'.
  W_FIELDCAT-REF_TABNAME    = 'ZCOPA_REVENUE_RECOGNITION'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'GEWEI'.
  W_FIELDCAT-REF_FIELDNAME  = 'GEWEI'.
  W_FIELDCAT-REF_TABNAME    = 'VBAP'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'PRCTR' .
  W_FIELDCAT-REF_FIELDNAME  = 'PRCTR'.
  W_FIELDCAT-REF_TABNAME    = 'VBAP'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'VDATU' .
  W_FIELDCAT-REF_FIELDNAME  = 'VDATU'.
  W_FIELDCAT-REF_TABNAME    = 'VBAK'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'KSCHL' .
  W_FIELDCAT-REF_FIELDNAME  = 'KSCHL'.
  W_FIELDCAT-REF_TABNAME    = 'KONV'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'STPRS' .
  W_FIELDCAT-REF_FIELDNAME  = 'STPRS'.
  W_FIELDCAT-REF_TABNAME    = 'MBEW'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'ZCOGS' .
*  W_FIELDCAT-REF_FIELDNAME  = ''.
  W_FIELDCAT-REF_TABNAME    = 'ZCOPA_REVENUE_RECOGNITION'.
*  W_FIELDCAT-SELTEXT_M      = 'Cogs Flag'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'KWERT' .
  W_FIELDCAT-REF_FIELDNAME  = 'KWERT'.
  W_FIELDCAT-REF_TABNAME    = 'KONV'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'FAKSK' .
  W_FIELDCAT-REF_FIELDNAME  = 'FAKSK'.
  W_FIELDCAT-REF_TABNAME    = 'VBAK'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'ERPGI' .
*  W_FIELDCAT-REF_FIELDNAME  = ''.
  W_FIELDCAT-REF_TABNAME    = 'ZCOPA_REVENUE_RECOGNITION'.
*  W_FIELDCAT-SELTEXT_L      = 'PGI Error Flag'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

  W_FIELDCAT-FIELDNAME      = 'PRODH' .
  W_FIELDCAT-REF_FIELDNAME  = 'PRODH'.
  W_FIELDCAT-REF_TABNAME    = 'VBAP'.
  APPEND W_FIELDCAT TO I_FIELDCAT.
  CLEAR W_FIELDCAT.

ENDFORM.                    " populate_fieldcat

*&---------------------------------------------------------------------*
*&      Form  GEI_EVENTS
*&---------------------------------------------------------------------*
FORM GET_EVENTS .
* Determine list of events by table type.
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE     = SLIS_LIST_TYPE
    IMPORTING
      ET_EVENTS       = I_EVENTS
    EXCEPTIONS
      LIST_TYPE_WRONG = 1
      OTHERS          = 2.

  IF SY-SUBRC <> 0.
  ENDIF.

ENDFORM.                    " GEI_EVENTS

*&---------------------------------------------------------------------*
*&      Form  ADD_EVENT
*&---------------------------------------------------------------------*
FORM ADD_EVENT  USING    EVENT.
  READ TABLE I_EVENTS WITH KEY NAME =  EVENT ASSIGNING <L_EVENT>.

  IF SY-SUBRC = 0.
    <L_EVENT>-FORM = EVENT.
  ENDIF.


ENDFORM.                    " ADD_EVENT


*&---------------------------------------------------------------------*
*&      Form  grid_display
*&---------------------------------------------------------------------*
FORM GRID_DISPLAY .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_INTERFACE_CHECK                 = SY-REPID
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
     I_CALLBACK_PROGRAM                = SY-REPID
*   I_CALLBACK_PF_STATUS_SET          = ' '
*   I_CALLBACK_USER_COMMAND           = ' '
*   I_CALLBACK_TOP_OF_PAGE            =
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '
*   I_STRUCTURE_NAME                  =
*   I_BACKGROUND_ID                   = ' '
*     I_GRID_TITLE                      = 'OPEN RETURN ORDERS'
*   I_GRID_SETTINGS                   =
     IS_LAYOUT                          = W_LAYOUT
     IT_FIELDCAT                        = I_FIELDCAT
*   IT_SORT                           =
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
*   I_DEFAULT                         = 'X'
*   I_SAVE                            = ' '
*   IS_VARIANT                        =
   IT_EVENTS                         = I_EVENTS
*   IT_EVENT_EXIT                     =
*   IS_PRINT                          =
*   IS_REPREP_ID                      =
    TABLES
      T_OUTTAB                          = I_FINAL.


ENDFORM.                    " grid_display


*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE
*&---------------------------------------------------------------------*
FORM TOP_OF_PAGE .
  DATA : I_LIST_TOP_OF_PAGE   TYPE SLIS_T_LISTHEADER.
  DATA :  W_LIST_TOP_OF_PAGE  TYPE SLIS_LISTHEADER.

  DATA : V_DOCTYP_LOW   TYPE VBAK-AUART,
         V_DOCTYP_HIGH  TYPE VBAK-AUART,
         V_DOCTYP       TYPE CHAR12,
         V_DATE         TYPE CHAR20,
         V_DATE_LOW     TYPE VBAK-VDATU,
         V_DATE_HIGH    TYPE VBAK-VDATU.

  CLEAR I_LIST_TOP_OF_PAGE.

*         typ(1)  type c,   " H = Header, S = Selection, A = Action
*         key(20) type c,
*         info    type slis_entry,

  W_LIST_TOP_OF_PAGE-TYP  = 'H'.
  W_LIST_TOP_OF_PAGE-INFO = 'SARALEE CORPORATION'.
  APPEND W_LIST_TOP_OF_PAGE TO I_LIST_TOP_OF_PAGE.
  CLEAR W_LIST_TOP_OF_PAGE.

  W_LIST_TOP_OF_PAGE-TYP  = 'S'.
  W_LIST_TOP_OF_PAGE-KEY  = 'Program Name :'.
  W_LIST_TOP_OF_PAGE-INFO = SY-REPID.
  APPEND W_LIST_TOP_OF_PAGE TO I_LIST_TOP_OF_PAGE.
  CLEAR W_LIST_TOP_OF_PAGE.

  LOOP AT S_DOCTYP.
    CASE S_DOCTYP-OPTION.
      WHEN GC_BETWEEN.
        V_DOCTYP_LOW  = S_DOCTYP-LOW.
        V_DOCTYP_HIGH = S_DOCTYP-HIGH.

        CONCATENATE  V_DOCTYP_LOW
                     V_DOCTYP_HIGH
                     INTO V_DOCTYP SEPARATED BY GC_TO.

      WHEN GC_EQUAL.
        V_DOCTYP_LOW  =  S_DOCTYP-LOW.
        V_DOCTYP      =  V_DOCTYP_LOW.
    ENDCASE.

    W_LIST_TOP_OF_PAGE-TYP  = 'S'.
    W_LIST_TOP_OF_PAGE-KEY  = 'Sales Order Type:'.
    W_LIST_TOP_OF_PAGE-INFO = V_DOCTYP.
    APPEND W_LIST_TOP_OF_PAGE TO I_LIST_TOP_OF_PAGE.
    CLEAR W_LIST_TOP_OF_PAGE.

  ENDLOOP.
  LOOP AT S_DATE.
    CASE S_DATE-OPTION.
      WHEN GC_BETWEEN.
        V_DATE_LOW   =  S_DATE-LOW.
        V_DATE_HIGH  =  S_DATE-HIGH.

        CONCATENATE V_DATE_LOW
                    V_DATE_HIGH
                    INTO V_DATE SEPARATED BY GC_TO.
      WHEN GC_EQUAL.
        V_DATE_LOW   =  S_DATE-LOW.
        V_DATE       =  V_DATE_LOW.
    ENDCASE.

    W_LIST_TOP_OF_PAGE-TYP = 'S'.
    W_LIST_TOP_OF_PAGE-KEY = 'Req.Delivery Date:'.
    W_LIST_TOP_OF_PAGE-INFO = V_DATE.
    APPEND W_LIST_TOP_OF_PAGE TO I_LIST_TOP_OF_PAGE.
    CLEAR W_LIST_TOP_OF_PAGE.
  ENDLOOP.
  CLEAR : V_DOCTYP_LOW,V_DOCTYP_HIGH,V_DOCTYP,V_DATE_LOW,V_DATE_HIGH,V_DATE.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY       = I_LIST_TOP_OF_PAGE
*   I_LOGO                   =
*   I_END_OF_LIST_GRID       =
*   I_ALV_FORM               =
            .

ENDFORM.                    " TOP_OF_PAGE