SELECT in interne Tabelle in Abhängigkeit von..

Getting started ... Alles für einen gelungenen Start.
26 Beiträge • Vorherige Seite 2 von 2 (current)
26 Beiträge Vorherige Seite 2 von 2 (current)

Beitrag von fl0w (ForumUser / 13 / 0 / 0 ) »

Code: Alles auswählen.

* DEKLARATIONEN *

   TYPES:  BEGIN OF ty_WARN,
                  WRNUM TYPE DBTAB1-WRNUM,
                END    OF ty_WARN.

   TYPES:  BEGIN OF ty_WARA,
                  WARART  TYPE DBTAB2-WARART,
                  WARNUM  TYPE DBTAB2-WARNUM,
                END    OF ty_WARA.

   DATA:   itab_WARNUM        TYPE STANDARD TABLE OF ty_WARN,
                 wa_itab_WARNUM  TYPE ty_WARN,
                itab_WARART          TYPE STANDARD TABLE OF ty_WARA,
                 wa_itab_WARART    TYPE ty_WARA.


* START- SELEKTIONSBILD *

   SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
     PARAMETER: p_test.
   SELECTION-SCREEN END OF BLOCK B1.


* PROGRAMM-START *
  
   START-OF-SELECTION.


* DATEN LESEN *

  SELECT WARNUM  FROM DBTAB1 INTO CORRESPONDING FIELDS OF
  TABLE itab_WARNUM WHERE XXX = '1000'.
 
  SELECT WARART FROM DBTAB2 INTO CORRESPONDING FIELDS OF
  TABLE itab_WARART FOR ALL ENTRIES IN itab_WARNUM
  WHERE WARNUM = WARNUM. "DTVON < SY-DATUM and DTBIS > SY-
  DATUM.


* DATEN AUSGEBEN *

   LOOP AT itab_WARNUM INTO wa_itab_WARNUM.
     WRITE: / wa_itab_WARNUM.                                      
   ENDLOOP.

   LOOP AT itab_WARART INTO wa_itab_WARART.
     WRITE: / wa_itab_WARART.
   ENDLOOP.

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


Beitrag von brinam (Specialist / 111 / 0 / 0 ) »
fl0w hat geschrieben:

Code: Alles auswählen.

* DEKLARATIONEN *
   TYPES:  BEGIN OF ty_WARN,
                  WRNUM TYPE DBTAB1-WRNUM,
                END    OF ty_WARN.

  SELECT WARNUM  FROM DBTAB1 INTO CORRESPONDING FIELDS OF
  TABLE itab_WARNUM WHERE XXX = '1000'.
Wenn du "into corresponding fields" verwendest, dann müssen das Datenbankfeld und das Feld der internen Tabelle auch gleich heißen. Also überprüfe noch einmal die Schreibweise (WRNUM / WARNUM).
fl0w hat geschrieben:

Code: Alles auswählen.

  SELECT WARART FROM DBTAB2 INTO CORRESPONDING FIELDS OF
  TABLE itab_WARART FOR ALL ENTRIES IN itab_WARNUM
  WHERE WARNUM = WARNUM. "DTVON < SY-DATUM and DTBIS > SY-
  DATUM.
WHERE WARNUM = itab_WARNUM-WARNUM.
Viele Grüße
Britta

Beitrag von khb (Specialist / 184 / 7 / 1 ) »
stimmt, diese beiden Fehler sind mir auch aufgefallen, aber brinam war schneller. Läuft es nun, flOw?

Beitrag von fl0w (ForumUser / 13 / 0 / 0 ) »
Super, jetzt findet er keine Fehler mehr - Danke! :)

Die Namen der Felder habe ich aus Versehen hier im Forum unterschiedlich geschrieben.


Ok, nun sollte er also zur Warennummer den passenden Datensatz aus der zweiten DB-Tabelle ziehen, oder?

Um dies zu kontrollieren, würde ich mir das Ergebnis gern wieder per WRITE-Anweisung ausgeben lassen:

1.

Code: Alles auswählen.

 LOOP AT itab_WARNUM INTO wa_itab_WARNUM.
  WRITE: / wa_itab_WARNUM.                                      
 ENDLOOP.

 LOOP AT itab_WARART INTO wa_itab_WARART.
  WRITE: / wa_itab_WARART.
 ENDLOOP.
Er gibt nur die Warennummern aus.

2.

Code: Alles auswählen.

SORT itab_WARART.

LOOP at itab_WARNUM INTO wa_itab_WARNUM.
 CLEAR wa_itab_WARART.
 READ TABLE itab_WARART INTO wa_itab_WARART WITH KEY
  WARNUM = wa_itab_WARNUM-WARNUM.

WRITE: / wa_itab_WARNUM-WARNUM,
            / wa_itab_WARART-WARART.
ENDLOOP.
In diesem Fall gibt er auch nur die Warennummern aus und nichts anderes.

Beitrag von khb (Specialist / 184 / 7 / 1 ) »
Hallo flOw,

ist die 2. Tabelle gefüllt? (im Debugger nachschauen).

Folgendes Problem hast Du noch:

Du hast vergessen, die warnum mit in die interne Tabelle zu schieben, darum klappt der read nicht.

Code: Alles auswählen.

SELECT warnum WARART FROM DBTAB2 INTO CORRESPONDING FIELDS OF 
  TABLE itab_WARART FOR ALL ENTRIES IN itab_WARNUM 
  WHERE WARNUM = itab_warnum-WARNUM.

Beitrag von fl0w (ForumUser / 13 / 0 / 0 ) »
itab_WARNUM 85707 Einträge

itab_WARART 85921 Einträge


Sollten die nicht beide gleich viele Einträge haben?

Beitrag von brinam (Specialist / 111 / 0 / 0 ) »
Hi fl0w,

das muss nicht unbedingt so sein.

Es kommt darauf an, wie der primary key der beiden Datenbanktabellen definiert ist. Wenn z.B. bei DBTAB1 der primary key aus MANDT + WARNUM besteht, und bei DBTAB2 aus MANDT + WARNUM + WARART, dann hast Du eine 1:n-Beziehung zwischen DBTAB1 und DBTAB2. D.h. für jede WARNUM in DBTAB2 kann es 1-n Einträge geben. Insofern wäre es nicht falsch, wenn in deiner zweiten itab mehr Einträge sind als in der ersten.

Du erwartest, dass es zu jedem Eintrag in DBTAB1 genau einen Eintrag in DBTAB2 gibt? Wird denn ein neuer Datensatz in DBTAB2 genau dann angelegt, wenn auch einer in DBTAB1 angelegt wird? Vielleicht wird WARART in einem Teildynpro gepflegt, wo man mehrere Zeilen pflegen kann

Handelt es sich um Z-Tabellen? Wenn es zu jeder WARNUM auch genau einen Wert für WARART geben soll, dann könnte doch WARART auch ein Attribut (Feld) in DBTAB1 sein und man bräuchte keine 2. Tabelle DBTAB2?!
Vielleicht lüftest du mal das Geheimnis um deine Synonyme, sofern es SAP-Tabellen sind. Dann kann man vielleicht mal in der SE11 schauen.

So, genug in die Glaskugel geschaut, wie JHM sagen würde :wink:
Viele Grüße
Britta

Beitrag von fl0w (ForumUser / 13 / 0 / 0 ) »
Es sind leider keine SAP-Tabellen - Ist ein Kundensystem.

Wie da was gepflegt wird weiss ich nicht. Das größte Problem ist auch erstmal, dass nur Warennummern ohne die Warenart ausgegeben werden..

Beitrag von fl0w (ForumUser / 13 / 0 / 0 ) »
Hallo,

ich habe zwei interne Arbeitsbereiche.

Im ersten steht ein alter Wert - Im zweiten ein neuer.

Manchmal können beide Werte aber auch gleich sein. Ist dies der Fall, sollen diese nicht weiter verarbeitet werden und nicht mehr in der Liste ausgegeben werden.

Ich mache den Abgleich und danach muss ich die WA clearen. Dabei lösche ich aber alle Datensätze und nicht nur die gleichen.

Hat jemand eine Lösungsidee?



Danke und Gruß fl0w

Beitrag von brinam (Specialist / 111 / 0 / 0 ) »
Hallo,

poste doch 'mal etwas Coding, dann ist es einfacher, eine Aussage zu treffen.

P.S. Das ist aber ein neues Thema?!
Viele Grüße
Britta

Beitrag von fl0w (ForumUser / 13 / 0 / 0 ) »
Nein, gleicher Report.

Das Programm ist aber mittlerweile fertig und schon transportiert.


Vielen Dank für Eure Hilfe!

Vergleichbare Themen

34
Antw.
5141
Views
Abhängigkeit von Select-Options
von patlau » 14.05.2013 09:47 • Verfasst in ABAP® für Anfänger
16
Antw.
5440
Views
SELECT auf interne Tabelle?
von Spookykid » 24.03.2011 14:18 • Verfasst in ABAP® für Anfänger
2
Antw.
2832
Views
SELECT über interne Tabelle
von codierknecht » 26.10.2006 15:32 • Verfasst in ABAP® für Anfänger
3
Antw.
2883
Views
Interne Tabelle dynamisch im Select verwenden
von Dude » 14.11.2006 11:26 • Verfasst in ABAP® Core
5
Antw.
36108
Views
Select-Anweisung auf eine interne Tabelle ???
von bohne » 21.01.2007 23:46 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

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.