Mehrfachselektion

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

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

Mehrfachselektion

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Hallo zusammen
Ich benötige wieder einmal eure Hilfe.
Ich habe das Problem, dass ich keine Mehrfachselektion erstellen kann. Ist zwar für euch kein Ding. Aber ich sehe vor lauter Bäume den Wald nicht mehr.
Untenstehend ist mein Programm angefügt.
Vielen Dank

Report ZR_TEST.

*--------------------------------------------------------------------*
*Tabellenarbeitsbereich deklarieren*
*--------------------------------------------------------------------*

DATA: wa_S022 type S022.


*--------------------------------------------------------------------*
*Felder deklarieren*
*--------------------------------------------------------------------*
DATA: zeilen_itab01 TYPE i.

*--------------------------------------------------------------------*
*Datentypen für Zeilen deklarieren*
*--------------------------------------------------------------------*
TYPES: BEGIN OF zeile01_typ,
ARBPL TYPE S022-ARBPL,
MATNR TYPE S022-MATNR,
AUFNR TYPE S022-AUFNR,
END OF zeile01_typ.

*--------------------------------------------------------------------*
*Datentypen für interne Tabellen deklarieren*
*--------------------------------------------------------------------*
TYPES itab01_typ TYPE STANDARD TABLE OF zeile01_typ.

*--------------------------------------------------------------------*
*Interen Tabellen deklarieren*
*--------------------------------------------------------------------*
DATA itab01 TYPE itab01_typ.

*--------------------------------------------------------------------*
*Workareas für interen Tabellen deklarieren*
*--------------------------------------------------------------------*
DATA: wa_itab01 TYPE zeile01_typ.

*--------------------------------------------------------------------*
*Selektionsbild gesalten*
*--------------------------------------------------------------------*
PARAMETERS ARBPL TYPE S022-ARBPL.
*SELECT-OPTIONS MATNR FOR S022-MATNR.
*SELECT-OPTIONS ARBPL FOR S022-ARBPL.


START-OF-SELECTION.

*--------------------------------------------------------------------*
*DBtab lesen und itab01 füllen über Workarea*
*--------------------------------------------------------------------*
SELECT * FROM S022 INTO wa_S022.
MOVE-CORRESPONDING wa_S022 TO wa_itab01.
APPEND wa_itab01 TO itab01.
ENDSELECT.

END-OF-SELECTION.


*--------------------------------------------------------------------*
*ITAB01 ausgeben in Liste*
*--------------------------------------------------------------------*

WRITE: / 'sy-tabix, itab01-MATNR, itab01-AUFNR'.
LOOP AT itab01 INTO wa_itab01.
WRITE: / sy-tabix, wa_itab01-MATNR, wa_itab01-AUFNR.
ENDLOOP.

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


Re: Mehrfachselektion

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hi,

Versuch es doch mal so:

Code: Alles auswählen.

SELECT-OPTIONS MATNR FOR S022-MATNR.
SELECT-OPTIONS ARBPL FOR S022-ARBPL.


START-OF-SELECTION.

*--------------------------------------------------------------------*
*DBtab lesen und itab01 füllen über Workarea*
*--------------------------------------------------------------------*
SELECT * FROM S022
   INTO CORRESPONDING FIELDS OF TABLE itab01
  where matnr IN matnr
    and arbpl IN arbpl.
Damit brauchst du nicht Zeile für Zeile lesen, das belastet die Datenbank viel zu sehr. So hast du alle Daten direkt in der Tabelle und vor allem zu deinen Selektionsparametern.

EDIT:
Nutz doch bitte die Möglichkeit "Code" um dein Coding zu veröffentlichen. das liest sich besser!

Folgende Benutzer bedankten sich beim Autor Thanatos82 für den Beitrag:
christof

Gruß,
der Matze

Re: Mehrfachselektion

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Vielen Dank, an das habe ich nicht gedacht.
Nun möchte ich in meine Programm noch den Materialkurztext in der Liste ausgeben. Leider funktioniert das dies nicht so wie ich möchte.
Kann mir da jemand einen Tipp geben.
Sorry wenn ich immer in diesem Forum Hilfe suche, aber ich wüsste nicht wo ich sonst welche finden könnte
Vielen Dank

Code: Alles auswählen.


Report ZR_TEST.

*--------------------------------------------------------------------*
*Tabellenarbeitsbereich deklarieren*
*--------------------------------------------------------------------*

DATA: wa_S022 TYPE S022,
      wa_makt TYPE MAKT.


*--------------------------------------------------------------------*
*Felder deklarieren*
*--------------------------------------------------------------------*
DATA: zeilen_itab01 TYPE i.

*--------------------------------------------------------------------*
*Datentypen für Zeilen deklarieren*
*--------------------------------------------------------------------*
TYPES: BEGIN OF zeile01_typ,
  ARBPL TYPE S022-ARBPL,
  MATNR TYPE S022-MATNR,
  AUFNR TYPE S022-AUFNR,
  SPTAG TYPE S022-SPTAG,
  SPRAS TYPE MAKT-SPRAS,
  MAKTX TYPE MAKT-MAKTX,
  END OF zeile01_typ.

*--------------------------------------------------------------------*
*Datentypen für interne Tabellen deklarieren*
*--------------------------------------------------------------------*
TYPES itab01_typ TYPE STANDARD TABLE OF zeile01_typ.

*--------------------------------------------------------------------*
*Interne Tabellen deklarieren*
*--------------------------------------------------------------------*
DATA itab01 TYPE itab01_typ.

*--------------------------------------------------------------------*
*Workareas für interen Tabellen deklarieren*
*--------------------------------------------------------------------*
DATA: wa_itab01 TYPE zeile01_typ.

*--------------------------------------------------------------------*
*Selektionsbild gesalten*
*--------------------------------------------------------------------*


SELECT-OPTIONS ARBPL FOR wa_S022-ARBPL.
PARAMETERS SPRAS TYPE MAKT-SPRAS.




START-OF-SELECTION.





START-OF-SELECTION.
*--------------------------------------------------------------------*
*DBtab lesen und itab01 füllen über Workarea*
*--------------------------------------------------------------------*
  SELECT * FROM S022
     INTO CORRESPONDING FIELDS OF TABLE itab01
    WHERE arbpl IN arbpl.

  SELECT  * FROM  MAKT
         INTO CORRESPONDING FIELDS OF TABLE itab01
         WHERE  MATNR  = WA_itab01-MATNR.



END-OF-SELECTION.






*--------------------------------------------------------------------*
*ITAB01 ausgeben in Liste*
*--------------------------------------------------------------------*

  WRITE: / 'sy-tabix, itab01-MATNR, itab01-AUFNR'.
  LOOP AT itab01 INTO wa_itab01.
    WRITE: / sy-tabix,
    wa_itab01-ARBPL,
    wa_itab01-MATNR,
    wa_itab01-MAKTX,
    wa_itab01-AUFNR,
    wa_itab01-SPTAG,
    wa_itab01-MAKTX.
  ENDLOOP.

Re: Mehrfachselektion

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

Das Zauberwort heißt JOIN:

Code: Alles auswählen.

SELECT S022~ARBPL S022~MATNR S022~AUFNR S022~SPTAG MAKT~SPRAS MAKT~MAKTX
FROM S022 INNER JOIN MAKT 
  ON S022~MATNR EQ MAKT~MATNR
INTO TABLE itab01
WHERE S022~arbpl IN arbpl
  AND MAKT~SPRAS EQ sy-langu.
Möglich, dass die ON-Bedingung noch nicht vollständig ist. Musst halt schauen wie die Tabellen zueinander in Beziehung stehen (SE11).
Das CORRESPONDING FIELDS OF kannst du übrigens weglassen wenn die Anzahl und Reihung der Felder in deiner Ergebnistabelle mit den Feldern im SELECT übereinstimmt. Ist so etwas performanter, aber wenn zusätzliche Felder benötigt werden muss man aufpassen, dass die Reihenfolge passt.

lg ADT

EDIT: Kleiner Schreibfehler wurde im Coding korrigiert!
Zuletzt geändert von a-dead-trousers am 19.09.2014 12:40, insgesamt 1-mal geändert.

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

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: Mehrfachselektion

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hey,

nur eine kleine Ergänzung: in deinem geposteten Coding hast du jetzt zweimal das ereignis "START-OF-SELECTION" drin. einmal ist da völlig ausreichend! ;) :D
Gruß,
der Matze

Re: Mehrfachselektion

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Zweimal START-OF-SELECTION kommt wohl vom vielen ausprobieren :P
Wie ist es eigentlich wenn ich noch eine Tabelle mehr verknüpfen möchte.
Ich habe sie auf dieselbe weise verknüpft, nun zieht es mir den Materialtext nicht mehr in die Liste. Dazu möchte ich
das in der Liste nur die freigegebenen Vorgänge ausgegeben werden, das heisst nur die, die STAT = I0002 besitzen. Aber dies funktioniert auch nicht richtig.
Vielen Dank für Eure Antwort.

Code: Alles auswählen.

START-OF-SELECTION.
*--------------------------------------------------------------------*
*DBtab lesen und itab01 füllen über Workarea*
*--------------------------------------------------------------------*
  SELECT * FROM S022
     INTO CORRESPONDING FIELDS OF TABLE itab01
    WHERE arbpl IN arbpl.



    SELECT S022~ARBPL S022~MATNR S022~AUFNR S022~OBJNR MAKT~SPRAS MAKT~MAKTX
FROM S022 INNER JOIN MAKT
  ON S022~MATNR EQ MAKT~MATNR
INTO TABLE itab01
WHERE S022~arbpl IN arbpl
  AND MAKT~SPRAS EQ sy-langu.



    SELECT S022~ARBPL S022~MATNR S022~AUFNR S022~OBJNR JEST~OBJNR JEST~STAT
FROM S022 INNER JOIN JEST
  ON S022~OBJNR EQ JEST~OBJNR
INTO TABLE itab01
WHERE S022~arbpl IN arbpl.



*Aufträge ausgeben die den Vorgangstatus STAT = I0002 haben
SELECT SINGLE *
  FROM jest
  INTO jest
  WHERE objnr = itab01-objnr
  AND stat = 'I0002'. "Freigegbene Aufträge

END-OF-SELECTION.

Re: Mehrfachselektion

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
... xxx INNER JOIN yyy ON ... INNER JOIN zzz ON ... usw.

http://www.w3schools.com/sql/
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: Mehrfachselektion

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
christof hat geschrieben:Ich habe sie auf dieselbe weise verknüpft, nun zieht es mir den Materialtext nicht mehr in die Liste. Dazu möchte ich
das in der Liste nur die freigegebenen Vorgänge ausgegeben werden, das heisst nur die, die STAT = I0002 besitzen. Aber dies funktioniert auch nicht richtig.
Hast du dein Programm mal Schritt für Schritt im Debugger durchlaufen und vor/nach dem Select geschaute was in itba01 steht?

Du machst dreimal ein SELECT irgendwas INTO TABEL itab01. INTO TABEL überschreibt aber die interne Tabelle, d.h. alle bereits enthaltene Daten sind weg.

Den Status zu den Aufträgen liest du mittels SELECT SINGLE, also genau einen Status. Du müsstest ihn aber für alle Sätze in itab01 lesen! (Anbei sind Kopfzeilen wie bei itab1 obsolet uns sollten nicht verwendet werden.)

Entweder du liest alle Daten in einem Join, oder du liest alle Daten einzelen und baust sie dir am Ende mittels LOOP/READ TABEL zusammen.

Code: Alles auswählen.

SELECT * 
     INTO CORRESPONDING FIELDS OF TABLE itab01
    FROM s022
    JOIN makt
      ON MAKT~MATNR EQ S022~MATNR
     AND makt~SPRAS EQ sy-langu
    JOIN JEST
      ON JEST~OBJNR EQ SO22~OBJNR
     AND jest~stat = 'I0002'. "Freigegbene Aufträge
    WHERE arbpl IN arbpl.
Gruß Hendrik

Re: Mehrfachselektion

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
ja mit dem Debugger bin ich auchdrauf gekommen.
Ich habs nachher so gelöst.
Vielen Dank für die Antwort

Code: Alles auswählen.

SELECT * FROM S022
     INTO CORRESPONDING FIELDS OF TABLE itab01
    WHERE arbpl IN arbpl.



   SELECT S022~ARBPL S022~MATNR S022~AUFNR S022~OBJNR MAKT~SPRAS MAKT~MAKTX JEST~STAT
FROM S022
INNER JOIN JEST
  ON S022~OBJNR EQ JEST~OBJNR
INNER JOIN MAKT
  ON S022~MATNR EQ MAKT~MATNR
INTO TABLE itab01
WHERE S022~arbpl IN arbpl
  AND MAKT~SPRAS EQ sy-langu.

Seite 1 von 1

Vergleichbare Themen

10
Antw.
7448
Views
Mehrfachselektion
von Orestes » 18.08.2011 16:00 • Verfasst in ABAP® für Anfänger
8
Antw.
5101
Views
MB51 - Mehrfachselektion
von Ulrich B. » 15.07.2016 09:31 • Verfasst in ABAP® für Anfänger
6
Antw.
3347
Views
Auf Mehrfachselektion prüfen
von Fistandantilus » 23.07.2013 12:29 • Verfasst in ABAP® für Anfänger
5
Antw.
2607
Views
ABAP Mehrfachselektion
von SAP-Thomas » 12.07.2013 13:58 • Verfasst in ABAP® für Anfänger
2
Antw.
2329
Views
Überschrift der Mehrfachselektion ändern?
von Nordlicht » 27.02.2017 08:33 • Verfasst in Dialogprogrammierung

Ü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

Regex in where
vor 13 Stunden von tar 8 / 303
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1593
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 242
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 479

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 13 Stunden von tar 8 / 303
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1593
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 242
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 479

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 2 Tagen von snooga87 1 / 180
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3358
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9910