ALV Grid mit Transaktionsabsprung

Getting started ... Alles für einen gelungenen Start.
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

ALV Grid mit Transaktionsabsprung

Beitrag von Adrian (Specialist / 126 / 61 / 0 ) »
Hallo an alle.

ich hätte eine kurze Frage. Wie bekomme ich es hin das wenn ich doppelklick auf eine Zeile meines ALV Grids mache
automatisch eine Transaktion z.B. MM03 aufruft und den Selektionsbildschirm überspringt.

Vielen Dank,
Gruß Adrian

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


Re: ALV Grid mit Transaktionsabsprung

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Adrian hat geschrieben: Wie bekomme ich es hin das wenn ich doppelklick auf eine Zeile meines ALV Grids mache
automatisch eine Transaktion z.B. MM03 aufruft und den Selektionsbildschirm überspringt.
Zu erst registriest du dich auf das ON-DOUBLE-KLICK-Ereignis des ALVs.
Im Ereignis-Handler bekommst du die Zeile auf die der doppelklick ausgeführt wurde mit geben. Mit diesem ermittelst du per READ TABLE INDEX die Daten der ALV-Zeile um die Materialnummer zu bestimmen.
Dann machst du ein SET PARAMETER ID für MAT mit der Materialnummer.
Dann machst du einen CALL TRANSACTION auf die MM03 mit SCIP FIRST SCREEN.

Um dir jetzt bei dem Event zu helfen, mußt du verraten welchen ALV-Aufruf (REUSE; OO; SALV zbw. OM) du genau verwendest.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
Adrian

Gruß Hendrik

Re: ALV Grid mit Transaktionsabsprung

Beitrag von Adrian (Specialist / 126 / 61 / 0 ) »
Keine Ahnung. Das erste Mal mit ALV Grids gearbeitet.

Hab unten den Code gepostet.

Code: Alles auswählen.

TABLES: VBAK, VBUP.

DATA VBAK1 TYPE TABLE OF VBAK.

DATA: OK_CODE LIKE SY-UCOMM,
      G_CONTAINER TYPE SCRFNAME VALUE 'BCALV_GRID_DEMO_0100_CONT1',
      GRID1  TYPE REF TO CL_GUI_ALV_GRID,
      G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

data: gt_grid type grid occurs 0 with header line.

SELECTION-SCREEN:
  BEGIN OF SCREEN 0001 AS WINDOW TITLE FENSTER1,

SKIP 2.
SELECT-OPTIONS DATUM FOR SY-DATUM.
SELECT-OPTIONS VKORG FOR VBAK-VKORG.

SELECTION-SCREEN:
SKIP 2,

END OF SCREEN 0001.

CALL SCREEN 0001 STARTING AT 10 10.

SELECT * FROM VBAK
  WHERE       AUDAT IN DATUM.

  SELECT * FROM VBUP
    WHERE       VBELN = VBAK-VBELN
    AND         LFSTA = 'A'.

    SELECT * FROM VBAK INTO TABLE VBAK1
    WHERE VBELN = VBUP-VBELN.
    EXIT.

  ENDSELECT.
ENDSELECT.

CALL SCREEN 100.

*---------------------------------------------------------------------*
*       MODULE PBO OUTPUT                                             *
*---------------------------------------------------------------------*
MODULE PBO OUTPUT.
  SET PF-STATUS 'MAIN100'.
  IF G_CUSTOM_CONTAINER IS INITIAL.
    CREATE OBJECT G_CUSTOM_CONTAINER
           EXPORTING CONTAINER_NAME = G_CONTAINER.
    CREATE OBJECT GRID1
           EXPORTING I_PARENT = G_CUSTOM_CONTAINER.
    CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY
         EXPORTING I_STRUCTURE_NAME = 'VBAK'
         CHANGING  IT_OUTTAB        = VBAK1.
  ENDIF.
ENDMODULE.
*---------------------------------------------------------------------*
*       MODULE PAI INPUT                                              *
*---------------------------------------------------------------------*
MODULE PAI INPUT.
*   to react on oi_custom_events:
    CALL METHOD CL_GUI_CFW=>DISPATCH.
  CASE OK_CODE.
    WHEN 'EXIT'.
      PERFORM EXIT_PROGRAM.
    WHEN OTHERS.
*     do nothing
  ENDCASE.
  CLEAR OK_CODE.
*      call method gt_grid-grid->set_function_code
*      changing
*        c_ucomm = l_okcode.
ENDMODULE.
*---------------------------------------------------------------------*
*       FORM EXIT_PROGRAM                                             *
*---------------------------------------------------------------------*
FORM EXIT_PROGRAM.
*  CALL METHOD G_CUSTOM_CONTAINER->FREE.
*  CALL METHOD CL_GUI_CFW=>FLUSH.
  LEAVE PROGRAM.
ENDFORM.

Re: ALV Grid mit Transaktionsabsprung

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Adrian hat geschrieben:Das erste Mal mit ALV Grids gearbeitet.
Und noch neu in ABAP?

Schau dir mal das Beispielprogramm: BCALV_GRID_03 an. Dort wird das mit dem DOUBLE_CLICK-Event erklärt (lokale Klasse als Eriegnis-Handler und auch das Registrieren). Für die weiteren Schritte kannst du dann die F1-Hilfe zu den o.g. Sprachelementen bemühen.

Sollten noch Fragen/Probleme auftrten wird dir hier bestimmt geholfen.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
Adrian

Gruß Hendrik

Re: ALV Grid mit Transaktionsabsprung

Beitrag von bliss (ForumUser / 66 / 2 / 6 ) »
Hier mal ein Ausschnitt. Das drumherum sollte klar sein hoffe ich.

Code: Alles auswählen.


...
DATA wa_aktuelle_zeile LIKE LINE OF it_zzab_alv.
...
*---------------------------------------------------------------------
* Unterprogramm für Reaktion auf Doppelklick
*---------------------------------------------------------------------
FORM user_command USING i_ucomm
                        i_selfield TYPE slis_selfield.

  CASE i_ucomm.
    WHEN '&IC1'. " bei Doppelklick
      READ TABLE it_zzab_alv
        INTO wa_aktuellezeile
        INDEX i_selfield-tabindex.

      " Transaktion aufrufen
      wahlx = '02'.
      SET PARAMETER ID 'ZZAB_MATNR' FIELD wa_aktuellezeile-matnr.
      SET PARAMETER ID 'ZZAB_WAHLX' FIELD wahlx.
      CALL TRANSACTION 'ZZAB' AND SKIP FIRST SCREEN.
  ENDCASE.

ENDFORM.  "user_command
(& steht für &)

Die Transaktion verlangt eigentlich im Selektionsbild die Eingabe von zzab-matnr sowie die Auswahl eines Radiobuttons (wahlx = '02')

Ich rufe hier die Form user_command so auf:

Code: Alles auswählen.

  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
    EXPORTING
      i_callback_user_command        = 'USER_COMMAND'
      ...
aber dafür gibts bestimmt auch andere Möglichkeiten.

Folgende Benutzer bedankten sich beim Autor bliss für den Beitrag:
Adrian

Gruß
bliss
.|.. .. ...| . .|.. ||| |. ||. .| |. |.. .||. .|. ||| ... .||. . .|.

Ich bin Anfänger und meine Tipps sind mit Vorsicht zu genießen.

Re: ALV Grid mit Transaktionsabsprung

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
bliss hat geschrieben:aber dafür gibts bestimmt auch andere Möglichkeiten.
Das ist der REUSE-Aufruf, Adrian verwendet aber den OO-Aufruf.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
Adrian

Gruß Hendrik

Re: ALV Grid mit Transaktionsabsprung

Beitrag von bliss (ForumUser / 66 / 2 / 6 ) »
Richtig, und meine Idee war, dass es auch bei OO eine Möglichkeit geben könnte, diese FORM aufzurufen. Aber ich weiß es ja nicht. Die FORM ist ja auch eigentlich egal, man wird schon irgendwie bei OO sagen können, dass man die Anweisungen xyz ausführen möchte. Wichtig sind in meinem Code nur SET PARAMETER ID und CALL TRANSACTION [...] AND SKIP FIRST SCREEN.

Oh Sorry, grad lese ich, dass du das schon als erste Antwort geschrieben hast! :( :( Alles klar.
Gruß
bliss
.|.. .. ...| . .|.. ||| |. ||. .| |. |.. .||. .|. ||| ... .||. . .|.

Ich bin Anfänger und meine Tipps sind mit Vorsicht zu genießen.

Re: ALV Grid mit Transaktionsabsprung

Beitrag von Adrian (Specialist / 126 / 61 / 0 ) »
Danke an alle habs gelöst. Hab nur noch eine Frage wie kann ich nachdem des Event ausgelöst wurde die Tabelle und des ALV neu laden ?

Wenn ich CALL FUNCTION 'TH_CREATE_MODE' mache und danach die Tabelle neu laden will wird dann berücksichtigt was ich in dem mode gemacht habe z.B. Auftäge beliefert oder wird die Tabelle sofort neu geladen?

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  ZOFFNENEAUFTRAEGE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZOFFNENEAUFTRAEGE.

CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.

TABLES: VBAK, VBUP.

DATA: VBAK1 TYPE TABLE OF VBAK,
      VBAK2 LIKE LINE  OF VBAK1.

DATA: OK_CODE LIKE SY-UCOMM,
      G_CONTAINER TYPE SCRFNAME VALUE 'BCALV_GRID_DEMO_0100_CONT1',
      GRID1  TYPE REF TO CL_GUI_ALV_GRID,
      G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

DATA: GT_GRID TYPE GRID OCCURS 0 WITH HEADER LINE,
      EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.


*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION.

  PUBLIC SECTION.
    METHODS:

    HANDLE_DOUBLE_CLICK
        FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
            IMPORTING E_ROW E_COLUMN.

  PRIVATE SECTION.

ENDCLASS.                    "lcl_event_receiver DEFINITION


SELECTION-SCREEN:
  BEGIN OF SCREEN 0001 AS WINDOW TITLE FENSTER1,

SKIP 2.
SELECT-OPTIONS DATUM FOR SY-DATUM.
SELECT-OPTIONS VKORG FOR VBAK-VKORG.

SELECTION-SCREEN:
SKIP 2,

END OF SCREEN 0001.

CALL SCREEN 0001 STARTING AT 10 10.

SELECT * FROM VBAK
  WHERE       AUDAT IN DATUM.

  SELECT * FROM VBUP
    WHERE       VBELN = VBAK-VBELN
    AND         LFSTA = 'A'.

    SELECT * FROM VBAK INTO TABLE VBAK1
    WHERE VBELN = VBUP-VBELN.
    EXIT.

  ENDSELECT.
ENDSELECT.

CALL SCREEN 100.

*---------------------------------------------------------------------*
*       MODULE PBO OUTPUT                                             *
*---------------------------------------------------------------------*
MODULE PBO OUTPUT.

  SELECT * FROM VBAK
  WHERE       AUDAT IN DATUM.

  SELECT * FROM VBUP
    WHERE       VBELN = VBAK-VBELN
    AND         LFSTA = 'A'.

    SELECT * FROM VBAK INTO TABLE VBAK1
    WHERE VBELN = VBUP-VBELN.
    EXIT.

  ENDSELECT.
ENDSELECT.

  SET PF-STATUS 'MAIN100'.
  IF G_CUSTOM_CONTAINER IS INITIAL.
    CREATE OBJECT G_CUSTOM_CONTAINER
      EXPORTING
        CONTAINER_NAME = G_CONTAINER.
    CREATE OBJECT GRID1
      EXPORTING
        I_PARENT = G_CUSTOM_CONTAINER.
    CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        I_STRUCTURE_NAME = 'VBAK'
      CHANGING
        IT_OUTTAB        = VBAK1.

    CREATE OBJECT EVENT_RECEIVER.
    SET HANDLER EVENT_RECEIVER->HANDLE_DOUBLE_CLICK FOR GRID1.



  ENDIF.
ENDMODULE.                    "PBO OUTPUT
*---------------------------------------------------------------------*
*       MODULE PAI INPUT                                              *
*---------------------------------------------------------------------*
MODULE PAI INPUT.
*   to react on oi_custom_events:
  CALL METHOD CL_GUI_CFW=>DISPATCH.

  OK_CODE = SY-UCOMM.

  CASE OK_CODE.
    WHEN 'EXIT'.
      PERFORM EXIT_PROGRAM.
    WHEN OTHERS.
*     do nothing
  ENDCASE.
  CLEAR OK_CODE.
ENDMODULE.                    "PAI INPUT
*---------------------------------------------------------------------*
*       FORM EXIT_PROGRAM                                             *
*---------------------------------------------------------------------*
FORM EXIT_PROGRAM.

  SET SCREEN 0.
  LEAVE SCREEN.
  LEAVE PROGRAM.

ENDFORM.                    "EXIT_PROGRAM

*----------------------------------------------------------------------*
*       CLASS lcl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

  METHOD HANDLE_DOUBLE_CLICK.

    READ TABLE VBAK1 INDEX E_ROW INTO VBAK2.

    SET PARAMETER ID 'AUN' FIELD VBAK2-VBELN.

    CALL FUNCTION 'TH_CREATE_MODE'
    EXPORTING
      TRANSAKTION  = 'VA02'
      PROCESS_DARK = 'X'.


  ENDMETHOD.                           "handle_double_click

ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION

Re: ALV Grid mit Transaktionsabsprung

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Adrian hat geschrieben:Hab nur noch eine Frage wie kann ich nachdem des Event ausgelöst wurde die Tabelle und des ALV neu laden ?
Nachdem du aus dem CALL TRANSACTION in das ALV-EVENT zurück gekehrt bist, mußt du die geändertene Werte ermitteln (itab des ALVs neu aufbauen/updaten). Dann kannst du mit der Methode REFRESH_TABLE_DISPLAY die Daten neu an den ALV übergeben.

Bedenke beim neu lesen der Daten, dass die Änderungen in der gerufenen TA meist im Verbucher auf die DB geschrieben werden. Evtl. hast du die Kontrolle bereits zurück, aber die Änderungen sind noch nicht auf der DB, weil der Verbucher noch asynchrone läuft. Solltest du dieses Problem haben schau dir den Zusatz UPDATE beim CALL TRANSACTION an.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
Adrian

Gruß Hendrik

Re: ALV Grid mit Transaktionsabsprung

Beitrag von Adrian (Specialist / 126 / 61 / 0 ) »
Benutze den FUBA TH_CREATE_MODE weil ich meine ALV erhalten bleiben soll und ich die Transakton in neuem Modus starte. Wie warte ich dann aber bis der Modus geschlossen wurde?

Grüße Adrian

Re: ALV Grid mit Transaktionsabsprung

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Adrian hat geschrieben:Wie warte ich dann aber bis der Modus geschlossen wurde?
Garnicht, wenn du einen neuen Modus startest läuft er paralel zum alten.
Wenn der alte ALV bestehen bleiben soll, machst du einen neues Dynpro auf (CALL SCREEN), wenn der User auf dem neuen Dynpro die fertig ist, mittels LEAVE SCREEN auf das alte Dynpro zurückkehren.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
Adrian

Gruß Hendrik

Re: ALV Grid mit Transaktionsabsprung

Beitrag von Adrian (Specialist / 126 / 61 / 0 ) »
Ja aber ich möchte das der alte Modus so lange wartet bis der neue Modus geschlossen wurde. Gibt es eine Tabelle wi die Modis drinstehen? Oder wie bekomm ich raus wann der Modus geschlossen wurde.

Re: ALV Grid mit Transaktionsabsprung

Beitrag von a-dead-trousers (Top Expert / 4397 / 223 / 1182 ) »
hi!

Schau dir die Zusätze STARTING NEW TASK und PERFORMING/CALLING ON END OF TASK von CALL FUNCTION genauer an
Dazu gibt es das Construct mittels RECEIVING RESULTS FROM und WAIT UNTIL.

Damit lässt sich ein Modus öffnen während der rufende Modus wartet.
Die Datenübergabe zwischen den beiden kannst ganz normal über die Schnittstelle des FuBa erledigen.
Wobei ich glaube, dass der FuBa RFC-fähig sein muss.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Adrian

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: ALV Grid mit Transaktionsabsprung

Beitrag von Adrian (Specialist / 126 / 61 / 0 ) »
Habs jetzt anders gelöst lass einfach die Auslieferungstabelle so lange lesen bis im neuen modus die auslieferug gespeichert wurde.

Vielen Dank an alle.

Seite 1 von 1

Vergleichbare Themen

12
Antw.
8693
Views
Doppelklick-Event mit Transaktionsabsprung
von Chopper » 23.05.2018 08:58 • Verfasst in ABAP Objects®
4
Antw.
5112
Views
ALV Grid Sortierung aktualisieren im grid 1 und grid 2
von c oco » 06.02.2012 10:09 • Verfasst in ABAP Objects®
5
Antw.
4341
Views
4
Antw.
2488
Views
ALV Grid
von daf » 27.01.2019 15:23 • Verfasst in ABAP Objects®
2
Antw.
2265
Views
ALV Grid
von lisa » 08.09.2008 16:17 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 10 Stunden von msfox 18 / 10986
Dialog-Container mit Toolbar/Status
vor 13 Stunden von black_adept gelöst 27 / 4103
IT0024 Qualifikationen CP-ID
vor 15 Stunden von ArjenR 1 / 110

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

Trennen Strasse und Hausnummer
vor 10 Stunden von msfox 18 / 10986
Dialog-Container mit Toolbar/Status
vor 13 Stunden von black_adept gelöst 27 / 4103
IT0024 Qualifikationen CP-ID
vor 15 Stunden von ArjenR 1 / 110

Unbeantwortete Forenbeiträge

IT0024 Qualifikationen CP-ID
vor 15 Stunden von ArjenR 1 / 110
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 3044
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9636