Zellen editierbar machen

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

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.

ALVZellenEditierbar1.jpg

ALVZellenEditierbar2.jpg

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.

ALVZellenEditierbar3.jpg