Cambia formulaCome mostrano gli allegati, la formula della colonna ROW(3) è efficace ma solo per una riga.
La formula della colonna "Used For loop" come mostra il colore sottostante, so che le formule non possono contenere cicli For, quindi rimuovi le parti del ciclo For e modifica " :Scan input[i]" in altre espressioni o altre funzioni da implementare da " : Scansione input[1] " a " : Scansione input[numero riga finale] ", quindi aggiornato automaticamente in base a ciascuna riga della colonna "Scan input". Aiutaci a correggerlo, grazie!
For(i = 1, i <= N Rows(), i++,
If(Is Missing(:Scan input),
"",
If(Col Sum(:Blacklist == :Scan input[i]) > 0,
"NG",
"OK"
)
)
)
Automazione e scriptingEsplorazione e visualizzazione dei datiFinestreRe: Cambia formulaHai affermato che non puoi avere un Ciclo For in una formula. L'affermazione effettiva sui Cicli For nelle formule è che non c'è bisogno di usare un Ciclo For in una formula per eseguire un ciclo su ogni riga in una tabella dati, perché le formule vengono applicate automaticamente a ogni riga.
Ma se è necessario eseguire un ciclo For su ogni riga, allora è sicuramente possibile utilizzarlo.
Ecco 3 modi per scrivere una formula che produrrà quello che credo sia il risultato desiderato

If( Is Missing( :Scan input ),
theResult = "",
theResult = "OK";
For( i = 1, i <= N Rows( Current Data Table() ), i++,
If( :Blacklist == :Scan input[i],
theResult = "NG";
Break();
)
);
);
theResult;
If( Is Missing( :Scan input ),
"",
curBlacklist = :Blacklist;
If( N Rows( Current Data Table() << get rows where( :Scan input == curBlacklist ) ) > 0,
"NG",
"OK"
);
)
As Constant( Summarize( ScanList = by( :Scan input ) ) );
If( Is Missing( :Scan input ),
"",
If( N Rows( Loc( ScanList, :Blacklist ) ) > 0,
"NG",
"OK"
)
);
Re: Cambia formulaGrazie! Tuttavia, il risultato corretto sulle righe 3, 4 e 5 dovrebbe mostrare NG. Non è stato ancora risolto.
Re: Cambia formulaGrazie!Tuttavia, il risultato corretto sulle righe 3 e 5 dovrebbe mostrare NG. Non è stato ancora risolto.
Re: Cambia formulaCome si determina il risultato "NG" o "OK" (a parole, non tramite JSL)?
Re: Cambia formulaTutte le formule che ho fornito esaminano il valore della Black List per una determinata riga e poi esaminano tutte le righe per Scan Input per vedere se c'è una riga che ha lo stesso valore.
Devo aver interpretato male quello che stai cercando di fare. Pensavo che fosse quello che il tuo JSL fornito stava cercando di fare. Puoi descrivere quali sono i risultati desiderati?
Re: Cambia formulaI risultati di tutte le colonne Blacklist sono NG. Lo scenario effettivo è che i prodotti realizzati da un apparecchio sono già noti per essere NG. Devono essere individuati e scansionati nella colonna Scan input con una pistola per codici a barre e NG verrà visualizzato finché il valore della colonna "Scan input" si trova in una qualsiasi riga della colonna Blacklist. Ad esempio, la riga 1 è esattamente uguale, quindi mostra NG, e la riga 3 non è esattamente uguale, ma "X1" appare nella riga 1 della colonna Blacklist, quindi deve mostrare NG.
Re: Cambia formulaRaccogli tutti i valori della blacklist in un elenco/array associativo e confronta il valore delle righe correnti con quello
As Constant(
bl = :Blacklist << get values;
);
If(!IsMissing(:Scan input),
If(Contains(bl, :Scan input),
"NG"
,
"OK"
);
,
""
);

Re: Cambia formulaI risultati di tutte le colonne Blacklist sono NG. In nessun ordine, finché il valore della colonna "Scan input" appare in una qualsiasi riga della colonna Blacklist, verrà visualizzato NG. L'utilizzo della formula semplifica la ricerca del prodotto difettoso durante il processo di scansione.