ich habe eine kleines Problem be der Datenselektion:
es sollen Materialien in eine interne Tabelle eingelesen werden, die unter anderem über die Materialbezeichnung eingeschränkt werden sollen.
Wenn in der Select-Option für Bezeichnung z.B. 'test*' eingetragen wird, sollen Materialien mit Bezeichung 'Test' nicht selektiert werden.
Das funktioniert mit dem folgende Coding nicht:
TYPES: BEGIN OF sty_mara,
matnr TYPE matnr,
mstae TYPE mstae,
maktx TYPE maktx,
typ TYPE ztyp,
mtstb TYPE mtstb,
resp TYPE zresp,
comnt1 TYPE zzcmnt1,
comnt2 TYPE zzcmnt2,
projectcode TYPE zproject,
END OF sty_mara.
* Interne Tabellen
gt_alv TYPE STANDARD TABLE OF zmm_s_vpm_new,
gt_mara TYPE STANDARD TABLE OF sty_mara.
***********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-sel.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: so_matnr FOR mara-matnr.
SELECT-OPTIONS: so_typ FOR mara-typ.
SELECT-OPTIONS: so_maktx FOR makt-maktx lower case.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK b1.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_mara
FROM mara
WHERE matnr IN so_matnr
AND typ IN so_typ.
SORT gt_mara.
LOOP AT gt_mara INTO ls_mara.
CLEAR: lwa_alv.
MOVE-CORRESPONDING ls_mara TO lwa_alv.
*--- Materialbezeichnung ermitteln
SELECT SINGLE maktx
FROM makt
INTO lwa_alv-maktx
WHERE matnr = ls_mara-matnr
AND spras = sy-langu.
IF NOT lwa_alv-maktx IN so_maktx.
DELETE gt_mara INDEX sy-tabix.
CONTINUE.
ENDIF.
Ich hätte erwartet, dass hier nur Materialien, die in der Bezeichnung 'test' enthalten selektiert werden, ich bekomme aber auch welche mit 'Test' und 'TEST'.
Leider ist die Abfrage (wie auch autohandel7 angedeutet hat) in SAP immer case-sensitiv.
Einzige Möglichkeit das zu umgehen wäre mit einer Native-SQL-Anweisung zu arbeiten:
SELECT * FROM mara INTO ... WHERE LOWER( maktx ) LIKE 'test%'
Davon würde ich aber eher abraten.
Da du ja eine Select-Option verwendest, kannst du sowieso alle (vorkommenden) Varianten da drinnen auch aufzählen.
lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.
Es gibt aber in der Tabelle MAKT auch das Feld MAKTG, dort ist der Kurztext in Großbuchstaben abgelegt.
Einfach mal die Selektion gegen dieses Feld laufen lassen.
Du kansnt z.B. deine Select-Option in upper case konvertieren oder in eine interne range kopieren die mit upper case arbeitet.
Die Arbeit mit case sensitve ist fehleranfällig, weil sich der Anwender ja auch mal vertippen kann "TesT" "test" "TEst" usw. usf.
Viele Grüße
Frank
P.S. Habt ihr mehrere Sprachen im System? Auch evtl. beachten, ob das Programm in jedem Fall sinnvoll arbeitet...