Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
17 Beiträge • Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von PeterPaletti (Specialist / 336 / 29 / 96 ) »
Hallo liebe Experten,

ich möchte auf einem Dynpro in einem Feld mit 2 Dezimalzahlen einen Wert in einer Währung anzeigen, die keine Dezimalzahlen kennt.

Das Ergebnis der Wert wird mit Faktor 100 multipliziert angezeigt.

Wie kann ich das unterbinden?

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


Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von msfox (Specialist / 302 / 50 / 62 ) »
Die Anzahl der Nachkommastellen steht in der Tabelle TCURX.
Hast du dort mal für "deine" Währung keine Dezimalstelle eingetragen?

Ansonsten klappt das nicht, wenn auf dem Dynpro mit Währungen arbeitest. Macht ja keinen Sinn auf dem Dynpro das umgehenen zu wollen, was im Backend mühevoll eingerichet wurden.

Ansonsten darfst du auf dem Dynpro kein Betragsfeld verwenden.

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Du musst eine Struktur definieren. Das Währungsfeld muss vom Typ CURR sein. Dann musst du hierzu ein Referenzfeld vom Typ CUKY angeben.
Dadurch erfolgt die Darstellung automatisch in der verwendeten Währung.
Geht natürlich auch ohne Struktur direkt im Dynpro.

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von PeterPaletti (Specialist / 336 / 29 / 96 ) »
Hallo Enno,

die Währung wird in der Tabelle TCURX mit Dezimalstellen 0 geführt, es handelt sich bei dem Beispiel um Forint (HUF).
Ich habe eine Struktur definiert, diese hält den Währungsbetrag in einem Feld vom Typ CURR, es gibt ein Referenzfeld vom Typ CUKY. Dieses Referenzfeld liegt allerdings außerhalb der Struktur in einer DB-Tabelle.
Beide Felder Währungsbetrag und Währung werden auf dem Dynpro, genauer gesagt auf einem Subscreen als Tabreiter angezeigt.
Wenn ich im Debugger nachschaue wird der Währungsbetrag richtig in das Strukturfeld übergeben, aber mit einem Faktor 100 multipliziert angezeigt.

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
hmm. dann weiß ich leider auch nicht, was das sein könnte... :(

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von wreichelt (Top Expert / 1031 / 29 / 188 ) »
Hallo,

ein Write ........ to ......... currency 'HUF'.
macht es nicht ?

Gruß Wolfgang

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
wreichelt hat geschrieben:
26.03.2020 10:45
ein Write ........ to ......... currency 'HUF'.
macht es nicht ?
Nicht auf einem Dynpro...!

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von wreichelt (Top Expert / 1031 / 29 / 188 ) »
Hallo,

Behandlung in Dynpros

Bei der Darstellung eines Ein-/Ausgabefeldes vom Typ CURR auf einem Dynpro, wird der Inhalt wie bei allen Dynpro-Feldern zeichenartig und gemäß einer typabhängigen Maske dargestellt. Die Stellung des Dezimalpunkts eines Währungsfelds vom Typ CURR auf einem Dynpro ist dabei völlig unabhängig von der beim Datenelement im ABAP Dictionary angegebenen Anzahl von Nachkommastellen (größer gleich eins, der Standardwert ist zwei). Die Anzahl der Nachkommastellen auf einem Dynpro wird wie folgt festgelegt:

Bei der Darstellung eines Dynpro-Feldes vom Typ CURR wird in den globalen Daten des aktuellen ABAP-Programms nach dem zu dem Feld gehörigen Referenzfeld für den Währungsschlüssel gesucht. Der Inhalt dieses Feldes sollte ein gültiges Währungskürzel aus der Datenbanktabelle TCURC sein. Wird das Referenzfeld nicht gefunden oder gibt es in der Datenbanktabelle TCURX keinen Eintrag mit dem Inhalt des Feldes, wird das Währungsfeld standardmäßig mit zwei Nachkommastellen dargestellt.

Das Referenzfeld ist entweder bei der zugehörigen Struktur im ABAP Dictionary definiert oder wurde mit dem Screen Painter bei den Attributen des Dynpro-Felds festgelegt. Es muss selbst nicht auf dem Dynpro vorhanden sein.
Wenn das Währungskürzel des Referenzfelds in der Datenbanktabelle TCURX gefunden wird, wird das Währungsfeld mit den dort angegebenen Nachkommastellen dargestellt. Dies gilt auch für initiale Referenzfelder.
Hinweis

Ein Dynpro übernimmt vom ABAP-Programm (oder einer dazwischen geschalteten Konvertierungsroutine) also nur die Ziffernfolge eines Währungsfeldes, bzw. sendet nur diese. Informationen zum Währungsschlüssel und zu Nachkommastellen werden nicht automatisch übergeben. Es muss dafür gesorgt werden, dass das Referenzfeld zu PBO mit dem gewünschten Wert gefüllt ist. Bei PAI spielt der korrekte Währungsschlüssel für die automatische Überprüfung des Formats eine Rolle. Insbesondere auf Dynpros, auf denen Währungsfelder in wechselnden Währungen dargestellt werden, muss durch CHAIN- und FIELD-Anweisungen dafür gesorgt werden, dass das Referenzfeld vor der Währung transportiert wird.

Gruß Wolfgang

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von PeterPaletti (Specialist / 336 / 29 / 96 ) »
Vielen Dank für eure Hilfe. Aber das Dynpro bleibt beharrlich beim Faktor 100.
Ich habe jetzt ein simples Testprogramm geschrieben, in dem man Eingaben auf dem Selektionsbildschirm machen kann, die dann in ein Dynpro übertragen und angezeigt werden.

Code: Alles auswählen.

TABLES: /cth/vm_str_plan.

DATA: ok_code TYPE sy-ucomm.

PARAMETERS: p_betrag TYPE /cth/vm_str_plan-p_volumen_gesamt,
            p_waers  TYPE /cth/vm_str_plan-p_waehrung_hw.

START-OF-SELECTION.

  CALL SCREEN '100'.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS '100'.
  SET TITLEBAR '100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  IF ok_code = 'BACK'
  OR ok_code = 'EXIT'
  OR ok_code = 'CANC'.
    LEAVE TO SCREEN 0.
  ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  GET_VALUES  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE get_values OUTPUT.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  GET_WAERS  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE get_waers OUTPUT.
    /cth/vm_str_plan-p_waehrung_hw = p_waers.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  GET_AMOUNT  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE get_amount OUTPUT.
  /cth/vm_str_plan-p_volumen_gesamt = p_betrag.

ENDMODULE.

Die Ablauflogik im Dynpro schaut so aus:

Code: Alles auswählen.

PROCESS BEFORE OUTPUT.
  MODULE status_0100.
  MODULE get_waers.
  MODULE get_amount.

*
PROCESS AFTER INPUT.
  MODULE user_command_0100.
Egal, ob ich mit 'FIELD' arbeite oder nicht, das Ergebnis bleibt dasselbe, bei Forint wird mir der Betrag mit Faktor 100 angezeigt.

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
also bei mir ist es auch so. Zwar in einem Grid, aber das Verhalten ist gleich.

wenn ich in dem Betragsfeld 100 EUR eingebe und dann die Währung in HUF ändere, dann steht im Betragsfeld 10.000 HUF.
Ändere ich zurück in EUR, dann sind es 100,00 EUR.

Gebe ich 100 HUF ein und ändere dann die Währung in EUR, dann habe ich 1,00 EUR.

Es gibt einen sehr alten Hinweis dazu.

Man müsste noch mal genau prüfen, wie der Wert in der DB-Tabelle abgelegt wird...

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von msfox (Specialist / 302 / 50 / 62 ) »
ewx hat geschrieben:
26.03.2020 17:22
wenn ich in dem Betragsfeld 100 EUR eingebe und dann die Währung in HUF ändere, dann steht im Betragsfeld 10.000 HUF.
Ändere ich zurück in EUR, dann sind es 100,00 EUR.
Kann es vielleicht sein, weil der Umrechnungsfaktor in der Tabelle TCURF mit 100 angegeben ist?

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von edwin (Specialist / 300 / 9 / 68 ) »
Hi,
CURR ist definiert als packed decimals mit 2 Nachkommastellen,
durch die Angabe in der TCURX wird nur einfach das Nachkomma für die ANZEIGE verschoben, auf der DB sehen 10,23 EUR und 1023 HUF gleich aus, deshalb wird auch bei der Änderung der Währung z.B von EUR -> HUF aus 10,23 -> 1023.
Bei Ausgabe ohne Währungszusatz werden nur einfach die 2 Dezimalen ausgegeben, wie in CURR definiert.

hier habe ich mal ein Bsp:

Code: Alles auswählen.

FORM curr .
 FIELD-SYMBOLS <x> type x.
 data wbetr type dmbtr.
 data waers type waers.

 wbetr = '10.23'.

 waers = 'EUR'.
 assign wbetr to <x> CASTING .
 write : / 'write ohne WAERS', wbetr, 'EUR:', wbetr CURRENCY waers, 'HEX:', <x>.

 waers = 'HUF'.
 assign wbetr to <x> CASTING .
 write : / 'write ohne WAERS', wbetr,'HUF:', wbetr CURRENCY waers, 'HEX:', <x>.

 waers = 'JOD'.
 assign wbetr to <x> CASTING .
 write : / 'write ohne WAERS', wbetr,'JOD:', wbetr CURRENCY waers, 'HEX:', <x>.
endform.
und das Ergebnis ist:

write ohne WAERS 10,23 EUR: 10,23 HEX: 0000000001023C
write ohne WAERS 10,23 HUF: 1.023 HEX: 0000000001023C
write ohne WAERS 10,23 JOD: 1,023 HEX: 0000000001023C

Meines Wissens sdtammt diese "komische" Konstruktion noch aus alten Zeiten, da hat man noch Speicher sparen müssen und so hat man die 2 Nachkommastellen auch für Währungen wie JPY/HUF... mitbenutzt.

/Edwin

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
msfox hat geschrieben:
26.03.2020 20:05
ewx hat geschrieben:
26.03.2020 17:22
wenn ich in dem Betragsfeld 100 EUR eingebe und dann die Währung in HUF ändere, dann steht im Betragsfeld 10.000 HUF.
Ändere ich zurück in EUR, dann sind es 100,00 EUR.
Kann es vielleicht sein, weil der Umrechnungsfaktor in der Tabelle TCURF mit 100 angegeben ist?
Nein. Aber Danke für den Hinweis!

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
edwin hat geschrieben:
26.03.2020 22:19
Meines Wissens sdtammt diese "komische" Konstruktion noch aus alten Zeiten, da hat man noch Speicher sparen müssen und so hat man die 2 Nachkommastellen auch für Währungen wie JPY/HUF... mitbenutzt.
/Edwin
Verstehen tue ich das aber nicht... Man spart ja nichts. Die Währung benutzt ja trotzdem das gleich Feld.
Und wenn ich 1.000 HUF habe, dann möchte ich die doch auch so in der DB haben. das ist mir dann doch egal, dass es technisch gesehen 1.000,00 HUF sind. Aber es sollen doch bitte 1.000 sein und nicht 10!!?
Ich verstehe einfach nicht, wie das funktionieren kann...

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von edwin (Specialist / 300 / 9 / 68 ) »
Hi,
würden auch Währungen ohne "Kleingeld" mit 2 Nachkommastellen gerechnet, würde es noch öfter zu Überläufen bei Berechnungen kommen. CURR ist definiert: 13 Stellen mit 2 Nachkomma. Bei JPY/HUF (alle Währungen ohne Nachkomma) bleiben dann nur noch 11 Stellen zur Verfügung, durch die "Schieberei" kann weiter mit 13 Stellen gerechnet werden.

früher bei ITL :
Darstellung mit Nachkomma 13 Stellen 2 Nachkomma:
99.999.999.999,00 nur bis 99... Milliarden
mit Schieben alle 13 Stellen können benutzt werden:
9.999.999.999.999 9.... Billionen

/Edwin

Vergleichbare Themen

1
Antw.
180
Views
Dezimalzahlen
von User1234 » 09.08.2021 11:06 • Verfasst in ABAP® für Anfänger
9
Antw.
4657
Views
Dezimalzahlen nicht zulassen
von dyv » 07.08.2014 16:20 • Verfasst in ABAP® für Anfänger
9
Antw.
7527
Views
Ausgabe von Dezimalzahlen bei ALV-Gird mit , anstatt .
von Squall » 15.01.2007 15:04 • Verfasst in Dialogprogrammierung
6
Antw.
4891
Views
Web-Dynpro: längeres Dynpro nicht sichtbar
von erzoo24 » 08.03.2017 11:33 • Verfasst in Web-Dynpro, BSP + BHTML
0
Antw.
2644
Views

Ü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