Lines-Funktion mit "Where Bedingung"

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

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

Lines-Funktion mit "Where Bedingung"

Beitrag von SaskuAc (Specialist / 321 / 37 / 44 ) »
Hallo,

um ein recht kompliziertes Programmierkonstrukt zu vereinfachen suche ich nach ein paar einfachen Lösungen.

Zum Beispiel suche ich nach einer art funktion, mit der ich die Zeilen einer internen Tabelle "zählen kann" die einen bestimmten Inhalt haben. Also Zum Beispiel folgendes Coding:

Code: Alles auswählen.

  SELECT * FROM sflight INTO TABLE @DATA(lt_sflight).


  SORT lt_sflight BY carrid.
  
  data(lv_int) = lines( lt_sflight[ carrid = 'AA' ] ). " #91 sowie #93 sind eckige klammern
  write lv_lint.
das funktioniert so leider nicht, da lines die "where-Bedingung" nicht zulässt. man kann hier leider nur direkt die tabelle angeben.

wenn ihr etwas wisst oder euch etwas einfällt, wäre ich euch um Hinweise dankbar :)

vielen dank & einen schönen Tag!

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


Re: Lines-Funktion mit "Where Bedingung"

Beitrag von c oco (Specialist / 326 / 12 / 16 ) »
hallo,

die Zeilen bestimmter Daten ohne zwischenschritt rauszubekommen ist mir nicht bekannt.

ich kenne folgende:

Möglichkeit 1:
Loop mit Zähler einbauen. wenn AA dann zähler_aa erhöhen, wenn BB dann ...

Möglichkeit 2:
datensätze mit AA einer zweiten internen Tabelle zuweisen und diese dann mit lines auslesen

Möglichkeit 3:
datensätze die <> AA sind löschen und dann mit lines auslesen

Gruß
coco

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von SaskuAc (Specialist / 321 / 37 / 44 ) »
Hmm, schade.
aber wahrscheinlich ist Variante 2 die für mich praktikabelste..

Danke dir!

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von tm987456 (ForumUser / 72 / 42 / 15 ) »

Code: Alles auswählen.

  DATA lt_sflight type SORTED TABLE OF sflight with UNIQUE KEY CARRID CONNID FLDATE.

  SELECT * FROM sflight INTO TABLE @lt_sflight.
 
  data(lv_lint) = LINES( filter #( lt_sflight WHERE carrid = 'AA ' ) ).
  write lv_lint.
Das liefert dir das gewünschte Ergebnis mit Lines, aber ob das so sinnvoll ist weiss ich nicht.

Gruss
tm

Folgende Benutzer bedankten sich beim Autor tm987456 für den Beitrag:
DeathAndPain


Re: Lines-Funktion mit "Where Bedingung"

Beitrag von SaskuAc (Specialist / 321 / 37 / 44 ) »
tm987456 hat geschrieben:

Code: Alles auswählen.

  DATA lt_sflight type SORTED TABLE OF sflight with UNIQUE KEY CARRID CONNID FLDATE.

  SELECT * FROM sflight INTO TABLE @lt_sflight.
 
  data(lv_lint) = LINES( filter #( lt_sflight WHERE carrid = 'AA ' ) ).
  write lv_lint.
Das liefert dir das gewünschte Ergebnis mit Lines, aber ob das so sinnvoll ist weiss ich nicht.
Filter habe ich noch nie verwendet. jetzt wirft mir das programm leider den Fehler, dass der operator "Filter" nicht erwartet wurde - hier mal mein richtiger Quelltextausschnitt:

Code: Alles auswählen.

    DATA: lt_temp TYPE standard TABLE OF swragent WITH NON-UNIQUE SORTED KEY objid_type
                                                  COMPONENTS objid otype .

" viiiiieeeel code ... 
 DATA(lt_user) = lines( FILTER #( lt_temp USING KEY objid_type WHERE objid = ls_user-objid ) ).
Danke aber schon mal :) - sowas suche ich - das sollte, wenn man weiß wie es funktioniert, das sein, was ich suche.

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von ralf.wenzel (Top Expert / 4011 / 209 / 283 ) »
SaskuAc hat geschrieben:Zum Beispiel suche ich nach einer art funktion, mit der ich die Zeilen einer internen Tabelle "zählen kann" die einen bestimmten Inhalt haben.
Guck dir mal die Hilfe zu REDUCE an.


Ralf

Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
SaskuAc

Bild
Ralf Wenzel Heuristika SAP-Development -- 25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von JohnLocklay (Specialist / 183 / 30 / 2 ) »
steh ich auf dem Schlauch?

wieso benutzt man die where bedingung nicht schon im select?
damit bekommst Du doch nur die Eintträge die Du brauchst für Deine Verarbeitung.
Code once - Think twice

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von ralf.wenzel (Top Expert / 4011 / 209 / 283 ) »
JohnLocklay hat geschrieben:steh ich auf dem Schlauch?

wieso benutzt man die where bedingung nicht schon im select?
damit bekommst Du doch nur die Eintträge die Du brauchst für Deine Verarbeitung.
Wieso? Er braucht alle, die in der WHERE-Bedinung stehen und will nur die zählen, die zusätzlich einer bestimmten Bedingung genügen.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development -- 25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von SaskuAc (Specialist / 321 / 37 / 44 ) »
ralf.wenzel hat geschrieben:
JohnLocklay hat geschrieben:steh ich auf dem Schlauch?

wieso benutzt man die where bedingung nicht schon im select?
damit bekommst Du doch nur die Eintträge die Du brauchst für Deine Verarbeitung.
Wieso? Er braucht alle, die in der WHERE-Bedinung stehen und will nur die zählen, die zusätzlich einer bestimmten Bedingung genügen.
Genau. Abgesehen davon war der Select hier nur ein Beispiel um zu verdeutlichen was ich brauche. Im Programm selber habe ich kein Select-Statement, dass ich irgendwie anpassen könnte. Ich habe nur einen FuBa der mir die Daten zurückliefert, diese Daten muss ich unter bestimmten bedingungen zählen.

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von DeathAndPain (Top Expert / 2028 / 273 / 426 ) »
jetzt wirft mir das programm leider den Fehler, dass der operator "Filter" nicht erwartet wurde
Bei mir compiliert er das problemlos. Kann es sein, dass Du auf einem Release < 7.40 sitzt? In dem Fall: Basis beharken oder weiter mit umständlichem Code arbeiten .;-)
ralf hat geschrieben:Guck dir mal die Hilfe zu REDUCE an.
Um Himmels willen! Bei der Online-Doku wird mir ja schon vom Lesen schlecht. Da entsteht dann so ein obskures FOR-Statement, am besten iteriert mit einem kranken regulären Ausdruck, und nachher versteht keiner, was der Einzeiler da macht.

Da ist mir der FILTER-Ansatz bedeutend sympathischer.
Wenn wir einer Partei die Regierungsbeteiligung verweigern, die von einer Mehrheit gewählt worden ist, weil wir diese Partei für schlecht halten, da wir einer anderen Partei angehören, wie ist dann unsere eigene demokratische Gesinnung zu bewerten?

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von ralf.wenzel (Top Expert / 4011 / 209 / 283 ) »
Ich habe übrigens nie verstanden, warum lines( itab[ feld1 = 'A' Feld 2 = 'B' ] ) nicht geht., intuitiv ist das unter 7.40 und höher eigentlich logisch.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development -- 25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von ewx (Top Expert / 4918 / 332 / 655 ) »
ralf.wenzel hat geschrieben:Ich habe übrigens nie verstanden, warum lines( itab[ feld1 = 'A' Feld 2 = 'B' ] ) nicht geht., intuitiv ist das unter 7.40 und höher eigentlich logisch.
Weil die Notation einem READ TABLE entspricht und keiner WHERE Bedingung.

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von ralf.wenzel (Top Expert / 4011 / 209 / 283 ) »
Das ist eine schlüssige Begründung.....

Ralf
Bild
Ralf Wenzel Heuristika SAP-Development -- 25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von SaskuAc (Specialist / 321 / 37 / 44 ) »
DeathAndPain hat geschrieben:
jetzt wirft mir das programm leider den Fehler, dass der operator "Filter" nicht erwartet wurde
Bei mir compiliert er das problemlos. Kann es sein, dass Du auf einem Release < 7.40 sitzt? In dem Fall: Basis beharken oder weiter mit umständlichem Code arbeiten .;-)
erstaunlicherweise nein. Ich sitze direkt auf 7.40 - haben jetzt sogar mal die überlegungen gestartet, ob wir nicht auf EHP8 ( bin ehrlich, ich weiß nicht was alles enthalten ist, was uns auf unserem System ( HCM ) weiterbringt ) und damit auf 7.50 upgraden.

Kann es sein, dass es eventuell irgendwie an eclipse liegt? habe es in der SE80 noch nicht probiert..
Oder besser noch, kann mir jemand vielleicht eine funktionierende Version von Filter zeigen? ( schön wäre es anhand einer einfachen selektion aus der sflight )

habe mal kurz ein kleines programm geschrieben ..

Code: Alles auswählen.

  data: lt_sflight type STANDARD TABLE OF sflight WITH NON-UNIQUE SORTED KEY flight COMPONENTS carrid. 

  SELECT * FROM sflight INTO TABLE @lt_sflight.

  DATA(lt_lines) = lines( FILTER #( lt_sflight USING KEY flight WHERE carrid = ' AA' ) ).

  BREAK-POINT.
hier bringt er mir den Fehler "Unerwarteter Operator "Filter"."

wenn ich das lines und die dazugehörigen klammern weg mache funktioiert "Filter"

Re: Lines-Funktion mit "Where Bedingung"

Beitrag von black_adept (Top Expert / 4159 / 136 / 960 ) »
SaskuAc hat geschrieben:...
hier bringt er mir den Fehler "Unerwarteter Operator "Filter"."
Ist ein Kernelfehler, den ich auch auf meinem System habe, den SAP aber auch nicht fixen wird. --> Siehe Horst Kellers Antwort auf die analoge Fehlerbeschreibung von Christian Guenter vom 23.9.2015 in diesem Blog
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Vergleichbare Themen

5
Antw.
9101
Views
Funktionsbausteine - FUNKTION/FUNKTION TOOL
von kafka » 06.02.2018 08:04 • Verfasst in ABAP® für Anfänger
2
Antw.
5465
Views
DESCRIBE TABLE tab LINES n mit RTTI-Konzept
von chrislo » 06.04.2011 13:11 • Verfasst in ABAP Objects®
3
Antw.
1567
Views
Variable footer lines für line count
von dblack » 17.06.2019 11:24 • Verfasst in ABAP® für Anfänger
2
Antw.
26557
Views
Anzahl Zeilen einer internen Tabelle mit Lines
von Tanriverdi » 05.09.2008 11:35 • Verfasst in ABAP® für Anfänger
2
Antw.
5117
Views
Ersatzanweisung für "DESCRIBE TABLE tab LINES lin"
von Hunter » 21.06.2007 09:59 • 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.