[gelöst] Filter auf berechnetes Feld

3. Dezember 2009 09:22

Hallo
ich habe in einer Tablebox ein berechnetes Feld (Lagerbestand - Auftragsbestand). Kann ich nun eine Filter auf dieses berechnetes Feld setzen.
Sprich ich möchte nur jene Records sehen, bei welchen diese Feld eine negativen Wert hat.
Die Form hat Item als SourceTable.

lg
stony
Zuletzt geändert von stony am 7. Dezember 2009 13:42, insgesamt 3-mal geändert.

Re: Filter auf berechnetes Feld

3. Dezember 2009 09:28

Sicher. Und wieso versuchst du es nicht einfach aus? :wink:

Re: Filter auf berechnetes Feld

3. Dezember 2009 09:41

Nur leider habe ich keine Ahnung, wie ich es ausprobieren sollte.
Das Feld "Offen" wird in der Tablebox berechnet. Sprich bei der Eigenschaft SourceExpr ist folgendes hinterlegt ->
"Lagerbestand ZELOGISTIK" - "Qty. on Sales Order" , wobei dies beiden Felder vom Record ITem kommen.
Wenn ich die Form starte, kann ich auf dieses Feld keinen Tabellenfilter setzen.
Darum meine Frage.
Alternative ware wahrscheinlich wenn ich diese Feld in der Tabelle Item anlege und berechnen lasse.

Re: Filter auf berechnetes Feld

3. Dezember 2009 09:46

Oh pardon. Ich dachte, du meinst ein Flowfield.

Auf deine Spalte kannst du nicht filtern.

Re: Filter auf berechnetes Feld

3. Dezember 2009 10:08

stony hat geschrieben:"Lagerbestand ZELOGISTIK" - "Qty. on Sales Order" , wobei dies beiden Felder vom Record ITem kommen.

Aber du sagtest doch, dass deine Form auf Item basieren - somit wäre das doch eigentlih ein FlowField? Oder steht davor wirklich Item und nicht Rec oder nichts (wenn ja, warum?).

Wenn ich die Form starte, kann ich auf dieses Feld keinen Tabellenfilter setzen.
Auch nicht über über den Menüpunkt für die Feldfilter durch Direkteingabe des Feldnamens?

Re: Filter auf berechnetes Feld

3. Dezember 2009 10:20

Was meinst du mit FlowField. Das ich dieses in der Tabelle anlege?

Feldfilter: Kann ich diese Spalte in der Form selektiere, passiert beim Klick aud das Symbol Feldfilter nichts.

Re: Filter auf berechnetes Feld

3. Dezember 2009 11:12

Filter können nur auf Spalten angewendet werden, die wirkliche Felder der Tabelle darstellen (egal ob normale Felder oder Flowfields).
Eine Rechenoperation (wie subtrahieren) macht aus den Feldern mehr oder weniger globale Variablen (auch wenn nicht explizit als solche definiert), diese sind über die Standard-Filtermöglichkeiten NICHT filterbar.

Die Frage wäre, ob die Liste wirklich auf einem Formular dargestellt werden muss (etwas komplizierter zu programmieren).
In einem Report wäre so eine Liste recht einfach dargestellt, indem man z.B. nur die Zeilen mit einem negativen Wert andruckt.

Begrifflichkeiten: Flowfields werden überlicherweise als berechnete Felder bezeichnet, somit kann deine Bezeichnung einer "Berechnung in einem Form-Control" etwas verwirren ;-)

Re: Filter auf berechnetes Feld

3. Dezember 2009 11:54

Phae hat geschrieben:Eine Rechenoperation (wie subtrahieren)...
Ach sooooooo, ich hatte die Formel als zwei Einzelfelder (Textboxen) mit einem Gedankenstrich dazwischen interpretiert :lol:

Re: Filter auf berechnetes Feld

3. Dezember 2009 15:38

Wie könnte ich das nun lösen, das ich auf diese Feld filtern kann.
Ich habe keine Idee?

Re: Filter auf berechnetes Feld

3. Dezember 2009 16:20

Wenn es dir nur darum geht, die gesuchten Datensätze anzuzeigen, könntest du das hinter einen Button legen (entsprechenden Datensätze markieren und dann auf die markierten filtern). Wenn du auf der Spalte aber so richtig rumfiltern willst, musst du den Wert in ein Feld kriegen.

Re: Filter auf berechnetes Feld

3. Dezember 2009 16:29

D.h. diese Feld muss in der Tabelle Item sein.

Re: Filter auf berechnetes Feld

3. Dezember 2009 16:59

Was spricht denn dagegen, die Artikel mit zu geringem Lagerbestand zu markieren, oder einen Report zu erstellen oder, falls du die Artikel sehen willst, die bestellt werden müssen, die Neuplanung zu benutzen?

Re: Filter auf berechnetes Feld

3. Dezember 2009 17:14

Mit ein Report kann ich nicht arbeiten, da dies in einer Form dargestellt werden soll.
Markieren: Auf die angezeigten Datensätze sind schon einige Filter gesetzt (z.B. Artikelkategorie usw.). Wenn ich nun mit der Satzmarke arbeite, verliere ich diese Filter.
Hintergrund dieses Forms ist, mit setzen der Filter, zu sehen, was bis wann zu liefern ist. Und da sollte auch die Möglichkeit zu sein, nur Artikel zu sehen, welche eine negative Verfügbarkeit haben.

Re: Filter auf berechnetes Feld

3. Dezember 2009 17:53

Falls du noch weitere Filter auf dem Fenster setzen willst, ist Satzmarkierung eine gängige Lösung, allerdings bei großer Datenmenge nicht sehr performant.

Beispiel wie es aufgerufen werden könnte:

Code:
ItemTab.RESET;
IF ItemTab.FINDSET THEN
  REPEAT
    ItemTab.CALCFIELDS("Lagerbestand ZELOGISTIK", "Qty. on Sales Order"); // wenn beides FlowFields sind
    IF (ItemTab."Lagerbestand ZELOGISTIK" - ItemTab."Qty. on Sales Order") < 0 THEN
      ItemTab.MARK(TRUE);
  UNTIL ItemTab.NEXT = 0;

ItemTab.MARKEDONLY(TRUE);
ItemTab.SETFILTER(...); // weitere Filter vorab setzen
FORM.RUN(FORM::"Dein Artikelform", ItemTab);



mfg
Phae

Re: Filter auf berechnetes Feld

4. Dezember 2009 08:39

Habt ihr vielleicht ein Idee wie ich diese Feld, als Wert in die Tabelle Item bekommen könnte.

Re: Filter auf berechnetes Feld

4. Dezember 2009 09:37

Ich meine das ist die einzige Variante, die bisher geklappt hat.

Neues Feld in der Tabelle Artikel erstellen, z.B. "Verfügbarer Restbestand", dieses Feld in der Form mit einbinden.
Auf dem OnAfterGetRecord der Form einen Report aufrufen, der das Feld "Verfügbarer Restbestand" aktualisiert.

Das wir von der Performance zwar auch nur mässig sein, aber zumidest habt Ihr Eure Daten. (Warum eigentlich keine Report, der könnt doch auch ggf. nach Excel Exportieren!?)

BTW: -->Ohne Report geht das leider nicht. Mit einem Funktionsaufruf kommt die Fehlermeldung "Sie können keine Änderungen an der Datenbank vornehmen, ehe eine Transaktion gestartet wurde!"

Anbei ein Link zum Thema autom. Datensätze einfügen beim Öffnen einer Form

**********************
Mir ist gerade eine Alternative eingefallen, die anzuzeigenden Daten (auf einer neuen Form) auf dem OnInit Trigger berechnen und in einer temporären Tabelle speichern. Die Form bekommt als SourceTable diese Tabelle.
Müsste eigentlich klappen.

Re: Filter auf berechnetes Feld

4. Dezember 2009 09:43

stony hat geschrieben:Markieren: Auf die angezeigten Datensätze sind schon einige Filter gesetzt (z.B. Artikelkategorie usw.). Wenn ich nun mit der Satzmarke arbeite, verliere ich diese Filter.

Wieso solltest du die verlieren?

stony hat geschrieben:Habt ihr vielleicht ein Idee wie ich diese Feld, als Wert in die Tabelle Item bekommen könnte.

Bei jedem Vorgang, die einen der beiden Werte betrifft, den Wert in der Tabelle aktualisieren. Ganz einfach :wink:

Re: Filter auf berechnetes Feld

4. Dezember 2009 09:46

McClane hat geschrieben:
stony hat geschrieben:Markieren: Auf die angezeigten Datensätze sind schon einige Filter gesetzt (z.B. Artikelkategorie usw.). Wenn ich nun mit der Satzmarke arbeite, verliere ich diese Filter.

Wieso solltest du die verlieren?

Das RESET darf in so einem Fall vor dem Setzen der Satzmarken nicht verwendet werden - dann bleibt auch der vorherige Filter erhalten.
Beachte, dass Phae mit einer eigenen Recordvariable (ItemTab) arbeitet und nicht mit Rec.

Re: Filter auf berechnetes Feld

4. Dezember 2009 10:38

Wie könnte ich das mit der TempTable machen.
Mir ist deine Erklärung leider nicht ganz klar.
Muss ich zuerst eine Form mit den Daten aufrufen und dann eine weitere Form oder kann ich in der ersten diese berechnen und auch anzeigen.