Elenca i problemi di riferimentoHo uno script che prende l'input dell'utente attraverso una finestra di configurazione e in base a quei dati sui costi di non conformità dei processi informatici. Ho problemi con l'utilizzo dei dati dai codici e dalle disposizioni di input NC (vedere l'immagine allegata o eseguire lo script) come parte della funzione costcoli. L'obiettivo della funzione è rimuovere le righe in cui: DISP.TYPE non è quella che è una delle opzioni di disposizione verificate e quindi per ogni codice immesso crea una nuova colonna che si moltiplica: NC.QTY *: COST. Lo script viene eseguito correttamente tranne quella funzione. L'unica cosa che mi viene in mente è che c'è qualche problema con come ho impostato o riferimento alle diverse liste. Esistono due elenchi per i codici NC e due per la disposizione. Il primo per ciascuno è il risultato della casella di controllo per determinare se è necessario intraprendere un'azione e il secondo contiene i valori da cercare nello script. I codici sono vairable, ma le disposizioni sono hardcoded per corrispondere con le caselle di controllo date.
addcols = Function({},
CCT<<NEW column=""></NEW>Ri: elencare i problemi di riferimentoAndando avanti, ora che ho tutte le colonne per i codici inseriti che appaiono correttamente è quello di creare tabelle di riepilogo per codice NC su diversi intervalli di tempo (mese, anno, ecc.). Ho già eseguito delle tabelle di riepilogo, ma mai con un numero variabile di colonne poiché l'utente può inserire fino a 5 codici NC. C'è un modo per fare questo?
Ri: elencare i problemi di riferimentoCiò rende le cose molto più semplici! Inizierò a utilizzare quel formato da ora in poi.
Ri: elencare i problemi di riferimentoL'aggiunta alla funzione Eval List risolve il problema! Grazie!
Ri: elencare i problemi di riferimentoStavo per suggerire di usare EvalList pure. Quando fai riferimento a "dispchecks [d]", valuta solo la variabile in quella posizione, che non può mai essere uguale a 1. Eval List farà apparire i valori attuali nella lista.
Inoltre, ho un suggerimento per le future dichiarazioni If lunghe. È possibile inserire molte condizioni all'interno della stessa istruzione If, riducendo notevolmente la complessità quando si dispone di un numero elevato di condizioni. Il seguente estratto equivale al gruppo di istruzioni If nella colonna della formula.
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"
);
Ri: elencare i problemi di riferimentoForse l'uso di evallist () è necessario qui. Prova a eseguire questo codice:
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);
Come puoi vedere, evallist () converte i nomi delle variabili in valori reali, che è ciò che penso che tu voglia.
Ri: elencare i problemi di riferimentoCiò ha senso. Grazie per la segnalazione. Ho aggiornato quella sezione dello script, ma sto ancora lottando con il problema originale di fare riferimento alle liste.
Ri: elencare i problemi di riferimentoHo trovato un potenziale problema nel codice:
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>
Se la tua istruzione select non trova nulla, riceverai un messaggio di errore nel registro in cui non viene selezionato nulla. Più sicuro per fare ciò:
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);
);