Code: Alles auswählen.
* CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
* EXPORTING
* i_structure_name = 'ZMBE_ADRESSDATEN_S'
* CHANGING
* ct_fieldcat = g_fieldcat_t
* EXCEPTIONS
* inconsistent_interface = 1
* program_error = 2
* OTHERS = 3.
* IF sy-subrc <> 0.
* IF 1 = 2. MESSAGE e049(zmbe) WITH ''. ENDIF. "#EC *
* CREATE OBJECT ch_cl_msg
* EXPORTING
* i_msgid = 'ZMBE'
* i_msgno = '049'
* i_msgty = /auk/cl_msg=>gc_msgty_fehler.
* ENDIF.
*
* LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
* <g_fieldcat>-fieldname = 'ID'.
* <g_fieldcat>-edit = ' '.
* ENDLOOP.
Code: Alles auswählen.
WHEN 'CHANGE'.
* Ist Zähler initial
IF g_zaehler IS INITIAL.
* Setze Zähler auf eins
g_zaehler = 1.
* Wechsle in den Change Modus
PERFORM change_modus USING g_cl_alv.
ELSE.
* Wechsle wieder in den View Modus
PERFORM view_modus USING g_cl_alv.
* Lösche Inhalt von Zähler
CLEAR g_zaehler.
ENDIF.
Code: Alles auswählen.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'ZMBE_ADRESSDATEN_S'
CHANGING
ct_fieldcat = g_fieldcat_t
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
IF 1 = 2. MESSAGE e049(zmbe) WITH ''. ENDIF. "#EC *
CREATE OBJECT g_cl_msg
EXPORTING
i_msgid = 'ZMBE'
i_msgno = '049'
i_msgty = /auk/cl_msg=>gc_msgty_fehler.
ENDIF.
LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>
WHERE fieldname = 'ID'.
<g_fieldcat>-fieldname = 'ID'.
<g_fieldcat>-edit = 'X'.
ENDLOOP.
CALL METHOD im_cl_alv->set_frontend_fieldcatalog
EXPORTING
it_fieldcatalog = g_fieldcat_t.
Code: Alles auswählen.
LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
IF <g_fieldcat>-fieldname = 'ID'.
<g_fieldcat>-edit = 'X '.
ENDIF.
ENDLOOP.
Code: Alles auswählen.
LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
IF <g_fieldcat>-fieldname <> 'ID'.
<g_fieldcat>-edit = 'X '.
ENDIF.
ENDLOOP.
Also ich hab das genau mit dem Loop wie ich hier auch im letzten Post geschrieben habe ausprobiert...funktioniert super.Mavrix hat geschrieben:Hallo,
danke das ihr euch solche mühe gebt... Aber es geht wirklich nicht.
Hab meinen Loop nun angepasst. Aber es bleiben trotzdem alle Felder "Nicht eingabebereit".
Muss ich evtl. noch einen Modify machen? Auf die ITAB des Fcats from <Feldsymbol>??
Markus
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Form change_modus
*&---------------------------------------------------------------------*
FORM change_modus USING im_cl_alv TYPE REF TO cl_gui_alv_grid.
*----------------------------------------------------------------------*
* Hier wird das ALV Grid in den Ändern Modus oder Anzeige Modus
* geschaltet
*----------------------------------------------------------------------*
** Lokale Variablendeklaration
* DATA l_event_receiver TYPE REF TO lcl_event_receiver.
*
** Setze ALV-GRID in ÄnderungsModus
* CALL METHOD im_cl_alv->set_ready_for_input
* EXPORTING
* i_ready_for_input = 1.
*
* CALL METHOD im_cl_alv->register_edit_event
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_enter.
*
* CALL METHOD im_cl_alv->register_edit_event
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_modified.
*
* CREATE OBJECT l_event_receiver.
* SET HANDLER l_event_receiver->check_data_changed FOR g_cl_alv.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'ZMBE_ADRESSDATEN_S'
CHANGING
ct_fieldcat = g_fieldcat_t
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
IF 1 = 2. MESSAGE e049(zmbe) WITH ''. ENDIF. "#EC *
CREATE OBJECT g_cl_msg
EXPORTING
i_msgid = 'ZMBE'
i_msgno = '049'
i_msgty = /auk/cl_msg=>gc_msgty_fehler.
ENDIF.
IF g_zaehler IS INITIAL.
* Setze Zähler auf 1 wenn in Ändern Modus gesprungen
g_zaehler = 1.
LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
IF <g_fieldcat>-fieldname <> 'ID'.
<g_fieldcat>-edit = 'X'.
ENDIF.
ENDLOOP.
ELSE.
* Im Moment noch nichts machen (View Modus)
* Lösche Inhalt von Zähler
CLEAR g_zaehler.
ENDIF.
CALL METHOD im_cl_alv->set_frontend_fieldcatalog
EXPORTING
it_fieldcatalog = g_fieldcat_t.
ENDFORM. " change_modus