Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Roooky am 12.12.07 - 09:20:37

Titel: tausendertrennzeichen sofort anzeigen
Beitrag von: Roooky am 12.12.07 - 09:20:37
Moin moin!

Ich hab ein bearbeitbares Zahlenfeld und hätte gern, dass das eingestellte Tausendertrennzeichen sofort angezeigt wird, wenn der Benutzer eine Eingabe gemacht hat...
Wie geht das wohl? Irgendwie bei Exiting was zum Aktualisieren reinschreiben? Ich leider nix LotusScript...

Vielen Dank schon mal!
Lutz
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: koehlerbv am 12.12.07 - 09:31:03
Gib bei den Maskeneigenschaften an, dass Felder automatisch aktualisiert werden sollen.
Hat die maske sehr viele Felder oder ungecachete @dbLookups, geht das aber performancemässig nach hinten los.

Bernhard
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: Roooky am 12.12.07 - 09:34:41
Danke Bernhard!
Leider ist es nur so wie vermutet und die Performance leidet etwas, grooooße Maske. Kann ich nicht wie beschrieben nur das Feld aktualisieren?
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: koehlerbv am 12.12.07 - 09:36:44
Doch - mit LotusScript im Exiting- oder OnChange-Event.

Bernhard
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: Roooky am 12.12.07 - 14:48:07
Falls jemand ähnliches vorhat: Folgender Code tuts im Exiting Bereich des Feldes.´


Sub Exiting(Source As Field)
   
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim Wert As String, WertNeu As String
   
   Set uidoc = ws.CurrentDocument
   
   Wert = uidoc.FieldGetText("Feldname")
   WertNeu = Format(Wert, "#,###")
   Call uidoc.FieldSetText("Feldname",WertNeu)
   
End Sub


Gruß und Danke,
Lutz
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: koehlerbv am 12.12.07 - 14:56:56
Das geht kürzer, Lutz:

   Dim ws As New NotesUIWorkspace
   Call ws.CurrentDocument.Refresh

Bernhard  ;)
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: DerAndre am 12.12.07 - 14:59:27
Aber dann wird doch das ganze doc refreshed, oder?
Und das wollte Lutz doch nciht.
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: koehlerbv am 12.12.07 - 15:17:01
Der Refresh erfolgt aber nur einmal (i.d.R.), wohingegen der erste Vorschlag mit dem permanenten Aktualisieren das ja tatsächlich bei jeder Feldänderung tut.
Und Format nagelt Dich hier auch mit den digits fest ...

Bernhard
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: Roooky am 12.12.07 - 15:19:57
Eigentlich möchte ich das nicht, stimmt. Aber so schlimm wärs nu auch wieder nicht, das Feld wird nur sehr selten geändert. Hautpsache ist, dass ich nicht den Effekt von "Felder automatisch aktualiseren" hab.
Lutz

@bernhard: du warst schneller....
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: DerAndre am 12.12.07 - 15:26:38
Ah, Antwort#1 hat sich mir irgendwie entzogen...
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: Roooky am 12.12.07 - 16:10:41
Hallo nochmal!

Jetzt hab ich leider ein anderes Problem, was vielleicht mit dem ersten zusammenhängt.

In die Eingabevalidierung des gleichen Feldes schreibe ich:

@If(StZahl_1 <= 150000; @Success; @Failure("Über 150.000 produzierte Teile in dieser Schicht? Herzlichen Glückwunsch, Sie sind der Mitarbeiter des Monats!"))

StZahl_1 ist ein bearbeitbares Zahlenfeld.
Die Validierung arbeitet korrekt, aber beim ersten öffnen der Maske bekomme ich eine Fehlermeldung: "Für Vergleichsoperatoren müssen zwei Werte desselben Datentyps angegeben werden."
Tja, seh ich ja auch so. Nur was mache ich falsch?
Hab das mit dem Tausendertrennzeichen schon wieder rausgenommen, keine Änderung.
Hab die 150000 in Anführungszeichen gesetzt, StZahl_1 in Text umgewandelt, und alle Änderungen untereinander fröhlich kombiniert - aber es geht einfach nicht...

please support  ::)
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: koehlerbv am 12.12.07 - 16:13:21
Das hat mit dem Exiting nichts zu tun.

@If(@IsNumber (StZahl_1) & StZahl_1 >= 150000; @Success; @Failure("Über 150.000 produzierte Teile in dieser Schicht? Herzlichen Glückwunsch, Sie sind der Mitarbeiter des Monats!"))

Beim Erstellen des Dokuments ist StZahl_1 ja noch "" ...

Bernhard
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: Roooky am 12.12.07 - 16:24:34
Danke Bernhard!!!

Einen kleinen Fehler hattest du allerdings, tztztz   ;)
Klar, aus "<" muss ">" werden (wurde mir zumindest irgendwann klar...), aber es müssen auch @success und @failure getauscht werden.

THX!!
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: Roooky am 12.12.07 - 16:27:41
Ach so, das Problem könnte eventuell gewesen sein, dass du den @failure-Text ernst genommen hast... Ist allerdings ironisch gemeint, denn mehr als 150.000 Teil pro Schicht kann man nicht produzieren...
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: koehlerbv am 12.12.07 - 16:37:37
Nein, nein, das war schon mein Fehler - ich habe nur auf das <= gestiert und nicht gesehen, dass die Reihenfolge @Success / @Failure ja zum gewünschten Ergebnis führt!

Bernhard
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: cebolina am 18.12.07 - 13:21:35
Hallo Bernhard,

ich möchte mich mal zu dem ursprünglichen Problem einmischen:

Ich verwende sehr oft diese in der Hilfe beschriebe Möglichkeit, um den gewünschten Effekt zu erhalten:

Sub Exiting(Source As Field)
  Dim workspace As New NotesUIWorkspace
  Dim uidoc As NotesUIDocument
  Set uidoc = workspace.CurrentDocument
  Call uidoc.Refresh
End Sub

Wo liegt der große Unterschiede zu deiner "kurzen" Lösung? Welche Lösung ist evtl. performanter?


Gruß
Stefan
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: Glombi am 18.12.07 - 13:23:53
Das Exiting Event ist denkbar schlecht für sowas, denn es wird nicht immer ausgeführt. Wenn bspw. der User <Strg>-S und dann ESC druckt oder es eine Aktion in der Aktionsleiste gibt, die das macht, wird der Focus im Dokument nicht verändert und das Exiting Event wird nicht ausgeführt.

Andreas
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: koehlerbv am 18.12.07 - 13:27:16
Der "grosse Unterschied" ist: Ich muss weniger tippen ...

In diesem Fall entspricht der NotesUIWorkspace bereits dem geöffneten NotesUIDocument. NotesUIDocument.Refresh und NotesUIWorkspace.ViewRefresh triggern dann beide das PostRecalc der Maske. Somit gibt es auch seitens der Performance keine (messbaren) Unterschiede.

Andreas: Das unter bestimmten Umständen (tatsächlich und natürlich) das Exiting gar nicht erst getriggert wird, ist im vorliegenden Fall aber vollkommen Banane  ;)

Bernhard
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: cebolina am 18.12.07 - 13:36:31
@Bernhard
Also ist es (bis auf meinen erhöhten Schreibaufwand) egal.
Danke

@Glombi
Dass das Exiting Event nicht immer ausgeführt wird ist (zumindest in meinem Fall) tatsächlich egal - wie Bernhard bereits geschrieben hat. Aber trotzdem Danke für den Hinweis.

Gruß
Stefan
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: Roooky am 08.01.08 - 19:11:32
Nachtrag: Es ist doch nicht egal!

Der kurze Refresh-Code produziert einen Fehler, wenn die Zahl geändert wird.
Wenn z.B. tausend, also "1.000", im Feld steht und man merkt, dass man sich vertippt hat und eine Null wegnimmt, bleibt "1.00" stehen, nicht "100".

Nach Speichern und erneutem Öffnen heißt es dann: "FEHLER: Nicht erkannte Zeichen hinter Zahl"...
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: ata am 08.01.08 - 19:40:32
Zitat
Ich hab ein bearbeitbares Zahlenfeld

und uidoc.FieldSetText vertragen sich nicht - oder habe ich zu schnell gelesen?

Toni

Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: pete_bla am 08.01.08 - 19:57:04
Hi,

was interessant ist, ist dass das der Wert im Dokument ui-gespeichert wird ...
Wie steht es den im Feld (backend)?

Schon ein "Eingabe-umsetzungs"-Event integiert ?
ungefähr so:
Code
@IF(@ThisValue!=""; @ToNumber(@ThisValue); @ThisValue)

Gruss, Pete(r)
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: ata am 08.01.08 - 21:50:54
... er speichert es, aber i.d.R. als Textfeld - und das macht dann Probleme bei Berechnungen => Type mismatch etc...

Toni
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: koehlerbv am 08.01.08 - 22:33:45
Da das eine reine Frontend-Aktion ist und das Feld in der Maske als Zahlenfeld gespeichert wird. wird da aus diesem Zahlenfeld auch nicht plötzlich ein Textfeld, Toni.

Was Pete jetzt sagen wollte, bleibt mir unverständlich. Pete ist offensichtlich beim Schreiben manchmal extrem nervös und hiepelig, was das Lesen und das Verstehen seiner Postings schwer macht.

Was das Problem von Lutz angeht: Wenn man denn soviel Komfort für die User will, dann muss man eben beim Refresh das ganze Feld auch wieder korrekt aufbauen. Wer schön sein will, muss leiden  ;D
Der Algorithmus hierfür ist aber einfach. Von Format$ lasse ich ich aber trotzdem die Finger - wegen der Abhängigkeit von den OS-Einstellungen. Sowas habe ich dann aber lieber selber in der Hand.

Bernhard
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: ata am 08.01.08 - 22:40:05
... so weit ich mich erinnern kann, hat es bei Code im Postrecalc zu Problemen geführt - ich arbeite lieber mit sauberen Datentypen und nicht so unscharfen Methoden...

Toni
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: pete_bla am 09.01.08 - 18:48:05
Hi,

entschuldigt bitte dass ich hier noch mehr verwirrung stifte -
Da das eine reine Frontend-Aktion ist und das Feld in der Maske als Zahlenfeld gespeichert wird. wird da aus diesem Zahlenfeld auch nicht plötzlich ein Textfeld, Toni.
Ist es nun doch ein Zahlenfeld, dann wundert mich aber:
Wenn z.B. tausend, also "1.000", im Feld steht und man merkt, dass man sich vertippt hat und eine Null wegnimmt, bleibt "1.00" stehen, nicht "100".

Nach Speichern und erneutem Öffnen heißt es dann: "FEHLER: Nicht erkannte Zeichen hinter Zahl"...
Unter normalen Umständen kann ich das für ein Zahlenfeld nur vor dem (UI-)Speichern nachvollziehen.

Grüsse, Pete(r)


@Bernhard:
Was Pete jetzt sagen wollte, bleibt mir unverständlich. Pete ist offensichtlich beim Schreiben manchmal extrem nervös und hiepelig, was das Lesen und das Verstehen seiner Postings schwer macht.
Mit dem @ToNumber(@ThisValue) wollte ich erreichen, dass bereits beim refresh die fehlerhaften Zeichen -> Punkt ect. im Feld "gelöscht" werden, aber das ist leider nicht funktional.  :-[

Entschulige bitte, dass ich meine Rechschreibkorrektur ausgeschaltet habe - ich stehe mit ihr wohl etwas auf dem Kriegsfussß.
Ich gelobe Besserung und Teste es lieber nochmals bevor ich hier solchen m*** poste.[/size]

Gruss, Pete(r)



Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: koehlerbv am 09.01.08 - 19:53:58
Ich kann das schon nachvollziehen, Pete - zumnidest fast:
ich tippe 1.000 ein. F9 (oder das bisherige Exiting Event): Alles passt. Ich lösche die letzte Null weg: Fehlermeldung (bei F9).
Wenn man das abfangen will, braucht man doch eine Routine, die aus den gegebenen Zahlen den Inhalt jedes Mal komplett aufbaut.

Bernhard
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: pete_bla am 09.01.08 - 21:32:37
Hi,

Genau das geschieht bereits VOR dem speichern!
Jedoch laut:
Wenn z.B. tausend, also "1.000", im Feld steht und man merkt, dass man sich vertippt hat und eine Null wegnimmt, bleibt "1.00" stehen, nicht "100".

Nach Speichern und erneutem Öffnen heißt es dann: "FEHLER: Nicht erkannte Zeichen hinter Zahl"...
Darum meine Verwirrung und Frage nach dem Feld im Backend-Doc.

Grüsse, Pete(r)
Titel: Re: tausendertrennzeichen sofort anzeigen
Beitrag von: koehlerbv am 09.01.08 - 21:46:00
Das muss auch bereits VOR dem speichern passieren. Dass eine Fehlermeldung erst kommt, nachdem PostRecalc und QuerySave durchlaufen wurden (und es daher erst im Query-/PostOpen) passiert, ist mir noch nie untergekommen (es sei denn, man programmiert sich sowas  ;D).

Bernhard

PS: Pete, auch im Forum gilt: Traue niemals blind gewissen Schilderungen. Sogar absolute Profis können in Betriebsblindheit fallen. Und das ist dann ja auch der Charme eienr Community: Andere sehen das oft mit ganz anderen Augen.