Selektion aus mehreren Tabellen

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

Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Hallo Leute,

nun sind die Grundlagen gefragt ;-)

1. Ich brauche alle Positionen mit ekpo-bukrs = '0300' + ekpo-werks = '0060' + Lieferant aus Tabelle ekko (ekko-lifnr)
2. Alle gefundenen Lieferanten aus 1. -> doppeleinträge bereinigen
3. Selektion aller Lieferanten aus Tab. LFM1 mit lfm1-bukrs='0060' -> aussortieren aller Lieferanten aus Punkt 2.

=> Ausgabe Lieferantennummer
zu 1. und 2.

Code: Alles auswählen.

  data: LT_EKPO       type table of EKPO with header line,
        LS_EKPO       type EKPO,
        LT_EKKO       type table of EKKO  with header line,
        LS_EKKO       type EKKO,
        LS_ALV_EKPO   type TY_ALV_OUT,
        LS_ALV_EKKO   type TY_ALV_OUT.

  field-symbols:
           <EKPO> type EKPO,
           <EKKO> type EKKO,
           <LFM1> type LFM1.

  select *  from EKPO
     into corresponding fields of table LT_EKPO
       where BUKRS = '0300'
         and WERKS = '0060'.
  check LT_EKPO[] is not initial.

  select * from EKKO
    into corresponding fields of table LT_EKKO
    for all entries in LT_EKPO
    where LIFNR = LT_EKPO-KUNNR.

sort LT_EKKO by LIFNR.
delete adjacent duplicates from LT_EKKO comparing LIFNR.

  loop at LT_EKKO into LS_EKKO.
    move-corresponding LS_EKKO to LS_ALV_EKKO.
    append LS_ALV_EKKO to GT_ALV_OUT.
  endloop.
wird aber nichts ausgegeben. Wo habe ich Fehler?
Danke!
Zuletzt geändert von Nadine_2706 am 07.10.2011 07:13, insgesamt 1-mal geändert.

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


Re: Selektion aus mehreren Tabellen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Gibt einfach mal '/H' in das Commandofeld, bevor Du Dein Program startest.

Deine Anforderung:
1. Ich brauche alle Positionen mit ekpo-bukrs = '1111' + ekpo-werks = '2222' + Lieferant aus Tabelle ekko (ekko-lifnr)
kann mit diesem Select-Statement
where BUKRS = '0020'
and WERKS = '0010'.
nicht funktionieren.

Desweiteren drängt sich ein JOIN geradezu auf, bei KOPF- und POSITIONSdaten.

Auch würde ich prüfen, ob es wirklich notwenig ist, erst eine LT_EKKO zu füllen, dann ein LOOP um Daten in die GT_ALV_OUT (via Stuktur LS_ALV_EKKO?) zu kopieren.

Der Befehlt DISTINCT könnte das spätere "delete adjacent duplicates" ersetzen.

Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Danke für Deine Rückmeldung!

Das mit JOIN habe ich's auch probiert, ergibt ein Dump.

Code: Alles auswählen.

*  data: LS_ALV_OUT type TY_ALV_OUT.
*
*  data: begin of LS_LIEF,
*          BUKRS type EKPO-BUKRS,
*          WERKS type EKPO-WERKS,
*          KUNNR type EKPO-KUNNR,
*          LIFNR type EKKO-LIFNR,
*    end of LS_LIEF,
*    LT_LIEF like sorted table of LS_LIEF
*            with unique key BUKRS WERKS KUNNR LIFNR.
*
*  select P~BUKRS P~WERKS P~KUNNR K~LIFNR
*    from EKPO as P inner join EKKO as K on P~KUNNR = K~LIFNR
*    into corresponding fields of table LT_LIEF
*    where P~BUKRS = '0020'
*      and P~WERKS = '0010'.
*
*  check LT_LIEF[] is not initial.
*  delete adjacent duplicates from LT_LIEF comparing LIFNR.
*
*  loop at LT_LIEF into LS_LIEF.
*    move-CORRESPONDING LS_LIEF to LS_ALV_OUT.
*    append LS_ALV_OUT to GT_ALV_OUT.
*  endloop.

Re: Selektion aus mehreren Tabellen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Die Antwort "Es gab einen Dump" ist nichts aussagend.
Da sollten mindenstens die ersten zwei Zeilen gepostet werden.

KEEP IT SIMPLE!!!

Vergiß erstmal das "sorted table" und nimm STANDARD TABLE. Ich vermute, dass damit der Shortdump schon erledigt ist.

Das "sorted table" kannst Du immer noch einsetzen, wenn überhaupt nötig.

Benutze nicht einfach nur "check LT_LIEF[] is not initial."
Mache lieber zu Anfang eine

Code: Alles auswählen.

   IF LT_LIEF is not initial.
          Weitere Verarbeitung.
   ELSE.
            Message 'Table LT_LIEF is LEER' type 'I'.
   ENDIF.
 
Dann bekommst Du bei einer leeren Tabelle IMMER eine sofortige Rückmeldung. Das kann man später auch individuell anpassen.

Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Habe geändert, es wird nur eine Zeile ausgegeben. Das kann aber nicht sein, da es (laut Aufgebesteller) min. 50 Einträge ausgegeben müssen.
Und die tabelle lfm1 besitzt kein Feld 'BUKRS', laut Aufgabestellung, soll man die lifnr aus lfm1 die mit bukrs = '0020' vorkommen, ausselektieren. Wie läuft's denn weiter?

Code: Alles auswählen.

  data:
        LS_ALV_OUT type TY_ALV_OUT.

  data: begin of LS_LIEF,
          BUKRS type EKPO-BUKRS,
          WERKS type EKPO-WERKS,
          KUNNR type EKPO-KUNNR,
          LIFNR type EKKO-LIFNR,
    end of LS_LIEF,
    LT_LIEF like standard table of LS_LIEF.

  select P~BUKRS P~WERKS P~KUNNR K~LIFNR
    from EKPO as P inner join EKKO as K on P~KUNNR = K~LIFNR
    into corresponding fields of table LT_LIEF
    where P~BUKRS = '0020'
      and P~WERKS = '0010'.

*  check LT_LIEF[] is not initial.

  if LT_LIEF is not initial.
*    MESSAGE 'Weitere verarbeitung!' type 'I'.
    select lifnr from lfm1 into TABLE lt_lief
      where bukrs = '0020'.
  else.
    message 'Table LT_LIEF is LEER' type 'I'.
  endif.

  delete adjacent duplicates from LT_LIEF comparing LIFNR.

  loop at LT_LIEF into LS_LIEF.
    move-corresponding LS_LIEF to LS_ALV_OUT.
    append LS_ALV_OUT to GT_ALV_OUT.
  endloop.
Und außerdem ist der Feld lifnr in alv leer!

Re: Selektion aus mehreren Tabellen

Beitrag von ereuss (ForumUser / 20 / 1 / 1 ) »
Hallo,

der Join zwischen EKKO und EKPO kann so nicht funktionieren. Das Verknüpfungskriterium ist die Belegnr. (EBELN), müsste dann so lauten P~EBELN = K~EBELN.

Gruss
Eugen

Folgende Benutzer bedankten sich beim Autor ereuss für den Beitrag:
Nadine_2706


Re: Selektion aus mehreren Tabellen

Beitrag von Ratazong (Specialist / 144 / 1 / 14 ) »
Ganz ganz dunkel glaube ich mich zu erinnern, dass die Buchungskreisabhängigen Lieferantendaten in der LFB1 stehen.

LFM1 sind die Einkaufsorgabhängigen.

Gruß

Rata
Normale Menschen wundern sich, warum in der Welt so viel schief läuft.
Programmierer wundern sich, warum alles so gut funktioniert.

Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
ok
Zuletzt geändert von Nadine_2706 am 30.09.2011 09:31, insgesamt 1-mal geändert.


Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
was mache ich da falsch?

Code: Alles auswählen.

  select P~BUKRS P~WERKS P~KUNNR K~LIFNR
    from EKPO as P inner join EKKO as K on P~EBELN = K~EBELN
    into corresponding fields of table LT_LIEF
    where P~BUKRS = '0020'
      and P~WERKS = '0010'.

  delete adjacent duplicates from LT_LIEF comparing LIFNR.

  select LIFNR EKORG from LFM1 into table LT_LFM1
      where EKORG = '0020'
        and LIFNR ne LT_LIEF-LIFNR.

  loop at LT_LFM1 into LS_LFM1.
    move-corresponding LS_LFM1 to LS_ALV_OUT.
    append LS_ALV_OUT to GT_ALV_OUT.
  endloop.
ich möchte alle lifnr, die in der tabelle lt_lief vorkommen aus der tabelle lt_lfm1 ausselektieren. Die eintrage sind aber da!

Hilfe!

Re: Selektion aus mehreren Tabellen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Nadine_2706 hat geschrieben:ch möchte alle lifnr, die in der tabelle lt_lief vorkommen aus der tabelle lt_lfm1 ausselektieren. Die eintrage sind aber da!
Komischer Satz.....

Code: Alles auswählen.

  SELECT LIFNR EKORG FROM LFM1 INTO TABLE LT_LFM1
      WHERE EKORG = '0020'
       AND LIFNR NE LT_LIEF-LIFNR.                            FALSCH!!!

Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
wie dann richtig?

Danke im Voraus!

Re: Selektion aus mehreren Tabellen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Entweder du willst "for all entries" benutzen oder Du musst die Tabelle " NE LT_LIEF-LIFNR" durch ein Feld ersetzen.

Re: Selektion aus mehreren Tabellen

Beitrag von Nadine_2706 (ForumUser / 91 / 16 / 0 ) »
Danke für Deine Rückmeldung!

nun habe ich folgendes:

Code: Alles auswählen.

  select LIFNR EKORG into table LT_LFM1 from LFM1
    for all entries in LT_LIEF
        where LIFNR ne LT_LIEF-LIFNR
          and EKORG = '0020'.
die LIFNR aus der LT_LIEF sind immer noch in der LT_LFM1.
?????

Re: Selektion aus mehreren Tabellen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Ich glaube nicht, daß diese Kombination:

Code: Alles auswählen.

for all entries in LT_LIEF
        where LIFNR ne LT_LIEF-LIFNR
funktioniert.

Ein Vorschlag: Loop über LT_LIEF und bilde eine RANGE-Tabelle RT_LIEFNR (SIGN = 'I'; OPTION = 'NE'; RT_LIEFNR-LOW = LT_LIEF-LIFNR; Append nicht vergessen) und benutze diese dann so:

Code: Alles auswählen.

   where LIFNR in RT_LIEFNR

Vergleichbare Themen

19
Antw.
5444
Views
Selektion von mehreren Belegarten
von kisa » 16.05.2012 13:40 • Verfasst in ABAP® für Anfänger
10
Antw.
3576
Views
BAPI Selektion aus Ranges Tabellen
von Besi » 08.02.2005 17:53 • Verfasst in ABAP® Core
2
Antw.
1426
Views
Verwendung von mehreren Tabellen in DB-Views
von ST22 » 17.04.2008 10:34 • Verfasst in ABAP® Core
6
Antw.
2391
Views
Daten aus mehreren Tabellen ausgeben
von thr-hn » 25.03.2014 09:14 • Verfasst in ABAP® für Anfänger
22
Antw.
8978
Views
Daten aus mehreren Tabellen auslesen
von phil1982 » 07.08.2007 15:13 • Verfasst in ABAP® für Anfänger

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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141