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 grid

Former Member
0 Likes
975

how to edit particular row in alv grid......

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
924

hi getha anjali,

u can edit fieldcatlog work area for the necessary fields then u can append that work area to fieldcatlog that u can assign to FM (alv grid display).

regards...

seshu.

how to edit particular row in alv grid......

7 REPLIES 7
Read only

sreeramkumar_madisetty
Active Contributor
0 Likes
924

Hi

You can edit in the Field Catalog before list display..

And after list display there is Edit option in the menus of ALV.

Regards,

Sreeram

Read only

0 Likes
924

yes.. when 'CHANGE'. "for changing mode

gs_layout-edit = 'X'.

i used this.. but not working....

Read only

Former Member
0 Likes
924

Hi geetha,

for that you have to capture the userr command.

In the user command

FORM Z8_USER_COMMAND USING JAY_COMM TYPE SY-UCOMM

P_SELFIELD TYPE SLIS_SELFIELD.

say in this form there is P_Selfield .. it is the structure please while debugging you will see that the curson position and the fieldvalue is traped in this structure...

This is how you can capture the a particular value in the row and to caputure the whole row .. yuo can do it thru checkbox.....

I mean you include a check box in the internal table and then make it 'X', and then take the whole value correponding to that checkbox.

Please check the code...

&----


*& Report Z8JAYANT_ALV_TRANSACTION_MM02 *

*& *

&----


*& *

*& *

&----


REPORT Z8JAYANT_ALV_TRANSACTION_MM02 message-id z8jayant.

  • Name- Jayant kumar Sahu.

  • Description- Alv on transaction mm02 ; passing material no and entering the old material as legacy material, specifying the views in the alv itself.

  • Date- 06/10/2006.

  • Package- $tmp.

***************************************Type Pool.

type-pools: slis.

***************************************Defining the tables used.

tables: mara,makt.

**************************************Internal Table Declaration.

****Structure for material info.

types: begin of i_material,

matnr type matnr,

mtart type mtart,

maktx type maktx,

bismt type bismt,

matkl type matkl,

spart type spart,

pstat type pstat_d,

end of i_material.

****Internal table for material info.

data: it_material type standard table of i_material with header line.

****Internal table of type MBILDTAB.

data: it_mbildtab type standard table of mbildtab with header line.

****Structure for the Sequence of the views.

types: begin of i_sequence,

guifunc type guifunc,

idxbd type BILDTIDXBD,

end of i_sequence.

****Internal table for the Sequence.

data: it_sequence type standard table of i_sequence with header line.

****Internal table of type BDCDATA for BDC.

data: it_bdcdata like bdcdata occurs 0 with header line.

***************************************Data Declaration.

        • For the field Catalog.

data: it_fieldcat type slis_t_fieldcat_alv.

        • For the Event Catalog.

data: it_event type slis_t_event.

        • For material with 0's concatenated.

data: jay_matnR(18).

        • For material with legacy appended in it's front.

data: temp_matnr(30).

        • Data for temporary variable.

data: temp1(20),

temp2(20),

temp3(20),

temp4(20),

temp5(20),

temp6(20),

ok_account(1),

ok_basic(1),

ok_sales(1),

ok_purchase(1),

ok_atleastone(1).

****************************************Select Options.

select-options: s_matnr for mara-matnr.

start-of-selection.

*************************************Perform Statements.

*Perform for the Catalog.

perform zf_catalog using it_fieldcat.

*Perform For fetching data.

perform zf_select.

*Perform Event Include.

perform zf_event using it_event.

*Perform For the List Display.

perform zf_diplay.

&----


*& Form zf_catalog

&----


  • text

----


  • -->P_IT_FIELDCAT text

----


form zf_catalog using p_it_fieldcat type slis_t_fieldcat_alv.

data: l_fieldcat type slis_fieldcat_alv.

clear l_fieldcat.

*IT_MATERIAL-MATNR ======= MATERIAL NUMBER =======

L_FIELDCAT-COL_POS = '1'.

L_FIELDCAT-FIELDNAME = 'MATNR'.

L_FIELDCAT-TABNAME = 'IT_MATERIAL'.

L_FIELDCAT-OUTPUTLEN = 18.

L_FIELDCAT-KEY = 'X'.

L_FIELDCAT-REF_TABNAME = 'MARA'.

L_FIELDCAT-LZERO = 'X'.

L_FIELDCAT-JUST = 'C'.

L_FIELDCAT-SELTEXT_L = 'MATERIAL NUBMBER'.

L_FIELDCAT-SELTEXT_M = 'MATERIAL No.'.

L_FIELDCAT-SELTEXT_S = 'MATR. NO.'.

APPEND L_FIELDCAT TO P_IT_FIELDCAT.

clear l_fieldcat.

*IT_MATERIAL-MAKTX ======= MATERIAL DESCRIPTION =======

L_FIELDCAT-COL_POS = '2'.

L_FIELDCAT-FIELDNAME = 'MAKTX'.

L_FIELDCAT-TABNAME = 'IT_MATERIAL'.

L_FIELDCAT-OUTPUTLEN = 40.

L_FIELDCAT-REF_TABNAME = 'MAKT'.

L_FIELDCAT-LZERO = 'X'.

L_FIELDCAT-JUST = 'C'.

L_FIELDCAT-SELTEXT_L = 'MATERIAL DESCRIPTION'.

L_FIELDCAT-SELTEXT_M = 'MATERIAL DESC.'.

L_FIELDCAT-SELTEXT_S = 'MATR. DESC.'.

APPEND L_FIELDCAT TO P_IT_FIELDCAT.

CLEAR L_FIELDCAT.

endform. " zf_catalog

&----


*& Form zf_select

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form zf_select.

                    • SELECTING THE MATERIAL INFO FROM THE MARA TABLE.

SELECT MATNR

MTART

BISMT

MATKL

SPART

PSTAT INTO CORRESPONDING FIELDS OF TABLE IT_MATERIAL FROM MARA

WHERE MATNR IN S_MATNR.

                  • SELECTING THE MATERIAL DESCRIPTION FROM MAKT TABLE.

LOOP AT IT_MATERIAL.

SELECT MAKTX INTO (IT_MATERIAL-MAKTX)

FROM MAKT WHERE MATNR = IT_MATERIAL-MATNR.

MODIFY IT_MATERIAL.

ENDSELECT.

ENDLOOP.

endform. " zf_select

&----


*& Form zf_event

&----


  • text

----


  • -->P_IT_EVENT text

----


form zf_event using p_it_event TYPE SLIS_T_EVENT.

DATA: IT_EVENT TYPE SLIS_T_EVENT WITH HEADER LINE.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTING

I_LIST_TYPE = 0

IMPORTING

ET_EVENTS = P_IT_EVENT

EXCEPTIONS

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

CLEAR IT_EVENT.

READ TABLE P_IT_EVENT WITH KEY NAME = SLIS_EV_USER_COMMAND INTO IT_EVENT.

IF SY-SUBRC = 0.

MOVE 'Z8_USER_COMMAND' TO IT_EVENT-FORM.

MODIFY P_IT_EVENT FROM IT_EVENT INDEX SY-TABIX TRANSPORTING FORM.

ENDIF.

endform. " zf_event

&----


*& Form zf_diplay

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form zf_diplay .

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE = ' '

I_CALLBACK_PROGRAM = SY-REPID

  • I_CALLBACK_PF_STATUS_SET = ' '

I_CALLBACK_USER_COMMAND = 'Z8_USER_COMMAND'

I_STRUCTURE_NAME = 'I_MATERIAL'

  • IS_LAYOUT =

IT_FIELDCAT = IT_FIELDCAT

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

IT_EVENTS = IT_EVENT

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

t_outtab = IT_MATERIAL

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. " zf_diplay

*******************************************************************************************************

  • *

*******************************************************************************************************

  • *

*******************************************************************************************************

          • FORM USER COMMAND

FORM Z8_USER_COMMAND USING JAY_COMM TYPE SY-UCOMM

P_SELFIELD TYPE SLIS_SELFIELD.

CLEAR it_mbildtab.

REFRESH it_mbildtab.

CASE JAY_COMM.

          • EVENT ON DOUBLE CLICK.

WHEN '&IC1'.

IF P_SELFIELD-FIELDNAME = 'MATNR'. " TAKING MATERIAL NUMBER ON THE FIELD FOR DOUBLE CLICKING.

CLEAR JAY_MATNR.

CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'

EXPORTING

input = P_SELFIELD-VALUE

IMPORTING

OUTPUT = JAY_MATNR

EXCEPTIONS

LENGTH_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.

READ TABLE IT_MATERIAL WITH KEY MATNR = JAY_MATNR. " READING FROM THE INTERNAL TABLE WITH NEW MATERIAL NUMBER.

CLEAR TEMP_MATNR.

CONCATENATE 'LEGACY-' IT_MATERIAL-MATNR INTO TEMP_MATNR. " CONCATINATING LEGACY INFORMATION INTO TEMP FOR THE SCREEN INPUT IN THE MM02 TRANSACTION.

                    • IF MATERIAL TYPE IS FINISHED PRODUCT.

IF IT_MATERIAL-MTART = 'FERT'.

CLEAR it_mbildtab.

REFRESH it_mbildtab.

CALL FUNCTION 'SELECTION_VIEWS_FIND'

EXPORTING

bildsequenz = '21'

pflegestatus = IT_MATERIAL-PSTAT

tables

bildtab = it_mbildtab

EXCEPTIONS

CALL_WRONG = 1

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

clear it_sequence.

refresh it_sequence.

loop at it_mbildtab.

if it_mbildtab-guifu = 'SP01' OR it_mbildtab-guifu = 'SP04' OR it_mbildtab-guifu = 'SP24'.

it_sequence-guifunc = it_mbildtab-guifu.

it_sequence-idxbd = it_mbildtab-idxbd.

append it_sequence.

endif.

endloop.

clear: temp1, temp2, temp3, temp4, temp5, temp6.

ok_basic = 'N'.

ok_sales = 'N'.

ok_account = 'N'.

ok_atleastone = 'N'.

loop at it_sequence. " Views to be passed when transaction mm02 is passed.

if it_sequence-guifunc = 'SP01'.

concatenate 'MSICHTAUSW-KZSEL(' it_sequence-idxbd into temp1.

concatenate temp1 ')' into temp2.

ok_basic = 'Y'.

ok_atleastone = 'Y'.

elseif it_sequence-guifunc = 'SP04'.

concatenate 'MSICHTAUSW-KZSEL(' it_sequence-idxbd into temp3.

concatenate temp3 ')' into temp4.

ok_basic = 'Y'.

ok_atleastone = 'Y'.

elseif it_sequence-guifunc = 'SP24'.

concatenate 'MSICHTAUSW-KZSEL(' it_sequence-idxbd into temp5.

concatenate temp5 ')' into temp6.

ok_basic = 'Y'.

ok_atleastone = 'Y'.

endif.

endloop.

if ok_atleastone = 'Y'.

perform bdc_dynpro using 'SAPLMGMM' '0060'.

perform bdc_field using

'RMMG1-MATNR'

P_SELFIELD-VALUE.

  • PERFORM BDC_FIELD USING 'MARA-MATNR'

  • P_SELFIELD-VALUE.

*

*

perform bdc_field using 'BDC_OKCODE'

'=AUSW'.

perform bdc_dynpro using 'SAPLMGMM' '0070'.

if ok_basic = 'Y'.

perform bdc_field using temp2 'X'.

endif.

if ok_sales = 'Y'.

perform bdc_field using temp4 'X'.

endif.

if ok_account = 'Y'.

perform bdc_field using temp6 'X'.

endif.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0080'. "POP-UP WINDOW ASKING FOR ORGANIZATION-LEVEL DETAILS--

PERFORM BDC_FIELD USING 'BDC_CURSOR' " -- ( WHEN SALES VIEW IS SELECTED)

'RMMG1-WERKS'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=ENTR'.

perform bdc_dynpro using 'SAPLMGMM' '4004'.

  • perform bdc_field using 'BDC_CURSOR'

  • 'MAKT-MAKTX'.

*

*

perform bdc_field using 'MAKT-MAKTX'

it_material-maktx.

perform bdc_field using 'MARA-BISMT'

TEMP_MATNR.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=SP04'.

IF ok_sales = 'Y'.

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'. "SALES SCREEN

PERFORM BDC_FIELD USING 'MARA-MATKL'

IT_Material-MATKL.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=SP24'.

ENDIF.

IF ok_account = 'Y'.

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0081'. "POP-UP WINDOW ASKING FOR SOME DETAILS --

PERFORM BDC_FIELD USING 'BDC_CURSOR' " -- ( WHEN ACCOUNTING VIEW IS SELECTED)

'RMMG1-WERKS'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=ENTR'.

PERFORM BDC_FIELD USING 'RMMG1-WERKS'

'ABC1'.

PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4000'. "ACCOUNTING SCREEN

PERFORM BDC_FIELD USING 'MARA-SPART'

IT_Material-SPART.

ENDIF.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=BU'.

perform bdc_transaction using 'MM02'.

ENDIF.

endif.

endif.

ENDCASE.

ENDFORM. "Z8_USER_COMMAND.

&----


*& Form bdc_dynpro

&----


  • text

----


  • -->P_0661 text

  • -->P_0662 text

----


form bdc_dynpro using PROGRAM DYNPRO.

CLEAR IT_BDCDATA.

IT_BDCDATA-PROGRAM = PROGRAM.

IT_BDCDATA-DYNPRO = DYNPRO.

IT_BDCDATA-DYNBEGIN = 'X'.

APPEND IT_BDCDATA.

endform. " bdc_dynpro

&----


*& Form BDC_FIELD

&----


  • text

----


  • -->P_0786 text

  • -->P_0787 text

----


form BDC_FIELD using fnam fval.

CLEAR IT_BDCDATA.

IT_BDCDATA-FNAM = FNAM.

IT_BDCDATA-FVAL = FVAL.

APPEND IT_BDCDATA.

endform. " BDC_FIELD

&----


*& Form bdc_transaction

&----


  • text

----


  • -->P_0821 text

----


form bdc_transaction using TCODE.

CALL TRANSACTION TCODE USING IT_BDCDATA MODE 'N' UPDATE 'L'.

endform. " bdc_transaction

rEGARDS,

jAYANT

Read only

Former Member
0 Likes
924

hi,

data : begin of itab_mara,

matnr like mara-matnr,

enum like mara-enum,

end of itab_mara.

data : begin of itab_marc,

matnr like marc-matnr,

werks like marc-werks,

end of itab_marc.

data : begin of itab_final,

matnr like mara-matnr,

enum like mara-enum,

werks like marc-werks.

end of itab_final.

data : d_fieldcat type slis_t_fieldcat_alv,

d_fieldcat_wa type slis_fieldcat_alv.

selection-screen : begin of block blk1 with frame title text-001.

select-options : s_matnr for mara-matnr,

s_werks for marc-werks.

selection-screen : end of block blk1.

select matnr erdat from table itab_mara where matnr in s_matnr.

if not itab_mara is initial.

select matnr werks from table itab_marc where werks in s_werks.

endif.

d_fieldcat_wa-fieldname = 'MATNR'.

d_fieldcat_wa_seltext_l = 'material number'.

d_fieldcat_wa-col_pos = 1.

d_fieldcat_wa-edit = 'X'.

append d_fieldcat_wa to t_fieldcat.

clear d_fieldcat_wa.

d_fieldcat_wa-fieldname = 'WERKS'.

d_fieldcat_wa_seltext_l = 'plants'.

d_fieldcat_wa-edit ='X'.

d_fieldcat_wa-col_pos = 2.

append d_fieldcat_wa to t_fieldcat.

clear d_fieldcat_wa.

data :gd_repid like sy-repid.

gd_repid = sy-repid.

call function module reuse_grid_display_alv.

exporting.

proramname = gd_repid.

fieldcat = d_fieldcat.

importing.

t_outtab = itab_final.

exceptions.

reward with points if helpful.

Read only

0 Likes
924

Hi,

when preparing the field catalog for the Grid.

make lwa_fcat-edit = 'X'.

regards,

santosh.

Read only

Former Member
0 Likes
925

hi getha anjali,

u can edit fieldcatlog work area for the necessary fields then u can append that work area to fieldcatlog that u can assign to FM (alv grid display).

regards...

seshu.

Read only

Former Member
0 Likes
924

hi,

check the example.

editable alv:

REPORT ZLAXMI_REPORT6 NO STANDARD PAGE HEADING

MESSAGE-ID ZZ

LINE-SIZE 132

LINE-COUNT 65 .

TABLES: MARA.

TYPE-POOLS: SLIS.

TYPES: BEGIN OF T_MARA,

MATNR TYPE MARA-MATNR, "Material Number

ERSDA TYPE MARA-ERSDA, "Creation date

BRGEW TYPE MARA-BRGEW, "Gross weight

NTGEW TYPE MARA-NTGEW, "Net weight

MTART TYPE MARA-MTART, "Material type

MBRSH TYPE MARA-MBRSH, "Industry Sector

REC_SEL TYPE C , "checkbox

END OF T_MARA.

----


  • V A R I A B L E S

----


DATA: V_REPID LIKE SY-REPID,

V_FLAG(1) TYPE C.

CONSTANTS :

C_X(1) TYPE C VALUE 'X',

C_PF_STATUS TYPE SLIS_FORMNAME VALUE 'F_SET_PF_STATUS',

C_FC_DELETE(6) TYPE C VALUE 'DELETE',

C_FC_MODIFY(6) TYPE C VALUE 'MODIFY',

C_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'F_USER_COMMAND',

C_USER_COMMAND_MODIFY TYPE SLIS_FORMNAME

VALUE 'F_USER_COMMAND_MODIFY',

C_ICON_DELETE TYPE ICON-NAME VALUE 'ICON_DELETE', " Icon,Delete'

C_ICON_CANCEL TYPE ICON-NAME VALUE 'ICON_CANCEL', " Icon,Cancel'

C_FC_SAVE(4) TYPE C VALUE 'SAVE'.

*internal table declarations.

DATA: IT_MARA TYPE STANDARD TABLE OF T_MARA WITH HEADER LINE,

IT_MODIFY TYPE STANDARD TABLE OF T_MARA WITH HEADER LINE,

IT_TEMP TYPE STANDARD TABLE OF MARA WITH HEADER LINE,

*-ALV Internal Tables.

*--Field Catalog

IT_FIELDCAT TYPE STANDARD TABLE OF

SLIS_FIELDCAT_ALV WITH HEADER LINE,

*--Layout

WA_LAYOUT TYPE SLIS_LAYOUT_ALV,

*--Sort

IT_SORT TYPE SLIS_T_SORTINFO_ALV,

WA_SORT TYPE SLIS_SORTINFO_ALV ,

**-Structure for excluding function codes

WA_EXTAB TYPE SLIS_EXTAB,

**-To hold function codes to be excluded in ALV toolbar

IT_EXTAB TYPE SLIS_T_EXTAB.

*selection screen.

SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS: S_MATNR FOR MARA-MATNR,

S_ERSDA FOR MARA-ERSDA.

SELECTION-SCREEN: END OF BLOCK B1.

*--Radio buttons to select either Display/Delete/Modify

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME

TITLE TEXT-002.

SELECTION-SCREEN : BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(20) TEXT-003.

PARAMETERS: P_DISP RADIOBUTTON GROUP RAD1 DEFAULT 'X'.

SELECTION-SCREEN : END OF LINE.

SELECTION-SCREEN : BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(20) TEXT-005.

PARAMETERS: P_UPD RADIOBUTTON GROUP RAD1.

SELECTION-SCREEN : END OF LINE.

SELECTION-SCREEN : BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(20) TEXT-004.

PARAMETERS: P_DEL RADIOBUTTON GROUP RAD1.

SELECTION-SCREEN : END OF LINE.

SELECTION-SCREEN END OF BLOCK B2 .

AT SELECTION-SCREEN.

PERFORM VALIDATE_SCREEN.

*start of selection

START-OF-SELECTION.

*clear the internal tables to be used.

CLEAR: IT_MARA,IT_MARA[],

V_FLAG.

*get the data

PERFORM GET_DATA.

*end of selection

END-OF-SELECTION.

IF IT_MARA[] IS INITIAL.

MESSAGE I000 WITH

'No Records found for the given Selection Criteria'(012).

ELSE.

*do alv process

V_REPID = SY-REPID.

*--Sort the Output Fields

PERFORM SORT_FIELDS.

*--Build Field catalog for the Output fields

PERFORM BUILD_FIELDCAT.

*--Set the Layout for ALV

PERFORM SET_LAYOUT.

IF P_DISP = C_X.

*--Exclude any Buttons on the Appn tool bar

  • perform change_default_pf_status.

MOVE C_FC_DELETE TO WA_EXTAB-FCODE. " DELETE button on ALV

APPEND WA_EXTAB TO IT_EXTAB.

MOVE C_FC_MODIFY TO WA_EXTAB-FCODE. " MODIFY button on ALV

APPEND WA_EXTAB TO IT_EXTAB.

ELSEIF P_UPD = C_X.

*--Exclude DELETE Button on the appn tool bar

MOVE C_FC_DELETE TO WA_EXTAB-FCODE. " DELETE button on ALV

APPEND WA_EXTAB TO IT_EXTAB.

ELSEIF P_DEL = C_X.

*--Exclude MODIFY button on appn tool bar

MOVE C_FC_MODIFY TO WA_EXTAB-FCODE. " MODIFY button on ALV

APPEND WA_EXTAB TO IT_EXTAB.

ENDIF.

*--Exclude SAVE button for all options

MOVE 'SAVE' TO WA_EXTAB-FCODE. " SAVE button on ALV

APPEND WA_EXTAB TO IT_EXTAB.

*--Display ALV output

PERFORM LIST_DISPLAY TABLES IT_MARA

USING C_USER_COMMAND.

ENDIF.

&----


*& Form get_data

&----


FORM GET_DATA .

SELECT MATNR

ERSDA

BRGEW

NTGEW

MTART

MBRSH

FROM MARA

INTO TABLE IT_MARA

WHERE MATNR IN S_MATNR

AND ERSDA IN S_ERSDA.

IF SY-SUBRC <> 0.

*no records selected leave processing

STOP.

ENDIF.

SORT IT_MARA.

ENDFORM. " get_data

&----


*& Form sort_fields

&----


FORM SORT_FIELDS .

CLEAR WA_SORT.

WA_SORT-FIELDNAME = 'MATNR'.

WA_SORT-SPOS = '1'.

WA_SORT-UP = 'X'.

APPEND WA_SORT TO IT_SORT.

CLEAR WA_SORT.

WA_SORT-FIELDNAME = 'ERSDA'.

WA_SORT-SPOS = '2'.

WA_SORT-UP = 'X'.

APPEND WA_SORT TO IT_SORT.

ENDFORM. " sort_fields

&----


*& Form build_fieldcat

&----


FORM BUILD_FIELDCAT .

IT_FIELDCAT-COL_POS = '1'.

IT_FIELDCAT-FIELDNAME = 'MATNR'.

IT_FIELDCAT-KEY = 'X'.

IT_FIELDCAT-OUTPUTLEN = '15'.

IT_FIELDCAT-SELTEXT_L = 'Material number'(022).

APPEND IT_FIELDCAT.

CLEAR IT_FIELDCAT.

IT_FIELDCAT-COL_POS = '2'.

IT_FIELDCAT-FIELDNAME = 'ERSDA'.

IT_FIELDCAT-KEY = 'X'.

IT_FIELDCAT-OUTPUTLEN = '10'.

IT_FIELDCAT-SELTEXT_L = 'Created on'(023).

APPEND IT_FIELDCAT.

CLEAR IT_FIELDCAT.

IT_FIELDCAT-COL_POS = '3'.

IT_FIELDCAT-FIELDNAME = 'BRGEW'.

IT_FIELDCAT-OUTPUTLEN = '10'.

IT_FIELDCAT-SELTEXT_L = 'GROSS WEIGHT'(024).

APPEND IT_FIELDCAT.

CLEAR IT_FIELDCAT.

IT_FIELDCAT-COL_POS = '4'.

IT_FIELDCAT-FIELDNAME = 'NTGEW'.

IT_FIELDCAT-OUTPUTLEN = '15'.

IT_FIELDCAT-SELTEXT_L = 'NET WEIGHT'(025).

APPEND IT_FIELDCAT.

CLEAR IT_FIELDCAT.

IT_FIELDCAT-COL_POS = '5'.

IT_FIELDCAT-FIELDNAME = 'MTART'.

IT_FIELDCAT-OUTPUTLEN = '3'.

IT_FIELDCAT-SELTEXT_L = 'Material type'(026).

APPEND IT_FIELDCAT.

CLEAR IT_FIELDCAT.

IT_FIELDCAT-COL_POS = '6'.

IT_FIELDCAT-FIELDNAME = 'MBRSH'.

IT_FIELDCAT-OUTPUTLEN = '25'.

IT_FIELDCAT-SELTEXT_L = 'Industry sector'(027).

APPEND IT_FIELDCAT.

CLEAR IT_FIELDCAT.

IT_FIELDCAT-FIELDNAME = 'REC_SEL'.

IT_FIELDCAT-NO_OUT = C_X.

APPEND IT_FIELDCAT.

CLEAR IT_FIELDCAT.

ENDFORM. " build_fieldcat

&----


*& Form list_display

&----


  • text

----


  • -->P_IT_MARA text

  • -->P_C_USER_COMMAND text

----


FORM LIST_DISPLAY TABLES P_IT_MARA

USING P_USER_COMMAND TYPE SLIS_FORMNAME.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

I_CALLBACK_PROGRAM = V_REPID

I_CALLBACK_PF_STATUS_SET = C_PF_STATUS

I_CALLBACK_USER_COMMAND = P_USER_COMMAND

IS_LAYOUT = WA_LAYOUT

IT_FIELDCAT = IT_FIELDCAT[]

IT_EXCLUDING = IT_EXTAB[]

IT_SORT = IT_SORT[]

TABLES

T_OUTTAB = P_IT_MARA

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 F_SET_PF_STATUS

&----


  • Set PF_STATUS STANDARD modifying the standard toolbar

  • by excluding some buttons

----


  • -->P_IT_EXTAB -- TABLE OF EXCLUDING FUNCTIONS

----


FORM F_SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.

CLEAR : WA_EXTAB,

IT_EXTAB.

*--Set the Modified PF status for the ALV.

SET PF-STATUS 'ALV_STATUS_01' EXCLUDING RT_EXTAB.

ENDFORM. " SET_PF_STATUS

&----


*& Form f_user_command

&----


  • Handle user action on ALV toolbar

----


FORM F_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM

RS_SELFIELD TYPE SLIS_SELFIELD.

RS_SELFIELD-REFRESH = C_X.

IF R_UCOMM = C_FC_DELETE.

*--User Selected DELETE button.

PERFORM DELETE_SELECTED_RECORDS.

ELSEIF R_UCOMM = C_FC_MODIFY.

*--If user selects MODIFY button.

PERFORM CHANGE_RECORDS.

ENDIF.

ENDFORM. "F_USER_COMMAND

&----


*& Form POP_UP_CONFIRMATION

&----


FORM POP_UP_CONFIRMATION

CHANGING P_ANSWER TYPE C.

DATA:

L_TITLE(14) TYPE C, " Title of pop-up

L_TXT_QUESTION(52) TYPE C, " Text displayed in pop-up

  • L_DISP_CANCEL TYPE C, " Display 'Cancel' button?

L_BTN1 TYPE ICON-NAME, " Icon on button 1

L_BTN2 TYPE ICON-NAME. " Icon on button 2

L_TITLE = 'Delete'(017). " delete

L_TXT_QUESTION = 'Are you sure to delete?'(018).

L_BTN1 = C_ICON_DELETE.

L_BTN2 = C_ICON_CANCEL.

**-Display pop-up asking user for confirmation

CALL FUNCTION 'POPUP_TO_CONFIRM'

EXPORTING

TITLEBAR = L_TITLE

TEXT_QUESTION = L_TXT_QUESTION

TEXT_BUTTON_1 = 'Yes'

ICON_BUTTON_1 = L_BTN1

TEXT_BUTTON_2 = 'No'

ICON_BUTTON_2 = L_BTN2

DEFAULT_BUTTON = '2'

DISPLAY_CANCEL_BUTTON = 'X'

IMPORTING

ANSWER = P_ANSWER

EXCEPTIONS

TEXT_NOT_FOUND = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

MESSAGE E000 WITH 'Error executing function module:'(019)

'POPUP_TO_CONFIRM'.

ENDIF.

ENDFORM. "pop_up_confirmation

&----


*& Form set_layout

&----


FORM SET_LAYOUT .

IF P_DEL = C_X OR P_UPD = C_X.

*--Allow Input only if user choose 'UPDATE'/ 'DELETE' radio buttons

WA_LAYOUT-BOX_FIELDNAME = 'REC_SEL'.

WA_LAYOUT-BOX_TABNAME = 'IT_MARA'.

ENDIF.

*--Display Header based on the user selection

IF P_DISP = C_X.

WA_LAYOUT-WINDOW_TITLEBAR =

'Display '(036).

ELSEIF P_DEL = C_X.

WA_LAYOUT-WINDOW_TITLEBAR =

'Delete '(037).

ELSEIF P_UPD = C_X.

WA_LAYOUT-WINDOW_TITLEBAR =

'Change '(038).

ENDIF.

ENDFORM. " set_layout

&----


*& Form change_default_pf_status

&----


FORM CHANGE_DEFAULT_PF_STATUS .

MOVE C_FC_DELETE TO WA_EXTAB-FCODE. " DELETE button on ALV

APPEND WA_EXTAB TO IT_EXTAB.

MOVE C_FC_MODIFY TO WA_EXTAB-FCODE. " MODIFY button on ALV

APPEND WA_EXTAB TO IT_EXTAB.

ENDFORM. " change_default_pf_status

&----


*& Form f_user_command

&----


  • Handle user action on ALV toolbar

----


FORM F_USER_COMMAND_MODIFY USING R_UCOMM LIKE SY-UCOMM "#EC *

RS_SELFIELD TYPE SLIS_SELFIELD.

DATA : L_ANSWER TYPE C. "#EC *

IF R_UCOMM = C_FC_SAVE.

*user selected save button

READ TABLE IT_MODIFY WITH KEY REC_SEL = 'X'.

*check if user selected atleast one line.

IF SY-SUBRC <> 0.

MESSAGE I000 WITH 'No record(s) Selected to Modify'(016).

EXIT.

ENDIF.

LOOP AT IT_MODIFY WHERE REC_SEL = 'X'.

*--Check the entered values are valid or not.

  • IF NOT ( it_modify-status = 'A' OR

  • it_modify-status = 'C' OR

  • it_modify-status = 'E' ).

*--User Entered invalid value for STATUS field,so Display Error Msg

CLEAR R_UCOMM.

  • MESSAGE e000 WITH 'Invalid value '''(031)

  • '' for Status in the Record # '(032)

  • sy-tabix.

  • ENDIF.

ENDLOOP.

CLEAR: IT_TEMP,

IT_TEMP[].

LOOP AT IT_MODIFY WHERE REC_SEL = 'X'.

MOVE-CORRESPONDING IT_MODIFY TO IT_TEMP.

APPEND IT_TEMP.

CLEAR IT_TEMP.

ENDLOOP.

*--start new code

DATA : IT_TEMP2 LIKE STANDARD TABLE OF MARA WITH HEADER LINE.

SELECT * FROM MARA

INTO TABLE IT_TEMP2

FOR ALL ENTRIES IN IT_TEMP

WHERE MATNR = IT_TEMP-MATNR.

IF SY-SUBRC = 0.

LOOP AT IT_MODIFY WHERE REC_SEL = 'X'.

READ TABLE IT_TEMP2 WITH KEY MATNR = IT_MODIFY-MATNR.

IF SY-SUBRC = 0.

IT_TEMP2-NTGEW = IT_MODIFY-NTGEW.

IT_TEMP2-BRGEW = IT_MODIFY-BRGEW.

MODIFY IT_TEMP2 INDEX SY-TABIX.

ENDIF.

ENDLOOP.

ENDIF.

*modify mara table with the changed values

MODIFY MARA FROM TABLE IT_TEMP2 .

*--end new code

IF SY-SUBRC = 0.

COMMIT WORK AND WAIT.

*--Display message with Success in Updating database

MESSAGE I000 WITH SY-DBCNT

' Record(s) has been Updated'(020).

CLEAR :

IT_MARA,

IT_MARA[].

*get-data again from database.

PERFORM GET_DATA.

  • RS_SELFIELD-REFRESH = C_X.

ELSE.

*--Error occurred

MESSAGE I000 WITH 'Error occured in Modifying the database'(021).

ENDIF.

ENDIF.

ENDFORM. "f_user_command_modify

&----


*& Form validate_screen

&----


FORM VALIDATE_SCREEN .

DATA : LV_MATNR LIKE MARA-MATNR.

*--validate product

IF NOT S_MATNR[] IS INITIAL.

SELECT MATNR

INTO MARA-MATNR

FROM MARA

WHERE MATNR IN S_MATNR.

ENDSELECT.

IF SY-SUBRC <> 0.

*--Error

MESSAGE E000 WITH 'Invalid Material'(034).

ENDIF.

ENDIF.

ENDFORM. " validate_screen

&----


*& Form delete_records

&----


FORM DELETE_RECORDS .

LOOP AT IT_MARA.

MOVE-CORRESPONDING IT_MARA TO IT_TEMP.

APPEND IT_TEMP.

CLEAR IT_TEMP.

ENDLOOP.

DELETE MARA FROM TABLE IT_TEMP.

IF SY-SUBRC = 0.

*--Successfully selected records Deleted.

COMMIT WORK AND WAIT.

*--Display Success Message to the user

MESSAGE I000 WITH SY-DBCNT

' Record(s) deleted Successfully'(010).

ELSE.

*--Error occured in deletion

MESSAGE I000 WITH 'Error occured in Deleting the Record(s)'(011).

ENDIF.

CLEAR: IT_MARA,

IT_MARA[],

IT_TEMP,

IT_TEMP[].

V_FLAG = C_X.

STOP.

ENDFORM. " delete_records

&----


*& Form delete_selected_records

&----


FORM DELETE_SELECTED_RECORDS .

DATA : L_ANSWER(1) TYPE C.

READ TABLE IT_MARA WITH KEY REC_SEL = C_X.

IF SY-SUBRC <> 0.

MESSAGE I000 WITH 'No record(s) Selected to Delete'(013).

EXIT.

ELSE.

*--Ask for delete confirmation

PERFORM POP_UP_CONFIRMATION

CHANGING L_ANSWER.

IF L_ANSWER = '1'. " 'Yes'

CLEAR: IT_TEMP,

IT_TEMP[].

LOOP AT IT_MARA WHERE REC_SEL = 'X'.

MOVE-CORRESPONDING IT_MARA TO IT_TEMP.

APPEND IT_TEMP.

CLEAR IT_TEMP.

ENDLOOP.

DELETE MARA FROM TABLE IT_TEMP.

IF SY-SUBRC = 0.

*--Successfully selected records Deleted.

COMMIT WORK AND WAIT.

*--Display completed work information to the user

MESSAGE I000 WITH SY-DBCNT

' Record(s) deleted Successfully'(014).

*--Clear the Internal tables

CLEAR: IT_MARA,

IT_MARA[].

*--Reselects entries from Database again & display in ALV

PERFORM GET_DATA.

ELSE.

*--Error occured

MESSAGE I000 WITH

'Error occured in Deleting the Record(s)'(015).

ENDIF.

ENDIF.

ENDIF.

ENDFORM. " delete_selected_records

&----


*& Form change_records

&----


FORM CHANGE_RECORDS .

READ TABLE IT_MARA WITH KEY REC_SEL = 'X'.

*--check user selected at least 1 record to MODIFY or not

IF SY-SUBRC <> 0.

MESSAGE I000 WITH 'No record(s) Selected to Modify'(016).

EXIT.

ELSE.

CLEAR : IT_MODIFY,

IT_MODIFY[].

LOOP AT IT_MARA WHERE REC_SEL = 'X'.

IT_MODIFY = IT_MARA.

APPEND IT_MODIFY.

CLEAR IT_MODIFY.

ENDLOOP.

*--Change PF status for this new ALV list.

PERFORM CHANGE_PF_STATUS_AGAIN.

*--Change Field Catalog to make INPUT enabled.

READ TABLE IT_FIELDCAT WITH KEY FIELDNAME = 'NTGEW'.

IT_FIELDCAT-INPUT = C_X.

MODIFY IT_FIELDCAT INDEX SY-TABIX.

*--Call ALV LIST DISPLAY with this new values.

PERFORM LIST_DISPLAY TABLES IT_MODIFY

USING C_USER_COMMAND_MODIFY.

ENDIF.

ENDFORM. " change_records

&----


*& Form change_pf_status_again

&----


FORM CHANGE_PF_STATUS_AGAIN .

MOVE C_FC_DELETE TO WA_EXTAB-FCODE. " DELETE button on ALV

APPEND WA_EXTAB TO IT_EXTAB.

MOVE C_FC_MODIFY TO WA_EXTAB-FCODE. " MODIFY button on ALV

APPEND WA_EXTAB TO IT_EXTAB.

ENDFORM. " change_pf_status_again

chk this link.

http://www.sapdevelopment.co.uk/reporting/alv/alvgrid_editable.htm

then u can capture the events in USER COMMAND.

http://www.sapdevelopment.co.uk/reporting/alv/alvgrid_ucomm.htm

See these threads