Aggiornare un valore in base ad un campo calcolato
Moderatore: Moderatori
-
- Messaggi: 1235
- Iscritto il: martedì 15 giugno 2004, 2:00
- Località: Cagliari
- Contatta:
Aggiornare un valore in base ad un campo calcolato
Ciao a tutti,
Ho il seguente problema.
Ho un campo calcolato (VALIDITA') che mi da la validità di un contratto in base ad una data. Quidni mi dice OK se la data di scadenza è maggiore della data odierna.
Vorrei utilizzare il valre del campo calcolato per relazionarmi ad un altra tabella ma non è possibile farlo. FM me lo vieta, mi dice che la relazione non è valido.
Ho provato ad utilizzare un escamotage che però non funziona correttamente.
Ovvero ho fatto un campo testo (VALIDITIA' COPIA) che all'immissione ha come valore calcolato il valore del campo VALIDITA'.
Per cui come inserisco la data di scadenza del contratto funziona correttamente.
Quando però il campo VALIDITA' cambia da OK in scaduto perchè la data odierna è maggiore della data di scadenza, il campo testo VALIDITA' COPIA non si aggiorna a meno che io non vada sulla data di scadenza e la riscriva.
Come posso fare per fare in modo che il campo VALIDITA' COPIA sia sempre uguale al campo calcolato VALIDITA' ?
In pratica la domanda vera e propria è come posso fare per utilizzare un campo calcolato in una relazione tra due tabelle?
Grazie M
Ho il seguente problema.
Ho un campo calcolato (VALIDITA') che mi da la validità di un contratto in base ad una data. Quidni mi dice OK se la data di scadenza è maggiore della data odierna.
Vorrei utilizzare il valre del campo calcolato per relazionarmi ad un altra tabella ma non è possibile farlo. FM me lo vieta, mi dice che la relazione non è valido.
Ho provato ad utilizzare un escamotage che però non funziona correttamente.
Ovvero ho fatto un campo testo (VALIDITIA' COPIA) che all'immissione ha come valore calcolato il valore del campo VALIDITA'.
Per cui come inserisco la data di scadenza del contratto funziona correttamente.
Quando però il campo VALIDITA' cambia da OK in scaduto perchè la data odierna è maggiore della data di scadenza, il campo testo VALIDITA' COPIA non si aggiorna a meno che io non vada sulla data di scadenza e la riscriva.
Come posso fare per fare in modo che il campo VALIDITA' COPIA sia sempre uguale al campo calcolato VALIDITA' ?
In pratica la domanda vera e propria è come posso fare per utilizzare un campo calcolato in una relazione tra due tabelle?
Grazie M
FM8.03 Adv.- FM8.5 Adv Windows XP SP2
-
- Messaggi: 3616
- Iscritto il: sabato 7 febbraio 2004, 1:00
- Località: Roma
- Contatta:
Non ci sono problemi ad utilizzare un campo calcolato per la relazione, sempre che sia possibile indicizzarlo.marianasu ha scritto:In pratica la domanda vera e propria è come posso fare per utilizzare un campo calcolato in una relazione tra due tabelle?
Il tuo problema nasce dal fatto che vuoi usare Get(CurrentDate) nel calcolo, ma devi per forza definire il calcolo NON MEMORIZZATO perchè la data possa aggiornarsi, e quindi la relazione diventa impossibile.
Raybaudi FMP 12 Adv. Windows XP SP3
-
- Messaggi: 1235
- Iscritto il: martedì 15 giugno 2004, 2:00
- Località: Cagliari
- Contatta:
-
- Messaggi: 9700
- Iscritto il: lunedì 1 dicembre 2003, 1:00
- Località: Roma
- Contatta:
-
- Messaggi: 3616
- Iscritto il: sabato 7 febbraio 2004, 1:00
- Località: Roma
- Contatta:
La soluzione di Stregatto è già una buona soluzione.marianasu ha scritto:Ok se è questo il problema, si può aggirare?
Ricordati comunque dell'esistenza di quel simpatico plugin... EventScript !
Ad esempio:
1) campo: DataOdierna (calcolato non memorizzato risultato data):
Get ( CurrentDate ) & S4HU_EventScript( Get(FileName) ; "CurrentDate" ; Get ( CurrentDate ) )
2) campo: DataOdiernaDaScript (data)
3) Script ("CurrentDate"):
Replace Field Contents [No dialog;DataOdiernaDaScript;Get( ScriptParameter )]
La relazione la baserai sul campo: DataOdiernaDaScript
(tra parentesi, questo modo di utilizzare EventScript, va bene per tutte quelle funzioni Get() che possono aggiornarsi solo se non memorizzate, come per esempio la Get(FoundCount) !)

Raybaudi FMP 12 Adv. Windows XP SP3
-
- Messaggi: 1235
- Iscritto il: martedì 15 giugno 2004, 2:00
- Località: Cagliari
- Contatta:
Scusate se insisto, ma il mio problema descritto in precedenza lo avevo semplificato per renderlo più comprensibile.
Le soluzioni che mi avete dato per il problema che vi avevo sottoposto sono otttime.
Però in realtà il campo calcolato che io chiamo validità è così definito.
Casi ( Data_Oggi > Data_Scadenza_Contratto; "Scaduto";
EVuoto ( Controllo_Giorno_Validità_Contratto) ;"Giorno non valido";
not EVuoto ( Gettone ) and Gettone = 0; "Gettoni esauriti";
Controllo_Ora_Validità_Contratto ≠ "OK";"Ora non valida";
Contratto_Sospeso=1;"Sospeso";
"OK" )
Quindi non è importante solo un controllo sulla data di scadenza del contratto ma anche su una serie di altri parametri.
La relazione è fatta tra una tabella CLIENTI ed una tabella REL_CONTRATTI_CLIENTI.
Quando un cliente passa il badge io vado al record correlato dalla tabella CLIENTI alla tabella alla tabella REL_CONTRATTI_CLIENTI tale che CLIENTI::ID_CLIENTE=REL_CONTRATTI_CLIENTI::ID_CLIENTE e CLIENTI::OK(globale sempre uguale ad OK)=REL_CONTRATTI_CLIENTI::VALIDITA'.
Come posso procedere affinchè questa relazione funzioni?
GRAZIE M
Le soluzioni che mi avete dato per il problema che vi avevo sottoposto sono otttime.
Però in realtà il campo calcolato che io chiamo validità è così definito.
Casi ( Data_Oggi > Data_Scadenza_Contratto; "Scaduto";
EVuoto ( Controllo_Giorno_Validità_Contratto) ;"Giorno non valido";
not EVuoto ( Gettone ) and Gettone = 0; "Gettoni esauriti";
Controllo_Ora_Validità_Contratto ≠ "OK";"Ora non valida";
Contratto_Sospeso=1;"Sospeso";
"OK" )
Quindi non è importante solo un controllo sulla data di scadenza del contratto ma anche su una serie di altri parametri.
La relazione è fatta tra una tabella CLIENTI ed una tabella REL_CONTRATTI_CLIENTI.
Quando un cliente passa il badge io vado al record correlato dalla tabella CLIENTI alla tabella alla tabella REL_CONTRATTI_CLIENTI tale che CLIENTI::ID_CLIENTE=REL_CONTRATTI_CLIENTI::ID_CLIENTE e CLIENTI::OK(globale sempre uguale ad OK)=REL_CONTRATTI_CLIENTI::VALIDITA'.
Come posso procedere affinchè questa relazione funzioni?
GRAZIE M
FM8.03 Adv.- FM8.5 Adv Windows XP SP2
-
- Messaggi: 3616
- Iscritto il: sabato 7 febbraio 2004, 1:00
- Località: Roma
- Contatta:
Ciao Mariano
non capisco...
fermo restando quello che ti ho detto, il seguente calcolo:
Casi ( DataOdiernaDaScript > Data_Scadenza_Contratto; "Scaduto";
EVuoto ( Controllo_Giorno_Validità_Contratto) ;"Giorno non valido";
not EVuoto ( Gettone ) and Gettone = 0; "Gettoni esauriti";
Controllo_Ora_Validità_Contratto ≠ "OK";"Ora non valida";
Contratto_Sospeso=1;"Sospeso";
"OK" )
non funziona ?
non capisco...
fermo restando quello che ti ho detto, il seguente calcolo:
Casi ( DataOdiernaDaScript > Data_Scadenza_Contratto; "Scaduto";
EVuoto ( Controllo_Giorno_Validità_Contratto) ;"Giorno non valido";
not EVuoto ( Gettone ) and Gettone = 0; "Gettoni esauriti";
Controllo_Ora_Validità_Contratto ≠ "OK";"Ora non valida";
Contratto_Sospeso=1;"Sospeso";
"OK" )
non funziona ?
Raybaudi FMP 12 Adv. Windows XP SP3
-
- Messaggi: 1235
- Iscritto il: martedì 15 giugno 2004, 2:00
- Località: Cagliari
- Contatta:
Ciao Daniele, il tuo metodo non funziona per il semplice fatto che nella fuinzione casi ci sono anche altri due casi con campi calcolati
ovvero
Controllo_Giorno_Validità_Contratto definito come (RicavaRipetizioni ( Contratti::giorni validi; GiornodiSettimana ( Get ( DataCorrente ) ))
Controllo_Ora_Validità_Contratto definito come (If(EVuoto ( Contratti::Orario_Entrata_1 ) and EVuoto ( Contratti::Orario_Uscita_1) and EVuoto ( Contratti::Orario_Entrata_2 ) and EVuoto (Contratti::Orario_Uscita_2 );"OK";
If ( Get ( OraCorrente ) > Contratti::Orario_Entrata_1 and Get ( OraCorrente ) < Contratti::Orario_Uscita_1 or Get ( OraCorrente ) > Contratti::Orario_Entrata_2 and Get ( OraCorrente ) < Contratti::Orario_Uscita_2; "OK"; "ora non valida"))
quindi probabilmente dovrei fare anche per loro lo stesso lavoro che ho fatto sopra.
Ho provato con solo il primo caso con la tua funzione e va che è una meraviglia.
Adesso mi ci metto sotto grazie mille per l'aiuto!

ovvero
Controllo_Giorno_Validità_Contratto definito come (RicavaRipetizioni ( Contratti::giorni validi; GiornodiSettimana ( Get ( DataCorrente ) ))
Controllo_Ora_Validità_Contratto definito come (If(EVuoto ( Contratti::Orario_Entrata_1 ) and EVuoto ( Contratti::Orario_Uscita_1) and EVuoto ( Contratti::Orario_Entrata_2 ) and EVuoto (Contratti::Orario_Uscita_2 );"OK";
If ( Get ( OraCorrente ) > Contratti::Orario_Entrata_1 and Get ( OraCorrente ) < Contratti::Orario_Uscita_1 or Get ( OraCorrente ) > Contratti::Orario_Entrata_2 and Get ( OraCorrente ) < Contratti::Orario_Uscita_2; "OK"; "ora non valida"))
quindi probabilmente dovrei fare anche per loro lo stesso lavoro che ho fatto sopra.
Ho provato con solo il primo caso con la tua funzione e va che è una meraviglia.
Adesso mi ci metto sotto grazie mille per l'aiuto!

FM8.03 Adv.- FM8.5 Adv Windows XP SP2