Mehrere Werte auf INITIAl überprüfen

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

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

Mehrere Werte auf INITIAl überprüfen

Beitrag von gs3rr4 (ForumUser / 63 / 24 / 0 ) »
Hallo!

Ich bin relativ neu in der ABAP Welt und finde es super, dass ich dieses Forum gefunden habe. Einige Fragen haben sich schon über die Suchhilfe lösen lassen, jedoch habe ich nun eine, zu der ich noch keine Antwort gefunden habe.

In meiner Methode möchte ich mehrere Felder einer Struktur daraufhin überprüfen, ob sie initial sind.
Wenn eines dieser Felder initial ist, dann soll der returning-Parameter (rv_fehler) auf abap_true gesetzt werden.

Bisher sieht mein Code so aus:

Code: Alles auswählen.

CLEAR rv_fehler.

If is_struktur-wert_eins is initial.
 rv_fehler = abap_true.
elseif is_struktur-wert_zwei is initial.
 rv_fehler = abap_true.
elseif ...
.
.
.
else.
 rv_fehler = abap_false.
endif.
Meine Frage ist nun, ob es eine einfachere Methode gibt, um diese Felder zu überprüfen.

Viele Grüße

gs3rr4

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


Re: Mehrere Werte auf INITIAl überprüfen

Beitrag von a-dead-trousers (Top Expert / 4477 / 229 / 1203 ) »
Ja, indem du die Felder in einer SubStruktur zusammenfasst und diese per INCLUDE (.INCLUDE im DDIC) in die Hauptstruktur einbindest.
Mehr dazu in der ABAP-Hilfe zu TYPES (BEGIN OF) bzw. INCLUDE TYPE.

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.

ECC: 6.18
Basis: 7.50

Re: Mehrere Werte auf INITIAl überprüfen

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

die einfachste Variante ist sicher das mit OR zu verknüpfen:

Code: Alles auswählen.

IF is_struktur-wert_eins IS INITIAL OR is_struktur-wert_zwei IS INITIAL.
 rv_fehler = abap_true.
ENDIF
meine zweite Idee hat ADT ja gerade schon gepostet! ^^

Vielleicht sollte man aber vorher klären: handelt es sich hierbei um alle Felder einer Struktur oder nur um ausgewählte?
Gruß,
der Matze

Re: Mehrere Werte auf INITIAl überprüfen

Beitrag von a-dead-trousers (Top Expert / 4477 / 229 / 1203 ) »
Bei Abfrage auf EINEN definierten Wert kann man noch die CASE-Anweisung "misbrauchen".

Code: Alles auswählen.

case space.
  when strukt-wert1.
...
  when strukt-wert2.
...
  when strukt-wert3 or strukt-wert4.
...
  when others.
...
endcase.
Das würde eine IF-ELSEIF-Kette entsprechen.
Sobald einer der Werte zutrifft, werden die anderen Werte nicht mehr geprüft.
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.

ECC: 6.18
Basis: 7.50

Re: Mehrere Werte auf INITIAl überprüfen

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
@ADT

daran hatte ich auch noch gedacht, aber ich denke, das dürfte ihn doch eher verwirren als Anfänger!
Gruß,
der Matze

Re: Mehrere Werte auf INITIAl überprüfen

Beitrag von gs3rr4 (ForumUser / 63 / 24 / 0 ) »
Wow, danke für die schnellen Antworten!

Also es sollen nur ausgewählte Felder überprüft werden, nicht alle.
Am DDIC soll sich auch nicht ändern.

Das Case-Beispiel scheint mir vernünftig, jedoch habe ich auf mehr Einsparung von Code gehofft.
Ich denke ich werde es so implementieren, vielen Dank euch allen! =)

Re: Mehrere Werte auf INITIAl überprüfen

Beitrag von a-dead-trousers (Top Expert / 4477 / 229 / 1203 ) »
gs3rr4 hat geschrieben:Das Case-Beispiel scheint mir vernünftig, jedoch habe ich auf mehr Einsparung von Code gehofft.
Du hast aber schon das kleine aber feine OR in meinem Coding bemerkt oder?
Damit kannst du alle Werte die du haben möchstest zusammenfassen und gegen einen einzigen Wert prüfen.

Code: Alles auswählen.

rv_fehler = abap_false.
CASE space.
  WHEN is_struktur-wert_eins OR is_struktur-wert_zwei OR is_struktur-wert_drei.
    rv_fehler = abap_true.
ENDCASE.
Bei IS INITIAL ist da zugegebenermaßen nicht viel drinnen, aber überleg mal wenn du in deinem Programm dann das IS INITIAL gegen einen anderen Wert austauschen müsstest.

Noch mehr (bzw. weniger) geht nur mit dem von mir erwähnten INCLUDE TYPE.
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.

ECC: 6.18
Basis: 7.50

Re: Mehrere Werte auf INITIAl überprüfen

Beitrag von ewx (Top Expert / 4904 / 328 / 646 ) »
Oder man verwendet eine kleine Helferklasse:

Code: Alles auswählen.

REPORT  z_empty.

*----------------------------------------------------------------------*
*       CLASS lcx_initial DEFINITION
*----------------------------------------------------------------------*
CLASS lcx_initial DEFINITION INHERITING FROM cx_static_check.
  PUBLIC SECTION.
    DATA fieldinfo TYPE string.
    METHODS constructor IMPORTING fieldinfo TYPE string.
ENDCLASS.                    "lcx_initial DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcx_initial IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcx_initial IMPLEMENTATION.
  METHOD constructor.
    super->constructor( ).
    me->fieldinfo = fieldinfo.
  ENDMETHOD.                    "constructor
ENDCLASS.                    "lcx_initial IMPLEMENTATION

*----------------------------------------------------------------------*
*       CLASS lcl_check DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_check DEFINITION.

  PUBLIC SECTION.
    CLASS-METHODS initial IMPORTING field TYPE clike OPTIONAL
                                    value TYPE any
                          PREFERRED PARAMETER value
                            RAISING lcx_initial.
ENDCLASS.                    "lcl_check DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_check IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_check IMPLEMENTATION.
  METHOD initial.
    IF value IS INITIAL.
      IF field IS INITIAL.
        RAISE EXCEPTION TYPE lcx_initial EXPORTING fieldinfo = space.
      ELSE.
        RAISE EXCEPTION TYPE lcx_initial EXPORTING fieldinfo = field.
      ENDIF.
    ENDIF.
  ENDMETHOD.                    "initial
ENDCLASS.                    "lcl_check IMPLEMENTATION

START-OF-SELECTION.
  DATA gx_error TYPE REF TO lcx_initial.
  TABLES t000.

  t000-mtext = 'ABAPFORUM'.

  TRY .
      lcl_check=>initial( field = 'MTEXT' value = t000-mtext ).
      lcl_check=>initial( field = 'ORT01' value = t000-ort01 ).
      lcl_check=>initial( field = 'MWAER' value = t000-mwaer ).
    CATCH lcx_initial INTO gx_error.
      MESSAGE i000(oo) WITH 'leeres Feld:' gx_error->fieldinfo.
  ENDTRY.

  IF gx_error IS NOT BOUND.
    MESSAGE 'alles okay' TYPE 'I'.
  ENDIF.
Okay, auch nicht wirklich Code-sparend... ;)
aber wenn man das alles in zwei globale Klassen auslagert, dann reduziert sich das "sichtbare" Coding wieder.
Wollte nur noch mal (erneut) zur Verwirrung beitragen...

Re: Mehrere Werte auf INITIAl überprüfen

Beitrag von ewx (Top Expert / 4904 / 328 / 646 ) »
Oder: man packt alle zu prüfenden Felder in eine Tabelle und arbeitet mit ASSIGN COMPONENT.

Code: Alles auswählen.

DATA t_felder TYPE STANDARD TABLE OF string.
FIELD-SYMBOLS <feld> TYPE string.
FIELD-SYMBOLS <wert> TYPE any.
DATA fehlerfeld TYPE string.

APPEND 'EINS' to t_felder.
APPEND 'DREI' to t_felder.

LOOP AT t_felder ASSIGNING <feld>.
  ASSIGN COMPONENT <feld> OF STRUCTURE xyz TO <wert>.
  IF sy-subrc = 0 AND <wert> is initial.
    fehlerfeld = <feld>.
    EXIT.
  ENDIF.
ENDLOOP.

if fehlerfeld is not initial.
 "FEHLER!!
endif.
Die Lösung ist schön variabel, denn die zu prüfenden Felder könnten auch aus einer Customizingtabelle kommen.
So könnte man auch für verschiedene Szenarien (Auftragsart, Materialart, Einkaufsorganisation, ...) verschiedene Felder prüfen.

Re: Mehrere Werte auf INITIAl überprüfen

Beitrag von gs3rr4 (ForumUser / 63 / 24 / 0 ) »
Das muss ich mir morgen mal in Ruhe anschauen, sieht aber echt toll aus. :D
Mal sehen ob ich das überhaupt verstehe, hehe.

Re: Mehrere Werte auf INITIAl überprüfen

Beitrag von MrBojangles (Specialist / 367 / 3 / 30 ) »
Und dann gibt es ja noch Makros...

*duck-und-weg
Weiterhin viel Freude mit SAP...
Cheers
MrB.

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1688
Views
Dynprofelder initial setzen
von ti » 20.08.2007 12:39 • Verfasst in Sales and Distribution
0
Antw.
1820
Views
Dynprofelder initial setzen
von ti » 20.08.2007 11:17 • Verfasst in ABAP® für Anfänger
7
Antw.
8411
Views
Select , where Feld is Initial
von autohandel7 » 06.06.2019 10:36 • Verfasst in ABAP® für Anfänger
6
Antw.
4498
Views
Select for all entries Abfrage auf Initial
von Murdock » 20.03.2013 11:18 • Verfasst in ABAP® für Anfänger
4
Antw.
3524
Views
If-Abfrage auf mehre Initial Felder
von fabianj » 11.05.2017 08:06 • 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

Benutzerdefinierte Felder PSP
vor 3 Tagen von Rabea1103 1 / 243
Zukunft des ABAP Entwicklers
vor 6 Tagen von DeathAndPain 14 / 3962
HR in der Zukunft?
vor einer Woche von DeathAndPain 6 / 5739
Analyse abhängiger Objekte zu einem ABAP-Programm
vor einer Woche von MAJOR_TOM gelöst 5 / 3603

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

Benutzerdefinierte Felder PSP
vor 3 Tagen von Rabea1103 1 / 243
Zukunft des ABAP Entwicklers
vor 6 Tagen von DeathAndPain 14 / 3962
HR in der Zukunft?
vor einer Woche von DeathAndPain 6 / 5739
Analyse abhängiger Objekte zu einem ABAP-Programm
vor einer Woche von MAJOR_TOM gelöst 5 / 3603

Unbeantwortete Forenbeiträge

Benutzerdefinierte Felder PSP
vor 3 Tagen von Rabea1103 1 / 243
Spool vereinen OTF und PDF
vor einer Woche von anna2205 1 / 3247
XSLT und Loipro05 Transformation
letzen Monat von Torsten1965 1 / 9543
VOLL Artikel in einem Display Typ 12
November 2025 von ThomasM84 1 / 28044