eingabebereiter ALV - Daten aus Dynpro übertragen

Getting started ... Alles für einen gelungenen Start.
30 Beiträge • Seite 1 von 2 (current) Nächste
30 Beiträge Seite 1 von 2 (current) Nächste

eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
Hallo.

Ich habe einen eingabereiten ALV, dessen Inhalte ich bei Klick auf einen außerhalb des ALS befindlichen Buttons übertragen möchte. Leider funzt das mit PAI nicht :-(
Wie bekomme ich die rüber?

Danke füreure Hilfe!

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


Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
kkauerau hat geschrieben:Danke füreure Hilfe!
Du musst den Feld Transport explizit im PAI anstoßen: CL_GUI_ALV_GRID->CHECK_CHANGED_DATA( ).
Gruß Hendrik

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
Hallo Hendrik.

Danke für den Rat. Ich hab's eingebaut. - und reagiere jetzt via Event DATA_CHANGED darauf.
Im ALV wird eine Tabelle mit den Spalten Material, Menge, Preis, Preis-Einheit, Mengeneinheit angezeigt. Leider wird der Event immer dann aufgerufen, wenn man bei der Spalte Material auf die Ausfüllhilfe klickt. Da das das erste Feld der Zeile ist, ist dann natürlich noch nix anderes gefüllt ...
Wenn ich die ALV-Tabelle anders herum fülle und das Material zuletzt eintrage, fehlt mir genau dieser Wert in der zurückgegebenen Struktur, da der Event ja VOR dessen Befüllung losläuft ...

ganz am Anfang setze ich den ALV:

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.
bei PAI rufe ich die Methode:

Code: Alles auswählen.

 
 go_alv->check_changed_data( ).
Der Event wird aber nicht ausgelöst, trotz daß sich ja mind das Feld Material noch geändert hat ...

Was mache ich falsch?

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von gtoXX (Specialist / 213 / 44 / 36 ) »
Ich denke das könnte dir weiterhelfen


http://www.tricktresor.de/blog/alv-editierbar-machen/
"Code lügt nicht ^^"

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
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
:x :cry:

Woran könnte das liegen?

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von gtoXX (Specialist / 213 / 44 / 36 ) »
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
:x :cry:

Woran könnte das liegen?

Der Wert wird doch entsprechend zurückgestellt aus der Suchhilfe. Das Event muss also in jedem Fall durchlaufen werden, wenn Du Deinen externen Button drückst. Hast Du das mal geprüft im Debugger ?
"Code lügt nicht ^^"

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
Hallo gtoXX.

Welchen Event meinst du? DATA_CHANGED kommt VOR Auswahl des Wertes hoch; danach kommt er leider nicht noch einmal ...

Grüße,

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von gtoXX (Specialist / 213 / 44 / 36 ) »
Rufe im PAI des Dynpros CHECK_CHANGED_DATA auf. Dann wird der Event nochmal gefeuert.
"Code lügt nicht ^^"

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
das mache ich ja; aber der Wert kommt einfach nicht mit rüber :-/

bei PAI rufe ich folgendes auf:

Code: Alles auswählen.

  go_alv->check_changed_data( ).
  REFRESH gt_pos_daten.
Der Eventhandler wird wie folgt bei PBO bekannt gemacht:

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 ...
In der Methode lese ich die Variablen aus:

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.
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 ...
Zuletzt geändert von kkauerau am 03.04.2017 15:02, insgesamt 1-mal geändert.

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
kkauerau hat geschrieben:das mache ich ja; aber der Wert kommt einfach nicht mit rüber :-/
Dein Coding im Event HANDEL_DATA_CHANGE versteh ich nicht.
Dieses Event ist eigentlich dazu gedacht die eingegebenen Daten zu prüfen und evtl. ein Fehlerprotokolleintrag zu erstellen.
Man muss aber nicht die geänderten Daten in die ALV-Tabelle übernehmen. Nachdem durchlaufen des Events, stehen die Daten in ALV-Tabelle zur Verfügung, wenn es kein Fehlerprotokoll gibt.

Die Logik in deinem Loop mit rowid = 1, funktioniert auch nur, wenn die Tabelle mt_mod_cells nach eben diesem Feld sortiert ist.
Gruß Hendrik

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
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!

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
kkauerau hat geschrieben:Ich hoffe, du kannst was damit anfangen ...
Deaktivier den EVENT HANDLER ON DATA CHANGE und verwende den Funktionscode &SAVE für das Speichern.

Oder:

lösch alles Coding aus dem Eventhandler. Nachdem du das CHECK_DATA_CHANGED aufgerufen hast, sollten alle Daten in der ITAB stehen, die du an das ALV-Control übergeben hast.
Du must die Daten nicht mehr feldweise über nehmen, das macht der ALV schon von alleine.


Nachträgliche Prüfungen sind doch doof. Wenn du Prüfungen einbauen willst: z.B. Material in Bestellposition vorhanden, dann gehören diese in das EVENT ON DATA CHANGE. Dann läuft das ganze Fehlerhandling über den ALV, aber das ist nicht unbedingt trivial.
Gruß Hendrik

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von gtoXX (Specialist / 213 / 44 / 36 ) »
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!
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.
Genauso würde es übrigens Excel auch machen ,wenn die Werte einer Zelle gegen eine Validitätsprüfung laufen.

Ist alles in Ordnung hast Du deine Daten doch Feld gerecht in deiner Internen Tabelle. Die separate Übernahme macht hier gar keinen Sinn.

Es widerspricht stark der Usability, wenn man in einem Programm Logik verbaut die nur dort so ist, während 99% des Systems den Fehler anders behandeln.
"Code lügt nicht ^^"

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von gtoXX (Specialist / 213 / 44 / 36 ) »
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 ...

Richtig. Weil Du ihm laut Coding ja genau das sagst. Du füllst das Feld Material erst mit Material und danach mit Menge.

Code: Alles auswählen.

   IF ls_mod_cells-fieldname = 'MENGE'.
          gs_position-material = ls_mod_cells-VALUE.

     

Ich vermute mal getreu meines Lieblingsspruchs : Copy & Paste make programmers waste ;-)
"Code lügt nicht ^^"

Re: eingabebereiter ALV - Daten aus Dynpro übertragen

Beitrag von kkauerau (ForumUser / 50 / 2 / 0 ) »
Hallo zusammen.

Danke, gtoXX!
Ich vermute mal getreu meines Lieblingsspruchs : Copy & Paste make programmers waste ;-)
Genau das war das Problem!

Aber ihr habt alle Recht; ich baue das Programm um.

Inzwischen habe ich aber noch etwas anderes zum Knobeln entdeckt :-/
Habt ihr eine Idee, warum der ALV einen Dump bringt, sobald man die zweite Zeile ausfüllen möchte?
Programm CL_GUI_ALV_GRID==============CP, Message Type X; Abbruch bei Zeile 274 des Include CL_GUI_ALV_GRID==============CM02X

Danke und Gruß,

Vergleichbare Themen

0
Antw.
954
Views
Daten aus Dynpro in ALV-Tabelle übertragen
von kkauerau » 11.04.2018 12:41 • Verfasst in ABAP® für Anfänger
3
Antw.
496
Views
Dynamisch Daten übertragen
von retsch » 31.01.2023 10:20 • Verfasst in ABAP® für Anfänger
1
Antw.
5414
Views
Daten von JAVA an ABAP übertragen
von Alexander Moog » 17.09.2008 11:11 • Verfasst in Java & SAP®
8
Antw.
4640
Views
Dynpro 100 Feldinhalt übertragen
von AndreFIAE2014 » 05.12.2016 15:27 • Verfasst in Dialogprogrammierung
1
Antw.
1637
Views
Web Dynpro auf anderes System mit älteren Stack übertragen
von Ippoo » 28.11.2012 17:37 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 2 Stunden von black_adept 2 / 55
Programm anlegen mit Vorlage
vor 9 Stunden von DeathAndPain 2 / 110
IT0024 Qualifikationen CP-ID
vor 9 Stunden von DeathAndPain 2 / 351
BUSOBJEKT zu CMIS PHIO ermitteln
vor 11 Stunden von snooga87 1 / 83

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

Regex in where
vor 2 Stunden von black_adept 2 / 55
Programm anlegen mit Vorlage
vor 9 Stunden von DeathAndPain 2 / 110
IT0024 Qualifikationen CP-ID
vor 9 Stunden von DeathAndPain 2 / 351
BUSOBJEKT zu CMIS PHIO ermitteln
vor 11 Stunden von snooga87 1 / 83

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 11 Stunden von snooga87 1 / 83
aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3260
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821