Zusammenführen zweier int Tabellen

Alle Fragen rund um Basisthemen
21 Beiträge • Seite 1 von 2 (current) Nächste
21 Beiträge Seite 1 von 2 (current) Nächste

Zusammenführen zweier int Tabellen

Beitrag von Willow (ForumUser / 7 / 0 / 0 ) »
Hallo erstnmal,

ich bin neu hier. :)

Zu meinem Problem:

Ich habe 2 interne Tabellen (tab1, tab2), die ich jeweils über eine SELECT Abfrage gefüllt habe. In tab1 stehen z. B. Auftrgasnummern einer bestimmten Range mit dem Status 'A'(offen) und 'B'(Teillieferung).
In tab2 stehen Auftragsnummern die sich in der Range befinden, zusammen mit Lieferscheinnummern. Also deutlich mehr als in tab1.
Ich möchte nun die 2 Tabellen zusammenführen, indem geschaut wird, welche der Auftragsnummern in tab2 auch in tab1 vorkommen. In diesem Fall soll dann später die Auftragsnummer zusammen mit der Lieferscheinnummer ausgegeben werden (aber nur 1 Mal :!: ).
Die Ausgabe erfolgt dann in einer dritten Tabelle mit allen Auftragsnummern ohne LSNr. plus die Nummern, zu denen in tab2 LSNr. gefunden wurden.

Ich hoffe, dass ich das Problem einigermaßen verständlich geschildert habe, und freue mich auf Lösungstips. :wink:

So long...

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
sehe ich das richtig, dass Du wissen willst, ob es zu einer Anzahl Aufträge Aufträge existieren, deren Lieferung noch nicht erledigt ist, aber welche Lieferscheine dabei vorhanden sind, keine Rolle spielen?
Und diese Auftragsnummern sind auszugeben?
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Willow (ForumUser / 7 / 0 / 0 ) »
Jaja, habe mir schon gedacht, dass ich es zu kompliziert ausgedrückt habe. ;)

Also:

Code: Alles auswählen.


START-OF-SELECTION.
SELECT-OPTIONS: Auftrag FOR number DEFAULT '0000600000' TO '0000615000'.

****************************************
*Einlesen der offnen Aufträge - VBUK   *
*Alle Aufträge mit Status A und B      *
****************************************
SELECT VBELN
INTO CORRESPONDING FIELDS OF TABLE ivbuk
FROM VBUK
WHERE VBELN IN Auftrag AND LFGSK NE 'C' AND LFGSK NE ' '.

**************************************************
*Lieferscheine zu Offene 'B' Aufträge suchen!    *
**************************************************
SELECT VGBEL VBELN
INTO CORRESPONDING FIELDS OF TABLE ilips
FROM LIPS
WHERE VGBEL IN Auftrag.
Also in ivbuk stehen alle Aufträge mit Status 'A' und 'B'.
In ilips stehen alle Aufträge die in den Auftragsnummernkreis fallen außer die mit 'A' (offen -> noch kein LS erzeugt). Aber ja auch die mit Status 'C', also "fertig". Die brauche ich aber nicht. Die mit dem Status ' ' sind Sonderfälle und interessieren auch nicht.

Will jetzt ivbuk und ilips zusammenführen und am Ende eine Liste:

Code: Alles auswählen.

Auftrag:    Lieferschein:
...
0000613412
0000613413
0000613415  0020625250 
0000613416  0020625251
0000613418
...
Also jedesmal wenn er in lips eine passenden Auftrag mit LSNr findet, soll diese LSNr in der neuen itab angehängt werden.

Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
Hi,

versuchs mal so:

loop at ivbuk.

clear itab3.
move ivbuk-vbeln to itab3-vbeln.

read table ilips with key vbeln = ivbuk-vbeln.
if sy-subrc = 0.
move ilips-lfsnr to itab3-lfsnr.
endif.

append itab3.

endloop.


Gruß Andreas


endloop.

Beitrag von Gast ( / / 0 / 3 ) »
Mach doch nen join.

Geändertes Coding:

Code: Alles auswählen.

START-OF-SELECTION.
TYPES: begin of itype,
         vbeln like vbuk-vblen,
         VGBEL like lips-vgbel,
       end of itype.

DATA: itab type table of itype,
      iline type itype.

SELECT-OPTIONS: Auftrag FOR vbuk-vbeln DEFAULT '0000600000' TO '0000615000'. 

select vbuk~vbeln lips~vgbel into 
  INTO CORRESPONDING FIELDS OF TABLE itab
  from vbuk
  left outer join lips on lips~vbeln = vbuk~vbeln
    where vbuk~vbeln in Auftag
      and vbuk~lfgsk = 'A' or vbuk~lfgsk = 'B'.

sort itab.

write: 'Auftrag:    Lieferschein:'.

loop at itab into iline.
at new vbeln.
write: /1, iline-vbeln.
endat.
write: iline-vgbel
endloop.

Beitrag von CrashOverride (ForumUser / 10 / 0 / 0 ) »
Nun nochmal korrigiert:

Code: Alles auswählen.

TABLES: VBUK, LIPS.

START-OF-SELECTION.
  TYPES: BEGIN OF ITYPE,
           VBELN LIKE VBUK-VBELN,
           VGBEL LIKE LIPS-VGBEL,
         END OF ITYPE.

  DATA: ITAB TYPE TABLE OF ITYPE,
        ILINE TYPE ITYPE.

  SELECT-OPTIONS: AUFTRAG FOR VBUK-VBELN DEFAULT '0000600000' TO
  '0000615000'.

  SELECT VBUK~VBELN LIPS~VGBEL
    INTO CORRESPONDING FIELDS OF TABLE ITAB
    FROM VBUK
    LEFT OUTER JOIN LIPS ON VBUK~VBELN = LIPS~VBELN
        WHERE VBUK~VBELN IN AUFTRAG.
        AND ( VBUK~LFGSK = 'A' OR VBUK~LFGSK = 'B' ).

  DELETE ADJACENT DUPLICATES FROM ITAB.

  SORT ITAB.

  WRITE: 'Auftrag:    Lieferscheine:'.

  LOOP AT ITAB INTO ILINE.
    AT NEW VBELN.
      WRITE: / ILINE-VBELN.
    ENDAT.
    WRITE: ILINE-VGBEL.
  ENDLOOP.

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

Danke erstmal für die vielen Tips. Die Idee von CrashOverride ist sehr gut, und hat soweit auch 1x funktioniert! Allerdings auch nur 1 Mal! Komischerweise bekomme ich jetzt immer Laufzeitfehler (Siehe Pfeil) :shock:
TABLES: VBUK, LIPS.

START-OF-SELECTION.
TYPES: BEGIN OF ITYPE,
VBELN LIKE VBUK-VBELN,
VGBEL LIKE LIPS-VGBEL,
VBELN_V LIKE LIPS-VBELN,
END OF ITYPE.

DATA: ITAB TYPE TABLE OF ITYPE,
ILINE TYPE ITYPE.

SELECT-OPTIONS: AUFTRAG FOR VBUK-VBELN DEFAULT '0000613000' TO
'0000615000'.

SELECT VBUK~VBELN LIPS~VGBEL LIPS-VBELN
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM VBUK
LEFT OUTER JOIN LIPS ON VBUK~VBELN = LIPS~VBELN
WHERE VBUK~VBELN IN AUFTRAG.
--> AND ( VBUK~LFGSK = 'A' OR VBUK~LFGSK = 'B' ).

DELETE ADJACENT DUPLICATES FROM ITAB.

SORT ITAB.

WRITE: 'Auftrag: Lieferscheine:'.

LOOP AT ITAB INTO ILINE.
AT NEW VBELN.
WRITE: / ILINE-VBELN.
ENDAT.
WRITE: ILINE-VBELN_V.
ENDLOOP.
So knapp vor dem Gelingen! Woran liegt es? :x

Beitrag von Gast ( / / 0 / 3 ) »
[quote="Anonymous"]Hallo.

Danke erstmal für die vielen Tips. Die Idee von CrashOverride ist sehr gut, und hat soweit auch 1x funktioniert! Allerdings auch nur 1 Mal! Komischerweise bekomme ich jetzt immer Laufzeitfehler (Siehe Pfeil) :shock:

Code: Alles auswählen.

TABLES: VBUK, LIPS. 

START-OF-SELECTION. 
  TYPES: BEGIN OF ITYPE, 
           VBELN LIKE VBUK-VBELN, 
           VGBEL LIKE LIPS-VGBEL,
           VBELN_V LIKE LIPS-VBELN,
         END OF ITYPE. 

  DATA: ITAB TYPE TABLE OF ITYPE, 
        ILINE TYPE ITYPE. 

  SELECT-OPTIONS: AUFTRAG FOR VBUK~VBELN DEFAULT '0000613000' TO 
  '0000615000'. 

  SELECT VBUK~VBELN LIPS~VGBEL LIPS-VBELN
    INTO CORRESPONDING FIELDS OF TABLE ITAB 
    FROM VBUK 
    LEFT OUTER JOIN LIPS ON VBUK~VBELN = LIPS~VBELN 
        WHERE VBUK~VBELN IN AUFTRAG. 
  -->   AND ( VBUK~LFGSK = 'A' OR VBUK~LFGSK = 'B' ). 

  DELETE ADJACENT DUPLICATES FROM ITAB. 

  SORT ITAB. 

  WRITE: 'Auftrag:    Lieferscheine:'. 

  LOOP AT ITAB INTO ILINE. 
    AT NEW VBELN. 
      WRITE: / ILINE-VBELN. 
    ENDAT. 
    WRITE: ILINE-VBELN_V. 
  ENDLOOP.
[/quote]
So knapp vor dem Gelingen! Woran liegt es?  :x

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

Danke erstmal für die vielen Tips. Die Idee von CrashOverride ist sehr gut, und hat soweit auch 1x funktioniert! Allerdings auch nur 1 Mal! Komischerweise bekomme ich jetzt immer Laufzeitfehler (Siehe Pfeil) :shock:

Code: Alles auswählen.

TABLES: VBUK, LIPS. 

START-OF-SELECTION. 
  TYPES: BEGIN OF ITYPE, 
           VBELN LIKE VBUK-VBELN, 
           VGBEL LIKE LIPS-VGBEL,
           VBELN_V LIKE LIPS-VBELN,
         END OF ITYPE. 

  DATA: ITAB TYPE TABLE OF ITYPE, 
        ILINE TYPE ITYPE. 

  SELECT-OPTIONS: AUFTRAG FOR VBUK~VBELN DEFAULT '0000613000' TO 
  '0000615000'. 

  SELECT VBUK~VBELN LIPS~VGBEL LIPS-VBELN
    INTO CORRESPONDING FIELDS OF TABLE ITAB 
    FROM VBUK 
    LEFT OUTER JOIN LIPS ON VBUK~VBELN = LIPS~VBELN 
        WHERE VBUK~VBELN IN AUFTRAG. 
  -->   AND ( VBUK~LFGSK = 'A' OR VBUK~LFGSK = 'B' ). 

  DELETE ADJACENT DUPLICATES FROM ITAB. 

  SORT ITAB. 

  WRITE: 'Auftrag:    Lieferscheine:'. 

  LOOP AT ITAB INTO ILINE. 
    AT NEW VBELN. 
      WRITE: / ILINE-VBELN. 
    ENDAT. 
    WRITE: ILINE-VBELN_V. 
  ENDLOOP.
[/quote]
So knapp vor dem Gelingen! Woran liegt es?  :x
[/quote]

Beitrag von CrashOverride (ForumUser / 10 / 0 / 0 ) »
Entschuldigung aber der Punkt in der Wherebedingung muss weg, also der nach AUFTRAG und vor dem AND an der Abbruchstelle. Den hatte ich vergessen zu entfernen.

MfG Crash Override

Beitrag von Willow (ForumUser / 7 / 0 / 0 ) »
Achso ja den hatte ich schon entfernt. SAP hat da ja schon gemeckert. Allerdings lag es nicht daran!

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

zwei weiter fehler im coding:

1) SELECT-OPTIONS: AUFTRAG FOR VBUK~VBELN DEFAULT
sollte:
FOR VBUK-VBELN (mit - statt ~) lauten,

2)SELECT VBUK~VBELN LIPS~VGBEL LIPS-VBELN
sollte:
LIPS~VBELN (mit ~ statt -) lauten.

mfg
richard

Beitrag von CrashOverride (ForumUser / 10 / 0 / 0 ) »
versuch mal:

Code: Alles auswählen.

TABLES: VBUK, LIPS.

START-OF-SELECTION.
  TYPES: BEGIN OF ITYPE,
           VBELN LIKE VBUK-VBELN,
           VGBEL LIKE LIPS-VGBEL,
         END OF ITYPE.

  DATA: ITAB TYPE TABLE OF ITYPE,
        ILINE TYPE ITYPE.

  SELECT-OPTIONS: AUFTRAG FOR VBUK-VBELN DEFAULT '0000600000' TO
  '0000615000'.
  SELECT-OPTIONS: KZEICHEN FOR VBUK-VBELN DEFAULT 'A' TO 'B'.

  SELECT VBUK~VBELN LIPS~VGBEL
    INTO CORRESPONDING FIELDS OF TABLE ITAB
    FROM VBUK
    LEFT OUTER JOIN LIPS ON VBUK~VBELN = LIPS~VBELN
        WHERE VBUK~VBELN IN AUFTRAG
        AND VBUK~LFGSK IN KZEICHEN.

  DELETE ADJACENT DUPLICATES FROM ITAB.

  SORT ITAB.

  WRITE: 'Auftrag:    Lieferscheine:'.

  LOOP AT ITAB INTO ILINE.
    AT NEW VBELN.
      WRITE: / ILINE-VBELN.
    ENDAT.
    WRITE: ILINE-VGBEL.
  ENDLOOP.
Hier habe ich auch das Kennzeichen als Select-Option genommen. Dies macht den Report etwas universeller einsetzbar. Welches System setzt du ein? Beide Varianten laufen hier auf einem 4.6C problemlos.

MfG Crash Override

Beitrag von Willow (ForumUser / 7 / 0 / 0 ) »
Jo arbeite hier auch auf nem 4.6C System.

Die Sache jetzt ist:

VBUK-VBELN => Auftragsnummer
LIPS-VBELN=> LS-Nummer!
und
LIPS-VGBEL => Auftragsnummer

Code: Alles auswählen.

TABLES: VBUK, LIPS. 

START-OF-SELECTION. 
  TYPES: BEGIN OF ITYPE, 
           VBELN   LIKE VBUK-VBELN, 
           VGBEL   LIKE LIPS-VGBEL,
           VBELN_V LIKE LIPS-VBELN,
         END OF ITYPE. 

  DATA: ITAB TYPE TABLE OF ITYPE, 
        ILINE TYPE ITYPE. 

  SELECT-OPTIONS: AUFTRAG FOR VBUK-VBELN DEFAULT '0000600000' TO 
  '0000615000'. 
  SELECT-OPTIONS: KZEICHEN FOR VBUK-VBELN DEFAULT 'A' TO 'B'. 

  SELECT VBUK~VBELN LIPS~VGBEL LIPS~VBELN_V
    INTO CORRESPONDING FIELDS OF TABLE ITAB 
    FROM VBUK 
    LEFT OUTER JOIN LIPS ON VBUK~VBELN = LIPS~VGBEL
        WHERE VBUK~VBELN IN AUFTRAG 
        AND VBUK~LFGSK IN KZEICHEN. 

  DELETE ADJACENT DUPLICATES FROM ITAB. 

  SORT ITAB. 

  WRITE: 'Auftrag:    Lieferscheine:'. 

  LOOP AT ITAB INTO ILINE. 
    AT NEW VBELN. 
      WRITE: / ILINE-VBELN. 
    ENDAT. 
    WRITE: ILINE-VBELN_V. 
  ENDLOOP.

Richtig? :wink:

Beitrag von CrashOverride (ForumUser / 10 / 0 / 0 ) »
Leider nicht ganz.

Code: Alles auswählen.

TABLES: VBUK, LIPS.

START-OF-SELECTION.
  TYPES: BEGIN OF ITYPE,
           VBELN LIKE VBUK-VBELN,
           VBELN_V LIKE LIPS-VBELN,
         END OF ITYPE.

  DATA: ITAB TYPE TABLE OF ITYPE,
        ILINE TYPE ITYPE.

  SELECT-OPTIONS: AUFTRAG FOR VBUK-VBELN DEFAULT '0000600000' TO
  '0000615000'.
  SELECT-OPTIONS: KZEICHEN FOR VBUK-VBELN DEFAULT 'A' TO 'B'.

  SELECT VBUK~VBELN AS VBELN LIPS~VBELN AS VBELN_V
  INTO TABLE ITAB
    FROM VBUK
    LEFT OUTER JOIN LIPS ON VBUK~VBELN = LIPS~VGBEL
        WHERE VBUK~VBELN IN AUFTRAG
        AND VBUK~LFGSK IN KZEICHEN.

  DELETE ADJACENT DUPLICATES FROM ITAB.

  SORT ITAB.

  WRITE: 'Auftrag:    Lieferscheine:'.

  LOOP AT ITAB INTO ILINE.
    AT NEW VBELN.
      WRITE: / ILINE-VBELN.
    ENDAT.
    WRITE: ILINE-VBELN_V.
  ENDLOOP.
Das sollte meiner Meinung nach funktionieren. Es läuft leider zu lange bei uns, da wir zu grosse Datenbanken haben, aber eien Abbruch gab es beim kurzen Test nicht.

Vergleichbare Themen

4
Antw.
9751
Views
Interne Tabellen zusammenführen
von Basler84 » 01.08.2018 16:49 • Verfasst in ABAP® für Anfänger
1
Antw.
2398
Views
Tabellen/Strukturen zusammenführen
von m4rkusr » 19.10.2006 08:00 • Verfasst in ABAP® Core
2
Antw.
15364
Views
Zwei interne Tabellen zusammenführen
von _Manfred_ » 28.04.2005 13:57 • Verfasst in ABAP® für Anfänger
10
Antw.
9006
Views
zwei interne Tabellen zusammenführen => ALV
von Mark33 » 22.08.2012 07:00 • Verfasst in ABAP® für Anfänger
9
Antw.
2782
Views
Durchlaufen zweier Tabellen
von Spookykid » 11.04.2011 11:22 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Eclipse - warum/wann verwendet ihr es [nicht]
vor 21 Minuten von ewx 17 / 1027
Dialog-Container mit Toolbar/Status
vor 5 Stunden von DeathAndPain gelöst 20 / 2491
SAP Trial Version für SAP Fiori
vor 2 Tagen von tar 2 / 1630

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

Eclipse - warum/wann verwendet ihr es [nicht]
vor 21 Minuten von ewx 17 / 1027
Dialog-Container mit Toolbar/Status
vor 5 Stunden von DeathAndPain gelöst 20 / 2491
SAP Trial Version für SAP Fiori
vor 2 Tagen von tar 2 / 1630

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 693
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2324
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8907