Changer la formuleComme le montrent les pièces jointes, la formule de la colonne ROW(3) est efficace mais seulement pour une ligne.
La formule de la colonne « Boucle For utilisée » comme le montre la couleur ci-dessous, je sais que les formules ne peuvent pas contenir de boucles For, donc supprimez les parties de la boucle For et remplacez « :Scan input[i] » par d'autres expressions ou d'autres fonctions à implémenter de « : Scan input[1] » par « : Scan input[end row number] », puis mise à jour automatiquement en fonction de chaque ligne de la colonne « Scan input ». Veuillez aider à corriger cela, merci !
For(i = 1, i <= N Rows(), i++,
If(Is Missing(:Scan input),
"",
If(Col Sum(:Blacklist == :Scan input[i]) > 0,
"NG",
"OK"
)
)
)
Automatisation et scriptsExploration et visualisation des donnéesFenêtresRe: Changer la formuleVous avez déclaré que vous ne pouvez pas avoir de boucle For dans une formule. La déclaration réelle concernant les boucles For dans les formules est qu'il n'est pas nécessaire d'utiliser une boucle For dans une formule pour parcourir chaque ligne d'une table de données, car les formules sont automatiquement appliquées à chaque ligne.
Mais s'il est nécessaire d'exécuter une boucle For sur chaque ligne, elle peut certainement être utilisée.
Voici 3 façons d'écrire une formule qui fera ce que je crois être le résultat souhaité

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: Changer la formuleMerci ! Cependant, le résultat correct sur les lignes 3, 4 et 5 devrait indiquer NG. Ce problème n'a pas encore été résolu.
Re: Changer la formuleMerci!Cependant, le résultat correct sur les lignes 3 et 5 devrait indiquer NG. Ce problème n'a pas encore été résolu.
Re: Changer la formuleComment déterminer le résultat « NG » ou « OK » (en mots, pas en JSL) ?
Re: Changer la formuleLes formules que j'ai fournies examinent toutes la valeur de la liste noire pour une ligne donnée, puis examinent toutes les lignes pour analyser l'entrée afin de voir s'il existe une ligne qui a la même valeur.
J'ai dû mal interpréter ce que vous essayez de faire. Je pensais que c'était ce que votre JSL fourni essayait de faire. Pouvez-vous décrire quels sont les résultats souhaités ?
Re: Changer la formuleLes résultats de toutes les colonnes de la liste noire sont NG. Dans le scénario réel, les produits fabriqués par un appareil sont déjà connus comme étant NG. Ils doivent être détectés et scannés dans la colonne d'entrée Scan avec un lecteur de codes-barres, et NG sera affiché tant que la valeur de la colonne « Scan input » se trouve dans n'importe quelle ligne de la colonne de la liste noire. Par exemple, la ligne 1 est exactement égale, elle affiche donc NG, et la ligne 3 n'est pas exactement égale, mais « X1 » apparaît dans la ligne 1 de la colonne de la liste noire, elle affiche donc NG.
Re: Changer la formuleCollectez toutes les valeurs de la liste noire dans une liste/un tableau associatif et comparez la valeur des lignes actuelles à celle-ci
As Constant(
bl = :Blacklist << get values;
);
If(!IsMissing(:Scan input),
If(Contains(bl, :Scan input),
"NG"
,
"OK"
);
,
""
);

Re: Changer la formuleLes résultats de toutes les colonnes de la liste noire sont NG. Dans aucun ordre, tant que la valeur de la colonne « Entrée de numérisation » apparaît dans une ligne de la colonne de la liste noire, NG sera affiché. L'utilisation de la formule permet de trouver facilement le produit défectueux pendant le processus de numérisation.