DB Abfrage mit Range Table und Wildcard-Einträgen

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

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

DB Abfrage mit Range Table und Wildcard-Einträgen

Beitrag von Radinator (ForumUser / 31 / 8 / 5 ) »
Hallo,
bin zwar kein Anfänger mehr aber ich fühle mich grad wie einer. Mein Ziel ist es eine Abfrage an eine Datenbank zu stellen, bei der ich die Range Tabelle aus den SELECT-OPTIONS mitgebe und diese nicht nur bei tatsächlichen Werten, sondern auch mit Wildcards funktioniert. Jedoch funktioniert das (aus welchem Grund auch immer) bei der Materialnummer nicht. Wenn ich die Nummer 4711 eingebe kommt auch ein Ergebnis daher. Wenn ich 47* eintrage gibt es keine Ausgabe.

Code: Alles auswählen.

tables:
  mara.

data:
  alv_table     type ref to cl_salv_table.

selection-screen begin of block b01 with frame.
  select-options:
    so_matnr for mara-matnr.
selection-screen end of block b01.

select
  matnr,
  matkl
from
  mara
where
  matnr in @so_matnr
into table
  @data(mara_content).

cl_salv_table=>factory(
    exporting
      list_display = if_salv_c_bool_sap=>false
    importing
      r_salv_table = alv_table
    changing
      t_table = mara_content " Ausgabentabellenname
).

alv_table->display( ).
Wenn ich als Suchwert 4711 eintrage und diesen Code durchsteppe wird in der Tabelle so_matnr folgender Inhalt gespeichert:
1 I EQ 000000000000004711
Wenn ich jedoch 47* eingebe, steht in der Tabelle
1 I CP 47*
Der Operator CP ist (soweit ich das verstanden habe) ein Pattern-Matching Operator der vergleicht ob der Suchwert im Zellenwert enthalten ist.
Wenn ich anstelle von 47* den Wert *47* eintrage, steht in so_matnr der Wert
1 I CP *47*
drinnen, dieser gibt mir alle Materialnummern aus, die den Wert 47 enthalten. Also *fast* das, was ich haben will. In diesem Fall will ich die Materialien, die "irgendwo" die 47 drinnen haben *nicht* dabei haben sondern alle die mit 47 anfangen.
Muss ich die so_matnr nochmal anfassen und sie modifizieren oder kann ich das irgendwie anders lösen?

Also bei Eingabe von 4711 nur das Material 4711 ausgeben. Bei 47* alle Materialien, die mit 47 anfangen und bei *47* alle Materialien, die 47 enthalten, ausgeben.

Komischerweise funktioniert die Suche nach Text-basierten Werten (Materialbezeichnung) wunderbar, nur bei der Materialnummer halt nicht :(

Bin mir nicht sicher, ob das relevant ist, aber als Info:
Bei der Tabelle, in der ich suchen will, handelt es sich nicht um die MARA selbst, sondern um eine Z-Tabelle mit Feld MATNR Datenelement MATNR und Textfeldern Datentyp CHAR Länge 40 bzw CHAR Länge 30.

Danke schon mal! Bin für jede Idee offen!

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


Re: DB Abfrage mit Range Table und Wildcard-Einträgen

Beitrag von JHM (Top Expert / 1200 / 1 / 197 ) »
Radinator hat geschrieben:
Heute 12:07
Danke schon mal! Bin für jede Idee offen!
Das liegt "nur" an der Konvertierung ins interne Format (=Auffüllen mit Nullen).

Wenn du 4711 eingibst, dann "denkt" die Konvertierung das du die interne Materialnr. 4711 mit führenden Nullen suchst.

Wenn du 47* eingibst, dann "denkt" die Konvertierung das du alle Materialnummern suchst die mit 47* beginnen, aber ohne führende Nullen. Denn sonnst müsste man ja mehrfach mit Nullen auffüllen:
47*
047*
0047*
00047*
000047*
...
und das funktioniert mit der Konvertierung nicht.

Wenn du also alle Materialnummern haben willst die mit 47* anfangen, musst du selber mit Nullen auffüllen.

Das ist bei allen Feldern mit führenden Nullen und Muster"suche" so.
Gruß Hendrik

Re: DB Abfrage mit Range Table und Wildcard-Einträgen

Beitrag von Murdock (Specialist / 128 / 60 / 11 ) »
Schau Dir mal den FuBa CONVERSION_EXIT_MATN1_RANGE_I an, der dürfte helfen.

Folgende Benutzer bedankten sich beim Autor Murdock für den Beitrag:
Radinator


Re: DB Abfrage mit Range Table und Wildcard-Einträgen

Beitrag von rob_abc (Specialist / 115 / 29 / 48 ) »
Das ist SAP-Standard. So verhalten sich auch Transaktionen von SAP. Ich würde in Z-Programmen gleiches Verhalten erwarten. Die meisten MA lösen das Problem, indem sie in diesen Fällen eine Range angeben und nicht mit * arbeiten.

Folgende Benutzer bedankten sich beim Autor rob_abc für den Beitrag:
Radinator


Re: DB Abfrage mit Range Table und Wildcard-Einträgen

Beitrag von rob_abc (Specialist / 115 / 29 / 48 ) »
Radinator hat geschrieben:
Heute 12:07
bin zwar kein Anfänger mehr aber ich fühle mich grad wie einer.
So geht es mir auch immer wieder =)

Folgende Benutzer bedankten sich beim Autor rob_abc für den Beitrag:
Radinator


Seite 1 von 1

Vergleichbare Themen

6
Antw.
4796
Views
IF mit Wildcard
von Niels » 21.07.2015 13:29 • Verfasst in ABAP® für Anfänger
1
Antw.
2528
Views
Wildcard in Verbindung mit Variable
von gs3rr4 » 21.10.2014 11:41 • Verfasst in ABAP® für Anfänger
8
Antw.
7195
Views
mehrere Dateien per Wildcard auf Server suchen
von airwaver » 16.01.2007 14:40 • Verfasst in ABAP® Core
3
Antw.
1688
Views
Range-Tabelle gegen Range-Tabelle abgleichen
von Romaniac » 09.02.2024 16:26 • Verfasst in ABAP® Core
1
Antw.
5386
Views
sorted table, hashed table: Übergabe Workarea -> Performa
von Jürgen Fischer » 30.01.2006 08:09 • Verfasst in ABAP® Core

Ü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

Aktuelle Forenbeiträge

Post-Methode für API´s
Gestern von Bright4.5 1 / 114

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.