Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Obrac am 03.01.11 - 08:55:23

Titel: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: Obrac am 03.01.11 - 08:55:23
Guten Morgen,

ich sitze jetzt schon viel zu lange an einem Problem, das eigentlich eine Kleinigkeit ist. Ein Script liest eine Zahl aus einem Dokument aus. Das Feld ist als Währung deklariert. Wenn ich ein Textfeld erstelle, das den Wert des Zahlenfeldes als Text übernimmt und ich aus diesem Textfeld den Inhalt auslese, ist noch alles ok. Denn wird eine Zahl wie 0,73 auch genauso ausgelesen. Nun lese ich aber die Werte aus zwei Dokumenten aus und möchte diese addieren. Ich schaffe es einfach nicht, das Ergebnis mit führender oder abschließender Null auszugeben.  Es kommen z.B. Werte wie ",25" oder "5,3" raus statt "0,25" und "5,30". Ich habe mit allen möglichen Datentypen gearbeitet, habe die Format-Funktion ausprobiert.. Gibt es irgendeinen Trick, wie man ohne String-Zerlegung eine vernünftige Währungs-Kommazahl bekommt?

Gruß,
Obrac
Titel: Re: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: Peter Klett am 03.01.11 - 10:19:18
Poste doch mal den Teil des Scriptes. Schreibst Du evtl. den Wert als Text in das Währungsfeld?
Titel: Re: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: Obrac am 03.01.11 - 10:54:03
Das Ganze ist, was die Datentypen anbelangt, im Moment ein bisschen chaotisch, weil ich viel ausprobiert habe. Fakt, dass es so nicht funktioniert..

Code
Sub Click(Source As Button)
	
	Dim strgesamt As String
	Dim strgesamt_zahl As Currency
	Dim lngGesamt As Currency
	Dim strGesamt2 As Currency
	
	
'Zugriif auf markierte Doks in der Ansicht
	Set collection = db.UnprocessedDocuments
	
'Erstes Dokument
	Set doc = collection.GetFirstDocument
	
	While Not (doc Is Nothing)
  'Tu was mit dem Dokument
		iCounter=iCounter+1
		
		sEmpfaenger=doc.mail(0)
		If doc.form(0)="frmAusgabe" Then
			strBez = doc.Ausgabe(0)
		Else			
			strBez = doc.Einnahme(0)
		End If

		strgesamt=doc.gesamt(0) 'Textfeld
		strgesamt_zahl=doc.gesamt_zahl(0) 'Currencyfeld

		lngGesamt=lngGesamt+strgesamt_zahl
		strGesamt2=Ccur(strGesamt2)+Ccur(strgesamt)
		
				
		strBody0=doc.mailtext(0)+Chr(10)+Chr(10)
		strBody1=strBody1+strBez+": "+strgesamt+" Euro"+Chr(10)
		
		

		  'Nächstes Dokument
		Set doc = collection.GetNextDocument(doc)
		
	Wend
	
	' Hier nun den Gesamtbetrag ausgeben, mit führender und abschließender Null

End Sub
Titel: Re: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: Peter Klett am 03.01.11 - 11:02:28
Hast Du es schon mal mit Double statt Currency und Cdbl statt Ccur versucht?
Titel: Re: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: Obrac am 03.01.11 - 11:03:52
Ja, habe ich schon. Habe so ziemlich alle Datentypen durch.
Titel: Re: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: Peter Klett am 03.01.11 - 11:06:13
Und wie schreibst Du den ermittelten Wert in das Dokument zurück, also an die Stelle, an der es falsch angezeigt wird?
Titel: Re: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: Obrac am 03.01.11 - 11:08:33
Mit "Call uidoc.FieldSetText" und dann "Cstr(Variable)". Wenn ich den Wert als Currency oder String im Sciptverlauf durch "print" ausgeben lasse, ist er aber auch schon falsch.
Titel: Re: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: Peter Klett am 03.01.11 - 11:18:59
Natürlich ist sie beim Print "falsch", denn da ist sie ja nicht formatiert. Die Formatierung erfolgt ja durch das Feld selbst. Du solltest den Wert nicht als Text hineinschreiben, sondern als Zahl. Das geht nicht mit uidoc.FieldSetText.

Dim doc As NotesDocument
Set doc = uidoc.Document
doc.DeinFeld = IngGesamt
Titel: Re: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: 0xse am 03.01.11 - 11:57:40
Oder NotesDocument.ReplaceItemValue(). Versuch vorzugsweise den Datentyp Currency konsequent beim Arbeiten mit deinen Zahlen zu verwenden, alles andere kann zu Ungenauigkeiten führen.

Float und Double sind Gleitkommazahlen mit Basis und Exponent, ab einer gewissen Größe werden die ungenau und dafür wurde Currency erschaffen. Der speichert jede einzelne Stelle in BCD weg. Das braucht mehr Speicher, aber ist halt wirklich exakt.

Es ist nie gut wenn ein Buchhalter kommt und fragt wo ein Cent verschwunden ist, solche Suchaktionen machen keinen Spass =)
Titel: Re: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: Obrac am 03.01.11 - 12:04:47
Hmm, das Ganze findet aber dann nur noch im Backend statt, oder? Eine Ausführung im Frontend ist allerdings unerlässlich.

Zitat
Natürlich ist sie beim Print "falsch", denn da ist sie ja nicht formatiert. Die Formatierung erfolgt ja durch das Feld selbst. Du solltest den Wert nicht als Text hineinschreiben, sondern als Zahl. Das geht nicht mit uidoc.FieldSetText.

Aber warum klappt es dann hier: strBody1=strBody1+strBez+": "+strgesamt+" Euro"+Chr(10)

Hier wird die Zahl als Text ins selbe Feld geschrieben, und die Zahl wird korrekt ausgegeben.

@Oxse: Ja, als Currency war das Ganze ja auch vorgesehen.
Titel: Re: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: Peter Klett am 03.01.11 - 12:29:12
Hmm, das Ganze findet aber dann nur noch im Backend statt, oder? Eine Ausführung im Frontend ist allerdings unerlässlich.
Es geht zwar über das Backend, ist aber auch bei geöffnetem Dokument sofort sichtbar (außer bei Richtext, das ist hier aber nicht der Fall)
Aber warum klappt es dann hier: strBody1=strBody1+strBez+": "+strgesamt+" Euro"+Chr(10)
Hier wird die Zahl als Text ins selbe Feld geschrieben, und die Zahl wird korrekt ausgegeben.
Die Zahl ist dort schon im Text formatiert. Wenn Du Print Format (IngGesamt, "#.##0.00") verwendest, wird es wohl auch gut aussehen, da dann die Zahl formatiert in Text umgewandelt wird. Bei Print IngGesamt wird der Wert ohne jegliche Formatierungsangaben als Text ausgegeben
Titel: Re: LS: Keine führende oder abschließende Null bei Kommazahlen
Beitrag von: Obrac am 03.01.11 - 12:49:54
Format ist es. ;) Ich hatte es damit zwar auch schon versucht, hatte aber in meiner Schusseligkeit anscheinend nur die Textversion der Variable versucht zu formatieren.
Damit komme ich auf jeden Fall weiter. Vielen lieben Dank für die Hilfe.