Funktionsbaustein

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

Funktionsbaustein

Beitrag von Asar (ForumUser / 5 / 4 / 0 ) »
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.

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


Re: Funktionsbaustein

Beitrag von PeterPaletti (Specialist / 336 / 29 / 96 ) »
Ich verstehe die ganzen Verreknungen, die machst, nicht richtig.
Warum fragst du nicht einfach ob FELD IN SELOPT?

Gruß
Peter

Re: Funktionsbaustein

Beitrag von Asar (ForumUser / 5 / 4 / 0 ) »
PeterPaletti hat geschrieben:Ich verstehe die ganzen Verreknungen, die machst, nicht richtig.
Warum fragst du nicht einfach ob FELD IN SELOPT?

Gruß
Peter
Hi Peter,

vielen dank für die Antwort,
wo soll ich genau FELD IN... fragen

VG Asar

Re: Funktionsbaustein

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Hi,

uff, das ist ja mal ein Coding :shock:
wenn ich dich richtig verstehe willst du einfach nur eine Selektion haben die sowohl für einen Eintrag als auch für n Einträge und auch für von-bis Einträge Ergebnisse liefert?

Dann nutze bei deinem Übergabeparameter direkt eine Range Tabelle TYPE RANGE OF. Bei dem was du da programmierst bricht sich ja jeder Programmierer die Finger wenn er das korrigieren soll.
Wenn du für den Lieferanten eine RANGE erstellst, also s_lifnr TYPE RANGE OF lifnr, dann gibt es sign, option und low direkt in dieser Struktur der Rangetabelle.
Dann brauchst du nur noch ein

Code: Alles auswählen.

SELECT *
  FROM lfa1
  INTO CORRESPONDING FIELDS OF TABLE lt_lfa1
 WHERE lifnr IN s_lifnr.
Damit ist alles abgedeckt.

Folgende Benutzer bedankten sich beim Autor Thanatos82 für den Beitrag:
Asar

Gruß,
der Matze

Re: Funktionsbaustein

Beitrag von PeterPaletti (Specialist / 336 / 29 / 96 ) »
Asar hat geschrieben:
PeterPaletti hat geschrieben:Ich verstehe die ganzen Verreknungen, die machst, nicht richtig.
Warum fragst du nicht einfach ob FELD IN SELOPT?

Gruß
Peter
Hi Peter,

vielen dank für die Antwort,
wo soll ich genau FELD IN... fragen

VG Asar
lv_eznr1 bis lv_eznr5

Seite 1 von 1

Vergleichbare Themen

0
Antw.
267
Views
Funktionsbaustein CP-ID
von ArjenR » 26.01.2021 11:02 • Verfasst in ABAP® für Anfänger
1
Antw.
7867
Views
QM - Funktionsbaustein
von Gast » 19.05.2005 16:08 • Verfasst in Application Related
4
Antw.
1799
Views
Funktionsbaustein
von Hagbard » 06.07.2005 16:10 • Verfasst in ABAP® für Anfänger
4
Antw.
1011
Views
UTF-8 mit Funktionsbaustein
von L0w-RiDer » 19.02.2019 08:44 • Verfasst in ABAP® für Anfänger
5
Antw.
1926
Views
Funktionsbaustein
von anki_86 » 13.06.2007 14:15 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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.

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140