Frage zu Funk. - Baustein

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

Frage zu Funk. - Baustein

Beitrag von Mark33 (ForumUser / 60 / 1 / 0 ) »
Hi!

Ich habe folgenden Funktionsbaustein:

Code: Alles auswählen.

FUNCTION Z_FUNKKALK.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(ZAHL1)
*"     REFERENCE(ZAHL2)
*"     REFERENCE(OPERATOR)
*"  EXPORTING
*"     REFERENCE(ERGEBNIS)
*"  EXCEPTIONS
*"      DIV_NULL
*"----------------------------------------------------------------------
  if zahl2 = 0.
    raise DIV_NULL.
    endif.

  case operator.
    when '+'.
      ergebnis = zahl1 + zahl2.
    when '*'.
      ergebnis = zahl1 * zahl2.
      
  endcase.


ENDFUNCTION.

Diesen rufe ich im Report auf:

Code: Alles auswählen.

data erg type i.

CALL FUNCTION 'Z_FUNKKALK'
  EXPORTING
    ZAHL1    = 3
    ZAHL2    = 7
    OPERATOR = 'aaa'
  IMPORTING
    ERGEBNIS = erg
  EXCEPTIONS
    DIV_NULL = 1
    OTHERS   = 2.

case sy-subrc.
  when  0.
    write: 'Das Ergebnis lautet', erg.

  when 1.
    write: 'FEHLER'.

  when 2.
    write: 'oterhs Fehler'.
ENDCASE.
* Implement suitable error handling here
Allerdings: wie schaffe ich es denn, dass sy-subrc den Wert = 2 bekommt, also der Fehler von OTHERS "geraist" wird? (Es sollte passieren, wenn ich als Operator z.B. "aaa" eingebe.)
DAs Programm macht zwar keinen Sinn, aber mich interessiert das mit dem OTHERS.

Danke!

Viele Grüße

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


Re: Frage zu Funk. - Baustein

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hi Mark33,

das SY-SUBRC = 2 erhältst du, wenn du eine weitere Exception im FuBa definierst und auslöst, diese aber im rufenden Programm nicht explizit abfängst sondern mit dem "General-Catcher" OTHERS.
Die Hilfe sagt dazu:
Falls die Ausnahme in einer Methode oder einem Funktionsbaustein ausgelöst wird, deren Aufrufer der Ausnahme einen Rückgabewert zuordnet, wird die Prozedur umgehend beendet, zur Aufrufstelle zurückgekehrt und das Systemfeld sy-subrc entsprechend der Zuordnung gesetzt.
Wird die Ausnahme in einer Methode oder einem Funktionsbaustein ausgelöst, deren Aufrufer der Ausnahme keinen Rückgabewert zuordnet, wird ein Laufzeitfehler ausgelöst, dessen Kurzdump den Namen der Ausnahme enthält.

Re: Frage zu Funk. - Baustein

Beitrag von Mark33 (ForumUser / 60 / 1 / 0 ) »
Hallo!

Danke für deine Antwort!!

Wenn ich im Funktionsbaustein die Zeilen mit der Zahl2 = 0 ==> Error

Code: Alles auswählen.

if zahl2 = 0.
    raise DIV_NULL.
    endif.
weggelassen hätte, erhalte ich ja dann einen Laufzeitfehler, wenn ich zahl1 / 0 rechnen würde.

Wie kann ich diesen Fehler dann im ABAP Report abfangen? (Ich würde das zum Testen über OTHERS machen wollen) Aber wenn ich bei sy-subrc = 2 abfragen würde, erhalte ich den ganz normalen Fehlerbildschirm für division durch 0.

Diesen Fehlerbildschirm möchte ich über OTHERS abfangen. Weißt du hier Rat? :-)
Oder geht das dann gar nicht?

Danke!

Viele Grüße!

Re: Frage zu Funk. - Baustein

Beitrag von Mark33 (ForumUser / 60 / 1 / 0 ) »
Hallo!

Ich hab noch ein paar mal rumprobiert und den Code geändert:

Hier der Funktionsbaustein:

Code: Alles auswählen.

"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     REFERENCE(ZAHL1)
*"     REFERENCE(ZAHL2)
*"     REFERENCE(OPERATOR)
*"  EXPORTING
*"     REFERENCE(ERGEBNIS)
*"  EXCEPTIONS
*"      OP_FALSCH
*"      TOO_BIG
*"----------------------------------------------------------------------
*  if zahl2 = 0.
*    raise DIV_NULL.
*    endif.

  case operator.
    when '+'.
      ergebnis = zahl1 + zahl2.
    when '*'.
      ergebnis = zahl1 * zahl2.
      when '/'.
        ergebnis  = zahl1 / zahl2.

        when others.
          raise OP_FALSCH.
  endcase.

  if ergebnis > 1.
    raise TOO_BIG.
    endif.

ENDFUNCTION.

Und der Aufruf im ABAP - Report:

Code: Alles auswählen.

  EXPORTING
    ZAHL1           = 100
    ZAHL2           = 5
    OPERATOR        = '/'
 IMPORTING
   ERGEBNIS        = erg
 EXCEPTIONS
   OP_FALSCH       = 1
   "TOO_BIG         = 2
   OTHERS          = 3.
          


case sy-subrc.
  when  0.
    write: 'Das Ergebnis lautet', erg.

  when 1.
    write: 'FEHLER falscher Operator'.

  when 2.
    write: 'Ergebnis zu groß'.
    
    when 3.
      write 'anderer Fehler'.
      
ENDCASE.

Im Report habe ich den Fehler "Too Big" beim Aufruf auskommentiert.
Wie läuft das dann aber genau ab?
Etwas so:
Der Report teilt dem Funktionsbaustein mit, dass er die Exception OP_FALSCH = 1 und OTHERS = 3 kennt.
Tritt im Funktionsbaustein nun der definierte Fehler auf, (ergebnis > 1), So erhält die Variable sy-subrc den Wert 3, da vom Funktionsaufruf her keine passende Ausnahme definiert wurde.
Stimmt das so??


Wie kann ich dann aber Dumps abfangen? Also wenn ich rechne 5 / 0. Ich kann ja zuvor prüfen, ob die zweite zahl = 0 ist.

Aber geht es auch anders? Also es wird gerechnet ergebnnis = 5 / 0 ==> Normalerweise erscheint nun eine Dumpmeldung, dass die Division durch 0 nicht erlaubt ist. Kann ich diese Dumpmeldung abfangen (Also einen sy-subrc Wert zuordnen, erst wenn der Dump auftritt oder muss ich das bereits vor dem REchenvorgang prüfen mit if zahl2 = 0. raise DIV_NULL oder ähnlichem?)

Danke!

Viele Grüße

Re: Frage zu Funk. - Baustein

Beitrag von BKluszynski (ForumUser / 3 / 0 / 0 ) »
also kann es nicht sein, dass du IM Funktionsbaustein einfach die Rechnung mit Try....Catch umgeben musst, und dann im Catch teil die division durch null abfangen + sy-subrc auf 2 setzen musst?

habs jetzt nicht probiert, könnte aber klappen.

naja und ansonsten isses halt son bisschen von hinten durch die brust ins auge :-)... ich meine du hast ja quasi schon eine möglichkeit den Fehler abzufangen... Indem du Try Catch benutzt... nur wo du dies tust musst du entscheiden.

Oder hab ich dein Problem verfehlt?

LG

Seite 1 von 1

Vergleichbare Themen

0
Antw.
1795
Views
Baustein ALM_ME_ORDER_USERSTATUS_CHANGE
von JensDA » 21.03.2011 13:32 • Verfasst in ABAP® Core
3
Antw.
14795
Views
RFC fähiger Baustein: Debitoren Kreditlimit
von Hellfire » 09.06.2012 11:46 • Verfasst in Java & SAP®
0
Antw.
6532
Views
NetWeaver: Generierung C-Programm zu RFC-Baustein?
von Jufo » 12.11.2007 12:33 • Verfasst in Exchange Infrastructure
11
Antw.
4662
Views
CVAPI_DOC_VIEW wirft Fehler in RFC-Baustein
von MartinZapf » 18.12.2014 09:37 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

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.

Unbeantwortete Forenbeiträge

SFP/SEGW - Fehler beim Rendering
vor 3 Wochen von Manfred K. 1 / 44365
Benutzerdefinierte Felder PSP
January 2026 von Rabea1103 1 / 95600
Spool vereinen OTF und PDF
January 2026 von anna2205 1 / 110519