(gelöst) Wert gegen Wertebereich prüfen

12. Oktober 2017 11:46

Hallo in die Runde!

Ich stehe aktuell wieder vor einem Problem bei dem ich die Hilfe des Forums benötige.
Um bestimmte Werte in unsere Arbeitspläne in Abhängigkeit von verschiedenen Angaben zu ziehen, habe ich eine Entscheidungstabelle SPLAENGE angelegt.
Innerhalb dieser wird im Feld "Dimension Value 1" ein Wertebereich von z.B. 1,6..3,999 oder 4,00..5,999, 6,00..7,999, ... angegeben.

Unsere artikelkarten sind um ein Feld Bohrung erweitern in dem der Bohrungsdurchmesser des Endproduktes angegeben wird.
Wie kann ich nun die Bohrung von z.B. 4,5 gegen die Bereichsangabe in der Entscheidungstabelle prüfen lassen um den korrekten Wert aus der Entscheidungstabelle zu bekommen?

Code:
recDecisionTableLine.SETFILTER(recDecisionTableLine.Code, 'SPLAENGE');
recDecisionTableLine.SETFILTER(recDecisionTableLine."Value Code", Maschinengruppe);
recDecisionTableLine.SETRANGE("Dimension Value 1", ?????????????????);


Vielen Dank für Eure Hilfe bereits im Voraus!


MfG
Fuige
Zuletzt geändert von fuige am 12. Oktober 2017 15:19, insgesamt 1-mal geändert.

Re: Wert gegen Wertebereich prüfen

12. Oktober 2017 12:16

Für Bereichsvergleiche gibt es den IN-Operator.
Die Bereichsgrenzen kann man mit GETRANGEMIN und GETRANGEMAX ermitteln, dazu ggf. auf eine willkürliche Tabelle mit einem Codefeld filtern und Filter mit diesen Funktionen auswerten.
GETRANGEMAX Function (Record)
Die Dimensionswerte (Codefeld) zum Abgleich mit EVALUATE in ein Decimal umwandeln und daraus jeweils den numerischen Bereich für den IN-Operator erstellen.
Beispiele zum IN-Einsatz hier am Ende:
https://forum.mibuso.com/discussion/327 ... mal-values

Re: Wert gegen Wertebereich prüfen

12. Oktober 2017 12:31

du kannst allerdings an der stelle auch ungefähr so arbeiten:

Code:
recDecisionTableLine.SETFILTER(recDecisionTableLine.Code, 'SPLAENGE');
recDecisionTableLine.SETFILTER(recDecisionTableLine."Value Code", Maschinengruppe);
IF SPLAENGE.FINDSET THEN
  REPEAT
    recDecisionTableLine.SETFilter("Dimension Value 1", SPLAENGE.rangefeld);
    IF NOT recDecisionTableLine.ISEMPTY THEN BEGIN
      //
    END;
  UNTIL SPLAENGE.NEXT = 0


Kommt aber darauf an was du vor hast.

Re: Wert gegen Wertebereich prüfen

12. Oktober 2017 12:32

Danke!
Muss mir das gleich mal in Ruhe ansehen.

Re: Wert gegen Wertebereich prüfen

12. Oktober 2017 13:06

Hi!

Im Angang ein Screenshot der Entscheidungstabelle zum evtl. besseren Verständnis was ich erreichen möchte.
Innerhalb des Arbeitsplan existiert bei uns ein Feld Spindelzeit.
Wird dieses mit einem Wert gefüllt, so soll Navision anhand von Arbeitsplatzgruppe z.B. 21218 und der am Artikel angegebenen Bohrung die Spindellänge (Spalte Wert der Entscheidungstabelle) in der Spalte Spindellänge des Arbeitsplan hinterlegen.
Der am Artikel hinterlegte Bohrungsdurchmesser muss gegen die Bereichsangabe in Spalte Dimensionswert 1 geprüft werden um die korrekte Spindellänge zurück zu geben.

Gruß
Fuige
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Wert gegen Wertebereich prüfen

12. Oktober 2017 13:55

Wenn ich es richtig verstehe, sind GETRANGEMIN und GETRANGEMAX hier für meinen Fall nicht verwendbar.
Ich kann ja keinen Filter auf "Dimension Value 1" setzen da ich ja genau hier mit irgend einen Zwischenwert (Bohrungsdurchmesser) suchen möchte.

Re: Wert gegen Wertebereich prüfen

12. Oktober 2017 14:31

GETRANGEMIN und GETRANGEMAX dienen dazu, den Minimal und Maximalwert des definierten Bereichs (also des Filterausdrucks) zu ermitteln und z.B. 2 Variablen zuzuweisen, gegen die man den Prüfwert vergleichen kann.

Re: Wert gegen Wertebereich prüfen

12. Oktober 2017 14:37

Dann müsste doch so etwas funktionieren.

Code:
Unten := recDecisionTableLine.GETRANGEMIN("Dimension Value 1");


Ich erhalte aber immer den Fehler das ich auf "Dimension Value 1" filtern soll.
Ich habe ja aber bis zu diesem Zeitpunkt noch nichts zu filtern.

Irgendwie stehe ich auf dem Schlauch!

Re: Wert gegen Wertebereich prüfen

12. Oktober 2017 14:58

Ich habe nun den Bereich in die beiden Felder Dimension Value 1 und Dimension Value 2 aufgeteilt und anschl. folgenden Code verwendet.
Code:
recDecisionTableLine.SETFILTER(recDecisionTableLine.Code, 'SPLAENGE');
recDecisionTableLine.SETFILTER(recDecisionTableLine."Value Code", Maschinengruppe);
IF recDecisionTableLine.FINDset THEN REPEAT
   recDecisionTableLine.SETFILTER("Dimension Value 1", '<=%1', FORMAT(recItem.Bore));
   recDecisionTableLine.SETFILTER("Dimension Value 2", '>=%1', FORMAT(recItem.Bore));

   EVALUATE(Spindellaenge, recDecisionTableLine.Value);
UNTIL recDecisionTableLine.NEXT = 0;


Somit funktioniert meine Anforderung nun wie gewollt.

Euch beiden dennoch vielen Dank für die Lösungsansätze und eure Zeit.

Gruß
Fuieg

Re: Wert gegen Wertebereich prüfen

12. Oktober 2017 15:02

Ich erhalte aber immer den Fehler das ich auf "Dimension Value 1" filtern soll.
Ich habe ja aber bis zu diesem Zeitpunkt noch nichts zu filtern.


Filter anwenden, dann Eckdaten auswerten. Die verwendete Tabelle ist dabei völlig egal. Die dient nur als Hilfsgerüst, um den Filter einzusetzen.
Wie im verlinkten Artikel oben für OBEN
Code:
CustomerRec.SETFILTER("No.",'100..200');
Val := CustomerRec.GETRANGEMAX("No.");
MESSAGE(Text000, Val);

ergibt Val = 200.

Mit deinen Werten sinngemäß für UNTEN
Code:
CustomerRec.SETFILTER("No.",'%1',recDecisionTableLine."Dimension Value 1");
Unten := CustomerRec.GETRANGEMIN("No.");