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

alv edit list

Former Member
0 Likes
1,489

hi,

i have define date field in internal table with sa-datum,

this field editable in list, but it is storing internal, i have define the 2 two date fields , how to handle this coding pls send me

santha

hi,

i have define date field in internal table with sa-datum,

this field editable in list, but it is storing internal, i have define the 2 two date fields , how to handle this coding pls send me

santha

13 REPLIES 13
Read only

Former Member
0 Likes
1,450

Hi,

Plz be clear about your requirement.

Regards,

Raj

Read only

Former Member
0 Likes
1,450

hi,

this fields are not storing in final internal table

Read only

0 Likes
1,450
  X_FIELDCAT-COLTEXT = 'Prom Date'(016).
  X_FIELDCAT-FIELDNAME = 'ZZDATE'. "DATE FIELD
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '10'.
  X_FIELDCAT-EMPHASIZE = ' '.
  X_FIELDCAT-EDIT = 'X'.
<b>  X_FIELDCAT-DATATYPE = 'DATS'.  "MUST
  X_FIELDCAT-INTTYPE = 'D'.      "MUST
  X_FIELDCAT-REF_TABLE = 'VEKP'.  "REF TABLE
  X_FIELDCAT-REF_FIELD = 'ZZDATE. "REF FIELD</b>
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR  X_FIELDCAT.

did you mentioned your fieldcat for those dates like this..

regards

vijay

Read only

0 Likes
1,450

Hi ARe you using Noraml ALV /ALV GRID or ALV OO

please let us know..

VIjay

Read only

Former Member
0 Likes
1,450

pl be more clear in the requirement

u mean to say that after editing it is not storing???

Message was edited by: chandrasekhar jagarlamudi

Read only

Former Member
0 Likes
1,450

hi,

types: begin of TY_FINAL,

CREDATE type SY-DATUM, "SY-DATUM,

DOCNUM(5) type C,

PERSON(35) type C,

TKNUM type TKNUM,

NAME1 type NAME1,

ORT01 type ORT01,

VBELN type VBELN,

AGENT_PNO(4) type C,

AGENT(10) type C,

TO_ORDER(7) type C,

INCO1 type INCO1,

INCO2 type INCO2,

LCNUM type LCNUM,

VSART type VSART,

DATXA type DATXA,

LOADING(10) type C,

  • DATLOAD type CHAR10, "SY-DATUM,

  • SHIPDATE type CHAR10, "SY-DATUM,

DATLOAD type erdat,

SHIPDATE type erdat,

ABLAD type ABLAD,

SHIPLOAD type C,

IMPORT TYPE C,

VIA(10) type C,

PORT(10) type C,

MARKS(13) type C,

PRO_DESCR(10) type C,

NTGEW type NTGEW,

BRGEW type BRGEW,

NOTE(15) type C,

WH_SH_DOCU(15) type C,

WHEN_SHIP(15) type C,

ENCLOSURE(10) type C,

ZTERM type VBRK-ZTERM,

VTEXT type VTEXT,

BOX type C,

end of TY_FINAL.

i have deifine the internal table, i am editing fields in alv list, after i want all fields save the final internal table, type char fields are storing, but date fields not storing,

i am using the reuse_alv_list_display.

santha

Read only

Former Member
0 Likes
1,450

hi,

my coding this like

form OUTPUT_ALV .

if IT_FIELDCAT is initial.

perform FIELD_FILL using IT_FIELDCAT.

endif.

perform SET_LAYOUT changing IS_LAYOUT.

refresh IT_EVENTTAB.

perform BUILD_EVENTS changing IT_EVENTTAB.

call function 'REUSE_ALV_LIST_DISPLAY'

exporting

I_CALLBACK_PROGRAM = SY-REPID

I_CALLBACK_PF_STATUS_SET = c_pf_stat

I_CALLBACK_USER_COMMAND = 'USER_COMMAND'

IS_LAYOUT = IS_LAYOUT

IT_FIELDCAT = IT_FIELDCAT[]

  • IT_EVENTS = IT_EVENTTAB[]

I_SAVE = 'A'

tables

T_OUTTAB = IT_FINAL

  • 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. " output_alv

----


  • Form Name : PF_STATUS_SET

  • Description : Assigning the user defined status.

----


form PF_STATUS_SET using RT_EXTAB type SLIS_T_EXTAB.

set pf-status 'PFSTATUS1' excluding RT_EXTAB.

clear RT_EXTAB.

endform. " STATUS_SET

&----


*& Form FIELD_FILL

&----


  • text

----


  • -->P_PT_FIELDCAT text

----


form FIELD_FILL using PT_FIELDCAT type SLIS_T_FIELDCAT_ALV.

data : LS_FIELDCAT type SLIS_FIELDCAT_ALV.

LS_FIELDCAT-FIELDNAME = 'CREDATE'.

LS_FIELDCAT-SELTEXT_L = TEXT-101.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'PERSON'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-103.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'TKNUM'.

LS_FIELDCAT-REF_FIELDNAME = 'TKNUM'.

LS_FIELDCAT-REF_TABNAME = 'VTTK'.

LS_FIELDCAT-SELTEXT_L = TEXT-104.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'NAME1'.

LS_FIELDCAT-REF_FIELDNAME = 'NAME1'.

LS_FIELDCAT-REF_TABNAME = 'KNA1'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = 'CONIGNEE NAME'.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'ORT01'.

LS_FIELDCAT-REF_FIELDNAME = 'ORT01'.

LS_FIELDCAT-REF_TABNAME = 'KNA1'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = 'ADDRESS'.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'VBELN'.

LS_FIELDCAT-REF_FIELDNAME = 'VBELN'.

LS_FIELDCAT-REF_TABNAME = 'VBRK'.

LS_FIELDCAT-SELTEXT_L = TEXT-106.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'AGENT_PNO'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-107.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'AGENT'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-108.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'TO_ORDER'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-109.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'INCO1'.

LS_FIELDCAT-REF_FIELDNAME = 'INCO1'.

LS_FIELDCAT-REF_TABNAME = 'VBRK'.

LS_FIELDCAT-SELTEXT_L = TEXT-110.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'ZTERM'.

LS_FIELDCAT-REF_FIELDNAME = 'ZTERM'.

LS_FIELDCAT-REF_TABNAME = 'VBRK'.

LS_FIELDCAT-SELTEXT_L = TEXT-111.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'LCNUM'.

LS_FIELDCAT-REF_FIELDNAME = 'LCNUM'.

LS_FIELDCAT-REF_TABNAME = 'VBRK'.

LS_FIELDCAT-SELTEXT_L = TEXT-112.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'VSART'.

LS_FIELDCAT-REF_FIELDNAME = 'VSART'.

LS_FIELDCAT-REF_TABNAME = 'VTTK'.

LS_FIELDCAT-SELTEXT_L = TEXT-113.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'DATXA'.

  • LS_FIELDCAT-REF_FIELDNAME = 'DATXA'.

LS_FIELDCAT-REF_TABNAME = 'RV86E'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-114.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'LOADING'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-115.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'DATLOAD'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-REF_FIELDNAME = 'ERDAT'.

LS_FIELDCAT-REF_TABNAME = 'VBRK'.

LS_FIELDCAT-EDIT = 'X'.

  • LS_FIELDCAT-SELTEXT_L = TEXT-116.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'SHIPDATE'.

LS_FIELDCAT-REF_FIELDNAME = 'SY-DATUM'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-117.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'ABLAD'.

LS_FIELDCAT-REF_FIELDNAME = 'ABLAD'.

LS_FIELDCAT-REF_TABNAME = 'KNVA'.

LS_FIELDCAT-SELTEXT_L = TEXT-118.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'SHIPLAOD'.

LS_FIELDCAT-SELTEXT_L = TEXT-119.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'IMPORT'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-120.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'VIA'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-121.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'PORT'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-122.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'MARKS'.

LS_FIELDCAT-SELTEXT_L = TEXT-123.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'PRO_DESCR'.

LS_FIELDCAT-SELTEXT_L = TEXT-124.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'BRGEW'.

LS_FIELDCAT-REF_FIELDNAME = 'BRGEW'.

LS_FIELDCAT-REF_TABNAME = 'VBRP'.

LS_FIELDCAT-SELTEXT_L = TEXT-125.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'NTGEW'.

LS_FIELDCAT-REF_FIELDNAME = 'NTGEW'.

LS_FIELDCAT-REF_TABNAME = 'VBRP'.

LS_FIELDCAT-SELTEXT_L = TEXT-125.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'NOTE'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-126.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'WH_SH_DOCU'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-127.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'WHEN_SHIP'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-128.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

LS_FIELDCAT-FIELDNAME = 'ENCLOSURE'.

LS_FIELDCAT-INPUT = 'X'.

LS_FIELDCAT-EDIT = 'X'.

LS_FIELDCAT-SELTEXT_L = TEXT-129.

append LS_FIELDCAT to PT_FIELDCAT.

clear LS_FIELDCAT.

endform. " FIELD_FILL

&----


*& Form SET_LAYOUT

&----


  • text

----


  • -->P_IS_LAYOUT text

----


form SET_LAYOUT changing LS_LAYOUT type SLIS_LAYOUT_ALV.

clear LS_LAYOUT.

LS_LAYOUT-ZEBRA = 'X'.

LS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.

LS_LAYOUT-BOX_FIELDNAME = 'BOX'.

LS_LAYOUT-BOX_TABNAME = 'IT_FINAL'.

endform. " SET_LAYOUT

&----


*& Form BUILD_EVENTS

&----


  • text

----


  • <--P_IT_EVENTTAB text

----


form BUILD_EVENTS changing P_IT_EVENTTAB type SLIS_T_EVENT .

*--Function call to retrieve all the existing events

call function 'REUSE_ALV_EVENTS_GET'

exporting

I_LIST_TYPE = 0

importing

ET_EVENTS = P_IT_EVENTTAB.

read table P_IT_EVENTTAB into IS_EVENTTAB

with key NAME = SLIS_EV_PF_STATUS_SET.

if SY-SUBRC = 0.

move c_pf_stat to IS_EVENTTAB-FORM.

  • IS_EVENTTAB-FORM = 'PF_STATUS_SET'.

modify P_IT_EVENTTAB from IS_EVENTTAB

transporting FORM where NAME = SLIS_EV_PF_STATUS_SET.

endif.

read table P_IT_EVENTTAB into IS_EVENTTAB

with key NAME = SLIS_EV_USER_COMMAND.

if SY-SUBRC = 0.

*------Catching user command event

IS_EVENTTAB-FORM = 'USER_COMMAND'.

modify P_IT_EVENTTAB from IS_EVENTTAB

transporting FORM where NAME = SLIS_EV_USER_COMMAND.

endif.

endform. " BUILD_EVENTS

&----


*& Form user_command

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form USER_COMMAND using L_UCOMM like SY-UCOMM

LS_SELFIELD type SLIS_SELFIELD.

case L_UCOMM.

when 'ENTR'.

  • ITT_FINAL[] = IT_FINAL[].

loop at IT_FINAL into IS_FINAL where BOX = 'X'.

  • read table IT_FINAL into IS_FINAL with key BOX = 'X'.

  • if LS_SELFIELD-FIELDNAME = 'DATLOAD'.

*

  • call function 'CONVERT_DATE_TO_INTERNAL'

  • exporting

  • DATE_EXTERNAL = LS_SELFIELD-VALUE

  • importing

  • DATE_INTERNAL = IS_FINAL-DATLOAD

  • exceptions

  • DATE_EXTERNAL_IS_INVALID = 1

  • others = 2.

*

  • endif.

modify IT_FINAL from IS_FINAL transporting DATLOAD.

"index LS_SELFIELD-TABINDEX

clear IS_FINAL.

endloop.

when 'DISP'.

  • set pf-status 'PF_STATUS'.

  • LEAVE TO LIST-PROCESSING.

  • new-page.

perform DISP_DATA1.

  • lv_display_page = 'X'.

endcase.

endform. " user_command

*&----


santha

Read only

0 Likes
1,450

while modifying

modify IT_FINAL from IS_FINAL transporting DATLOAD.

u r transporting only DATALOAD , try to transport date fields also here

Read only

0 Likes
1,450
form USER_COMMAND using L_UCOMM like SY-UCOMM

LS_SELFIELD type SLIS_SELFIELD.

case L_UCOMM.

when 'ENTR'.
CALL FUNCTION 'REUSE_ALV_LIST_LAYOUT_INFO_GET'

 TABLES
   ET_OUTTAB                        = IT_OUTTAB

 EXCEPTIONS
   NO_INFOS                         = 1
   PROGRAM_ERROR                    = 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.

.....

endcase.
endform.

now check in it_outab in that you can see the data.

and now conver tand do what ever you want..

Read only

0 Likes
1,450

hi,

case L_UCOMM.

when 'ENTR'.

CALL FUNCTION 'REUSE_ALV_LIST_LAYOUT_INFO_GET'

TABLES

ET_OUTTAB = it_final

EXCEPTIONS

NO_INFOS = 1

PROGRAM_ERROR = 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.

  • modify IT_FINAL from IS_FINAL transporting DATLOAD SHIPDATE.

  • "index LS_SELFIELD-

*TABINDEX

  • clear IS_FINAL.

  • endloop.

it is not coming , i am trying, after enter on list, char fields are stoing the it_final, but date firlds are not storing, i thick date not matching, pls give me details of coding.

santha

Read only

0 Likes
1,450

Hi,

in normal alv, this is the problem generally we face.

what you do is give 10 chars field, and convert it to date format in the usercommand. and you will be able to see that now.

thanks

vijay

Read only

0 Likes
1,450

hi,

that is working, but my requirement only date format enter on the list, i want display date and save to file or print, pls give me ASAP, how to change the date chat to date foramt, give me with code

santha

Read only

0 Likes
1,450

Hi, Check this code.....

for your use....i did this program with date edit....



REPORT ZTESTALV  NO STANDARD PAGE HEADING
                        LINE-SIZE  200
                        LINE-COUNT 58
                        MESSAGE-ID ZZ.


*---------------------------------------------------------------------*
*                        TYPE-POOLS                                   *
*---------------------------------------------------------------------*
TYPE-POOLS:SLIS.
*---------------------------------------------------------------------
*                Include for Data Declarations
*---------------------------------------------------------------------
INCLUDE ZTEST_TOP.
DATA: V_ERROR.
**Tables to Compare Before after the Data Change
DATA: IT_VEKP_TMP LIKE IT_VEKP OCCURS 0 WITH HEADER LINE,
      IT_VEKP1_TMP LIKE IT_VEKP1 OCCURS 0 WITH HEADER LINE,
      IT_FINAL_TMP LIKE IT_FINAL OCCURS 0 WITH HEADER LINE.
DATA: IT_OCRC LIKE ZSD_OC_HOLD OCCURS 0 WITH HEADER LINE.
*- Fieldcatalog
DATA: IT_FIELDCAT  TYPE SLIS_T_FIELDCAT_ALV,
      IT_FIELDCAT1  TYPE SLIS_T_FIELDCAT_ALV.
*- For Events
DATA:IT_EVENTS TYPE SLIS_T_EVENT.

DATA:  X_FIELDCAT  TYPE SLIS_FIELDCAT_ALV,
       X_FIELDCAT1  TYPE SLIS_FIELDCAT_ALV,
       X_LAYOUT    TYPE SLIS_LAYOUT_ALV,
       X_EVENTS    TYPE SLIS_ALV_EVENT.

*---------------------------------------------------------------------
*                Selection screen
*---------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS: S_VBELN FOR V_LIKP-VBELN,
                S_VSTEL FOR V_LIKP-VSTEL,
                S_WERKS FOR V_LIPS-WERKS,
                S_WADAT FOR V_VBEP-WADAT,
                S_TRSPG FOR V_LIKP-TRSPG OBLIGATORY,
                S_OCHRC FOR V_VEKP-ZZOCHOLDRC,
                S_USERID FOR V_VBAK-ZZREP_USERID1.
SELECTION-SCREEN END OF BLOCK B1.
*---------------------------------------------------------------------
*                START-OF_SELECTION
*---------------------------------------------------------------------
START-OF-SELECTION.
  SELECT VBELN
         VSTEL
         LFDAT
         KUNNR
         FROM LIKP
         INTO TABLE IT_LIKP
         WHERE VBELN IN S_VBELN
          AND  VSTEL IN S_VSTEL
          AND  WADAT IN S_WADAT
          AND  WADAT_IST = '00000000'
          AND TRSPG IN S_TRSPG.
  IF SY-SUBRC <> 0.
    MESSAGE I002 WITH 'NO DATA FOR THE SELECTION'.
  ENDIF.
**Populating the Delivery Item Data
  PERFORM GET_DEL_ITEM_DATA.
**Getting the PGI DATE & USERID
  PERFORM GET_USERID.
**Getting the Promise DATE & OC HOLD RC
  PERFORM GET_VEKP_DATA.
**get the Reason codes
  PERFORM SELECT_OCHOLDRC.
** Populating the Final Internaltable
  PERFORM POPULATE_FINAL_TABLE.

*---------------------------------------------------------------------
*                START-OF_SELECTION
*---------------------------------------------------------------------
END-OF-SELECTION.
**Populating the fieldcatalog
  PERFORM POPULATE_FIELDCATALOG.
**-ALV list Display
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      IS_LAYOUT                = X_LAYOUT
      IT_FIELDCAT              = IT_FIELDCAT
      IT_EVENTS                = IT_EVENTS
    TABLES
      T_OUTTAB                 = IT_FINAL
    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.
*&---------------------------------------------------------------------*
*&      Form  GET_DEL_ITEM_DATA
*&---------------------------------------------------------------------*
*       Populating the Delivery Item Data
*----------------------------------------------------------------------*
FORM GET_DEL_ITEM_DATA .
  IF NOT IT_LIKP[] IS INITIAL.
**-Getting the name of Ship-to-party
    SELECT KUNNR
          NAME1
          INTO TABLE IT_KNA1
          FROM KNA1
          FOR ALL ENTRIES IN IT_LIKP[]
          WHERE KUNNR = IT_LIKP-KUNNR.
**-Getting Delivery Item Data
    SELECT VBELN
           POSNR
           MATNR
           WERKS
           LFIMG
           ARKTX
           VGBEL
           VGPOS
           ZZCONPATH
           INTO TABLE IT_LIPS
           FROM LIPS
           FOR ALL ENTRIES IN IT_LIKP[]
           WHERE VBELN = IT_LIKP-VBELN
               AND WERKS IN S_WERKS.
  ENDIF.
ENDFORM.                    " GET_DEL_ITEM_DATA
*&---------------------------------------------------------------------*
*&      Form  get_userid
*&---------------------------------------------------------------------*
*       Getting the  USERID
*----------------------------------------------------------------------*
FORM GET_USERID .
  IF NOT IT_LIPS[]  IS INITIAL.
**-Getting the USERID
    SELECT VBELN
           ZZREP_USERID1
           INTO TABLE IT_VBAK
           FROM VBAK
           FOR ALL ENTRIES IN IT_LIPS[]
           WHERE VBELN = IT_LIPS-VGBEL
              AND ZZREP_USERID1 IN S_USERID.
  ENDIF.
ENDFORM.                    " get_userid

*&---------------------------------------------------------------------*
*&      Form  populate_final_table
*&---------------------------------------------------------------------*
*       Populating the Final Internaltable
*----------------------------------------------------------------------*
FORM POPULATE_FINAL_TABLE .
  CLEAR IT_FINAL.
  REFRESH IT_FINAL.
  SORT IT_VEKP_TMP BY ZZPROMDT ZZSONUM ZZOCHOLDRC.
 DELETE ADJACENT DUPLICATES FROM IT_VEKP_TMP COMPARING ZZPROMDT ZZSONUM
ZZOCHOLDRC.
  LOOP AT IT_LIPS.
    MOVE-CORRESPONDING IT_LIPS TO IT_FINAL.
    READ TABLE IT_LIKP WITH KEY VBELN = IT_LIPS-VBELN.
    IF SY-SUBRC = 0.
      IT_FINAL-VSTEL = IT_LIKP-VSTEL.
      IT_FINAL-LFDAT = IT_LIKP-LFDAT.
    ENDIF.
    READ TABLE IT_KNA1 WITH KEY KUNNR = IT_LIKP-KUNNR.
    IF SY-SUBRC = 0.
      IT_FINAL-NAME1 = IT_KNA1-NAME1.
    ENDIF.
    READ TABLE IT_VBAK WITH KEY VBELN = IT_LIPS-VGBEL.
    IF SY-SUBRC = 0.
      IT_FINAL-ZZREP_USERID1 = IT_VBAK-ZZREP_USERID1.
    ENDIF.
    READ TABLE IT_SONUM WITH KEY VGBEL = IT_LIPS-VGBEL
                                 VGPOS = IT_LIPS-VGPOS.
    IF SY-SUBRC = 0.
      LOOP AT IT_VEKP_TMP WHERE ZZSONUM = IT_SONUM-ZZSONUM.
        IF NOT IT_VEKP_TMP-ZZPROMDT+0(4) = '0000'.
          WRITE IT_VEKP_TMP-ZZPROMDT TO IT_FINAL-ZZPROMDT .
        ELSE.
          IT_FINAL-ZZPROMDT = '00/00/0000'.
        ENDIF.
        IT_FINAL-ZZOCHOLDRC = IT_VEKP_TMP-ZZOCHOLDRC.
        APPEND IT_FINAL.
      ENDLOOP.
      IF SY-SUBRC <> 0.
        IT_FINAL-ZZPROMDT = '00/00/0000'.
        IT_FINAL-ZZOCHOLDRC = ' '.
        IT_FINAL-FLAG = 'X'.
        APPEND IT_FINAL.
        CLEAR IT_FINAL.
      ENDIF.
    ENDIF.
  ENDLOOP.
  IF NOT IT_ZSDOCHOLD[] IS INITIAL.
    LOOP AT IT_FINAL.
      READ TABLE IT_ZSDOCHOLD WITH KEY ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC.
      IF SY-SUBRC = 0.
        IT_FINAL-ZZRCDESC = IT_ZSDOCHOLD-ZZRCDESC.
        MODIFY IT_FINAL.
      ENDIF.
    ENDLOOP.
  ENDIF.
  IT_FINAL_TMP[] = IT_FINAL[].
  CLEAR IT_FINAL.
ENDFORM.                    " populate_final_table
*&---------------------------------------------------------------------*
*&      Form  populate_fieldcatalog
*&---------------------------------------------------------------------*
*       Populating the fieldcatalog
*----------------------------------------------------------------------*
FORM POPULATE_FIELDCATALOG .

  DATA:L_POS TYPE I VALUE 1.
  CLEAR: L_POS.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'Shpt'.
  X_FIELDCAT-FIELDNAME = 'VSTEL'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '4'.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'Con Path'.
  X_FIELDCAT-FIELDNAME = 'ZZCONPATH'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '8'.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'Plant'.
  X_FIELDCAT-FIELDNAME = 'WERKS'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '5'.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.
  X_FIELDCAT-SELTEXT_M = 'Del Date'.
  X_FIELDCAT-FIELDNAME = 'LFDAT'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '10'.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'Prom Date'.
  X_FIELDCAT-FIELDNAME = 'ZZPROMDT'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '10'.
  X_FIELDCAT-EMPHASIZE = ' '.
  X_FIELDCAT-INPUT = 'X'.
  X_FIELDCAT-HOTSPOT = 'X'.
  X_FIELDCAT-DATATYPE = 'CHAR'.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR  X_FIELDCAT.

  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'Ship-To-Name'.
  X_FIELDCAT-FIELDNAME = 'NAME1'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '40'.
  X_FIELDCAT-EMPHASIZE = ' '.
  X_FIELDCAT-INPUT = ' '.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'SalesOrder#'.
  X_FIELDCAT-FIELDNAME = 'VGBEL'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '10'.
  X_FIELDCAT-EMPHASIZE = ' '.
  X_FIELDCAT-HOTSPOT = 'X'.
  X_FIELDCAT-INPUT = ' '.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'Item'.
  X_FIELDCAT-FIELDNAME = 'VGPOS'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-EMPHASIZE = ' '.
  X_FIELDCAT-OUTPUTLEN = '5'.
  X_FIELDCAT-HOTSPOT = ' '.
  X_FIELDCAT-INPUT = ' '.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'Material'.
  X_FIELDCAT-FIELDNAME = 'MATNR'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '18'.
  X_FIELDCAT-EMPHASIZE = ' '.
  X_FIELDCAT-HOTSPOT = ' '.
  X_FIELDCAT-INPUT = ' '.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'Materal Desc'.
  X_FIELDCAT-FIELDNAME = 'ARKTX'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '40'.
  X_FIELDCAT-EMPHASIZE = ' '.
  X_FIELDCAT-HOTSPOT = ' '.
  X_FIELDCAT-INPUT = ' '.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'D.O.Item Qty'.
  X_FIELDCAT-FIELDNAME = 'LFIMG'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '13'.
  X_FIELDCAT-EMPHASIZE = ' '.
  X_FIELDCAT-HOTSPOT = ' '.
  X_FIELDCAT-INPUT = ' '.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'RC'.
  X_FIELDCAT-FIELDNAME = 'ZZOCHOLDRC'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-EMPHASIZE = 'C700'.
  X_FIELDCAT-OUTPUTLEN = '3'.
  X_FIELDCAT-INPUT = 'X'.
  X_FIELDCAT-HOTSPOT = 'X'.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.

  L_POS = L_POS + 1.
  X_FIELDCAT-SELTEXT_M = 'OC HOLD RC Desc'.
  X_FIELDCAT-FIELDNAME = 'ZZRCDESC'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-EMPHASIZE = 'C700'.
  X_FIELDCAT-OUTPUTLEN = '20'.
  X_FIELDCAT-INPUT = 'X'.
  X_FIELDCAT-HOTSPOT = ' '.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'Delivery'.
  X_FIELDCAT-FIELDNAME = 'VBELN'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '10'.
  X_FIELDCAT-EMPHASIZE = ' '.
  X_FIELDCAT-HOTSPOT = 'X'.
  X_FIELDCAT-INPUT = ' '.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'Item'.
  X_FIELDCAT-FIELDNAME = 'POSNR'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '5'.
  X_FIELDCAT-EMPHASIZE = ' '.
  X_FIELDCAT-HOTSPOT = ' '.
  X_FIELDCAT-INPUT = ' '.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.
  L_POS = L_POS + 1.

  X_FIELDCAT-SELTEXT_M = 'Rep User Id'.
  X_FIELDCAT-FIELDNAME = 'ZZREP_USERID1'.
  X_FIELDCAT-TABNAME = 'IT_FINAL'.
  X_FIELDCAT-COL_POS    = L_POS.
  X_FIELDCAT-OUTPUTLEN = '11'.
  X_FIELDCAT-EMPHASIZE = ' '.
  X_FIELDCAT-HOTSPOT = ' '.
  X_FIELDCAT-INPUT = ' '.
  APPEND X_FIELDCAT TO IT_FIELDCAT.
  CLEAR X_FIELDCAT.

  X_LAYOUT-ZEBRA         = 'X'.
  REFRESH:IT_EVENTS.
  CLEAR:X_EVENTS,IT_EVENTS.

  X_EVENTS-NAME = SLIS_EV_TOP_OF_PAGE.
  X_EVENTS-FORM = 'TOP_OF_PAGE'.
  APPEND X_EVENTS TO IT_EVENTS.
  CLEAR X_EVENTS.
  X_EVENTS-NAME = SLIS_EV_END_OF_LIST.
  X_EVENTS-FORM = 'MODIFY_LIST'.
  APPEND X_EVENTS TO IT_EVENTS.
  CLEAR X_EVENTS.
ENDFORM.                    " populate_fieldcatalog
*---------------------------------------------------------------------
*                Top_of_page
*---------------------------------------------------------------------
FORM TOP_OF_PAGE.
* Call Steelcase Header
  FORMAT COLOR COL_HEADING INTENSIFIED ON.
  CALL FUNCTION 'Z_STEELCASE_HEADER'.
  FORMAT COLOR OFF.
ENDFORM.                    "top_of_page
*&--------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&--------------------------------------------------------------------*
*      For User Command
*---------------------------------------------------------------------*
FORM USER_COMMAND USING UCOMM LIKE SY-UCOMM SELFIELD TYPE SLIS_SELFIELD.
  DATA: L_ANS.
  DATA: L_SONUM LIKE VEKP-ZZSONUM.
  DATA: L_TABIX LIKE SY-TABIX.
  DATA : L_DATE1 LIKE VEKP-ZZPROMDT.
  CASE UCOMM.
**-When User Double Clicks
    WHEN '&IC1'.
      IF SELFIELD-TABINDEX <> 0.
**if user clicks on sales order
        IF SELFIELD-SEL_TAB_FIELD = 'IT_FINAL-VGBEL'.
          READ TABLE IT_FINAL INDEX SELFIELD-TABINDEX
                                          TRANSPORTING VGBEL.
          IF SY-SUBRC = 0.
            SET PARAMETER ID 'AUN' FIELD IT_FINAL-VGBEL.
          ENDIF.
          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
        ENDIF.
**if user clicks on Delivery
        IF SELFIELD-SEL_TAB_FIELD = 'IT_FINAL-VBELN'.
          READ TABLE IT_FINAL INDEX SELFIELD-TABINDEX
                                          TRANSPORTING VBELN.
          IF SY-SUBRC = 0.
            SET PARAMETER ID 'VL' FIELD IT_FINAL-VBELN.
          ENDIF.
          CALL TRANSACTION 'VL02N' AND SKIP FIRST SCREEN.
        ENDIF.
**if user clicks on Order Control Hold Reason code
        IF SELFIELD-SEL_TAB_FIELD = 'IT_FINAL-ZZOCHOLDRC'
            OR SELFIELD-SEL_TAB_FIELD = 'IT_FINAL-ZZPROMDT'.
          READ TABLE IT_FINAL INDEX SELFIELD-TABINDEX
                                          TRANSPORTING
                                          VGBEL
                                          VGPOS
                                          ZZOCHOLDRC.
          IF SY-SUBRC = 0.
            PERFORM GET_HU_DATA.
            PERFORM POPULATE_FIELDCAT2.
            PERFORM LIST_DISPLAY.
          ENDIF.
        ENDIF.
      ENDIF.
**When User Press back Button
    WHEN 'BACK1'.
      CLEAR V_ERROR.
      LOOP AT IT_FINAL.
        READ TABLE IT_OCRC WITH KEY ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC.
        IF SY-SUBRC <> 0.
          IF NOT IT_FINAL-ZZOCHOLDRC IS INITIAL.
            V_ERROR = 'X'.
            EXIT.
          ENDIF.
        ENDIF.
      ENDLOOP.
**Checking for the Data Change
      IF IT_FINAL_TMP[] <> IT_FINAL[].
        PERFORM CONFIRM_BEFORE_LEAVE CHANGING L_ANS.
        IF L_ANS = '1' .
          IF V_ERROR IS INITIAL.
            LOOP AT IT_FINAL.
              L_TABIX = SY-TABIX.
              READ TABLE IT_FINAL_TMP INDEX L_TABIX.
              IF SY-SUBRC  = 0.
                IF IT_FINAL <> IT_FINAL_TMP.
*-Validate Date Field.
                  PERFORM VALIDATE_AND_CONVERT_DATE.
                 CONCATENATE IT_FINAL-VGBEL IT_FINAL-VGPOS INTO L_SONUM.
                  READ TABLE IT_VEKP WITH KEY
                                     ZZSONUM    = L_SONUM
                                   ZZOCHOLDRC = IT_FINAL_TMP-ZZOCHOLDRC.
                  IF SY-SUBRC = 0.
                    CLEAR L_DATE1.
                    L_DATE1 = IT_FINAL-ZZPROMDT+6(4).
                CONCATENATE L_DATE1 IT_FINAL-ZZPROMDT+0(2) INTO L_DATE1.
                CONCATENATE L_DATE1 IT_FINAL-ZZPROMDT+3(2) INTO L_DATE1.
**Modifying the VEKP table based on changes
                    UPDATE VEKP SET ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC
                                    ZZPROMDT =  L_DATE1
                                  WHERE       ZZSONUM = IT_VEKP-ZZSONUM
                               AND ZZOCHOLDRC = IT_FINAL_TMP-ZZOCHOLDRC.
                    IF SY-SUBRC = 0.
                      COMMIT WORK.
                    ENDIF.
**Modifying the ZSD_OC_HOLD table based on changes
                    IF IT_FINAL-ZZRCDESC <> IT_FINAL_TMP-ZZRCDESC.
                    UPDATE ZSD_OC_HOLD SET ZZRCDESC = IT_FINAL-ZZRCDESC
                                 WHERE ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC.
                      IF SY-SUBRC = 0.
                        COMMIT WORK.
                      ENDIF.
                    ENDIF.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDLOOP.
            LEAVE TO SCREEN 0.
          ELSE.
            PERFORM VALIDATE_REASON_CODE.
            MESSAGE I002 WITH 'Please enter valid Reason Codes'.
          ENDIF.
        ELSEIF L_ANS = '2'.
          LEAVE TO SCREEN 0.
        ENDIF.
      ELSE.
        LEAVE TO SCREEN 0.
      ENDIF.
    WHEN 'SAVE'.
      PERFORM VALIDATE_REASON_CODE.
**CHECKING FOR THE DATA CHANGE
      IF IT_FINAL_TMP[] <> IT_FINAL[].
        IF V_ERROR IS INITIAL.
          LOOP AT IT_FINAL.
            L_TABIX = SY-TABIX.
            READ TABLE IT_FINAL_TMP INDEX L_TABIX.
            IF SY-SUBRC  = 0.
              IF IT_FINAL <> IT_FINAL_TMP.
*-Validate Date Field.
                PERFORM VALIDATE_AND_CONVERT_DATE.
                CONCATENATE IT_FINAL-VGBEL IT_FINAL-VGPOS INTO L_SONUM.
                READ TABLE IT_VEKP WITH KEY
                                   ZZSONUM    = L_SONUM
                                   ZZOCHOLDRC = IT_FINAL_TMP-ZZOCHOLDRC.
                IF SY-SUBRC = 0.
                  CLEAR L_DATE1.
                  L_DATE1 = IT_FINAL-ZZPROMDT+6(4).
                CONCATENATE L_DATE1 IT_FINAL-ZZPROMDT+0(2) INTO L_DATE1.
                CONCATENATE L_DATE1 IT_FINAL-ZZPROMDT+3(2) INTO L_DATE1.
**Modifying the VEKP table based on changes
                  UPDATE VEKP SET ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC
                                  ZZPROMDT =  L_DATE1
                                  WHERE       ZZSONUM = IT_VEKP-ZZSONUM
                               AND ZZOCHOLDRC = IT_FINAL_TMP-ZZOCHOLDRC.
                  IF SY-SUBRC = 0.
                    COMMIT WORK.
                  ENDIF.
**Modifying the ZSD_OC_HOLD table based on changes
                  IF IT_FINAL-ZZRCDESC <> IT_FINAL_TMP-ZZRCDESC.
                    UPDATE ZSD_OC_HOLD SET ZZRCDESC = IT_FINAL-ZZRCDESC
                                 WHERE ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC.
                    IF SY-SUBRC = 0.
                      COMMIT WORK.
                    ENDIF.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDLOOP.
          PERFORM GET_VEKP_DATA .
          PERFORM POPULATE_FINAL_TABLE.
          MESSAGE S002 WITH 'Data Saved'.
        ELSE.
          MESSAGE I002 WITH 'Please enter valid Reason Codes'.
        ENDIF.
      ENDIF.
    WHEN 'ENTER'.
      DATA: L_TABIX1 TYPE SY-TABIX.
      PERFORM VALIDATE_REASON_CODE .
      IF V_ERROR IS INITIAL.
        CLEAR L_TABIX1.
        LOOP AT IT_FINAL.
          L_TABIX1 = SY-TABIX.
          READ TABLE IT_OCRC WITH KEY ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC.
          IF SY-SUBRC = 0.
            IT_FINAL-ZZRCDESC = IT_OCRC-ZZRCDESC.
            MODIFY IT_FINAL INDEX L_TABIX1 TRANSPORTING ZZRCDESC.
          ENDIF.
        ENDLOOP.
      ENDIF.
  ENDCASE.
  SELFIELD-REFRESH = 'X'.
ENDFORM.                    "USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  get_vekp_data
*&---------------------------------------------------------------------*
*       Populating Promise Date and Order Control Hold Reason Code
*----------------------------------------------------------------------*
FORM GET_VEKP_DATA .
  CLEAR: IT_SONUM,IT_VEKP,IT_VEKP_TMP.
  REFRESH: IT_SONUM,IT_VEKP,IT_VEKP_TMP.
  LOOP AT IT_LIPS.
    MOVE-CORRESPONDING IT_LIPS TO IT_SONUM.
    CONCATENATE IT_LIPS-VGBEL IT_LIPS-VGPOS INTO IT_SONUM-ZZSONUM.
    APPEND IT_SONUM.
    CLEAR IT_SONUM.
  ENDLOOP.
  IF NOT IT_SONUM[] IS INITIAL.
    SELECT EXIDV
           ZZSONUM
           ZZPROMDT
           ZZOCHOLDRC
          INTO TABLE IT_VEKP
          FROM VEKP
          FOR ALL ENTRIES IN IT_SONUM[]
          WHERE ZZSONUM = IT_SONUM-ZZSONUM
             AND ZZOCHOLDRC IN S_OCHRC.
    IF SY-SUBRC = 0.
      IT_VEKP_TMP[] = IT_VEKP[].
      SELECT ZZOCHOLDRC
             ZZRCDESC
             INTO TABLE IT_ZSDOCHOLD
             FROM ZSD_OC_HOLD
             FOR ALL ENTRIES IN IT_VEKP[]
             WHERE ZZOCHOLDRC = IT_VEKP-ZZOCHOLDRC.
    ENDIF.
  ENDIF.
ENDFORM.                    " get_vekp_data
*&---------------------------------------------------------------------*
*&      Form  populate_fieldcat2
*&---------------------------------------------------------------------*
*      Populating the Fieldcatalog
*----------------------------------------------------------------------*
FORM POPULATE_FIELDCAT2 .
  CLEAR: IT_FIELDCAT1,X_FIELDCAT1.
  REFRESH IT_FIELDCAT1.
  DATA:L_POS TYPE I VALUE 1.
  CLEAR: L_POS.
  L_POS = L_POS + 1.

  X_FIELDCAT1-SELTEXT_L = 'External Handling Unit Identification'.
  X_FIELDCAT1-FIELDNAME = 'EXIDV'.
  X_FIELDCAT1-TABNAME = 'IT_VEKP1'.
  X_FIELDCAT1-COL_POS    = L_POS.
  X_FIELDCAT1-INPUT = ' '.
  APPEND X_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR X_FIELDCAT1.
  L_POS = L_POS + 1.

  X_FIELDCAT1-SELTEXT_L = 'Promise Date'.
  X_FIELDCAT1-FIELDNAME = 'ZZPROMDT'.
  X_FIELDCAT1-TABNAME = 'IT_VEKP1'.
  X_FIELDCAT1-COL_POS    = L_POS.
  X_FIELDCAT1-INPUT = 'X'.
  APPEND X_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR X_FIELDCAT1.
  L_POS = L_POS + 1.

  X_FIELDCAT1-SELTEXT_L = 'Order Control Hold Reason Code'.
  X_FIELDCAT1-FIELDNAME = 'ZZOCHOLDRC'.
  X_FIELDCAT1-TABNAME = 'IT_VEKP1'.
  X_FIELDCAT1-COL_POS    = L_POS.
  X_FIELDCAT1-INPUT = 'X'.
  APPEND X_FIELDCAT1 TO IT_FIELDCAT1.
  CLEAR X_FIELDCAT1.
ENDFORM.                    " populate_fieldcat2
*&---------------------------------------------------------------------*
*&      Form  list_display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM LIST_DISPLAY .
**-ALV list Display
  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET1'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND1'
      IS_LAYOUT                = X_LAYOUT
      IT_FIELDCAT              = IT_FIELDCAT1
      IT_EVENTS                = IT_EVENTS
    TABLES
      T_OUTTAB                 = IT_VEKP1
    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.                    " list_display
*&---------------------------------------------------------------------*
*&      Form  GET_HU_DATA
*&---------------------------------------------------------------------*
*      Get Handling Units Data
*----------------------------------------------------------------------*
FORM GET_HU_DATA .
  CLEAR IT_VEKP1.
  REFRESH IT_VEKP1.
  READ TABLE IT_SONUM WITH KEY VGBEL = IT_FINAL-VGBEL
                               VGPOS = IT_FINAL-VGPOS.
  IF SY-SUBRC = 0.
    LOOP AT IT_VEKP WHERE ZZSONUM = IT_SONUM-ZZSONUM
                     AND  ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC.
      IT_VEKP1-EXIDV  = IT_VEKP-EXIDV.
      IT_VEKP1-ZZSONUM = IT_VEKP-ZZSONUM.
      IF NOT IT_VEKP-ZZPROMDT+0(4) = '0000'.
        WRITE IT_VEKP-ZZPROMDT TO IT_VEKP1-ZZPROMDT .
      ELSE.
        IT_VEKP1-ZZPROMDT = '00/00/0000'.
      ENDIF.
      IT_VEKP1-ZZOCHOLDRC = IT_VEKP-ZZOCHOLDRC.
      APPEND IT_VEKP1.
    ENDLOOP.
  ENDIF.
  IT_VEKP1_TMP[] = IT_VEKP1[].
ENDFORM.                    " GET_HU_DATA
*&--------------------------------------------------------------------*
*&      Form  USER_COMMAND1
*&--------------------------------------------------------------------*
*      For User Command1
*---------------------------------------------------------------------*
FORM USER_COMMAND1 USING UCOMM LIKE SY-UCOMM SELFIELD TYPE
                                                         SLIS_SELFIELD.
  DATA: L_ANS,
        L_DATE LIKE VEKP-ZZPROMDT.
  CASE UCOMM.
**When User Press Back
    WHEN 'BACK1'.
      CLEAR V_ERROR.
      LOOP AT IT_VEKP1.
        READ TABLE IT_OCRC WITH KEY ZZOCHOLDRC = IT_VEKP1-ZZOCHOLDRC.
        IF SY-SUBRC <> 0.
          IF NOT IT_VEKP1-ZZOCHOLDRC IS INITIAL.
            V_ERROR = 'X'.
            EXIT.
          ENDIF.
        ENDIF.
      ENDLOOP.
**Checking for the Change in the data
      IF IT_VEKP1_TMP[] <> IT_VEKP1[].
        PERFORM CONFIRM_BEFORE_LEAVE CHANGING L_ANS.
        IF L_ANS = '1'.
          IF V_ERROR IS INITIAL.
            LOOP AT IT_VEKP1.
              READ TABLE IT_VEKP1_TMP WITH KEY EXIDV = IT_VEKP1-EXIDV.
              IF SY-SUBRC = 0.
                IF IT_VEKP1_TMP <> IT_VEKP1.
                  CLEAR L_DATE.
                  L_DATE = IT_VEKP1-ZZPROMDT+6(4).
                  CONCATENATE L_DATE IT_VEKP1-ZZPROMDT+0(2) INTO L_DATE.
                  CONCATENATE L_DATE IT_VEKP1-ZZPROMDT+3(2) INTO L_DATE.
                  UPDATE VEKP SET ZZPROMDT = L_DATE
                                  ZZOCHOLDRC = IT_VEKP1-ZZOCHOLDRC
                                WHERE EXIDV = IT_VEKP1-EXIDV.
                  IF SY-SUBRC = 0.
                    COMMIT WORK.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDLOOP.
            PERFORM GET_VEKP_DATA .
            PERFORM POPULATE_FINAL_TABLE.
            SELFIELD-REFRESH = 'X'.
            LEAVE TO SCREEN 0.
          ELSE.
            PERFORM VALIDATE_REASON_CODE1.
            MESSAGE I002 WITH 'Please enter valid Reason Codes'.
          ENDIF.
        ELSEIF L_ANS = '2'.
          LEAVE TO SCREEN 0.
        ENDIF.
      ELSE.
        LEAVE TO SCREEN 0.
      ENDIF.
    WHEN 'SAVE'.
      PERFORM VALIDATE_REASON_CODE1.
**Checking for the Change in the data
      IF IT_VEKP1_TMP[] <> IT_VEKP1[].
        IF V_ERROR IS INITIAL.
          LOOP AT IT_VEKP1.
            READ TABLE IT_VEKP1_TMP WITH KEY EXIDV = IT_VEKP1-EXIDV.
            IF SY-SUBRC = 0.
              IF IT_VEKP1_TMP <> IT_VEKP1.
                CLEAR L_DATE.
                L_DATE = IT_VEKP1-ZZPROMDT+6(4).
                CONCATENATE L_DATE IT_VEKP1-ZZPROMDT+0(2) INTO L_DATE.
                CONCATENATE L_DATE IT_VEKP1-ZZPROMDT+3(2) INTO L_DATE.
                UPDATE VEKP SET ZZPROMDT = L_DATE
                                ZZOCHOLDRC = IT_VEKP1-ZZOCHOLDRC
                              WHERE EXIDV = IT_VEKP1-EXIDV.
                IF SY-SUBRC = 0.
                  COMMIT WORK.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDLOOP.
          PERFORM GET_VEKP_DATA .
          CLEAR IT_VEKP1_TMP.
          REFRESH IT_VEKP1_TMP.
          IT_VEKP1_TMP[] = IT_VEKP1[].
          PERFORM POPULATE_FINAL_TABLE.
          SELFIELD-REFRESH = 'X'.
          MESSAGE S002 WITH 'Data Saved'.
        ELSE.
          MESSAGE I002 WITH 'Please enter valid Reason Codes'.
        ENDIF.
      ENDIF.
    WHEN 'ENTER'.
      PERFORM VALIDATE_REASON_CODE1.
  ENDCASE.
ENDFORM.                    "USER_COMMAND1
*&---------------------------------------------------------------------*
*&      Form  PF_STATUS_SET
*&---------------------------------------------------------------------*
*       PF Satatus for first List
*----------------------------------------------------------------------*
FORM PF_STATUS_SET USING    P_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD' EXCLUDING P_EXTAB.
ENDFORM.                    "PF_STATUS_SET
*&---------------------------------------------------------------------*
*&      Form  PF_STATUS_SET1
*&---------------------------------------------------------------------*
*       PF Satatus for Second list
*----------------------------------------------------------------------*
FORM PF_STATUS_SET1 USING    P_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD' EXCLUDING P_EXTAB.
ENDFORM.                    "PF_STATUS_SET
*&---------------------------------------------------------------------*
*&      Form  CONFIRM_BEFORE_LEAVE
*&---------------------------------------------------------------------*
*       Popup for Confirm
*----------------------------------------------------------------------*
FORM CONFIRM_BEFORE_LEAVE  CHANGING P_ANS.
  CALL FUNCTION 'POPUP_TO_CONFIRM'
         EXPORTING
             TITLEBAR              = 'Confirm'
         TEXT_QUESTION         = 'Do you wish to save your data first?'
             TEXT_BUTTON_1         = 'Yes'
             ICON_BUTTON_1         = 'ICON_OKAY'
             TEXT_BUTTON_2         = 'No'
             ICON_BUTTON_2         = 'ICON_CANCEL'
             DEFAULT_BUTTON        = '1'
             DISPLAY_CANCEL_BUTTON = 'X'
             START_COLUMN          = 25
             START_ROW             = 6
        IMPORTING
             ANSWER                = P_ANS
        EXCEPTIONS
             TEXT_NOT_FOUND        = 1
             OTHERS                = 2.
ENDFORM.                    " CONFIRM_BEFORE_LEAVE
*&---------------------------------------------------------------------*
*&      Form  VALIDATE_AND_CONVERT_DATE
*&---------------------------------------------------------------------*
*       Validating and Converting the date
*----------------------------------------------------------------------*
FORM VALIDATE_AND_CONVERT_DATE .
  DATA : L_DATE LIKE SY-DATUM.
  CALL FUNCTION 'CONVERT_DATE_INPUT'
    EXPORTING
      INPUT                     = IT_FINAL-ZZPROMDT
    IMPORTING
      OUTPUT                    = L_DATE
    EXCEPTIONS
      PLAUSIBILITY_CHECK_FAILED = 1
      WRONG_FORMAT_IN_INPUT     = 2
      OTHERS                    = 3.
  IF SY-SUBRC = 0.
    WRITE L_DATE TO IT_FINAL-ZZPROMDT.
    MODIFY IT_FINAL.
  ENDIF.
ENDFORM.                    " VALIDATE_AND_CONVERT_DATE

*&---------------------------------------------------------------------*
*&      Form  MODIFY_LIST
*&---------------------------------------------------------------------*
*      Modify the Report
*----------------------------------------------------------------------*
FORM MODIFY_LIST.
  DATA: L_LINES TYPE I,
        L_FLAG.
  CLEAR IT_NODATA. REFRESH IT_NODATA.
  LOOP AT IT_FINAL WHERE FLAG = 'X'.
    IT_NODATA-IND = SY-TABIX + 6.
    APPEND IT_NODATA.
    CLEAR IT_NODATA.
  ENDLOOP.
  DESCRIBE TABLE IT_FINAL LINES L_LINES.
  L_LINES  = L_LINES + 6.
  DO L_LINES TIMES.
    READ TABLE IT_NODATA WITH KEY IND = SY-INDEX.
    IF SY-SUBRC = 0.
      READ LINE SY-INDEX INDEX SY-LSIND.
      IF SY-SUBRC = 0.
        MODIFY LINE SY-INDEX INDEX SY-LSIND
                   FIELD FORMAT  IT_FINAL-ZZPROMDT  INPUT OFF COLOR 6
                                 IT_FINAL-ZZOCHOLDRC  INPUT OFF COLOR 6
                                 IT_FINAL-ZZRCDESC  INPUT OFF COLOR 6.
      ENDIF.
    ENDIF.
  ENDDO.
ENDFORM.                    "MODIFY_LIST
*&---------------------------------------------------------------------*
*&      Form  select_OCHOLDRC
*&---------------------------------------------------------------------*
*       Get ALL OC HOLD RC
*----------------------------------------------------------------------*
FORM SELECT_OCHOLDRC .
  SELECT *
         FROM ZSD_OC_HOLD
         INTO TABLE IT_OCRC.
ENDFORM.                    " select_OCHOLDRC
*&---------------------------------------------------------------------*
*&      Form  validate_reason_code
*&---------------------------------------------------------------------*
*       validation of Reason Code
*----------------------------------------------------------------------*
FORM VALIDATE_REASON_CODE.
  CLEAR V_ERROR.
  LOOP AT IT_FINAL.
    READ TABLE IT_OCRC WITH KEY ZZOCHOLDRC = IT_FINAL-ZZOCHOLDRC.
    IF SY-SUBRC = 0.

    ELSE.
      IF NOT IT_FINAL-ZZOCHOLDRC IS INITIAL.
        V_ERROR = 'X'.
       MESSAGE I002 WITH 'Reason code' IT_FINAL-ZZOCHOLDRC 'is invalid'.
      ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " validate_reason_code
*&---------------------------------------------------------------------*
*&      Form  validate_reason_code1
*&---------------------------------------------------------------------*
*       validation of Reason Code1
*----------------------------------------------------------------------*
FORM VALIDATE_REASON_CODE1.
  CLEAR V_ERROR.
  LOOP AT IT_VEKP1.
    READ TABLE IT_OCRC WITH KEY ZZOCHOLDRC = IT_VEKP1-ZZOCHOLDRC.
    IF SY-SUBRC = 0.

    ELSE.
      IF NOT IT_VEKP1-ZZOCHOLDRC IS INITIAL.
        V_ERROR = 'X'.
       MESSAGE I002 WITH 'Reason code' IT_VEKP1-ZZOCHOLDRC 'is invalid'.
      ENDIF.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " validate_reason_code1

Message was edited by: Vijay Babu Dudla