Hallo zusammen,
ich bin neu auf diese Seite und arbeite seit 4 Monate als ABAP Entwickler und habe eine Frage an Euch. Ich komme wirklich nicht weiter und bin seit 3 Tage versuche mein Problem zu lösen
Ich habe im ABAP ein Feld (Erziehungsnummer, die ein wert von 1-99 haben kann)
Es gibt nur ein Feld. und ich will m Mehrfachselektionsfunktion meine Anwender die Möglichkeit anbieten die Werte z.B 20 bis 40 eingeben können und alle Lieferanten auflisten bekommen, die diese werte haben. ich weiss es nicht wo mein Fehler ist
wo mach ich ein Fehler.
vg Asar
Mein Funktionsbaustein
IF selez IS NOT INITIAL.
DATA: eznr_ok TYPE c LENGTH 1.
CALL FUNCTION 'Z_VZ_CHK_EZNR'
EXPORTING
i_lfa1 = lfa1
IMPORTING
e_eznr_ok = eznr_ok
TABLES
so_eznr = selez.
CHECK eznr_ok = 'X'.
ENDIF.
Quelltext für die Funktionsbaustein
* Variablendeklaration
DATA: lv_eznr1 TYPE zzeznr.
DATA: lv_eznr2 TYPE zzeznr.
DATA: lv_eznr3 TYPE zzeznr.
DATA: lv_eznr4 TYPE zzeznr.
DATA: lv_eznr5 TYPE zzeznr.
DATA: lv_treffer TYPE c LENGTH 1. "Treffer ='X' / kein Treffer = ' '
* Selektionsoptionen (Spalten der Eelektionsoptionen-Tabelle)
DATA: sign TYPE c LENGTH 1.
DATA: option TYPE c LENGTH 2.
DATA: low TYPE c LENGTH 30.
DATA: high TYPE c LENGTH 30.
DATA: lowlen TYPE c LENGTH 2.
DATA: highbeg TYPE c LENGTH 2.
* Lieferantendaten
IF i_lfa1 IS NOT INITIAL.
lv_eznr1 = i_lfa1-zzbran1.
lv_eznr2 = i_lfa1-zzbran2.
lv_eznr3 = i_lfa1-zzbran3.
lv_eznr4 = i_lfa1-zzbran4.
lv_eznr5 = i_lfa1-zzbran5.
ELSE.
* oder: Kundendaten
IF i_kna1 IS NOT INITIAL.
lv_eznr1 = i_kna1-bran1.
lv_eznr2 = i_kna1-bran2.
lv_eznr3 = i_kna1-bran3.
lv_eznr4 = i_kna1-bran4.
lv_eznr5 = i_kna1-bran5.
ELSE.
BREAK-POINT. "Ist NICHT vorgesehen !!
ENDIF.
ENDIF.
* Schleife über die Selektionsoptions-Tabelle
LOOP AT so_eznr.
sign = so_eznr+0(1).
option = so_eznr+1(2).
low = so_eznr+3.
high = ''.
lowlen = ( ( STRLEN( so_eznr ) - 3 ) / 2 ).
highbeg = ( 3 + lowlen ).
* Schritt 1: low/high abhängig von der Option setzen
CASE option.
WHEN 'EQ'. "gleich
WHEN 'NE'. "ungleich
WHEN 'LE'. "kleiner oder gleich
WHEN 'LT'. "kleiner
WHEN 'GE'. "größer oder gleich
WHEN 'GT'. "größer
WHEN 'BT'. "zwischen
low = so_eznr+3(lowlen).
high = so_eznr+highbeg.
SHIFT high LEFT DELETING LEADING ' '. "Führende Leerzeichen entfernen
WHEN 'NB'.
low = so_eznr+3(lowlen).
high = so_eznr+highbeg.
SHIFT high LEFT DELETING LEADING ' '. "Führende Leerzeichen entfernen
WHEN 'CP'.
"wird nicht unterstützt !!
WHEN 'NP'.
"wird nicht unterstützt !!
WHEN OTHERS.
ENDCASE.
* Schritt 2: low/high abhängig von Sign und Option prüfen
CASE sign.
* sign='I' (Include)
WHEN 'I'.
CASE option.
WHEN 'EQ'. "=
IF lv_eznr1 = low OR
lv_eznr2 = low OR
lv_eznr3 = low OR
lv_eznr4 = low OR
lv_eznr5 = low.
lv_treffer = 'X'. "Treffer
ELSE.
lv_treffer = ' '. "KEIN Treffer
ENDIF.
WHEN 'NE'. "<>
IF lv_eznr1 <> low AND
lv_eznr2 <> low AND
lv_eznr3 <> low AND
lv_eznr4 <> low AND
lv_eznr5 <> low.
lv_treffer = 'X'. "Treffer
ELSE.
lv_treffer = ' '. "KEIN Treffer
ENDIF.
WHEN 'LE'. "<=
IF lv_eznr1 IS NOT INITIAL AND lv_eznr1 <= low OR
lv_eznr2 IS NOT INITIAL AND lv_eznr2 <= low OR
lv_eznr3 IS NOT INITIAL AND lv_eznr3 <= low OR
lv_eznr4 IS NOT INITIAL AND lv_eznr4 <= low OR
lv_eznr5 IS NOT INITIAL AND lv_eznr5 <= low.
lv_treffer = 'X'. "Treffer
ELSE.
lv_treffer = ' '. "KEIN Treffer
ENDIF.
WHEN 'LT'. "<
IF lv_eznr1 IS NOT INITIAL AND lv_eznr1 < low OR
lv_eznr2 IS NOT INITIAL AND lv_eznr2 < low OR
lv_eznr3 IS NOT INITIAL AND lv_eznr3 < low OR
lv_eznr4 IS NOT INITIAL AND lv_eznr4 < low OR
lv_eznr5 IS NOT INITIAL AND lv_eznr5 < low.
lv_treffer = 'X'. "Treffer
ELSE.
lv_treffer = ' '. "KEIN Treffer
ENDIF.
WHEN 'GE'. ">=
IF lv_eznr1 IS NOT INITIAL AND lv_eznr1 >= low OR
lv_eznr2 IS NOT INITIAL AND lv_eznr2 >= low OR
lv_eznr3 IS NOT INITIAL AND lv_eznr3 >= low OR
lv_eznr4 IS NOT INITIAL AND lv_eznr4 >= low OR
lv_eznr5 IS NOT INITIAL AND lv_eznr5 >= low.
lv_treffer = 'X'. "Treffer
ELSE.
lv_treffer = ' '. "KEIN Treffer
ENDIF.
WHEN 'GT'. ">
IF lv_eznr1 IS NOT INITIAL AND lv_eznr1 > low OR
lv_eznr2 IS NOT INITIAL AND lv_eznr2 > low OR
lv_eznr3 IS NOT INITIAL AND lv_eznr3 > low OR
lv_eznr4 IS NOT INITIAL AND lv_eznr4 > low OR
lv_eznr5 IS NOT INITIAL AND lv_eznr5 > low.
lv_treffer = 'X'. "Treffer
ELSE.
lv_treffer = ' '. "KEIN Treffer
ENDIF.
WHEN 'BT'. "Between
"@todo: enthält noch Fehler !!
IF lv_eznr1 IS NOT INITIAL AND lv_eznr1 >= low AND lv_eznr1 <= high OR
lv_eznr2 IS NOT INITIAL AND lv_eznr2 >= low AND lv_eznr2 <= high OR
lv_eznr3 IS NOT INITIAL AND lv_eznr3 >= low AND lv_eznr3 <= high OR
lv_eznr4 IS NOT INITIAL AND lv_eznr4 >= low AND lv_eznr4 <= high OR
lv_eznr5 IS NOT INITIAL AND lv_eznr5 >= low AND lv_eznr5 <= high .
lv_treffer = 'X'. "Treffer
ELSE.
lv_treffer = ' '. "KEIN Treffer
ENDIF.
WHEN 'NB'. "Not Between
"@todo: enthält noch Fehler !!
IF lv_eznr1 IS INITIAL AND
lv_eznr2 IS INITIAL AND
lv_eznr3 IS INITIAL AND
lv_eznr4 IS INITIAL AND
lv_eznr5 IS INITIAL.
lv_treffer = 'X'. "Treffer
ELSE.
IF lv_eznr1 IS NOT INITIAL AND lv_eznr1 < low AND lv_eznr1 > high AND
lv_eznr2 IS NOT INITIAL AND lv_eznr2 < low AND lv_eznr2 > high AND
lv_eznr3 IS NOT INITIAL AND lv_eznr3 < low AND lv_eznr3 > high AND
lv_eznr4 IS NOT INITIAL AND lv_eznr4 < low AND lv_eznr4 > high AND
lv_eznr5 IS NOT INITIAL AND lv_eznr5 < low AND lv_eznr5 > high .
lv_treffer = 'X'. "Treffer
ELSE.
lv_treffer = ' '. "KEIN Treffer
ENDIF.
ENDIF.
WHEN 'CP'.
"wird nicht unterstützt !!
WHEN 'NP'.
"wird nicht unterstützt !!
WHEN OTHERS.
ENDCASE.
* sign='E' (Exclude)
WHEN 'E'.
CASE option.
WHEN 'EQ'. "=
IF lv_eznr1 = low OR
lv_eznr2 = low OR
lv_eznr3 = low OR
lv_eznr4 = low OR
lv_eznr5 = low.
lv_treffer = ' '. "KEIN Treffer
ELSE.
lv_treffer = 'X'. "Treffer
ENDIF.
WHEN 'NE'. "<>
IF lv_eznr1 <> low AND
lv_eznr2 <> low AND
lv_eznr3 <> low AND
lv_eznr4 <> low AND
lv_eznr5 <> low.
lv_treffer = ' '. "KEIN Treffer
ELSE.
lv_treffer = 'X'. "Treffer
ENDIF.
WHEN 'LE'.
"@todo
WHEN 'LT'.
"@todo
WHEN 'GE'.
"@todo
WHEN 'GT'.
"@todo
WHEN 'BT'.
"@todo
WHEN 'NB'.
"@todo
WHEN 'CP'.
"wird nicht unterstützt !!
WHEN 'NP'.
"wird nicht unterstützt !!
WHEN OTHERS.
ENDCASE.
WHEN OTHERS.
BREAK-POINT. "Ist NICHT vorgesehen !!
ENDCASE.
* Sobald KEIN Treffer auftritt: LOOP verlassen,
* da weitere Überprüfungen überflüssig sind !!
IF lv_treffer = ' '.
EXIT. "LOOP verlassen
ENDIF.
ENDLOOP.
* Treffer ='X' / kein Treffer = ' '
e_eznr_ok = lv_treffer.
ENDFUNCTION.