Code: Alles auswählen.
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS: handle_data_changed
FOR EVENT data_changed
OF cl_gui_alv_grid
IMPORTING er_data_changed
e_ucomm.
ENDCLASS. "lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_data_changed.
DATA: dl_ins_row TYPE lvc_s_moce, " Insert Row
ls_deleted_row TYPE lvc_s_moce,
ls_mat_gr_vert TYPE zip_st_mat_gr_vert.
FIELD-SYMBOLS: <tab> TYPE table,
<ls_mat_gr_vert> TYPE zip_st_mat_gr_vert. " Output table
*..............
* modified rows
*..............
"Loop at the modified rows table and assign default values
ASSIGN er_data_changed->mp_mod_rows->* TO <tab>. "<ls_mat_gr_vert>."
LOOP AT <tab> ASSIGNING <ls_mat_gr_vert>.
<ls_mat_gr_vert>-prgrp = gv_prgrp.
<ls_mat_gr_vert>-werks = '01'. "CUSTOMIZING ergänzen
IF <ls_mat_gr_vert>-nrmit is not INITIAL.
SELECT Single nrmit from pgmi into <ls_mat_gr_vert>-matnr where prgrp eq <ls_mat_gr_vert>-nrmit.
ENDIF.
IF <ls_mat_gr_vert>-matnr IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <ls_mat_gr_vert>-matnr
IMPORTING
output = <ls_mat_gr_vert>-matnr.
SELECT SINGLE maktx INTO <ls_mat_gr_vert>-bezeichnung
FROM makt
WHERE matnr EQ <ls_mat_gr_vert>-matnr
AND spras EQ 'DE'. "CUSTOMIZING ergänzen
ENDIF.
MODIFY <tab> FROM <ls_mat_gr_vert> INDEX sy-tabix.
ENDLOOP.
ENDMETHOD. "handle_data_changed
Pyro hat geschrieben:Moin,
verstehe ich die Fragestellung jetzt richtig, dass du ein ooalv hast, in dem du eine itab anzeigen lässt. Die Einträge dieser itab willst du ändern und wieder im alv anzeigen lassen?
Falls ja: Hast du schon einen cl_gui_alv_grid->refresh_table_Display oder wie das heißt probiert?
Code: Alles auswählen.
*..............
* modified rows
*..............
"Loop at the modified rows table and assign default values
ASSIGN er_data_changed->mp_mod_rows->* TO <tab>. "<ls_mat_gr_vert>."
LOOP AT <tab> ASSIGNING <ls_mat_gr_vert>.
<ls_mat_gr_vert>-prgrp = gv_prgrp.
<ls_mat_gr_vert>-werks = '01'. "CUSTOMIZING ergänzen
IF <ls_mat_gr_vert>-nrmit is not INITIAL.
SELECT Single nrmit from pgmi into <ls_mat_gr_vert>-matnr where prgrp eq <ls_mat_gr_vert>-nrmit.
ENDIF.
IF <ls_mat_gr_vert>-matnr IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <ls_mat_gr_vert>-matnr
IMPORTING
output = <ls_mat_gr_vert>-matnr.
SELECT SINGLE maktx INTO <ls_mat_gr_vert>-bezeichnung
FROM makt
WHERE matnr EQ <ls_mat_gr_vert>-matnr
AND spras EQ 'DE'. "CUSTOMIZING ergänzen
READ TABLE er_data_changed->mt_good_cells INTO ls_good WITH KEY fieldname = 'NRMIT'
value = <ls_mat_gr_vert>-nrmit.
MOVE-CORRESPONDING ls_good to ls_good_new.
ls_good_new-fieldname = 'MATNR'.
ls_good_new-value = <ls_mat_gr_vert>-matnr.
APPEND ls_good_new to er_data_changed->mt_good_cells.
ls_good_new-fieldname = 'BEZEICHNUNG'.
ls_good_new-value = <ls_mat_gr_vert>-bezeichnung.
APPEND ls_good_new to er_data_changed->mt_good_cells.
ENDIF.
MODIFY <tab> FROM <ls_mat_gr_vert> INDEX sy-tabix.
IF Sy-subrc eq 0. "für geänderte Tabellenzeilen - Workarround :-(
APPEND INITIAL LINE TO gt_mat_gr_vert_chg ASSIGNING <ls_mat_gr_vert_chg>. "für geänderte Tabellenzeilen - Workarround :-(
MOVE-CORRESPONDING <ls_mat_gr_vert> to <ls_mat_gr_vert_chg>. "für geänderte Tabellenzeilen - Workarround :-(
gv_data_is_changed = 'X'. "für geänderte Tabellenzeilen - Workarround :-(
ENDIF.
Code: Alles auswählen.
*..............
* modified rows
*..............
"Loop at the modified rows table and assign default values
ASSIGN er_data_changed->mp_mod_rows->* TO <tab>. "<ls_mat_gr_vert>."
LOOP AT <tab> ASSIGNING <ls_mat_gr_vert>.
<ls_mat_gr_vert>-prgrp = gv_prgrp.
<ls_mat_gr_vert>-werks = '01'. "CUSTOMIZING ergänzen
IF <ls_mat_gr_vert>-nrmit is not INITIAL.
SELECT Single nrmit from pgmi into <ls_mat_gr_vert>-matnr where prgrp eq <ls_mat_gr_vert>-nrmit.
ENDIF.
IF <ls_mat_gr_vert>-matnr IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <ls_mat_gr_vert>-matnr
IMPORTING
output = <ls_mat_gr_vert>-matnr.
SELECT SINGLE maktx INTO <ls_mat_gr_vert>-bezeichnung
FROM makt
WHERE matnr EQ <ls_mat_gr_vert>-matnr
AND spras EQ 'DE'. "CUSTOMIZING ergänzen
READ TABLE er_data_changed->mt_good_cells INTO ls_good WITH KEY fieldname = 'NRMIT'
value = <ls_mat_gr_vert>-nrmit.
* MOVE-CORRESPONDING ls_good to ls_good_new.
* ls_good_new-fieldname = 'MATNR'.
* ls_good_new-value = <ls_mat_gr_vert>-matnr.
* APPEND ls_good_new to er_data_changed->mt_good_cells.
* ls_good_new-fieldname = 'BEZEICHNUNG'.
* ls_good_new-value = <ls_mat_gr_vert>-bezeichnung.
* APPEND ls_good_new to er_data_changed->mt_good_cells.
er_data_changed->modify_cell(
EXPORTING
i_row_id = ls_good-row_id " Zeilen-ID
i_tabix = ls_good-tabix " Zeilen-Index
i_fieldname = 'MATNR' " Feldname
i_value = <ls_mat_gr_vert>-matnr " Wert
).
er_data_changed->modify_cell(
EXPORTING
i_row_id = ls_good-row_id " Zeilen-ID
i_tabix = ls_good-tabix " Zeilen-Index
i_fieldname = 'BEZEICHNUNG' " Feldname
i_value = <ls_mat_gr_vert>-bezeichnung " Wert
).
ENDIF.
MODIFY <tab> FROM <ls_mat_gr_vert> INDEX sy-tabix.
IF Sy-subrc eq 0. "für geänderte Tabellenzeilen - Workarround :-(
APPEND INITIAL LINE TO gt_mat_gr_vert_chg ASSIGNING <ls_mat_gr_vert_chg>. "für geänderte Tabellenzeilen - Workarround :-(
MOVE-CORRESPONDING <ls_mat_gr_vert> to <ls_mat_gr_vert_chg>. "für geänderte Tabellenzeilen - Workarround :-(
gv_data_is_changed = 'X'. "für geänderte Tabellenzeilen - Workarround :-(
ENDIF. "für geänderte Tabellenzeilen - Workarround :-(
* READ TABLE gt_mat_gr_vert with key werks = '01'
* prgrp = <ls_mat_gr_vert>-prgrp
* nrmit = <ls_mat_gr_vert>-nrmit
* TRANSPORTING NO FIELDS.
* IF Sy-subrc eq 0.
* MODIFY gt_mat_gr_vert from <ls_mat_gr_vert> INDEX sy-tabix.
* ENDIF.
ENDLOOP.