Folgende Benutzer bedankten sich beim Autor SAP_ENTWICKLER für den Beitrag:
madeleine104
Code: Alles auswählen.
TRANSLATE lv_char250 USING ',.'.
Code: Alles auswählen.
TRANSLATE lv_char250 USING '. '. CONDENSE lv_char250 NO-GAPS.
Folgende Benutzer bedankten sich beim Autor Thanatos82 für den Beitrag:
madeleine104
Code: Alles auswählen.
* Stelle sicher Code hat nur Ziffern
IF code CO '0123456789'.
lv_QCODE = qpcd-code.
ENDIF.
Code: Alles auswählen.
* Stelle sicher Code hat nur Ziffern oder Punkt
IF code CO '.0123456789'.
lv_QCODE = qpcd-code.
ENDIF.
Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag:
madeleine104
Folgende Benutzer bedankten sich beim Autor Dele für den Beitrag:
madeleine104
Vorsicht. Das funktioniert leider nicht immer. Einige der Fehler die bei einer Zuweisung (MOVE TO) auftreten können sind (noch) nicht als behandelbare Exceptions abgebildet.black_adept hat geschrieben:Wenn du faul sein willst nimm einen TRY-CATCH-Block.
Huch - welche denn?a-dead-trousers hat geschrieben:Vorsicht. Das funktioniert leider nicht immer. Einige der Fehler die bei einer Zuweisung (MOVE TO) auftreten können sind (noch) nicht als behandelbare Exceptions abgebildet.black_adept hat geschrieben:Wenn du faul sein willst nimm einen TRY-CATCH-Block.
Ich glaube nicht dass dieser Fehler auftreten kann, da hier das Sourcefeld vom Typ P sein müsste. Aber lt Originalposting startet das Ganze von einem Char-250 Feld. Und mir fällt momentan tatsächlich kein Fall ein, in dem ein = ( MOVE ) von einem C-Feld in ein anderes auf eine nicht-abfangbare Exception läuft.a-dead-trousers hat geschrieben:Auf dieses Beispiel bezogen könnte der BCD_BADDATA eventuell auftreten.
Code: Alles auswählen.
DATA G_DECIMAL_SIGN TYPE SY-BATCH
CALL FUNCTION 'CLSE_SELECT_USR01' "get decimal sign
IMPORTING
decimal_sign = g_decimal_sign.
Code: Alles auswählen.
DATA data_str type c length 250.
DATA data_p type p decimals 3.
IF g_decimal_sign = ','.
* Bei Tausender Trenner = '.' ersetze diese mit Space
TRANSLATE data_Str using '. '.
* zusammenschieben
CONDENSE data_Str NO-GAPS.
* jetzt noch das komma durch Punkt ersetzen
TRANSLATE data_Str using ',.'.
* und links schieben, damit das auch in ein packed Feld passt
shift data_Str left DELETING LEADING space.
else.
* Bei Tausender Trenner = ',' (engl) ersetze diese mit Space
TRANSLATE data_Str using ', '.
* zusammenschieben
CONDENSE data_Str NO-GAPS.
* jetzt noch das Dezimal Komma ist eh schon Punkt
* und links schieben, damit das auch in ein packed Feld passt
shift data_Str left DELETING LEADING space.
endif.
Code: Alles auswählen.
* Jetzt noch auf gültige Zeichen Dezimalpunkt Vorzeichen Zahlen und Leerzeichen prüfen
IF data_Str CO ' +-.0123456789'.
TRY.
data_p = data_str.
* Fange ab was immer Du willst
CATCH cx_root.
"Fehlerbehandlung
ENDTRY.
ELSE.
" Fehler Zeichen nicht gültig
ENDIF.
Bitte Doku zur vordefinierten Exception "error_message" bei CALL FUNCTION lesen.der FB "RS_CONV_EX_2_IN" gibt leider eine "E" Meldung aus im ALV-Grid ist das besonders "gut"
Code: Alles auswählen.
DATA: lr_root TYPE REF TO cx_root,
lv_string TYPE string,
lv_value TYPE char10 VALUE '2,3',
lv_calc TYPE p DECIMALS 2.
TRY.
lv_calc = lv_value.
CATCH cx_root INTO lr_root.
lv_string = lr_root->kernel_errid.
ENDTRY.