Zellen editierbar machen
Siehe Kategorie: ALV.
Es kann eine gesamte Spalte editierbar gemacht werden. Aber es kann dann auch bis auf die Zelle runtergebrochen werden, ob eine Zelle eingafähig/editierbar sein soll oder nicht.
Feld einfügen Typ LVC_T_STYL
In der internen Tabelle, die im ALV ausgegeben wird, muss ein Feld (hier mit Namen CELL) eingefügt werden, was den Typ LVC_T_STYL hat.
TYPES: BEGIN OF ty_nast. ... "(normale Felder) cell TYPE lvc_t_styl. "Zellstyle (editierbar) TYPES: END OF ty_nast.
Feld CELL in Layout-Struktur bekannt machen
In der Layoutstruktur wird dieses Feld CELL dem ALV bekannt gemacht.
ls_layout-stylefname = 'CELL'.
Im Fieldcat Spalten/Felder eingabefähig machen
Im Fieldcat des Reports werden die eingabefähigen Spalten mit EDIT = 'X' versehen.
* Field = Sendemedium ls_fcat-fieldname = 'NACHA'. ... ls_fcat-edit = 'X'. APPEND ls_fcat TO p_ct_fcat. CLEAR ls_fcat. * Field = Drucker ls_fcat-fieldname = 'LDEST'. ... ls_fcat-edit = 'X'. APPEND ls_fcat TO p_ct_fcat. CLEAR ls_fcat. * Field = Faxnummer ls_fcat-fieldname = 'TELFX'. ... ls_fcat-edit = 'X'. APPEND ls_fcat TO p_ct_fcat. CLEAR ls_fcat. * Field = Anzahl ls_fcat-fieldname = 'ANZAL'. ... ls_fcat-edit = 'X'. APPEND ls_fcat TO p_ct_fcat. CLEAR ls_fcat.
Feld CELL im Loop füllen
Beim Loop über die interne Tabelle wird dieses Feld CELL nun speziell gefüllt, damit nicht alle Werte der eben im Fieldcat mit EDIT gekennzeichneten Werte eingabefähig sind. Hier werden vier Felder in Abhängkeit vom Druckstatus in der NAST auf Nichteingabefähig gesetzt, wenn die Nachricht bereits verarbeitet wurde.
Man könnte die Logik auch umkehren, dass ein Feld erst einmal nicht eingabefähig ist, aber dann auf eingabefähig gesetzt wird (cl_gui_alv_grid=>mc_style_enabled).
DATA: ls_stylerow TYPE lvc_s_styl. LOOP AT pt_nast ASSIGNING <fs_nast>. * Setzen Selektionmarker bei noch nicht verarbeiteten Belegen IF <fs_nast>-vstat <> '0'. * Felder nicht eingabefähig machen, wenn keine Editierbarkeit sinnvoll ls_stylerow-fieldname = 'NACHA'. ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled. INSERT ls_stylerow INTO TABLE <fs_nast>-cell. ls_stylerow-fieldname = 'LDEST'. ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled. INSERT ls_stylerow INTO TABLE <fs_nast>-cell. ls_stylerow-fieldname = 'TELFX'. ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled. INSERT ls_stylerow INTO TABLE <fs_nast>-cell. ls_stylerow-fieldname = 'ANZAL'. ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled. INSERT ls_stylerow INTO TABLE <fs_nast>-cell. ENDIF. ENDLOOP.
Ausgabe ALV-Liste
Bei den Feldern "Medium", "Ausgabegerät", "Telefax" und "Anzahl" sind nur die Zellen eingabefähig, wo der Status = 0 (Nachricht noch nicht verarbeitet) ist.