ich benutze einen ALV-Grid als Erfassungstool.
Das beinhaltet das Zellen bei Bedarf auf editierbar oder nicht editierbar bzw neue Zeilen angelegt und alte Zeilen kopiert oder gel�scht werden k�nnen.
Die Funktionen Kopieren, Neuanlage und L�schen habe ich selber mit Logik hinterlegt.
Das funktioniert soweit ganz gut.
Ich kann neu anlegen, �ndern oder l�schen.
In den jeweiligen Events(user_command, data_changed)
wird die Tabelle ge�ndert und mit der Methode refresh_table_display an das GRID �bermittelt.
Bei einem der ersten Vortests fiel aber auf, da� wenn das Programm mit einer Anzeigevariante aufgerufen wird, er beim aktualisieren v�llig durcheinanderkommt.(Sortierung zb. nach Datum)
Das Programm �ndert dann S�tze mit einem v�llig anderen Index als die die er �ndern sollte.
(z.B. �ndern des Datums in Satz 1 bewirkt das er laut Sortierung an Index 3 rutscht, das macht er auch noch, aber leider wird jetzt Satz 2, der jetzt nat�rlich auf Index 1 rutscht mit dem gleichen Wert wie Satz 3 modifiziert)
Beim debuggen fiel mir auf, das in der internen Tabelle alle Eintr�ge die korrekten Werte enthalten.
Trotz des Aufrufes von der Methode refresh_table_display wird das Grid falsch dargestellt.
Vielleicht kann mir ja jemand weiterhelfen.
Die letzte L�sung w�re die Sortierungs und Anzeigevariantenfunktion zu entfernen. Aber eigentlich sollte es doch anders funktionieren.
ich habe zwar nicht alles ganz nachvollziehen können, aber ich würde folgendes Vorgehen mal ausprobieren:
- nach dem aktualisieren der Anzeige auch einen Dispatch machen (Call Method <grid>->dispatch). Hierdurch wird die aktuelle Anzeigetabelle in die itab geschrieben. nun die itab wie gewünscht ändern und dann neu ausgeben.
- zur Editierbarkeit eines Feldes muss der Feldkatalog beim entsprechenden Feld das Edit-Flag setzen. (ls_fcat-edit = 'X'.).
Danke für deine Tipps, leider beseitigen sie das Problem nicht. Den dispatch hatte ich schon drin und im Feldkatalog setzte ich das Edit-Flag.
Laut Debugger werden mir im Event DATA_CHANGED in der internen Tabelle die richtigen Werte angezeigt.(danach rufe ich die Methode refresh_table_display auf)
Meine Problematik scheint darin zu bestehen, das bei sortierten Listen(z.b. mit Anzeigevariante)
falsche Zeilen aktualisiert werden.
*
Beispiel
*
Ausgangsliste:
Sortiert nach Kundennummer
Sp.Kunnr Sp.Name Sp.Ort
5001345 AEG Nürnberg
5001445 Siemens München
5001545 RAG Essen
*
Ich füge eine neue Zeile ein.
Da sie initial ist wird sie laut Sortierung an Stelle 1 gesetzt
Sp.Kunnr Sp.Name Sp.Ort
0000000
5001345 AEG Nürnberg
5001445 Siemens München
5001545 RAG Essen
*
Ich pflege den initialen Eintrag.
Sp.Kunnr Sp.Name Sp.Ort
5001450 Daimler Stuttgart
5001345 AEG Nürnberg
5001445 Siemens München
5001545 RAG Essen
*
Nach dem Event DATA_CHANGED wird der gerede gepflegte Eintrag richtigerweise zwischen Siemens und RAG gesetzt.
Aber und da ist mein Problem: Der nach Index 1 rutschende Eintrag AEG bekommt die gleichen Werte wie der gerade neu eingefügte Satz Daimler.
*
Sp.Kunnr Sp.Name Sp.Ort
5001450 Daimler Stuttgart
5001445 Siemens München
5001450 Daimler Stuttgart
5001545 RAG Essen
*
In der internen Tabelle stehen die Einträge genau wie ich sie brauche, sobald die Liste allerdings angezeigt wird ist die (in diesem falle) erste Zeile fehlerhaft. (Vielleicht reicht in diesem Fall ein
refresh_table_display einfach nicht aus)
*
Dieses Verhaltensmuster habe ich nur bei sortierten Listen. Lasse ich eine Sortierung nicht zu und übernehme die Sortierung programmintern, läuft alles normal.
*
Muss ich vielleicht vorher erst abfragen ob die Liste sortiert(gefiltert) ist?
diese Frage wurde hier im Forum schon einmal gestellt.
Damals wurde m.W. empfohlen, eine Tabelle mit den Daten zu halten und darauf die Änderungen anzuwenden und für die Anzeige eine spezielle Anzeigetabelle aufzubauen, die an den ALV übergeben wird.
Gruß
Ereglam
May the Force be with your code || .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .
Hier mal was zu Editierfunktionen und Grids mit dem Event HANDLE DATA CHANGED
* see SAP-Note 453255 ALV-Edit: Beratungshinweis zum Prüfprozess
Ein typischer Fehler der Verwendung des eingabefähigen ALV Grids ist die Verwendung eines Tabellenrefreshs im data_changed Eventhandler. Ein damit verwandter Fehler ist die direkte Manipulation der Datentabelle während des Events. Beide Fehler führen dazu, daß die Daten, welche der ALV verwendet und diejenigen des Anwendungsprogramms nicht mehr übereinstimmen. Dies kann zu Programmabbrüchen, häufiger jedoch zu Fehlern in der Programmlogik führen, insbesondere
o Datenänderungen im event handler werden nicht vom ALV übernommen.