Select im loop alternative

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

Select im loop alternative

Beitrag von kaufmann123 (ForumUser / 18 / 6 / 0 ) »
Guten Tag,

ich möchte auf die interne tablle zugreifen, die ich vorher von mhnk mit daten aus einem selektionsbildschirm gefüllt habe. als nächstes soll aus der nächsten tabelle nur das befüllt werden, was auch den inhalten in where entsricht. jedoch wird viel mehr selektiert als im selektionsbildschirm ausgewählt, außerdem bekomme ich den hinweis, das man innerhalpt eines loops eine tabelle nicht überschreiben soll. wie kann ich das anders umsetzen?

Code: Alles auswählen.

  SELECT * FROM mhnk INTO CORRESPONDING FIELDS OF TABLE i_mahn
              WHERE bukrs EQ p_bukrs
              AND   laufd EQ p_laufd
              AND   laufi EQ p_laufi

  LOOP AT i_mahn TRANSPORTING NO FIELDS WHERE
       ( mahna EQ 'MAH3' AND mahns >= '4' )
  OR ( mahna EQ 'MAH2' AND mahns >= '3' )
  OR ( mahna EQ 'IHW'  AND mahns >= '3' )
  OR ( mahna EQ 'OMNI' AND mahns >= '4' ).

    SELECT * FROM mhnd INTO CORRESPONDING FIELDS OF TABLE itab_mahn
                FOR ALL ENTRIES IN itab_mahn
                WHERE bukrs EQ i_mahn-bukrs

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


Re: Select im loop alternative

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
Dein LOOP macht überhaupt keinen Sinn, allein schon deshalb, weil Du infolge von TRANSPORTING NO FIELDS keine Ergebnisse bekommst, mit denen Du weiterarbeiten könntest. Außerdem macht ein LOOP über eine interne Tabelle keinen Sinn, bei dem Du dann im Inneren des LOOPS per FOR ALL ENTRIES IN doch wieder auf alle Zeilen der Tabelle zugreifst. Zumal Du FOR ALL ENTRIES IN falsch verwendest, da Du in der WHERE-Bedingung gar nicht auf die Spalten der Tabelle prüfst. Offenbar hast Du bei den ganzen Befehlen gar nicht verstanden, wie sie funktionieren.

Da Du offenbar die Tabellen mhnk und mhnd verknüpfen möchtest, wäre die beste Lösung ein JOIN. Alternativ ein LOOP, bei dem Du dann einen SELECT machst, in dem Du aber auf alle relevanten Spalten aus der mhnk prüfst.

Ich bin kein Mahnexperte, aber nach meinem Dafürhalten müsstest Du die ganzen Spalten

LAUFD
LAUFI
KOART
BUKRS
KUNNR
LIFNR
CPDKY
SKNRZE
SMABER
SMAHSK
BBUKRS
BELNR
GJAHR

von mhnk und mhnd auf Gleichheit verknüpfen, damit Du in der mhnd nur nach den Zeilen suchst, die Deiner mhnk-Auswahl entsprechen. mhnk und mhnd haben ja einen sehr langen Primärschlüssel.

Re: Select im loop alternative

Beitrag von kaufmann123 (ForumUser / 18 / 6 / 0 ) »

Code: Alles auswählen.

  SELECT * FROM mhnk INTO CORRESPONDING FIELDS OF TABLE i_mahn
              WHERE bukrs EQ p_bukrs
              AND   laufd EQ p_laufd
              AND   laufi EQ p_laufi.

  SELECT * FROM mhnd INTO CORRESPONDING FIELDS OF TABLE i_mahn
               FOR ALL ENTRIES IN i_mahn
               WHERE bukrs EQ i_mahn-bukrs.

  DELETE i_mahn WHERE NOT
     ( mahna EQ 'MAH3' AND mahns >= '4' )
OR ( mahna EQ 'MAH2' AND mahns >= '3' )
OR ( mahna EQ 'IHW'  AND mahns >= '3' )
OR ( mahna EQ 'OMNI' AND mahns >= '4' ).
ich hab das jetzt anderes gelöst, aber gibt es da nicht einen performanteren weg, weil join geht ja nur bei datenbanktabellen und nicht bei einem bestimmten wert in einer internen tabelle?

Re: Select im loop alternative

Beitrag von MrBojangles (Specialist / 367 / 3 / 30 ) »
Hallo Kaufmann123,

DeathAndPain hat Dir eigentlich schon Steigbügel & Sattel bereitet, Du müsstest jetzt aber noch aufs Pferd aufsteigen...

Code: Alles auswählen.

   SELECT * FROM mhnd 
      INNER JOIN MAHNK ON MHND~BUKRS = MHNK~BUKRS
                                    AND alle_anderen_schlüsselfelder der MHNK
      INTO CORRESPONDING FIELDS OF TABLE i_mahn
      where MHND~bukrs = p_... 
         AND haste_nicht_gesehen
         AND ( ( MHNK~MAHNA = '...'  AND MHND~MAHNS >= ...) OR
                  ( nochmal_was_anderes ) ).
Noch einfacher geht es, wenn Du Deinen Report mit der logischen Datenbank MAF verknüpfst, dann bekommst Du die Selektion des Mahnbestandes praktisch hinterher geschmissen. Beispielcoding s. Report RFMAHN01.
Weiterhin viel Freude mit SAP...
Cheers
MrB.

Seite 1 von 1

Vergleichbare Themen

4
Antw.
5240
Views
loop inkl. Select
von Spookykid » 03.05.2011 10:19 • Verfasst in ABAP® für Anfänger
35
Antw.
3582
Views
SELECT + LOOP: Geschwindigkeit?
von foxtrot » 15.11.2019 13:25 • Verfasst in ABAP® für Anfänger
1
Antw.
5147
Views
Loop mit Select-Options in der Where-Bedingung
von made » 11.11.2005 09:12 • Verfasst in ABAP® für Anfänger
2
Antw.
3732
Views
Loop at screen auf Dynpro mit SELECT OPTIONS
von herr mb » 06.12.2012 15:00 • Verfasst in ABAP® Core
1
Antw.
721
Views

Ü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.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 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