Lista de problemas de referenciaTengo una secuencia de comandos que toma la información del usuario a través de una ventana de configuración y en base a esa información procesa los datos de costos de no conformidad. Tengo problemas con el uso de los datos de los códigos y disposiciones NC de entrada (vea la imagen adjunta o ejecute el script) como parte de la función costcols. El objetivo de la función es eliminar cualquier fila donde: DISP.TYPE no sea una de las opciones de disposición verificadas y luego, para cada código ingresado, cree una nueva columna que se multiplique: NC.QTY *: COSTO. El script se ejecuta correctamente a excepción de esa función. Lo único en lo que puedo pensar es que hay algún problema con la forma en que configuro o hago referencia a las diferentes listas. Hay dos listas para los códigos NC y dos para la disposición. El primero para cada uno es el resultado de la casilla de verificación para determinar si se debe realizar una acción y el segundo contiene los valores que se deben buscar en el script. Los códigos son aceptables, pero las disposiciones están codificadas para que se correspondan con las casillas de verificación dadas.
addcols = Function({},
CCT<<NEW column=""></NEW>Re: Lista de problemas de referenciaAvanzando, ahora que tengo todas las columnas para que los códigos ingresados se muestren correctamente es para crear tablas de resumen por código NC en diferentes rangos de tiempo (mes, año, etc.). He hecho tablas de resumen antes, pero nunca con un número variable de columnas, ya que el usuario puede ingresar hasta 5 códigos NC. ¿Hay alguna forma de hacer esto?
Re: Lista de problemas de referencia¡Eso hace las cosas mucho más simples! Voy a empezar a usar ese formato de ahora en adelante.
Re: Lista de problemas de referencia¡Añadir la función Lista de Eval solucionó el problema! ¡Gracias!
Re: Lista de problemas de referenciaYo iba a sugerirte que uses EvalList también. Cuando hace referencia a "dispchecks [d]" solo se evalúa a la variable en esa posición, que nunca puede ser igual a 1. La lista de evaluación hará que los valores reales aparezcan en la lista.
Además, tengo un consejo para futuras declaraciones If. Puede poner muchas condiciones dentro de la misma instrucción If, reduciendo en gran medida la complejidad cuando tiene una gran cantidad de condiciones. El extracto a continuación es equivalente al grupo de declaraciones If en la columna de su fórmula.
If(
Month( :DETECT.DATE ) == 1, "January",
Month( :DETECT.DATE ) == 2, "February",
Month( :DETECT.DATE ) == 3, "March",
Month( :DETECT.DATE ) == 4, "April",
Month( :DETECT.DATE ) == 5, "May",
Month( :DETECT.DATE ) == 6, "June",
Month( :DETECT.DATE ) == 7, "July",
Month( :DETECT.DATE ) == 8, "August",
Month( :DETECT.DATE ) == 9, "September",
Month( :DETECT.DATE ) == 10, "October",
Month( :DETECT.DATE ) == 11, "November",
Month( :DETECT.DATE ) == 12, "December",
"You did something wrong"
);
Re: Lista de problemas de referenciaTal vez el uso de evallist () sea necesario aquí. Intenta ejecutar este código:
code1a = "aaa";
code2a = "bbb";
code3a = "ccc";
code4a = "ddd";
code5a = "eee";
codechecks1 = {code1a, code2a, code3a, code4a, code5a};
codechecks2 = evallist({code1a, code2a, code3a, code4a, code5a});
print(codechecks1);
print(codechecks2);
Como puede ver, evallist () convierte los nombres de las variables a sus valores reales, que es lo que creo que quiere.
Re: Lista de problemas de referenciaEso tiene sentido. Gracias por señalarlo. He actualizado esa sección del script, pero todavía estoy luchando con el problema original de hacer referencia a las listas.
Re: Lista de problemas de referenciaEncontré un punto potencial de problemas en tu código:
CCT<SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN>Select Where<SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">:</SPAN>DISP<SPAN class="token punctuation">.</SPAN>TYPES <SPAN class="token operator">==</SPAN> <SPAN class="token string">"NOTDEFINED"</SPAN> <SPAN class="token operator">|</SPAN> <SPAN class="token punctuation">:</SPAN>DISP<SPAN class="token punctuation">.</SPAN>TYPES <SPAN class="token operator">==</SPAN> <SPAN class="token string">"DEVIATE"</SPAN> <SPAN class="token operator">|</SPAN> <SPAN class="token punctuation">:</SPAN>DISP<SPAN class="token punctuation">.</SPAN>TYPES <SPAN class="token operator">==</SPAN> <SPAN class="token string">"REVIEWED & REVERSED"</SPAN> <SPAN class="token operator">|</SPAN> <SPAN class="token punctuation">:</SPAN>DISP<SPAN class="token punctuation">.</SPAN>TYPES <SPAN class="token operator">==</SPAN> <SPAN class="token string">"SCRAP"</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
CCT<SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN>Delete Rows<SPAN class="token punctuation">;</SPAN>
CCT<SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN>Clear Select<SPAN class="token punctuation">;</SPAN>
Si su declaración de selección no encuentra nada, recibirá un mensaje de error en el registro acerca de que no se seleccionó nada. Más seguro hacer esto:
del_rows = CCT << get rows Where(:DISP.TYPES == "NOTDEFINED" | :DISP.TYPES == "DEVIATE" | :DISP.TYPES == "REVIEWED & REVERSED" | :DISP.TYPES == "SCRAP");
if (nrows(del_rows) > 0,
cct << delete rows(del_rows);
);