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 / 136 / 21 / 26 ) » 25.03.2020 15:07
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?


Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von msfox (Specialist / 126 / 22 / 18 ) » 25.03.2020 16:09
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 / 4244 / 200 / 444 ) » 25.03.2020 17:07
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 / 136 / 21 / 26 ) » 26.03.2020 08:43
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 / 4244 / 200 / 444 ) » 26.03.2020 09:29
hmm. dann weiß ich leider auch nicht, was das sein könnte... :(

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von wreichelt (Expert / 810 / 19 / 137 ) » 26.03.2020 10:45
Hallo,

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

Gruß Wolfgang

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von ewx (Top Expert / 4244 / 200 / 444 ) » 26.03.2020 10:46
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 (Expert / 810 / 19 / 137 ) » 26.03.2020 11:02
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 / 136 / 21 / 26 ) » 26.03.2020 17:03
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 / 4244 / 200 / 444 ) » 26.03.2020 17:22
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 / 126 / 22 / 18 ) » 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?

Re: Währungsdarstellung ohne Dezimalzahlen auf Dynpro

Beitrag von edwin (Specialist / 295 / 7 / 63 ) » 26.03.2020 22:19
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 / 4244 / 200 / 444 ) » 27.03.2020 12:06
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 / 4244 / 200 / 444 ) » 27.03.2020 12:10
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 / 295 / 7 / 63 ) » 27.03.2020 17:45
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


Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Vergleichbare Themen

Dezimalzahlen nicht zulassen
von dyv » 07.08.2014 16:20
Ausgabe von Dezimalzahlen bei ALV-Gird mit , anstatt .
von Squall » 15.01.2007 15:04
Web-Dynpro: längeres Dynpro nicht sichtbar
von erzoo24 » 08.03.2017 11:33
Web Dynpro ABAP vs. Web Dynpro JAVA
von PatrickJ » 21.06.2007 06:44