Autor Thema: LS: Keine führende oder abschließende Null bei Kommazahlen  (Gelesen 4246 mal)

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 277
  • Geschlecht: Männlich
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

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: LS: Keine führende oder abschließende Null bei Kommazahlen
« Antwort #1 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?

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 277
  • Geschlecht: Männlich
Re: LS: Keine führende oder abschließende Null bei Kommazahlen
« Antwort #2 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

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: LS: Keine führende oder abschließende Null bei Kommazahlen
« Antwort #3 am: 03.01.11 - 11:02:28 »
Hast Du es schon mal mit Double statt Currency und Cdbl statt Ccur versucht?

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 277
  • Geschlecht: Männlich
Re: LS: Keine führende oder abschließende Null bei Kommazahlen
« Antwort #4 am: 03.01.11 - 11:03:52 »
Ja, habe ich schon. Habe so ziemlich alle Datentypen durch.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: LS: Keine führende oder abschließende Null bei Kommazahlen
« Antwort #5 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?

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 277
  • Geschlecht: Männlich
Re: LS: Keine führende oder abschließende Null bei Kommazahlen
« Antwort #6 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.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: LS: Keine führende oder abschließende Null bei Kommazahlen
« Antwort #7 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

Offline 0xse

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 507
  • Geschlecht: Männlich
Re: LS: Keine führende oder abschließende Null bei Kommazahlen
« Antwort #8 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 =)

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 277
  • Geschlecht: Männlich
Re: LS: Keine führende oder abschließende Null bei Kommazahlen
« Antwort #9 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.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: LS: Keine führende oder abschließende Null bei Kommazahlen
« Antwort #10 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

Offline Obrac

  • Senior Mitglied
  • ****
  • Beiträge: 277
  • Geschlecht: Männlich
Re: LS: Keine führende oder abschließende Null bei Kommazahlen
« Antwort #11 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.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz