Filter auf Werte mit Nachkommastelle

14. Februar 2011 17:02

Hallo

in einer Tabelle ist unter anderen ein Feld mit Datentyp Decimal vorhanden.
Die Werten haben teils Nachkommastellen und teils keine (also ganze Zahlen).

Wie kann ich im Navision filtern, sodas nur noch Datensätze angezeigt werden die Nachkommstellen haben bzw. Datensätze die nur ganze Zahlen haben?

Viele Grüsse

Re: Filter auf Werte mit Nachkommastelle

14. Februar 2011 17:33

Hmmm, was genau heißt filtern? In einer Form abfiltern oder eine Entscheidung, ob/wie die Datensätze verarbeitet werden sollen? Um wie viele Datensätze handelt es sich ca.?

Re: Filter auf Werte mit Nachkommastelle

14. Februar 2011 18:01

In eine Form abfiltern, wie zum Beispiel in der Artikelübersicht.
Und halt auch in der Programmierung abfiltern.

Re: Filter auf Werte mit Nachkommastelle

14. Februar 2011 18:36

Also mit den Standardfiltern kannst du das vergessen. Es ist nur lösbar über Programmierung und da auch nicht schön. (Ein wenig anders wäre es gewesen, wenn du bei einer Stapelverarbeitung einige nicht, oder anders betrachten möchtest).

Meine Idee wäre, die Zahl in einen String zu verwandeln und dann zu überprüfen, ob es ein Komma/Punkt enthält und dann die Satzmarkierung anwenden. Ich finde die Lösung selbst nicht schön, aber etwas anderes fällt mir gerade ehrlich gesagt nicht ein :-?

Re: Filter auf Werte mit Nachkommastelle

15. Februar 2011 10:19

Könnte man nicht mit EVALUATE Prüfen ob die Dec in eine Integer Varibale Konvertiert werden kann?
Mit dem String wird warscheinlich schwirig sein, weil 1.00 oder 1,00 auch Komma und Punkt enthält.
Hiermit könnte man dann z.B. auch beim Report mit CurrReport.SHOWOUTPUT( EVALUATE( i , DecWert)) den Ausdruck steurern.
Bei Forms gibt es nur die Möglichkeit zu Prüfen und z.B. eine Bool Variable zu füllen..

Gruß Matthias

Re: Filter auf Werte mit Nachkommastelle

15. Februar 2011 10:26

himi81 hat geschrieben:Könnte man nicht mit EVALUATE Prüfen ob die Dec in eine Integer Varibale Konvertiert werden kann?

Ich bevorzuge dann eher
Code:
IstGanzzahl := (Dec MOD 1 = 0);

Re: Filter auf Werte mit Nachkommastelle

15. Februar 2011 10:53

Auch schön,

ich denke mal ist performanter oder?

Gruß Matthias

Re: Filter auf Werte mit Nachkommastelle

15. Februar 2011 11:12

himi81 hat geschrieben:ich denke mal ist performanter oder?

Spart vor allem den Umweg, aus dem dec einen Text zu machen, um dann das Evaluate aufzurufen zu können.

Re: Filter auf Werte mit Nachkommastelle

15. Februar 2011 11:26

Richtig, man muss ja noch ein Format davor setzten, hatte ich versgessen.
Diese Befehle wie "MOD" sind mir noch nicht so geläufig...
Weiß Jemand ob es da ausser der Online Hilfe noch schöne Erklärungen zu gibt, wie auf Navision24?

Re: Filter auf Werte mit Nachkommastelle

15. Februar 2011 11:39

himi81 hat geschrieben:Richtig, man muss ja noch ein Format davor setzten, hatte ich versgessen.
Diese Befehle wie "MOD" sind mir noch nicht so geläufig...
Weiß Jemand ob es da ausser der Online Hilfe noch schöne Erklärungen zu gibt, wie auf Navision24?


MOD und DIV sind immer sehr nützliche Befehle bzw. Rechenarten - in allen Programmiersprachen.
In der Regel sind diese Befehle auch performant, da diese Befehle vom Compiler/Interpreter gut in einen konkreten Maschinenbefehl transformiert werden können.

Mit MOD wird der Rest einer Division ausgewertet.
Sehr nützlich, wenn man wie oben auf Ganzzahligkeit prüfen will oder in Schleifen periodisch bestimmte Befehle ausführen möchte.

Mit DIV wird der ganzzahlige Teil der Division ohne Rest ausgewertet (entspricht Abrunden bzw. Abschneiden der Kommastellen). Alternativ ginge demnach zum obigen Problem auch (aber unüblich und wahrscheinlich auch minimal langsamer):
Code:
IstGanzzahl := (Dec DIV 1 = Dec);

[...]
Programmierung

Die Division mit Rest (Modulo) wird in der Programmierung relativ häufig verwendet. Die Syntax ist dabei die eines Operators. Mit mod kann geprüft werden, ob eine Zahl gerade ist: if ( (x mod 2) == 0), dann ist x gerade. Modulo kann man immer benutzen, wenn man alle X Schleifendurchläufe einen speziellen Programmcode ausführen will. Auch bei vielen Berechnungen und Algorithmen ist er sinnvoll einsetzbar. Allgemein kann man mit mod prüfen, ob eine Zahl durch eine andere genau teilbar ist, dann ist der Modulo nämlich Null. Andersrum muss man in der Programmierung oft auf ganze Vielfache von einer Zahl ergänzen (z. B. 4 Bytes) und bekommt durch den Modulo heraus, wie viele „Pad-Bytes“ noch fehlen.

Beispiel: Man programmiert eine Uhr und hat die Zeit als Sekundenwert seit 0 Uhr gegeben. Dann kann man den Sekundenwert Mod 3600 berechnen. Ist dieser gleich 0, so weiß man, dass eine volle Stunde angefangen hat. Diese Information kann man nutzen, um z. B. ein akustisches Signal (Gong zur vollen Stunde) auszulösen. Mit der Berechnung Sekundenwert Mod 60 erhält man die Sekunde in der aktuellen Minute, die oftmals von Digitaluhren als letzte zwei Stellen anzeigt werden.
[...]

Quelle: http://de.wikipedia.org/wiki/Division_mit_Rest

ein Beispiel: "Gaußsche Osterformel" :mrgreen:

mfg,
winfy