Ciao,
Grazie per aver affrontato la questione, di seguito trovate lo script e ho anche allegato il file.
Cancella registro();
DefaultStartTime = (oggi()-12*3600);
DefaultEndTime = Oggi();
Utente = Ottieni variabile d'ambiente( "NomeUtente" );
HourAlertRateDefault = 5;
SixHourAlertRateDefault = 5;
start_week = Settimana dell'anno (Oggi() );
elenco_settimane = {};
Per( i = 1, /*i<=10 e*/ i <= start_week, i++, //i<=10 limita la casella combinata a 10 settimane
//iwwtodate(start_week - (i - 1), year(today()), 2 /*lunedì*/ )
Inserisci in (elenco_settimane, Eval( "WW" || Char( inizio_settimana - (i - 1) ) ) )
);
Utente = Ottieni variabile d'ambiente( "NomeUtente" );
// Definisci la funzione tempo.
iwwtodate = Funzione( {_ww_, _anno_, _giornodellasettimana_},
//Variabili locali
{_ww01quest'anno_ = 0, _domenicaww01_ = 0},
_ww01questoanno_ = Informat( "01Gen" || Char( _anno_ ) );
_sundayww01_ = _ww01thisyear_ - (Giorno della settimana( _ww01thisyear_ ) - 1) * 24 * 3600;
(_ww_ - 1) * 7 * 24 * 3600 + _domenicaww01_ + (_giornodellasettimana_ - 1) * 24 * 3600
;
);
date_box = Function( //crea la casella delle date di Graham che è difficile da sbagliare
{timething = Oggi()},
{nuova casella},
current_ver = Left( Versione JMP(), 2 );
Se (Num(ver_corrente) >= 11,
newbox = Eval(
Sostituire(
Nome Espr(
Casella di modifica numero (
timething, //Eval(Sub()) a causa della stranezza di JMP
10, //ho bisogno solo di questo perché JMP non ha una larghezza predefinita
<
Funzione( {self},
{},
Se(manca(self << get ),
self << Set( Eval( DUMMY ) ) //imposta la data sull'argomento timething
)
)
),
<
)
),
Expr( DUMMY ), cosa temporale
)
)
,
newbox = Casella di modifica testo (Carattere (Formato (Timething, "m/g/aa:m:s" ) ) )
);
//nuova scatola;
);
// Fine Definisci la funzione tempo.
// Crea una finestra popup expr + controllo del tempo
finestra_esp = Espr(
QueryOptionsChooser = Nuova finestra( "Monitoraggio rapido CHT PWL SPL CV" || Utente || "",
<
<
Casella di elenco V (
Casella di testo (" " ),
Pannello Box( "Vuoi che il report si aggiorni automaticamente?",
Casella di riepilogo H (
V Casella di elenco (Casella di testo ("Metodo"), tautorefresh = Casella combinata ({"Esegui una volta", "Aggiornamento automatico"}, Mostra (tautorefresh << Get()))),
Casella di testo (" " ),
Casella di elenco V (
Casella di testo ("Opzione"),
Option_select = Radio Box( {"Entrambi", "Solo SPEC-PL ultimi 30 minuti","Solo PWL, SPL, CV" }, show( Option_select << get() ) )
),
Casella di elenco V (
Casella di testo ("Aggiorna ogni")
trefresh = Radio Box( {"5 minuti", "20 minuti", "60 minuti", "2 ore"}, Show( trefresh << Get() ) )
),
/*
Casella di testo (" " ),
Casella di elenco V (Casella di testo ( "Velocità di aggiornamento " ), rspeed_cb = Casella di controllo ( {"Veloce"} ), rspeed_cb << Set ( 1, 1 ) ),
*/
Casella di testo (" " ),
Casella di riepilogo V (Casella di testo ("Dati intervallo di tempo per aggiornamento automatico"), giorni = Casella di opzione ({"1 giorno", "0,5 giorni", "6 ore", "2 ore"}")),
Casella di testo (" " ),
),
),
/*
Casella del pannello ("Seleziona l'intervallo di tempo",
Casella di riepilogo H (
Casella di elenco V (
//Casella di testo ("Metodo Tempo"),
//metodo=Radio Box( {"Giorni fa", "Intervallo di date"}),
Casella di testo ("Metodo di tempo"),
metodo = Combo Box( {"Giorni fa", "Intervallo di date"} ),
),
Casella di testo (" " ),
V Casella di elenco (Casella di testo ("Giorni fa" ), giorni = Casella di scelta rapida ({"1.5", "3.5", "7", "2 ore"} ) ),
Casella di testo (" " ),
Casella di elenco V (
Casella di testo ("Intervallo di date"),
Casella di elenco V (
startdatebox = date_box( Oggi() - 3.5 * 24 * 60 * 60 );
enddatebox = date_box( Oggi() );
data di inizio = data di iniziobox;,
data di fine = enddatebox,
),
),
),
),
*/
Scatola distanziatrice (dimensione (10, 10)),
Casella di riepilogo H (
Scatola distanziatrice (dimensione (10, 10)),
Pannello Box( "Scegli pianta:",
Casella di riepilogo H (
Scatola distanziatrice (dimensione (10, 0)),
Casella di elenco V( "Pianta", PlantSelect = Radio Box( {"DMT1", "DMT2", "KMT1", "PGT1", "PGT2"} ), PlantSelect << set( 1 ) ),
Scatola distanziatrice (dimensione (10, 0)),
)
),
Scatola distanziatrice (dimensioni (20, 10)),
Pannello Box( "Scegli la finestra temporale della transazione:",
Casella di testo (" " ),
Casella di riepilogo H (
Casella di testo ("Ora di inizio: " ),
StartTimeBox = H Casella di elenco(
StartTimePickBox = date_box( DefaultStartTime );
StartTimePick = StartTimePickBox;
//RocoTimeStartPick = date_box( (StartTimePick << Ottieni) - 3600 );
),
Casella di testo (" " ),
Casella dei pulsanti ("Imposta su 12:00.",
LastTime = StartTimePickBox << Ottieni;
StartTimePickBox << Elimina;
StartTimeBox << Aggiungi(
StartTimePickBox = date_box( 86400 * Floor( LastTime / 86400 ) );
StartTimePick = StartTimePickBox;
//RocoTimeStartPick = date_box( 86400 * Floor( (Ultima ora - 3600) / 86400 ) );
//RocoTimeStartPick = date_box( (StartTimePick << Ottieni) - 3600 );
);
),
),
//RocoTimeStartPick = date_box( (StartTimePickBox << Ottieni) - 3600 );
Casella di testo (" " ),
Casella di riepilogo H (
Casella di testo ("Ora di fine: " ),
EndTimeBox = H Casella di elenco(
EndTimePickBox = date_box( DefaultEndTime );
EndTimePick = EndTimePickBox;
),
Casella di testo (" " ),
Casella dei pulsanti ("Imposta su 12:00.",
LastTime = EndTimePickBox << Ottieni;
EndTimePickBox << Elimina;
EndTimeBox << Aggiungi(
EndTimePickBox = date_box( 86400 * Floor( LastTime / 86400 ) );
EndTimePick = EndTimePickBox;
);
),
),
),
Scatola distanziatrice (dimensione (10, 10)),
),
Scatola distanziatrice (dimensione (20, 20)),
//RocoTimeEndPick = date_box( (EndTimePick << Ottieni) + 3600 );
Casella di riepilogo H (Allinea(a destra), Casella distanziatrice(), Casella pulsante("OK"), Casella pulsante("Annulla"))
) //fine complessiva VListBox()
);
Se(QueryOptionsChooser["Pulsante"] == -1,
Smetti di correre la cosa
);
// Dichiarazione Tempo di aggiornamento.
giorni = giorni << Ottieni;
dateoffset = Match( giorni, 1, "24", 2, "12", 3, "6", 4, "2" );
ar = tautorefresh << ottieni;
ref = trefresh << ottieni;
aggiorna = Match( ref, 1, "5", 2, "20", 3, "60", 4, "120" );
//rspeed = rspeed_cb << ottieni;
//Evento di processo Aggiorna selezionato
Se( ar == 2,
StartTimePick = date_box( Oggi() - Num( dateoffset ) * 3600 );
EndTimePick = date_box( DefaultEndTime );
);
RocoTimeStartPick = date_box( (StartTimePick << Get) - 3600 ); // Ottieni l'ora Roco 1 ora prima dell'ora CHT
RocoTimeEndPick = date_box( (EndTimePick << Get) + 3600 ); // Ottieni l'ora Roco 1 ora dopo l'ora CHT
CHTTimeStartPick = date_box( (StartTimePick << Ottieni) - 1800 );
CHTTimeEndPick = date_box( (EndTimePick << Ottieni) + 1800 );
SPL_PL_start = date_box( (EndTimePick << Ottieni) - 1800 );
SPL_PL_end = date_box( EndTimePick << Ottieni );
//Raccogli le selezioni dell'utente
SelezionePlant = QueryOptionsChooser["SelezionePlant"];
NomeImpianto = Corrispondenza(SelezioneImpianto, 1, "DMT1", 2, "DMT2", 3, "KMT1", 4, "PGT1", 5, "PGT2" );
//show(NomePianta);
StartTimeSelection = Format( StartTimePick << Ottieni, "m/g/yh:m:s" );
EndTimeSelection = Format( EndTimePick << Ottieni, "m/g/yh:m:s" );
RocoTimeStart = Format( RocoTimeStartPick << Ottieni, "m/g/aa:m:s" );
RocoTimeEnd = Format( RocoTimeEndPick << Ottieni, "m/g/aa:m:s" );
CHTTimeStart = Format( CHTTimeStartPick << Ottieni, "g/m/aa:m:s" );
CHTTimeEnd = Format( CHTTimeEndPick << Ottieni, "g/m/aa:m:s" );
SPLPL_timestart = Format( SPL_PL_start << Ottieni, "m/g/aa:m:s" );
SPLPL_timeend = Format( SPL_PL_end << Ottieni, "m/g/aa:m:s" );
option_selection = QueryOptionsChooser["Option_select"];
Stampa(opzione_selezione);
Stampa( NomePianta );
Stampa(SelezioneOraInizio);
Stampa(SelezioneOraFine);
Stampa(RocoTimeStart);
Stampa(RocoTimeEnd);
Stampa( CHTTimeStart );
Stampa( CHTTimeEnd );
Print( refresh || " Tempo di aggiornamento" );
Controllo del tempo di espressione = Espr(
TimeFixWindow = Nuova finestra( "Errore nella selezione dell'ora!",
<
<
Casella di riepilogo H (
Casella di elenco V (
Casella di testo (" " ),
Casella di testo ("L'ora di inizio era successiva all'ora di fine! Vuoi riprovare?" ),
Casella di testo (" " ),
Casella di testo ("Hai scelto:")
Casella di riepilogo H (
Casella di testo (" " ),
Casella di elenco V (
Casella di riepilogo H (Casella di testo ("Ora di inizio: " || SelezioneOraInizio), ),
H Casella di elenco (Casella di testo ("Ora di fine: " || SelezioneOraFine ) )
)
),
Casella di testo (" " ),
Casella di riepilogo H (
Casella di testo ("Ora di inizio: " ),
StartTimePickBox = date_box( DefaultStartTime );
StartTimePick = StartTimePickBox;
),
Casella di testo (" " ),
Casella di riepilogo H (
Casella di testo ("Ora di fine: " ),
EndTimePickBox = date_box( DefaultEndTime );
EndTimePick = EndTimePickBox;
),
Casella di testo (" " ),
)
),
Casella di riepilogo H (Allinea(a destra), Casella distanziatrice(), OKButton = Casella pulsante("OK" ), Casella pulsante("Annulla" ))
);
StartTimeSelection = Format( StartTimePick << Ottieni, "m/g/yh:m:s" );
EndTimeSelection = Format( EndTimePick << Ottieni, "m/g/yh:m:s" );
Se(TimeFixWindow["Pulsante"] == -1,
Smetti di correre la cosa
);
//Ricorrenza secondo necessità
Se( Informat( SelezioneOrarioInizio, "g/m/aa:m:s" ) > Informat( SelezioneOrarioFine, "g/m/aa:m:s" ),
Eval( expr_TimeCheck ),
Valutazione (espr_Scrap_SQL)
);
); //fine expr_TimeCheck
Se( Informat( SelezioneOrarioInizio, "g/m/aa:m:s" ) > Informat( SelezioneOrarioFine, "g/m/aa:m:s" ),
Eval( expr_TimeCheck ),
VisionStartTime = Formato(
Max( Informat( SelezioneOraInizio, "g/m/a ...
"m/g/aa:m:s"
);
Se( Oggi() - Informat( EndTimeSelection, "m/g/yh:m:s" ) > 86400,
VisionEndTime = Formato(
Min( Informat( EndTimeSelection, "m/g/yh:m:s" ), 86400 * Ceiling( (Informat( EndTimeSelection, "m/g/yh:m:s" ) - 86400) / 86400 ) ),
"m/g/aa:m:s"
),
VisionEndTime = Formato(
Min( Informat( VisionStartTime, "m/g/yh:m:s" ) + 86400, Informat( EndTimeSelection, "m/g/yh:m:s" ) ),
"m/g/aa:m:s"
)
);
);
);
SPL_expr = Espr(
QueryInfo = "DRIVER=SQL Server;SERVER=" || NomeImpianto || "MESSQLODS;APP=Microsoft Office XP;WSID=FS-1261;DATABASE=ODS;Connessione_Trusted=Sì";
//QueryInfo = "DRIVER=SQL Server;SERVER=" || NomeImpianto ||
//"messqlods.fs.local;APP=Microsoft Office XP; WSID=FS-10967;DATABASE=ODS;Connessione_attendibile=Sì";