Selektierte Zeilen aus REUSE_ALV_GRID_DISPLAY

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Selektierte Zeilen aus REUSE_ALV_GRID_DISPLAY

Beitrag von Gast ( / / 0 / 3 ) »
Hallo,

ich gebe eine interne Tabelle per REUSE_ALV_GRID_DISPLAY aus.
Gibt es eine Möglichkeit, die selektierte(n) Zeile(n) auszulesen, um damit weiterzuarbeiten? Ich habe bisher nur den OO-Ansatz gefunden.


Vielen Dank,

Daniela

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


Beitrag von RiffRaff (Specialist / 379 / 0 / 1 ) »
HAllo,

hast du einen ALV mit Einfachselection,
oder links die Buttonreihe für Mehrfachselection???

Erklärung für's Vorgehen folgt

mfg
Richard

Beitrag von RiffRaff (Specialist / 379 / 0 / 1 ) »
Ach ja, noch was

hast du einen eigenen Button, oder willst du auf die Buttons: BACK, CANCEL und EXIT reagieren ???

mfg
Richard

Beitrag von Gast ( / / 0 / 3 ) »
Hi,

gerade habe ich das Problem gelöst. :)

Ich habe momentan eine Einfachselektion, also die einzelne selektierte Zeile rauszufinden reicht.

In der Toolbar habe ich meinen eigenen Button definiert und greife folgendermaßen darauf zu:

Code: Alles auswählen.

FORM cb_alv_user_command
  USING r_ucomm LIKE sy-ucomm
        rs_selfield TYPE slis_selfield.

  IF r_ucomm = 'DELETE'.
    READ TABLE itab into sel_row
	INDEX rs_SELFIELD-TABINDEX.
    PERFORM delete_entry.
  ENDIF.
  
ENDFORM. "cb_alv_user_command
In sel_row steht dann meine ausgewählte Zeile.

Trotzdem danke!

Gruß
Daniela

Folgende Benutzer bedankten sich beim Autor Gast für den Beitrag:
falk


Beitrag von RiffRaff (Specialist / 379 / 0 / 1 ) »
HAllo,

null problemo 8)

viel anders hätte meine Erklärung bei Einfachselection auch nicht ausgesehen :wink:

mfg
Richard

Beitrag von Gast ( / / 0 / 3 ) »
Hmmmm, nur aus reiner Neugier:
Gibt es auch eine Lösung für Mehrfachselektion?

Und:
Wie kann ich nach Änderung der itab das ALV_GRID refreshen, ohne einen extra Refresh-Button zu drücken?


Gruß
Daniela

Beitrag von RiffRaff (Specialist / 379 / 0 / 1 ) »
HAllo,

bei Mehrfachselektion:

In der FORM 'cb_alv_user_command' (wie im obrigen Beispiel) die Ausgabetabelle, welche dem ALV übergeben wurde durchlaufen. In der Zusätzlichen Spalte steht dann für markierte Zeilen ein X.

Um eine Mehrfachselektion zu erreichen, muß man in der Ausgabetabelle ein zusätzliches Feld vom Typ C Länge 1 hinzufügen. Den Feldnamen muß man beim Layout bekanntgeben:
.

Code: Alles auswählen.

DATA: wa_layout TYPE slis_layout_alv,   " Layout für ALV
wa_layout-box_fieldname = '<NAME>'.     " fieldname for checkbox
Dadurch wird bei der Ausgabe links eine Buttonreihe erstellt, auf welche man klicken kann. Die ganze Zeile wird markiert. Durch drücken der <STRG> Taste, kann man dann mehrere Buttons anklicken


zum Refeshen:
am Ende der FORM:

Code: Alles auswählen.

rs_selfield-refresh = 'X'.
mfg
Richard

Folgende Benutzer bedankten sich beim Autor RiffRaff für den Beitrag:
falk


Beitrag von Gast ( / / 0 / 3 ) »
Herzlichen Dank!


Beste Grüße
Daniela

ALV Toolbar

Beitrag von falk (ForumUser / 42 / 9 / 1 ) »
Hallo Allerseits,

mein Programm selektiert Materialien mit Chargenbestand. Diese Artikel werden als ALV angezeigt. Hier markierte Zeilen sollen durch Klick auf einen Schalter 'Buchen' ausgebucht werden.

Die ALV- Ausgabe mit Mehrfachauswahl funktioniert. Leider fehlt mir noch Wissen in folgenden Bereichen:
- Wo muss das FORM 'cb_alv_user_command ' eingebunden werden?
- Wie erstelle ich einen Schalter 'BUCHEN' in der Toolbar?
- Wie prozessiere ich die Schalter Zurück (F3) und Beenden (Umsch. F3) korrekt? Im Moment gibt es einen Dump 'Fehler bei Zuweisung: Überschreiben eines geschützten Felds.'.

Ich möchte möglichst ABAP Objects umgehen.

Danke für die Hilfe!

Falk

Re: ALV Toolbar

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
falk hat geschrieben: - Wo muss das FORM 'cb_alv_user_command ' eingebunden werden?
Das ganze funktioniert über die Callback-Routinen. Beim ALV-Aufruf wird dem ALV mit geteilt, wie die Routinen heißen, die die Verarbeitung übernehmen. Parammeter I_CALLBACK_USER_COMMAND. Zusätzlich dazu muss noch das rufende Programm mit gegeben werden. Parameter I_CALLBACK_PROGRAM.
falk hat geschrieben: - Wie erstelle ich einen Schalter 'BUCHEN' in der Toolbar?
Du mußt einen eigenen GUI-Status erstellen und in diesem deinenen Button definieren. Um nicht bei Null anzufangen ist es am einfachsten den Standard GUI-Status zu kopieren. Dieser befindet sich in der FuGr SLVC_FULLSCREEN und hat den Namen STANDARD_FULLSCREEN. Das setzten des GUI-Status geht über die Callbackroutine I_CALLBACK_PF_STATUS_SET gesetzt.
falk hat geschrieben: - Wie prozessiere ich die Schalter Zurück (F3) und Beenden (Umsch. F3) korrekt? Im Moment gibt es einen Dump 'Fehler bei Zuweisung: Überschreiben eines geschützten Felds.'.
Um auf F3 bzw. Umsch. F3 zu reagieren mußt du den, im GUI-Status hinterlegten Funktionscode ändern, wie es geht s.o. Tipp: nicht die Standardfunktionscode (BACK; etc.) verwenden, diese werden immer von SAP behandelt.
falk hat geschrieben: Im Moment gibt es einen Dump 'Fehler bei Zuweisung: Überschreiben eines geschützten Felds.
Dies hat weniger mit dem Zurück/Beenden zutun, sondern mit dem Abbau des ALVs. Da wird dir auch oben skizzierte Möglichkeit nicht helfen. Für die Fehleranalyse bräuchte man aber mehr Infos. Ich würde jetzt tippen, dass das Checkboxfeld in der Ausgabetabelle des ALVs nicht existiert bzw. anders heißt.


Anbei ein Beispiel:
GUI-Status 'HAUPT' wurde als Kopie von STANDARD_FULLSCREEN erzeugt. Der Funktionscode '&F03' wurde durch 'F03' ersezt. Zusätzlich wurde ein Button mit Funktion 'BUCHEN' angelegt

Code: Alles auswählen.

REPORT alv_test.
TYPE-POOLS slis.

TYPES: BEGIN OF t_data,
        matnr TYPE matnr,
        sel   TYPE c,
       END   OF t_data.

DATA: gt_data TYPE TABLE OF t_data,
      gw_data TYPE          t_data,

      gt_fieldcat TYPE TABLE OF slis_fieldcat_alv,
      gw_fieldcat TYPE          slis_fieldcat_alv,

      gs_layout   TYPE          slis_layout_alv,
      g_program   TYPE          sy-repid.
**********************************************************************
START-OF-SELECTION.
  SELECT matnr
    FROM mara
    INTO TABLE gt_data
    UP TO 100 ROWS.

************************************************************************
END-OF-SELECTION.
* ALV wird aufgebaut.
* Fieldcat
  CLEAR gw_fieldcat.
  gw_fieldcat-fieldname     = 'MATNR'.
  gw_fieldcat-ref_fieldname = 'MATNR'.
  gw_fieldcat-ref_tabname   = 'MARA'.
  APPEND gw_fieldcat TO  gt_fieldcat.

  CLEAR gw_fieldcat.
  gw_fieldcat-fieldname     = 'SEL'.
* es ist ein technisches Feld, keine Ausgabe
  gw_fieldcat-tech          = 'X'.
  APPEND gw_fieldcat TO  gt_fieldcat.

* Layout
  gs_layout-box_fieldname = 'SEL'.

* Programname
  g_program  = sy-repid.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = g_program
      i_callback_pf_status_set = 'SET_PF_STATUS'
      i_callback_user_command  = 'I_USER_COMMAND'
      is_layout                = gs_layout
      it_fieldcat              = gt_fieldcat
    TABLES
      t_outtab                 = gt_data.

**********************************************************************
FORM set_pf_status USING rt_extab.

  SET PF-STATUS 'HAUPT' EXCLUDING rt_extab.

ENDFORM.                    "set_pf_status

*&---------------------------------------------------------------------*
*&      Form  i_user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM i_user_command USING r_ucomm LIKE sy-ucomm
      rs_selfield TYPE slis_selfield.

* Button auswerten
  CASE r_ucomm.
    WHEN 'BUCHEN'.
      LOOP AT gt_data INTO gw_data WHERE sel = 'X'.
*     Perform buchen USING gw_data.
      ENDLOOP.
*     Dem ALV mitteilen, dass sich die Ausgabe verändert hat
      rs_selfield-refresh = 'X'.
    WHEN 'F03'.
*     PERFORM alv_verlassen
*     Dem ALV mitteilen, dass Ende ist
      rs_selfield-exit = 'X'.
  ENDCASE.
ENDFORM.                    "i_user_command

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

Gruß Hendrik

ALV Toolbar ergänzen und Weiterverarbeitung

Beitrag von falk (ForumUser / 42 / 9 / 1 ) »
Hallo Hendrik,

danke für die schnelle und ausführliche Antwort. Vor allem das Beispiel half sehr. Jetzt bin ich ein ganzes Stück schlauer - leider aber noch nicht schlau genug.

1. gw_fieldcat-fieldname = 'SEL' dient zur Übernahme der Checkbox?!
2. Wie kann ich den GUI- Status kopieren? Im Forum fand ich sehr interessante Informationen aber leider keine Anleitung. In der Funktionsgruppe SAPLSLVC_FULLSCREEN (über SE84) sehe ich die einzelnen Drucktasten mit ihren Symbolen aber keine Option zum kopieren.
3. Wie kann ich den Button 'Buchen' anlegen?

Danke!

Falk

PS. Ich bin natürlich auch für Antworten anderer Forumnutzer dankbar :wink:

Re: ALV Toolbar ergänzen und Weiterverarbeitung

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
falk hat geschrieben:1. gw_fieldcat-fieldname = 'SEL' dient zur Übernahme der Checkbox?!
Damit wird der Name des Feldes aus der Datentabelle dem ALV als Ankreuzfeld bekannt gemacht.
falk hat geschrieben: 2. Wie kann ich den GUI- Status kopieren? Im Forum fand ich sehr interessante Informationen aber leider keine Anleitung. In der Funktionsgruppe SAPLSLVC_FULLSCREEN (über SE84) sehe ich die einzelnen Drucktasten mit ihren Symbolen aber keine Option zum kopieren.
Nimm die se80 dann die Funktionsgruppe auswählen, den Baum bis zum GUI-Status aufreißen, rechtsklick auf den GUI-Status, kopieren wählen.
falk hat geschrieben: 3. Wie kann ich den Button 'Buchen' anlegen?
Im GUI-Status den Punkt Drucktastenleiste aufreißen, neuen Funktionscode eingeben, Enter, mittels PoP-Up Icon etc. zu ordnen, dann evtl. unter Funktionstaste nach eine Tastenkombination dem neuen Funktionscode zuordenen, WICHTIG aktivieren.
Gruß Hendrik

ALV Toolbar ergänzen und Weiterverarbeitung

Beitrag von falk (ForumUser / 42 / 9 / 1 ) »
Hallo,

das sieht ja schon ganz gut aus. Da war ich mit der SE84 ja gar nicht so weit weg.

Ich ging wie beschrieben vor.

Beim Kopieren des Status erscheint ein Dynpro in dem ich 'nach Programm' 'nach Status' eingeben kann. Soll hier auch der Programmname geändert werden?

Ich probierte dies ohne, holte mir einen Registrierungsschlüssel für SAPLSLVC_FULLSCREEN, änderte nur den Namen des Status auf 'HAUPT', klickte ENTER und erhielt folgende Meldung:
'Kopieren von Status ist im Modifikationsmodus eingeschränkt, s. F1'
Die Hilfe brachte folgende Informationen:
Meldungsnr. EC352
Diagnose
Status können von außen nicht in Oberflächen kopiert werden, die in einem anderen System Original sind.
Vorgehen
Gehen Sie in die Pflege der Zieloberfläche. Von dort aus können Status aus der selben oder auch aus andern Oberflächen kopiert werden.

Das hilft mir aber nicht weiter. Was mache ich verkehrt? Wie gehts richtig?

Danke!

Falk

Re: ALV Toolbar ergänzen und Weiterverarbeitung

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
falk hat geschrieben: Soll hier auch der Programmname geändert werden?
Natürlich, der GUI-Status wird in deinem Programm verwendet. Du müßtes sonst ein SAP-Objekt modifizieren, was hier völlig unnötig ist.
Gruß Hendrik

ALV Toolbar ergänzen und Weiterverarbeitung

Beitrag von falk (ForumUser / 42 / 9 / 1 ) »
Hallo Hendrik.

Ja, jetzt klappt es schon ganz gut. Ohne Deine Hilfe stände ich jetzt ordentlich auf dem Schlauch.

Ich hab ein neues Icon, Text und Code vergeben. Es wird angezeigt und nach Auswahl verschiedener Zeilen greift auch die Steuerung.

Leider kommt es immer noch zu Abbrüchen, wenn ich versuche, die ALV- Liste über Zurück (F3), Abbrechen (F12) und Beenden (Umsch + F3) zu verlassen:

Laufzeitfehler DYNPRO_NOT_FOUND
Im Programm "ZM_1054_MI10_ALV" wurde versucht, das Dynpro 0100 zu verwenden.
Dieses Dynpro existiert nicht.

Woran liegt das denn?

SELBSTBEANTWORTUNG:
Ich hatte folgenden Code verwendet
* Set initial dynpro
SET SCREEN 1000.
Ohne diesen sieht alles recht freundlich aus.

Danke!

Falk

Vergleichbare Themen

6
Antw.
5565
Views
Checkbox-Inhalt bei REUSE-ALV-GRID-DISPLAY-LVC
von Ucke » 19.11.2006 21:18 • Verfasst in ABAP® Core
2
Antw.
3157
Views
REUSE _ ALV _ LIST _ DISPLAY - Zeile nicht markieren
von Gast » 12.09.2005 08:42 • Verfasst in ABAP® Core
1
Antw.
2743
Views
Page up and down im REUSE-ALV-Grid
von sapdepp » 24.08.2011 12:11 • Verfasst in ABAP® Core
4
Antw.
2527
Views
suche fieldcatalog - Name für Spaltenkopf bei REUSE-ALV-GRID
von jogi » 20.04.2005 15:23 • Verfasst in Dialogprogrammierung
9
Antw.
8765
Views
max Ausgabe an Zeilen ALV Grid
von c oco » 03.05.2012 16:47 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor 7 Stunden von Bright4.5 3 / 1481
Regex in where
vor 9 Stunden von tar 6 / 146

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

Daten an Tabelle binden
vor 7 Stunden von Bright4.5 3 / 1481
Regex in where
vor 9 Stunden von tar 6 / 146

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9821