選擇與清單中任何值相符的行我遇到了一個更複雜的腳本問題,並編寫了一個簡單的測試腳本來嘗試解決該問題,但無法找出問題所在。 這可能是顯而易見的,但我已經觀察了太長時間而沒有註意到。 我建立一個包含:處置類型、:NC 代碼和:NC 數量的表。 原始腳本需要用戶輸入來建立程式碼列表,但在這裡我預先定義了該列表。 我想為代碼列表中列出的每個代碼建立一個列,如果 :NC Code 與列表中的代碼匹配,則複製 :NC Qty 中的值。 它識別用於命名列的代碼[c],但不識別列公式中的代碼。 我還嘗試在公式中使用 Contains 而不是 ==,但這似乎沒有什麼區別。
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 )));
);回覆:選擇與清單中的任何值相符的行該問題與第一種情況相同。代碼[c]不會在公式中被解釋。 您必須將代碼[c]的實際值代入公式中。
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]
)
)
);回覆:選擇與清單中的任何值相符的行我能夠使用建議的解決方案來解決我原來的問題,而且它似乎很有意義。 然而,後來我意識到我有同一個大腳本的另一部分,它執行非常相似的操作來根據列表中的變數值建立列。 我不明白的是為什麼一個有效而另一個無效。 這是腳本的另一部分。 在這一部分中,我有一個與 NC 代碼相關的成本,該成本僅適用於 SCRAP-R 和 SCRAP-DNR 的處置類型。 此成本列在「總成本」列。
For(c=1, c<=NItems(codes), c++,
CF<<NEW column=""></NEW>回覆:選擇與清單中的任何值相符的行非常感謝你幫我弄清楚! 這些選項中的任何一個都可以很好地修復我的腳本!
回覆:選擇與清單中的任何值相符的行這個有點棘手。當您在公式中使用變數時,您必須在公式內初始化它們。但我沒有使用公式就做到了。
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];
);
);
);
回覆:選擇與清單中的任何值相符的行問題是“c”的值發生變化,並且在公式定義中不是靜態的。因此,您需要強製程式碼在公式中具有靜態值“codes[c]”。下面是一種方法:
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]
)
)
);