Aggiornare un valore in base ad un campo calcolato

Come utilizzare i campi. Differenze tra campi calcolati, testo, numero, multipli, contenitori.

Moderatore: Moderatori

Rispondi
marianasu
Messaggi: 1235
Iscritto il: martedì 15 giugno 2004, 2:00
Località: Cagliari
Contatta:

Aggiornare un valore in base ad un campo calcolato

Messaggio da marianasu » venerdì 3 marzo 2006, 18:46

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
FM8.03 Adv.- FM8.5 Adv Windows XP SP2

raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Messaggio da raybaudi » venerdì 3 marzo 2006, 20:28

marianasu ha scritto:In pratica la domanda vera e propria è come posso fare per utilizzare un campo calcolato in una relazione tra due tabelle?
Non ci sono problemi ad utilizzare un campo calcolato per la relazione, sempre che sia possibile indicizzarlo.

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

marianasu
Messaggi: 1235
Iscritto il: martedì 15 giugno 2004, 2:00
Località: Cagliari
Contatta:

Messaggio da marianasu » sabato 4 marzo 2006, 8:37

Ok se è questo il problema, si può aggirare?
Adesso ci provo....se cmq hai già na soluzione alla cosa mi potresti indirizzare?
CIAO M
FM8.03 Adv.- FM8.5 Adv Windows XP SP2

stregatto
Messaggi: 9700
Iscritto il: lunedì 1 dicembre 2003, 1:00
Località: Roma
Contatta:

Messaggio da stregatto » sabato 4 marzo 2006, 9:28

la soluzione è abbastanza semplice… crei un calpo data odierna che aggiorni ad ogni apertura del programma con lo script iniziale, e basi la relazione su quello…

.g.

raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Messaggio da raybaudi » domenica 5 marzo 2006, 0:50

marianasu ha scritto:Ok se è questo il problema, si può aggirare?
La soluzione di Stregatto è già una buona soluzione.

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) !) :wink:
Raybaudi FMP 12 Adv. Windows XP SP3

marianasu
Messaggi: 1235
Iscritto il: martedì 15 giugno 2004, 2:00
Località: Cagliari
Contatta:

Messaggio da marianasu » lunedì 6 marzo 2006, 9:38

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
FM8.03 Adv.- FM8.5 Adv Windows XP SP2

raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Messaggio da raybaudi » lunedì 6 marzo 2006, 10:33

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 ?
Raybaudi FMP 12 Adv. Windows XP SP3

marianasu
Messaggi: 1235
Iscritto il: martedì 15 giugno 2004, 2:00
Località: Cagliari
Contatta:

Messaggio da marianasu » lunedì 6 marzo 2006, 10:49

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!
:lol:
FM8.03 Adv.- FM8.5 Adv Windows XP SP2

Rispondi