Selektionstabelle (Komponente LOW)

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

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

Selektionstabelle (Komponente LOW)

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
Hallo Leute,

ich habe ein kleines Problem. Ich möchte gerne mithilfe einer Selektionstabelle eine Abfrage über eine interne Tabelle starten. Den Loop habe ich hier verkürzt, da nur die WHERE-Klausel von Bedeutung ist. Ich habe ein Problem mit der Komponente LOW. Wie müsste ich den Code abändern, wenn nicht nur die Spalte name1, sondern auch name2 und name3 der Tabelle sb integriert werden soll. Einfaches Copy-Paste und ändern der Spalte funktioniert ja leider nicht. :)

Code: Alles auswählen.

TYPES: BEGIN OF ty_sb,
        name(20) TYPE c,
       END OF ty_sb.

DATA: r_sb TYPE RANGE OF ty_sb,
      l_sb LIKE LINE OF r_sb.

LOOP AT sb.
  CLEAR l_sb.
  l_sb-sign = 'I'.
  l_sb-option = 'CP'.
  CONCATENATE '*' sb-name1 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
ENDLOOP.



LOOP AT nb WHERE name4 IN r_sb OR name5 IN r_sb.
.........
ENDLOOP.

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


Re: Selektionstabelle (Komponente LOW)

Beitrag von JHM (Top Expert / 1209 / 1 / 202 ) »
richtiges Copy&Past und es geht:

Code: Alles auswählen.

LOOP AT sb.
  CLEAR l_sb.
  l_sb-sign = 'I'.
  l_sb-option = 'CP'.
  CONCATENATE '*' sb-name1 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
  CONCATENATE '*' sb-name2 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
  CONCATENATE '*' sb-name3 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
  CONCATENATE '*' sb-name4 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
ENDLOOP.
Gruß Hendrik

Re: Selektionstabelle (Komponente LOW)

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
hi,

das müsste dann so aussehen:

Code: Alles auswählen.

LOOP AT sb.
  CLEAR l_sb.
  l_sb-sign = 'I'.
  l_sb-option = 'CP'.
  CONCATENATE '*' sb-name1 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
  CONCATENATE '*' sb-name2 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
  CONCATENATE '*' sb-name3 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
ENDLOOP.
EDIT: zwei Minuten zu langsam :-)
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Selektionstabelle (Komponente LOW)

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
Hm, dann liegt der Fehler wohl doch woanders, da ich genau das mit Copy & Paste meinte. Also ich hab schon nach jedem Komponentschritt appended.

Ich hatte zuerst einen Loop über beide Tabellen laufen lassen und bekam somit auch die korrekten Ergebnisse geliefert.

Code: Alles auswählen.

LOOP at sb.
  LOOP AT nb.    
    "Es folgt eine längere If-Abfrage der Strings.
     MOVE-CORRESPONDING nb TO ca_nb.
     APPEND ca_nb.
    ENDIF.
  ENDLOOP.
ENDLOOP.
Nun hatte ich eigentlich gedacht, dass ich mir durch die Selektionstabelle den verschachtelten Loop sparen kann. Da ich mir die interne Tabelle gefüllt habe, bekomme ich nun nur die Ergebnisse des letzten Eintrags in die Tabelle "sb" angezeigt. Fehlt mir da doch der zweite Loop?

Code: Alles auswählen.

LOOP AT nb WHERE name4 IN r_sb AND name5 IN r_sb.    
    "Es folgt eine längere If-Abfrage der Strings.
     MOVE-CORRESPONDING nb TO ca_nb.
     APPEND ca_nb.
    ENDIF.
ENDLOOP.

Re: Selektionstabelle (Komponente LOW)

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
vielleicht liegt es ja an der Logik in dem LOOP? Du loops mit UND über all die Werte wo sowohl name4 als auch name5 den Einträgen in der r_sb entspricht. Ist das so gewollt, oder ist dort eher ein OR einzusetzen?
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Selektionstabelle (Komponente LOW)

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
Argh sry. Hatte die Selektion grad schnell per Hand hier reingeschrieben. Ne, da steht schon ein OR und kein AND.
Also an der Logik (zumindest an meiner :D) kanns nicht liegen, weil ich die wegen der Fehler schon zig mal selbst durchgespielt habe.

Ich weiß ja nicht ob es am Befüllen der Tabelle sb liegt, da habe ich jeden Namen mit Jokern (*) vorne und hinten versehen,
kann ich mir aber nicht vorstellen weil ich ja zumindest überhaupt eine Ausgabe bekomme. Leider nur vom letzten Eintrag der Tabelle sb.

Ich schreib nochmal den gesamten LOOP hier her inkl. korrigierter Selektionstabelle.

Code: Alles auswählen.

TYPES: BEGIN OF ty_sb,
        name(20) TYPE c,
       END OF ty_sb.

DATA: r_sb TYPE RANGE OF ty_sb,
      l_sb LIKE LINE OF r_sb.

LOOP AT sb.
  CLEAR l_sb.
  l_sb-sign = 'I'.
  l_sb-option = 'CP'.
  CONCATENATE '*' sb-name1 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
  CONCATENATE '*' sb-name2 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
  CONCATENATE '*' sb-name3 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
ENDLOOP.


LOOP AT nb WHERE name4 IN r_sb OR name5 IN r_sb.
  IF ( nb-name4 CP sb-name1 AND nb-name4 IS NOT INITIAL AND sb-name1 IS NOT INITIAL )
    OR ( nb-name5 CP sb-name1 AND nb-name5 IS NOT INITIAL AND sb-name1 IS NOT INITIAL )
    OR ( nb-name4 CP sb-name2 AND nb-name4 IS NOT INITIAL AND sb-name2 IS NOT INITIAL )
    OR ( nb-name5 CP sb-name2 AND nb-name5 IS NOT INITIAL AND sb-name2 IS NOT INITIAL )
    OR ( nb-name4 CP sb-name3 AND nb-name4 IS NOT INITIAL AND sb-name3 IS NOT INITIAL )
    OR ( nb-name5 CP sb-name3 AND nb-name5 IS NOT INITIAL AND sb-name3 IS NOT INITIAL ).
          MOVE-CORRESPONDING nb TO ca_nb.
          APPEND ca_nb.
  ENDIF.
ENDLOOP.

Re: Selektionstabelle (Komponente LOW)

Beitrag von SAP_ENTWICKLER (Specialist / 445 / 219 / 6 ) »
Hallo,

bei der Methode muss man beachten, dass diese Tabelle nicht zu groß werden darf und dort daher nur eine begrenzte Zahl von Kriterien erfasst werden darf, sonst kommt es zu Abbrüchen. Die Größe darf 32 K nicht überschreiten.

Viele Grüße

Norbert

Re: Selektionstabelle (Komponente LOW)

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
Hallo Norbert,

meinst du innerhalb der Selektionstabelle? Die besteht im Testlauf sowieso nur aus 3 Datensätzen, wovon in der Schleife nur der letzte berücksichtigt wird. Auch in der Praxis sind es dann nur ungefähr 400 Datensätze.

Problematisch wird da nur die andere Tabelle. Aber selbst hier im Test sind es auch nur ca. ein Dutzend Datensätze. Und dermaßen viele Kriterien benutze ich ja auch nicht.

Re: Selektionstabelle (Komponente LOW)

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
nein, Norbert meint die r_sb. Das würde aber auffallen, da bei zu vielen Einträgen in der Tabelle das Programm abbricht
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Selektionstabelle (Komponente LOW)

Beitrag von edwin (Specialist / 306 / 10 / 68 ) »
Ähem,
bei diesem Statement fragst Du nur die letzte SB Zeile ab !

Code: Alles auswählen.

 
 IF ( nb-name4 CP sb-name1 AND nb-name4 IS NOT INITIAL AND sb-name1 IS NOT INITIAL )
SB ist bei DIr eine Tabelle UND der Arbeitsbereich, durch den Loop davor und bestücken der Ranges Tabelle, ist danach in dem Arbeitsbereich SB der letzte Eintrag der Tabelle SB enthalten - ist das so gewollt ?
Gewöhn Dir an eine interne Tabelle immer als Table of xxxx und ein extra Arbetisbereich zu definieren, dann kommst Du nicht durcheinander.


/Edwin

Re: Selektionstabelle (Komponente LOW)

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
edwin hat geschrieben:Ähem,
bei diesem Statement fragst Du nur die letzte SB Zeile ab !

Code: Alles auswählen.

 
 IF ( nb-name4 CP sb-name1 AND nb-name4 IS NOT INITIAL AND sb-name1 IS NOT INITIAL )
Also gewollt ist das Ganze sicherlich nicht so. Ich will schon alle Zeilen abfragen und nicht nur die letzte, deshalb ja die Auslagerung und mein Versuch zwei einzelne Loops anstelle von eines verschachtelten Laufen zu lassen.

Aber wieso frage ich nur die letzte Zeile ab. Ich dachte mithilfe der Selektionstabelle kann ich über alle Zeilen abfragen :?

Re: Selektionstabelle (Komponente LOW)

Beitrag von edwin (Specialist / 306 / 10 / 68 ) »
Hi,
Deine Ranges ist ja r_sb - diese hast Du ja auch in der Where Bedingung drin:

Code: Alles auswählen.

LOOP AT nb WHERE name4 IN r_sb OR name5 IN r_sb.
danach sind aber noch mal Abfragen die sich nur auf einen Eintrag (und zwar der letzte) der sb Tabelle beziehen:

Code: Alles auswählen.

 IF ( nb-name4 CP sb-name1 AND nb-name4 IS NOT INITIAL AND sb-name1 IS NOT INITIAL )
    OR ( nb-name5 CP sb-name1 AND nb-name5 IS NOT INITIAL AND sb-name1 IS NOT INITIAL )
    OR ( nb-name4 CP sb-name2 AND nb-name4 IS NOT INITIAL AND sb-name2 IS NOT INITIAL )
    OR ( nb-name5 CP sb-name2 AND nb-name5 IS NOT INITIAL AND sb-name2 IS NOT INITIAL )
    OR ( nb-name4 CP sb-name3 AND nb-name4 IS NOT INITIAL AND sb-name3 IS NOT INITIAL )
    OR ( nb-name5 CP sb-name3 AND nb-name5 IS NOT INITIAL AND sb-name3 IS NOT INITIAL ).

diese brauchst Du doch gar nicht mehr, Du hast doch eh schon in der Where Bedingung alles gefiltert

/Edwin

Re: Selektionstabelle (Komponente LOW)

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
Hm, aber irgendwie stimmen ohne die If-Abfrage meine Ausgabewerte überhaupt nicht mehr.
Ich kriege dann überhaupt nichts mehr angezeigt. Irgendwo ist da der Wurm drin.

Re: Selektionstabelle (Komponente LOW)

Beitrag von Alexander D. (Expert / 682 / 30 / 84 ) »
ServantOfSonata hat geschrieben:Hm, aber irgendwie stimmen ohne die If-Abfrage meine Ausgabewerte überhaupt nicht mehr.
Ich kriege dann überhaupt nichts mehr angezeigt. Irgendwo ist da der Wurm drin.
dann poste hier bitte deinen aktuellen Quellcode sowie ein Auszug aus der interenen Tabelle aus der Daten selektiert werden sollen
schöne Grüße
Alexander

ECC 6.0 EHP 7

Re: Selektionstabelle (Komponente LOW)

Beitrag von ServantOfSonata (ForumUser / 40 / 12 / 0 ) »
Ja kann ich gerne machen. Wobei ich das genaue Gegenteil habe. Also ich bekomme alles angezeigt und nicht nichts.
Also alle Datensätze die ich intern befüllt hab werden ausgegeben.

Dabei dürften laut den Suchbegriffen "Bosch" und "Pit-Stop" nicht angezeigt werden.

Code: Alles auswählen.

*Füllen von "sb"
sb-name1 = 'Audi'.
sb-name2 = ''.
sb-name3 = ''.
APPEND sb.
sb-name1 = 'Aral'.
sb-name2 = ''.
sb-name3 = ''.
APPEND sb.

*Füllen von "nb"
nb-name4 = 'Audi'.
nb-name5 = 'AG'.
APPEND nb.
nb-name4 = 'Tankstelle'.
nb-name5 = 'Claudia Mustermann'.
APPEND nb.
nb-name4 = 'Aral'.
nb-name5 = 'AG'.
APPEND nb.
nb-name4 = 'Bosch'.
nb-name5 = '& Siemens Haushaltsgeräte'.
APPEND nb.
nb-name4 = 'ARAL-Tankstelle'.
nb-name5 = 'AG'.
APPEND nb.
nb-name4 = 'Harald Meier'.
nb-name5 = 'Versicherungen'.
APPEND nb.
nb-name4 = 'Pit-Stop'.
nb-name5 = 'AG'.
APPEND nb.


TYPES: BEGIN OF ty_sb,
        name(20) TYPE c,
       END OF ty_sb.

DATA: r_sb TYPE RANGE OF ty_sb,
      l_sb LIKE LINE OF r_sb.

LOOP AT sb.
  CLEAR l_sb.
  l_sb-sign = 'I'.
  l_sb-option = 'CP'.
  CONCATENATE '*' sb-name1 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
  CONCATENATE '*' sb-name2 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
  CONCATENATE '*' sb-name3 '*' INTO l_sb-low.
  APPEND l_sb TO r_sb.
ENDLOOP.


LOOP AT nb WHERE name4 IN r_sb OR name5 IN r_sb.
          MOVE-CORRESPONDING nb TO ca_nb.
          APPEND ca_nb.
  ENDIF.
ENDLOOP.

Vergleichbare Themen

5
Antw.
5548
Views
Selektionstabelle an Unterprogramm übergeben
von kbit100 » 30.03.2010 09:54 • Verfasst in ABAP® für Anfänger
2
Antw.
4006
Views
AUTHORITY-CHECK über Selektionstabelle
von stoi » 21.03.2006 11:03 • Verfasst in ABAP® Core
3
Antw.
4194
Views
Selektionstabelle als Parameter an Form Routine übergeben
von ronin » 01.08.2008 17:00 • Verfasst in ABAP® für Anfänger
0
Antw.
1404
Views
UI Komponente bestimmen
von Kai999 » 24.04.2017 15:46 • Verfasst in ABAP Objects®
2
Antw.
1459
Views
UI Komponente bestimmen
von Kai999 » 24.04.2017 14:34 • Verfasst in ABAP® für Anfänger

Ü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

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.