Code: Alles auswählen.
CALL METHOD go_alv->set_ready_for_input EXPORTING i_ready_for_input = 1.
SET HANDLER lcl_event_handler=>handle_data_changed FOR go_alv.
Code: Alles auswählen.
go_alv->check_changed_data( ).
kkauerau hat geschrieben:Hallo gtoXX.
Danke für den Tip! Immerhin reagiert mein ALV jetzt auf ENTER. - Dabei werden auch alle Felder übertragen, die per Hand eingetippt worden sind - aber leider das Feld Material nicht
Bei dem hat man rechts ein Knöpfchen für die Ausfüllhilfe - mit Suchdialog. Über diesen Weg holen sich die Sachbearbeiter den entsprechenden Wert aus der DB. Dieser Wert will einfach nicht mit rüber
Woran könnte das liegen?
Code: Alles auswählen.
go_alv->check_changed_data( ).
REFRESH gt_pos_daten.
Code: Alles auswählen.
CALL METHOD go_alv->set_ready_for_input EXPORTING i_ready_for_input = 1.
CALL METHOD go_alv->register_edit_event EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter.
SET HANDLER lcl_event_handler=>handle_data_changed FOR go_alv.
CALL METHOD go_alv->set_table_for_first_display ...
Code: Alles auswählen.
METHOD handle_data_changed .
DATA:
ls_mod_cells LIKE LINE OF er_data_changed->mt_mod_cells,
ls_mod_rows LIKE er_data_changed->mp_mod_rows,
ls_inserted_rows LIKE LINE OF er_data_changed->mt_inserted_rows,
lv_rowid TYPE i.
lv_rowid = 1.
CLEAR: gt_pos_daten, gs_position.
LOOP AT er_data_changed->mt_mod_cells INTO ls_mod_cells.
IF ls_mod_cells-row_id EQ lv_rowid .
IF ls_mod_cells-fieldname = 'MATERIAL'.
gs_position-material = ls_mod_cells-value.
ENDIF.
IF ls_mod_cells-fieldname = 'MENGE'.
gs_position-material = ls_mod_cells-value.
ENDIF.
IF ls_mod_cells-fieldname = 'PREIS'.
gs_position-preis = ls_mod_cells-value.
ENDIF.
ENDIF.
IF gs_position-material IS NOT INITIAL AND gs_position-menge IS NOT INITIAL AND
gs_position-preis IS NOT INITIAL .
APPEND gs_position TO gt_pos_daten.
lv_rowid = lv_rowid + 1.
ENDIF.
ENDLOOP.
Dein Coding im Event HANDEL_DATA_CHANGE versteh ich nicht.kkauerau hat geschrieben:das mache ich ja; aber der Wert kommt einfach nicht mit rüber :-/
Deaktivier den EVENT HANDLER ON DATA CHANGE und verwende den Funktionscode &SAVE für das Speichern.kkauerau hat geschrieben:Ich hoffe, du kannst was damit anfangen ...
Also meines Erachtens hast Du hier einen Logikfehler. Prüfe die Daten auf Validität im Event. Dann bekommt der User gleich beim Ausfüllen ja den Hinweis, das der Eintrag fehlerhaft ist.kkauerau hat geschrieben:Hallo JHM.
Sinn und Zweck des Programms ist die Erfassung von Rechnungen und Lieferscheinen zur nachfolgenden Übertragung dieser Daten in die ME21.
Daher hole ich mir zunächst alle Daten, die der User eingegeben hat, in meine Variable 'rüber. Die Prüfungen mache ich im Anschluß. Die Anfoderung heißt, es dem User so einfach wie möglich zu mache, also fast eine Art Excel-Tabelle zum Einhacken und danach alles andere. Dabei kann es vorkommen, daß 2 oder mehr Zeilen eingegeben werden.
Die LOOP soll helfen, alle übergebenen Werte in derrichtigen Zeile in die richtige Variable zu schreiben, aber nur, wenn alle Felder gefüllt sind. Ansonsten wäre das ja ein Fehlerfall.
Vieles an dem Code ist noch rudimentär und kann garantiert noch verbessert werden. Aber zunächst einmal muß es grundsätzlich laufen. Ich kämpfe mich hier via Try-and-Error durch ...
Mit dem DATA_CHANGED habe ich erst angefangen, weil beim Klicken des externen Buttons "speichern" keine Daten aus dem ALV da waren. Und jetzt fehlt leider noch das Feld Material, das durch die Wertehilfe gefüllt wird. (Bzw. AKTUELL kommt sogar ein Dump, wenn man die Ausfüllhilfe aufmachen will )
Ich hoffe, du kannst was damit anfangen ...
THX for your help!
kkauerau hat geschrieben:
Der Code liest in die Material-Spalte aber immer den Wert ein, der für Menge reinkommt, aber leider nicht den richtigen Wert, der via Ausfüllhilfe ausgewählt worden ist ...
Code: Alles auswählen.
IF ls_mod_cells-fieldname = 'MENGE'.
gs_position-material = ls_mod_cells-VALUE.
Genau das war das Problem!Ich vermute mal getreu meines Lieblingsspruchs : Copy & Paste make programmers waste