ich möchte eine interne Tabelle mit den Daten der Workarea ändern, mit einem modify. Ich mache jedoch keinen Loop über die Tabelle, also muss ich für den modify Befehl noch irgendeinen Zusatz hinzufügen, richtig? Jedoch kann ich mit der Hilfe nicht so recht was anfangen, zu Index, modify usw.
Bisher habe ich folgendes ausprobiert:
MODIFY table i_plist FROM wa_preislist . und
MODIFY i_plist FROM wa_preislist INDEX sy-tabix.
bei der oberen Variante werden die neu eingetragenen Daten erst nach erneutem Aufruf des Bildschirms angezeigt.
Die untere Variante erzeugt mir einen ganz neuen Satz in der internen Tabelle.
Die Workarea wird übrigens über Eingabefelder in einem Dynpro gefüllt und die Daten der internen Tabelle werden auf einem anderen Dynpro angezeigt.
Wie muss der richtige Befehl lauten um die Änderungen aus der Workarea an die Interne Tabelle zu übergeben?
Aber leider weiß ich auch nicht wie ich den Key angeben muss. blabla wird da wohl kaum funktionieren
Was ist denn mein key?Oder generell, was gibt man da für einen Key an?
mal angenommen, Du hast eine tabelle auf Deinem zweiten Dynpro, die Adressdaten ausgibt.
Name Vorname PLZ Ort
Mayer Heiner 12345 Berlin
Müller Uwe 4567 München
usw
Wenn jetzt jemand im ersten Dynpro eingibt:
Feld_1 Mayer
Feld_2 Heiner
Feld_3 7777
Feld_ 4 Stuttgart
dann kannst Du Deinen Zugriff folgendermaßen machen:
read table i_plist with key name = feld_1' hier steht MAYER drin
vorname = feld_2'. hier Heiner
if sy-subrc eq 0.
* der Index (SY-TABIX) ist in diesem Fall "1"
l_idx = sy-tabix.
i_plist-plz = feld_3'. hier steht '8888' drin
i_plist-ort = feld_4..
endif.
jetzt modify:
modify i_plist index l_idx.
Falls beim READ kein Eintrag gefunden wird, ist Dein SY-SUBRC gleich "4".
Dann kann kein Modify erfolgen, vermutlich wirst Du dann ein "append" absetzen um einen neuen Eintrag zu erzeugen
Vielen dank nochmal.
Ich denke, dass ich das prinzipiell verstanden habe, bloß nicht auf mein Programm übertragen kann.
Jedoch bekomme ich zum einen eine Fehlermeldung bei dem read table:
"Die interne Tabelle "I_PLIST" hat keine Kopfzeile - explizite Angabe eines Ausgabebereiches durch "INTO wa" oder "ASSIGNING <fs>"
Wenn ich das in ein into wa ändere, dann überschreibe ich mir aber doch meine wa oder? und da stehen ja gerad die aktuellen werte drin, die ich haben will...
zum anderen ist bei mir denke ich feld_1 und name das gleiche, denn auf meinem dynpro heißen die felder wie meine workarea und ich kann ja nicht schreiben with key wa_preislist-bukrs = wa_preislist-bukrs ... mein dynprofeld heißt also wa_preislist-bukrs und in der wa ist das so vorhanden und das soll dann in die interne tabelle geschrieben werden
sorry, wenn ich es einfach nicht kapiere... aber damit habe ich noch nie gearbeit und was in den büchern steht und in der hilfe verstehe ich auch nicht so recht.
vielleicht kann man hiermit auch was machen, bevor ich das dynpro mit den feldern zum ändern aufrufe, mache ich schon mal ein read table, damit die aktuellen felder der internen tabelle in die workarea übernommen werden und die werte in den dynprofeldern stehen. das sieht so aus:
FORM handle_double_click USING i_row TYPE lvc_s_row
i_column TYPE lvc_s_col
is_row_no TYPE lvc_s_roid.
READ TABLE i_plist INTO wa_preislist INDEX is_row_no-row_id .
das wird bei einem doppelklick auf mein alv ausgeführt. zum ändern rufe ich dann aber wieder ein weiteres dynpro auf.
Oder aber oder. Man ruft das Änderdynpro in der Formroutiine nach read table auf und setzt den modify nach dem Ändern ab, wenn der Prozess wieder in die Formroutine zurückkehrt.
Hm, immerhin etwas weiter.
Ich hab jedoch bei dem Befehl das "table" weglassen müssen, da sonst eine fehlermeldung kam. Jetzt kommt es jedoch beim ausführen zu einem Programmabbruch, mit der meldung, dass der index 0 sei...
So, also am Ende gings dann doch. seltsam wieso beim ersten mal ein fehler kam, hab dann eigentlich nichts weiter geändert... werde es morgen nochmal ausführlicher testen.