0% found this document useful (0 votes)
8 views

ZTable Update From ALV

Uploaded by

ryashasvi.a
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views

ZTable Update From ALV

Uploaded by

ryashasvi.a
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

*&----------------------ABAP CODE FOR Z TABLE UPDATION FROM ALV OUTPUT

*&---------------------------------------------------------------------*
*& Report YRA_ZTAB3
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT yra_ztab4. " Define the report name

TABLES: mara, makt, yra_material. " Declare the tables used

TYPE-POOLS: slis, lvc. " Include type pools for ALV grid

" Define structure ty_mara


TYPES: BEGIN OF ty_mara,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
laeda TYPE mara-laeda,
pstat TYPE mara-pstat,
mtart TYPE mara-mtart,
END OF ty_mara.

" Define structure ty_makt


TYPES: BEGIN OF ty_makt,
matnr TYPE makt-matnr,
spras TYPE makt-spras,
maktx TYPE makt-maktx,
END OF ty_makt.

" Define structure ty_final


TYPES: BEGIN OF ty_final,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
laeda TYPE mara-laeda,
pstat TYPE mara-pstat,
mtart TYPE mara-mtart,
spras TYPE makt-spras,
maktx TYPE makt-maktx,
custom_field TYPE yra_material-custom_field,
field_style TYPE lvc_t_styl,
color(4) TYPE c,
fcolor TYPE slis_t_specialcol_alv,
END OF ty_final.

" Declare internal tables and work areas


DATA: lt_mara TYPE TABLE OF ty_mara,
lt_makt TYPE TABLE OF ty_makt,

lt_final TYPE TABLE OF ty_final,


ls_final TYPE ty_final,

lt_final1 TYPE TABLE OF yra_material,


ls_final1 TYPE yra_material,

lt_fieldcat TYPE TABLE OF lvc_s_fcat,


ls_fieldcat TYPE lvc_s_fcat,

lt_sort TYPE TABLE OF lvc_s_sort,


ls_sort TYPE lvc_s_sort,
ls_fcolor TYPE slis_specialcol_alv,

ls_layout TYPE lvc_s_layo.

DATA : e_grid TYPE REF TO cl_gui_alv_grid. " Define reference variable for ALV grid

" Define selection screen


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_matnr FOR mara-matnr.
PARAMETERS: s_create TYPE mara-ersda.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

PERFORM get_data. " Call get_data form


PERFORM set_specific_field_attributes. " Call set_specific_field_attributes form
PERFORM display_data. " Call display_data form

*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM get_data.

" Select data from MARA table into lt_mara


SELECT matnr ersda laeda pstat mtart
FROM mara INTO TABLE lt_mara
WHERE matnr IN s_matnr.

" If lt_mara is not initial, select corresponding data from MAKT table into
lt_makt
IF lt_mara IS NOT INITIAL.
SELECT matnr spras maktx
FROM makt INTO TABLE lt_makt
FOR ALL ENTRIES IN lt_mara
WHERE matnr = lt_mara-matnr.
ENDIF.

" Loop through lt_mara and populate lt_final


LOOP AT lt_mara INTO DATA(ls_mara).
CLEAR ls_final.
ls_final-matnr = ls_mara-matnr.
ls_final-ersda = ls_mara-ersda.
ls_final-laeda = ls_mara-laeda.
ls_final-pstat = ls_mara-pstat.
ls_final-mtart = ls_mara-mtart.

" Read corresponding data from lt_makt


READ TABLE lt_makt INTO DATA(ls_makt) WITH KEY matnr = ls_mara-matnr.
IF sy-subrc = 0.
ls_final-spras = ls_makt-spras.
ls_final-maktx = ls_makt-maktx.
ENDIF.

" Set field color based on mtart


IF lS_final-mtart EQ '03FG'.
CLEAR ls_fcolor.
ls_fcolor-fieldname = 'CUSTOM_FIELD'.
ls_fcolor-color-col = 6.
APPEND ls_fcolor TO ls_final-fcolor.
ELSEIF lS_final-mtart EQ 'ZHAR'.
CLEAR ls_fcolor.
ls_fcolor-fieldname = 'CUSTOM_FIELD'.
ls_fcolor-color-col = 5.
APPEND ls_fcolor TO ls_final-fcolor.
ELSE.
CLEAR ls_fcolor.
ls_fcolor-fieldname = 'CUSTOM_FIELD'.
ls_fcolor-color-col = 3.
APPEND ls_fcolor TO ls_final-fcolor.
ENDIF.

" Select custom_field from yra_material


SELECT SINGLE custom_field
INTO ls_final-custom_field
FROM yra_material
WHERE matnr = ls_mara-matnr.
APPEND ls_final TO lt_final.
CLEAR ls_final.
ENDLOOP.

" Display message if no data found


IF lt_final IS INITIAL.
MESSAGE 'No Values found' TYPE 'I'.
ENDIF.

ENDFORM. " get_data

*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM display_data.
DATA : cpos TYPE i VALUE 1.

" Set field catalog for ALV display


ls_fieldcat-col_pos = cpos.
ls_fieldcat-tabname = 'LT_FINAL'.
ls_fieldcat-fieldname = 'MATNR'.
ls_fieldcat-scrtext_l = 'Material No'.
ls_fieldcat-no_zero = 'X'.
ls_fieldcat-hotspot = 'X'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.

cpos = cpos + 1.
ls_fieldcat-col_pos = cpos.
ls_fieldcat-tabname = 'LT_FINAL'.
ls_fieldcat-fieldname = 'ERSDA'.
ls_fieldcat-scrtext_l = 'Created On'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.

cpos = cpos + 1.
ls_fieldcat-col_pos = cpos.
ls_fieldcat-tabname = 'LT_FINAL'.
ls_fieldcat-fieldname = 'LAEDA'.
ls_fieldcat-scrtext_l = 'Date of Last Change'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.

cpos = cpos + 1.
ls_fieldcat-col_pos = cpos.
ls_fieldcat-tabname = 'LT_FINAL'.
ls_fieldcat-fieldname = 'PSTAT'.
ls_fieldcat-scrtext_l = 'Maintenance Status'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.

cpos = cpos + 1.
ls_fieldcat-col_pos = cpos.
ls_fieldcat-tabname = 'LT_FINAL'.
ls_fieldcat-fieldname = 'MTART'.
ls_fieldcat-scrtext_l = 'Material Type'.
ls_layout-ctab_fname = 'FCOLOR'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.

cpos = cpos + 1.
ls_fieldcat-col_pos = cpos.
ls_fieldcat-tabname = 'LT_FINAL'.
ls_fieldcat-fieldname = 'SPRAS'.
ls_fieldcat-scrtext_l = 'Language Key'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.

cpos = cpos + 1.
ls_fieldcat-col_pos = cpos.
ls_fieldcat-tabname = 'LT_FINAL'.
ls_fieldcat-fieldname = 'MAKTX'.
ls_fieldcat-scrtext_l = 'Material Description'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.

cpos = cpos + 1.
ls_fieldcat-col_pos = cpos.
ls_fieldcat-tabname = 'LT_FINAL'.
ls_fieldcat-fieldname = 'CUSTOM_FIELD'.
ls_fieldcat-scrtext_l = 'Remarks'.
ls_fieldcat-edit = 'X'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.

" Set layout options for ALV display


ls_layout-zebra = 'X'.
ls_layout-col_opt = 'X'.
ls_layout-stylefname = 'FIELD_STYLE'.

" Set sort criteria for ALV display


ls_sort-fieldname = 'MATNR'.
ls_sort-comp = abap_true.
APPEND ls_sort TO lt_sort.
CLEAR ls_sort.

" Call ALV display function


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
is_layout_lvc = ls_layout
it_fieldcat_lvc = lt_fieldcat
it_sort_lvc = lt_sort
TABLES
t_outtab = lt_final
EXCEPTIONS
program_error = 1
OTHERS = 2.

" Handle ALV display errors


IF sy-subrc <> 0.
MESSAGE 'Error displaying ALV' TYPE 'E'.
ENDIF.

ENDFORM. " display_data

" Define PF-STATUS form


FORM pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZSAVE'.
ENDFORM.

" Define user_command form


FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.

" Declare data for changed final table


DATA: lt_changed_final TYPE TABLE OF ty_final,
ls_changed_final TYPE ty_final,
lt_existing_material TYPE TABLE OF yra_material,
ls_existing_material TYPE yra_material,
lt_final_update TYPE TABLE OF yra_material,
lt_final_insert TYPE TABLE OF yra_material.

" Process user command


CASE r_ucomm.

WHEN 'MODIFY'.
" Get ALV grid object
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = e_grid.

" Check changed data in ALV


CALL METHOD e_grid->check_changed_data.

" Collect changed data from ALV


LOOP AT lt_final INTO ls_final.
IF ls_final-custom_field IS NOT INITIAL.
APPEND ls_final TO lt_changed_final.
CLEAR ls_final.
ENDIF.
ENDLOOP.

" Fetch existing records from database


SELECT * FROM yra_material INTO TABLE lt_existing_material
FOR ALL ENTRIES IN lt_changed_final
WHERE matnr = lt_changed_final-matnr.

" Process changes


LOOP AT lt_changed_final INTO ls_changed_final.
READ TABLE lt_existing_material INTO ls_existing_material
WITH KEY matnr = ls_changed_final-matnr.

ls_final1 = CORRESPONDING #( ls_changed_final ).

IF sy-subrc = 0.
" Record exists, add to update table
APPEND ls_final1 TO lt_final_update.
ELSE.
" Record does not exist, add to insert table
APPEND ls_final1 TO lt_final_insert.
ENDIF.
ENDLOOP.

" Update existing records


MODIFY yra_material FROM TABLE lt_final_update.
IF sy-subrc = 0.
MESSAGE 'Data Updated Successfully' TYPE 'S'.
ELSE.
MESSAGE 'Error Updating Data' TYPE 'E'.
ENDIF.

" Insert new records


INSERT yra_material FROM TABLE lt_final_insert.
IF sy-subrc = 0.
MESSAGE 'Data Inserted Successfully' TYPE 'S'.
ELSE.
MESSAGE 'Error Inserting Data' TYPE 'E'.
ENDIF.

" Set specific field attributes to make custom_field non-editable


PERFORM set_specific_field_attributes.

" Refresh the ALV display


CALL METHOD e_grid->refresh_table_display.

WHEN '&IC1'.
" Check if the field clicked is the hotspot field
IF rs_selfield-fieldname = 'MATNR'. " Change 'MATNR' to your specific field
name
" Call transaction MM03 with material number
SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
CALL TRANSACTION 'MM03'.
ENDIF.
WHEN OTHERS.

ENDCASE.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form set_specific_field_attributes
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
FORM set_specific_field_attributes.
DATA : ls_stylerow TYPE lvc_s_styl,
lt_styletab TYPE lvc_t_styl.

" Loop through lt_final and set specific field attributes


LOOP AT lt_final INTO ls_final.
CLEAR: lt_styletab.

IF ls_final-custom_field IS NOT INITIAL.


ls_stylerow-fieldname = 'CUSTOM_FIELD'.
ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND ls_stylerow TO lt_styletab.

ls_final-field_style = lt_styletab.
MODIFY lt_final FROM ls_final TRANSPORTING field_style.
ENDIF.
ENDLOOP.
ENDFORM. " set_specific_field_attributes

You might also like