2007 May 09 10:10 AM
2007 May 09 10:20 AM
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......
2007 May 09 10:11 AM
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
2007 May 09 10:14 AM
yes.. when 'CHANGE'. "for changing mode
gs_layout-edit = 'X'.
i used this.. but not working....
2007 May 09 10:15 AM
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
2007 May 09 10:16 AM
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.
2007 May 09 10:16 AM
Hi,
when preparing the field catalog for the Grid.
make lwa_fcat-edit = 'X'.
regards,
santosh.
2007 May 09 10:20 AM
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.
2007 May 09 10:23 AM
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
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |