Wählen Sie Zeilen aus, die einem beliebigen Wert in einer Liste entsprechenIch hatte ein Problem mit einem komplizierteren Skript und habe ein einfaches Testskript geschrieben, um das Problem zu beheben, kann aber nicht herausfinden, was falsch ist. Es ist wahrscheinlich völlig offensichtlich, aber ich habe es zu lange angeschaut, um es zu bemerken. Ich erstelle eine Tabelle mit :Disposition Type, :NC Code und :NC Qty. Das ursprüngliche Skript benötigt Benutzereingaben, um die Liste der Codes zu erstellen, aber hier habe ich die Liste vordefiniert. Ich möchte für jeden in der Codeliste aufgeführten Code eine Spalte erstellen, die den Wert in „:NC Qty“ kopiert, wenn „:NC Code“ mit dem Code aus der Liste übereinstimmt. Es erkennt Codes[c] zum Benennen der Spalte, jedoch nicht in der Spaltenformel. Ich habe auch versucht, in der Formel „Contains“ anstelle von „==“ zu verwenden, aber das schien keinen Unterschied zu machen.
New Table( "NC Qty Col Test",
Add Rows( 5 ),
New Column( "Disposition Type",
Character,
"Nominal",
Set Values(
{"SCRAP-R", "SCRAP-DNR", "DEVIATE-MATERIAL", "DEVIATE-PROCESS",
"DEVIATE-PRODUCT"}
)
),
New Column( "NC Code",
Character,
"Nominal",
Set Values( {"007", "014", "020", "007", "008"} )
),
New Column( "NC Qty",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3, 4, 5] )
)
);
codes = {"007", "014"};
For(c=1, c<=NItems(codes), c++,
New Column("Code " || codes[c] || " NC Qty", Numeric, Continuous, Formula(If(:NC Code==codes[c], :NC Qty, 0 )));
);Betreff: Wählen Sie Zeilen aus, die mit einem beliebigen Wert in einer Liste übereinstimmenDas Problem ist dasselbe wie im ersten Fall.codes[c] werden im Formular nicht interpretiert. Sie müssen den tatsächlichen Wert für codes[c] in die Formel einsetzen.
For( c = 1, c <= N Items( codes ), c++,
Eval(
Substitute(
Expr(
CF << New Column( "Code " || codes[c] || " Cost",
Numeric,
Continuous,
Format( Currency ),
Formula(
If(
And( :NC Code == __code__, :Disposition Type == "SCRAP-R" ),
:NC Qty with Zeros * :Total Cost,
And( :NC Code == __code__, :Disposition Type == "SCRAP-DNR" ),
:NC Qty with Zeros * :Total Cost,
And( :NC Code == __code__, :Disposition Type == "REWORK" ), 0,
And( :NC Code == __code__, :Disposition Type == "DEVIATE-MATERIAL" ), 0,
And( :NC Code == __code__, :Disposition Type == "DEVIATE-PROCESS" ), 0,
And( :NC Code == __code__, :Disposition Type == "DEVIATE-PRODUCT" ), 0,
0
)
)
)
),
Expr( __code__ ), codes[c]
)
)
);Betreff: Wählen Sie Zeilen aus, die mit einem beliebigen Wert in einer Liste übereinstimmenIch konnte die vorgeschlagene Lösung nutzen, um meine ursprüngliche Frage zu klären, und sie schien sinnvoll zu sein. Dann wurde mir jedoch klar, dass ich einen anderen Teil desselben großen Skripts hatte, der eine sehr ähnliche Aufgabe hatte, um Spalten basierend auf einem Variablenwert aus einer Liste zu erstellen. Was ich nicht verstehe ist, warum das eine funktioniert und das andere nicht. Hier ist der andere Abschnitt des Skripts. In diesem Teil habe ich Kosten im Zusammenhang mit dem NC-Code, die nur für die Dispositionstypen SCRAP-R und SCRAP-DNR gelten sollen. Diese Kosten werden in der Spalte „Gesamtkosten“ aufgeführt.
For(c=1, c<=NItems(codes), c++,
CF<<NEW column=""></NEW>Betreff: Wählen Sie Zeilen aus, die mit einem beliebigen Wert in einer Liste übereinstimmenVielen Dank, dass Sie mir geholfen haben, es herauszufinden! Jede dieser Optionen wäre großartig, um mein Skript zu reparieren!
Betreff: Wählen Sie Zeilen aus, die mit einem beliebigen Wert in einer Liste übereinstimmenDas hier ist etwas knifflig.Wenn Sie Variablen in einer Formel verwenden, müssen Sie diese innerhalb der Formel initialisieren.Aber ich habe es geschafft, ohne Formeln zu verwenden.
dt = New Table( "NC Qty Col Test", Add Rows( 5 ),
New Column( "Disposition Type", Character, "Nominal",
Set Values(
{"SCRAP-R", "SCRAP-DNR", "DEVIATE-MATERIAL", "DEVIATE-PROCESS",
"DEVIATE-PRODUCT"}
)
),
New Column( "NC Code", Character, "Nominal",
Set Values( {"007", "014", "020", "007", "008"} )
),
New Column( "NC Qty", Numeric, "Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 3, 4, 5] )
)
);
codes = {"007", "014"};
For(c = 1, c <= NItems(codes), c++,
dt << New Column("Code " || codes[c] || " NC Qty", numeric, "Continuous")
);
for (k = 1, k <= nitems(codes), k++,
r = dt << get rows where(:NC Code == codes[k]);
colname = "Code " || codes[k] || " NC Qty";
if (nrows(r) > 0,
for (i = 1, i <= nrows(r), i++,
one_row = r[i];
column(dt, colname)[one_row] = column(dt, "NC Qty")[one_row];
);
);
);
Betreff: Wählen Sie Zeilen aus, die mit einem beliebigen Wert in einer Liste übereinstimmenDas Problem besteht darin, dass sich Ihr Wert von „c“ ändert und innerhalb der Formeldefinition nicht statisch ist.Daher müssen Sie erzwingen, dass der Code in der Formel den statischen Wert „codes[c]“ hat.Im Folgenden finden Sie eine Möglichkeit, dies zu tun:
New Table( "NC Qty Col Test",
Add Rows( 5 ),
New Column( "Disposition Type",
Character,
"Nominal",
Set Values( {"SCRAP-R", "SCRAP-DNR", "DEVIATE-MATERIAL", "DEVIATE-PROCESS", "DEVIATE-PRODUCT"} )
),
New Column( "NC Code", Character, "Nominal", Set Values( {"007", "014", "020", "007", "008"} ) ),
New Column( "NC Qty", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3, 4, 5] ) )
);
codes = {"007", "014"};
For( c = 1, c <= N Items( codes ), c++,
Eval(
Substitute(
Expr(
New Column( "Code " || codes[c] || " NC Qty", Numeric, Continuous, Formula( If( :NC Code == __code__, :NC Qty, 0 ) ) )
),
Expr( __code__ ), codes[c]
)
)
);