*-Eingabe bei eingabemaske ins Selektionsbild

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

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

*-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Hallo Leute,

habe eine Engabemaske für den User welche 5 Stellen lang sein soll. Habe programmiert, dass 5 Stellen eingegeben werden müssen, ansonsten ein Fehler angezeigt wird.

Code: Alles auswählen.

lv_strlen = STRLEN( datelemt ).

    IF lv_strlen = 0 OR lv_strlen = 5 .
    ELSE.
      MESSAGE 'Geben Sie ein 5 stelliges datelemt an.' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.
Nun möchte ich aber dass eine Eingabe mit Sternsuche(*) auch funktioniert.
Wie realisiere ich das?
Danke im Voraus

gruß paddy

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


Re: *-Eingabe bei eingabemaske ins Selektionsbild

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

ich würde es so versuchen:

Code: Alles auswählen.

lv_strlen = STRLEN( datelemt ).

    IF lv_strlen = 0 OR lv_strlen = 5 OR datelemt CS '*' .
    ELSE.
      MESSAGE 'Geben Sie ein 5 stelliges datelemt an.' TYPE 'S' DISPLAY LIKE 'E'.
      EXIT.
    ENDIF.
CS is dabei ein Vergleichsoperator und bedeutet "Contains String", also wenn die vorgegebene Zeichenkette im Suchfeld enthalten ist, ist der Vergleich wahr und es wird, deinen Vorgaben gemäß nicht abgebrochen.

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

Gruß,
der Matze

Re: *-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Danke für die Antwort, funktioniert so aber leider nicht... ich habe zum Beispiel S* eingegeben da ich weiss dass es ein Objekt mit S gibt, es passiert jedoch leide rnichts..woran könnte das liegen?

Re: *-Eingabe bei eingabemaske ins Selektionsbild

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

aber es kommt nicht die eingestellte Fehlermeldung, richtig? Wenn ja, dann funktioniert die angegebene Lösung von mir! ;)

Die Weiterverarbeitung einer Suchanfrage mit * ist ein ganz anderes Thema. :)
Gruß,
der Matze

Re: *-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
ohh sorry :) ja die Fehlermeldung erscheint nicht, wie mach ich das mit der *-Suche?

Re: *-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Super! dann wars ja der richtige Tipp! :D

Am besten zeigst du mal den Abschnitt in deinem Coding, der die Eingaben verarbeitet. Vielleicht kann man da ja was erkennen. Und vielleicht nochmal eine kurze Erklärung, was genau gesucht werden soll. Hab deine Aufgabenstellung grad nicht mehr genau auf meinem geistigen Schirm. :D
Gruß,
der Matze

Re: *-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Okay, also das war die sache mit den technischen Namen, welche aus mehreren Stellen aufgebaut ist

C(art des Objektes) 0(beschreibung) DDDDD (eingabe der 5 buchstaben oder *) nn(zähler)
Nun sucht der User die ersten beiden Stellen aus und soll dann 5 Stellen eingeben...

Code: Alles auswählen.

 CASE merkmal.
      WHEN 'M01'.
        DELETE l_t_rsdiobj WHERE iobjnm(1) <> 'C' .
      WHEN 'M02'.
        DELETE l_t_rsdiobj WHERE iobjnm(1) <> 'U'.
      WHEN 'M03'.
        DELETE l_t_rsdiobj WHERE iobjnm(1) <> 'V' .
    ENDCASE. 
CASE mrkmlart.
      WHEN 'MA01' .
        DELETE l_t_rsdiobj Where iobjnm+1(1) <> '0'.
      WHEN 'MA02' .
        DELETE l_t_rsdiobj Where iobjnm+1(1) <> '5'.
    ENDCASE.

    CASE datelemt.
      WHEN ' '.
      WHEN OTHERS.
        Delete l_t_rsdiobj Where iobjnm+2(5) <> datelemt.
    ENDCASE.

Re: *-Eingabe bei eingabemaske ins Selektionsbild

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

mir scheint die CASE Anweisungen sind bei dir noch nicht völlig klar.

Code: Alles auswählen.

 CASE datelemt.
      WHEN ' '.
      WHEN OTHERS.
        DELETE l_t_rsdiobj WHERE iobjnm+2(5) <> datelemt.
    ENDCASE.
Der CASE fragt ja ab, ob datelemt leer ist (WHEN ' '), dann soll nichts gemacht werden mit der Tabelle.
Der Befehl WHEN OTHERS sagt ja wörtlich aus: bei allen anderen Fällen (also alles außer leer), lösche Die Einträge in der Tabelle die ungleich datelemt sind.
Das heißt nun für deinen Fall, dass du bestimmen musst, was alles vor dem * in datelemt drin steht und dann per Offset nur diese Einträge in deiner Tabelle behältst.

Das heißt du erweiterst deine Befehle unter WHEN OTHERS um folgendes:

Code: Alles auswählen.

SPLIT datelemt AT '*' INTO TABLE lt_text.
DESCRIBE TABLE lt_text LINES lv_lines.
IF lv_lines = 1.
DELETE l_t_rsdiobj WHERE iobjnm+2(5) <> datelemt.
ELSE.
READ TABLE lt_text INTO ls_text INDEX 1.
lv_strlen2 = STRLEN( ls_text-string ). "hier bin ich mir grad ned ganz sicher wie der Zeielntyp der Tabelle aussieht, kannst du dir aber im Debugger anschauen und entsprechend anpassen
*lv_strlen2 bestimmt nun die offset länge
DELETE l_t_rsdiobj WHERE iobjnm+2( lv_strlen2 ) <> datelemt.
ENDIF
lt_text ist eine tabelle vom typ string.

Code ist ungetestet, also können Fehler enthalten sein. ;) Viel Erfolg beim testen.
Gruß,
der Matze

Re: *-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
ich hab ja totalen blödsinn geschrieben.. -.-

ich habs nochmal geändert:

Code: Alles auswählen.

SPLIT datelemt AT '*' INTO lv_text lv_stern.
lv_strlen2 = STRLEN( lv_text ).
IF lv_strlen2 = 5.
DELETE l_t_rsdiobj WHERE iobjnm+2(5) <> datelemt.
ELSE.
*lv_strlen2 bestimmt nun die offset länge
DELETE l_t_rsdiobj WHERE iobjnm+2( lv_strlen2 ) <> datelemt.
ENDIF
so nochmal ne kleinigkeit geändert. lv_text und lv_stern sind vom typ string. lv_stern enthält hinterher nur den stern und kann vernachlässigt werden. Rest sollte jetzt stimmen... sry
Gruß,
der Matze

Re: *-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
was ist lv_strlen2?, beziehungsweise kommt der Fehler, dass ls_text nicht interpretiert werden kann.

Re: *-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
schau mal in deinen ersten Post in diesem Thread, ist vom gleichen Typ wie lv_strlen. ;)
Als Tipp: Coding nicht einfach nur übernehmen, sap hilfe benutzen und nachvollziehen. Dann wärst du bestimmt selbst drauf gekommen :)

EDIT: ich hab das Coding nochmal geändert, da sollte nun kein Fehler kommen.
Gruß,
der Matze

Re: *-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Es kommt der Fehler :

Die Längenangabe "(LV_STRLEN2)" ist weder ein numerisches Literal noch eine numerische Konstante.

Sorry hab lv_strlen auch selbst gefunden, erst gucken dann fragen :D

Re: *-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
hast du in deinem quelltext auch ohne leerzeichen zwischen den klammern und lv_strlen2 geschrieben?
Und probier mal mit den Datentypen rum, evtl. musst du auf n oder numeric wechseln.
Gruß,
der Matze

Re: *-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von patlau (Specialist / 126 / 11 / 0 ) »
Ist ohne Leerzeichen, bei n funktioniert es auch nicht und bei numeric kommt die Fehlermeldung

"NUMERIC" hat einen generischen Typ. Eine Verwendung dieses Typs ist nur für die Typisierung von Feldsymbolen und Formalparametern möglich.

Re: *-Eingabe bei eingabemaske ins Selektionsbild

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Das gesplitte kann man sich doch sparen, wenn man den Vergleichsparameter anpasst:

Code: Alles auswählen.

 CASE datelemt.
      WHEN ' '.
      WHEN OTHERS.
        DELETE l_t_rsdiobj WHERE iobjnm+2(5) NP datelemt.
    ENDCASE.
NP => No Pattern

Das CASE finde ich auch unschön, da wäre ein IF lesbare um die Löschbedingung einfacher zu erfassen.

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
patlau

Gruß Hendrik

Vergleichbare Themen

12
Antw.
11260
Views
Tabelle zur Eingabe auf Selektionsbild
von DerAndi » 15.04.2009 11:05 • Verfasst in ABAP® Core
5
Antw.
1424
Views
Eingabemaske Werte auf Betriebsystemebene abspeichern
von Bit-Devil » 26.11.2018 11:53 • Verfasst in ABAP® für Anfänger
5
Antw.
716
Views
POST Request mit "Eingabemaske" an eine REST API
von sap_koun » 06.06.2022 13:04 • Verfasst in ABAP® für Anfänger
11
Antw.
4462
Views
Selektionsbild
von Kerstin » 26.04.2006 08:19 • Verfasst in ABAP® Core
2
Antw.
1957
Views
Selektionsbild
von KarstenS. » 30.11.2006 15:38 • 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

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor einer Stunde von DeathAndPain gelöst 20 / 2388
Zeilenumbrüche ersetzen
vor 21 Stunden von ralf.wenzel 6 / 180
SAP Trial Version für SAP Fiori
vor 2 Tagen von tar 2 / 1557

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

Dialog-Container mit Toolbar/Status
vor einer Stunde von DeathAndPain gelöst 20 / 2388
Zeilenumbrüche ersetzen
vor 21 Stunden von ralf.wenzel 6 / 180
SAP Trial Version für SAP Fiori
vor 2 Tagen von tar 2 / 1557

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 623
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2250
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8838