Altes Problem - ALV Grid - Spalte nicht editierbar...

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
27 Beiträge • Seite 1 von 2 (current) Nächste
27 Beiträge Seite 1 von 2 (current) Nächste

Altes Problem - ALV Grid - Spalte nicht editierbar...

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo zusammen,

es gab ja schon 3 Themen dazu, aber keines führte mich ans Ziel.

Situation:

Habe ein ALV Grid zur Anzeige / Anlegen / Ändern von Adressdaten gebaut.
möchte ich das eine Spalte das Feld "ID" immer ausgegraut wird.

Wie muss ich das bewerkstelligen?
Kann mir jemand helfen, was braucht ihr von mir?

Liebe Grüße
Mavrix

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Hi Mavrix,

wenn du in deinem Feldkatalog für das entspechende Feld den Wert
<fc>-edit = ' ' setzt, dann ist das Feld nicht eingabebereit.

Gruß

Thomas

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo Thomas,

das tue ich ja... und übergebe den Fcat wieder dem ALV. Aber leider nimmt er das nicht.

Noch was vergessen - ich brauche das abhänging von einer Funktionstaste(Ändern/View) wenn in Ändern schaltet.. soll das Feld nicht editierbar sein.

???

Liebe Grüße
Markus

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
gib doch mal bisserl Code, damit wir sehen wie du es bis jetzt hast und wieso es dennoch nicht funktioniert.

Das mit dem Feldkatalog ist eigentlich die richtige Lösung.

Gruß
Markus

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Wenn du den Feldkatalog zur Laufzeit änderst, musst du ihn auch für den GUI bereitstellen. Hast du das gemacht und es finktuiniert immer noch nicht, musst du auch einen call method cl_gui_cfw=>flush ausführen.

Gruß Thomas

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Bis jetzt mach ich es so mit dem Feldkatalog.

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.
so und das ist mein Funktionscode.

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.
Hoffe ihr könnt mir helfen.

Liebe Grüße Markus

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Moin Markus,

wenn du deine Kommentierten Zeilen Aufmachst und mit einen IF ergänzt sollte es doch gehen.

* LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
* IF <g_fieldcat>-fieldname = 'ID'.
* <g_fieldcat>-edit = ' '.
ENDIF
* ENDLOOP.

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hi TWP,

also mit dem IF funktioniert es nicht...

ich habe jetzt folgendes in mein Perform Change_Modus eingebaut.

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.
Ich weiß nur nicht wie ich den Loop bauen muss, so das nur das Feld ID ausgegraut ist aber der Rest editierbar...

Weißt du Rat?
Markus Danke schon mal...

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Das sollte aber so schon funktionieren, da hatte Thomas schon richtig geschrieben.

Code: Alles auswählen.

 LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>. 
   IF <g_fieldcat>-fieldname = 'ID'. 
     <g_fieldcat>-edit = 'X '. 
   ENDIF.
 ENDLOOP. 

Standardmässig ist es ja so, dass man im ALV nichts ändern kann. Wenn du also nur ID ändern lassen willst, reicht die oben geschriebene Loop Schleife mit dem IF drin.
Wenn das X gesetzt ist, wird ID eingabebereit auf dem ALV und alle anderen Felder sind ausgegraut.
Wenn du es anderes rum haben willst, musste eben für alle anderen Felder das X setzen und bei ID auslassen.
Geht auch mit der Loop Schleife. (Natürlich anpassen)

Code: Alles auswählen.

 LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>. 
   IF <g_fieldcat>-fieldname <> 'ID'. 
     <g_fieldcat>-edit = 'X '. 
   ENDIF.
 ENDLOOP. 
Gruß
Markus

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
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

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
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
Also ich hab das genau mit dem Loop wie ich hier auch im letzten Post geschrieben habe ausprobiert...funktioniert super.
Nachdem du mit Fieldsymbol arbeitest direkt auf der Tabelle, musste kein modify mehr machen.

Gib doch mal den kompletten Source von deinem Programm... du hast da bestimmt nur ne kleinigkeit, auf die man aber erst kommt wenn man das ganze sieht ;)

Gruß
Markus

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo,

also hier mal der komplette code von meinem form.

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
So hab ichs im Moment, leider schaltet wieder das ganze ALV in den Editier Modus auch die Spalte ID.

Liebe Grüße
markus

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Füge mal folgende Zeile nach deinem Set_frontend_fieldcatalog ein:

Code: Alles auswählen.

CALL METHOD im_cl_alv->refresh_table_display.

Gruß
Markus

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Hallo Markus,

wenn du die ID Grau haben willst, musst du dein LOOP ändern:

LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
IF <g_fieldcat>-fieldname <> 'ID'.
clear: <g_fieldcat>-edit. ENDIF.
ENDLOOP.


Viel Erfolg

Thomas

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
ich nochmal

nachdem du den Feldkatalog gestezt hast, musst du noch
call method cl_gui_cfw=>flush machen.

CALL METHOD im_cl_alv->set_frontend_fieldcatalog
EXPORTING
it_fieldcatalog = g_fieldcat_t.

call method cl_gui_cfw=>flush
Thomas

Vergleichbare Themen

1
Antw.
1985
Views
ALV editierbar nach jeder Zelle Summierung in der gl. Spalte
von Kleenmex » 09.05.2008 11:00 • Verfasst in ABAP Objects®
6
Antw.
14056
Views
ALV-GRID: Feldweise editierbar
von matthes » 30.04.2008 11:02 • Verfasst in ABAP Objects®
3
Antw.
6286
Views
ALV Grid (CL_SALV_TABLE) editierbar
von egge » 25.01.2008 11:02 • Verfasst in Dialogprogrammierung
6
Antw.
8316
Views
Checkboxen im ALV-Grid editierbar machen???
von Kollektor » 02.03.2011 20:53 • Verfasst in ABAP® für Anfänger
4
Antw.
4985
Views
ALV-Grid editierbar machen (mit Bedingung)
von hausi » 04.08.2015 08:57 • Verfasst in ABAP® Core

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

FOR mit CORRESPONDING
vor 2 Tagen von sap_enthusiast 11 / 2445
Netzplan drucken
vor 2 Tagen von sap_enthusiast 2 / 521
SALV: Titel zu lang
vor 5 Tagen von ralf.wenzel 3 / 1095
Web Feature Services (WFS) im SAP
vor einer Woche von msfox 1 / 1642
WM: Transportauftrag quittieren - drucken
vor einer Woche von JHM 4 / 3596

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

FOR mit CORRESPONDING
vor 2 Tagen von sap_enthusiast 11 / 2445
Netzplan drucken
vor 2 Tagen von sap_enthusiast 2 / 521
SALV: Titel zu lang
vor 5 Tagen von ralf.wenzel 3 / 1095
Web Feature Services (WFS) im SAP
vor einer Woche von msfox 1 / 1642
WM: Transportauftrag quittieren - drucken
vor einer Woche von JHM 4 / 3596

Unbeantwortete Forenbeiträge

Web Feature Services (WFS) im SAP
vor einer Woche von msfox 1 / 1642
Erweiterung in ME51N/ME52N:
vor 4 Wochen von ABAPlerv 1 / 3947
Erweiterung in ME51N/ME52N:
vor 4 Wochen von ABAPlerv 1 / 3861