Newsgroup: it.comp.appl.access
Titolo: Collegamento caselle associate

Ciao
In una maschera ho un flag di conferma di avvenuto pagamento, dandogli la
spunta mi esce automaticamente la data, io vorrei che oltre alla data nella
casella associata 'acconto' mi inserisca automaticamente l'importo della
fattura della casella associata 'versato' che a sua volta mi viene data
calcolandola da una sottocartella.
Casella 'acconto' in quanto, visto che a volte l'utente pagando con un
c.c.p. o altro, non paga l'intero importo, per avere in un'altra casella
associata 'rimanenza'  la differenza da incassare.
Ho modificato il codice del flag in questo modo:
Private Sub Pagato_AfterUpdate()
If Me![Pagato] = True Then    'flag di spunta'
    Me![Data Pagamento] = Date
    Me![Liquidato] = [versato]
Else
    Me![Data Pagamento] = ""
    Me![Liquidato] = ""   'mi cancella l'importo tolta la spunta'
    Me![Rimanenza] = ""  'mi cancella l'importo tolta la spunta'
End If
End Sub
Mentre l'originale era:
Private Sub Pagato_AfterUpdate()
If Me![Pagato] = True Then    'flag di spunta'
    Me![Data Pagamento] = Date
Else
    Me![Data Pagamento] = ""
End If
End Sub
Il tutto diciamo che funziona, però se inserisco l'importo incassato diverso
da quello che dovrei ricevere ho un errore di run time 2110 Impossibile
spostare lo stato attivo al controllo 'Da Pagare' controllo che serve per
immettere il valore sulla tabella utenti. Tenete presente che comunque il
calcolo viene effettuato.
Questo è il codice:
Private Sub Da_Pagare_GotFocus()
Me.Da_Pagare = Me.versato
End Sub
Private Sub Form_Current()
End Sub
Private Sub Liquidato_AfterUpdate()
Me!Rimanenza = Me![versato] - [Liquidato]
Me.Da_Pagare.SetFocus
End Sub
Naturalmente prima che effettuavo le mie modifiche non avevo alcun problema.
spero di essere stato abbastanza chiaro
Grazie
Massimo

 ha scritto nel messaggio
news:93rpui$972$1...@lacerta.tiscalinet.it...

Prova ad eliminare la routine:
Private Sub Da_Pagare_GotFocus()
Me.Da_Pagare = Me.versato
End Sub
e modifica la routine "Dopo aggiornamento" del controllo Liquidato in
Private Sub Liquidato_AfterUpdate()
Me!Rimanenza = Me![versato] - [Liquidato]
Me.Da_Pagare = Me.versato
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------

 Roberto
------
Perfetto come sempre.
Ieri avevo trovato una soluzione, anche se poco elegante, dopo vari
tentativi ho notato che l'errore usciva quando rendevo la casella
'Da_Pagare' non visibile sulla maschera, allora dandogli i colori della
maschera  ho risolto il problema!
Perň adesso mi chiedo perchč? Cosa c'entra, se rendere visibile o meno la
casella di testo per il funzionamento del codice?
Avrei un'altro problema con i filtri. Come ho detto in precedenza nella
maschera č presente una sottomaschera 'sottoutenti' Se lancio dal menů
strumenti il 'filtro maschera', inserisco la voce da ricercare nella
sottomaschera, quando applico il filtro non ottengo alcun risultato.
Ciao e Grazie
Massimo

 Massimo


 principale.
Ciao
Allora ci debbo rinunciare, a meno che non copio i dati anche sulla maschera
principale.
    Stamattina in ufficio (il solito pignolo) mi ha fatto notare, sempre
tornando al discorso della casella di spunta, se č mancante sulla casella
'rimanenza' dovrebbe essere indicato l'intero importo della fattura e non
solo la differenza tra l'importo della fattura ed il pagato. Ricapitolando:
Flag di spunta 'Pagato' se attivo mi inserisce automaticamente la data del
versamento e l'importo della fattura nella casella associata 'liquidato' che
viene copiato dalla casella associata 'Versato'
Nella casella associata 'versato' ho l'intero importo della fattura che mi
viene dato da una espressione che mi va a contare le quote della
sottomaschera sottoutenti e le moltiplica per il valore della quota.
Se l'utente non paga l'intero importo della fattura sulla casella associata
'rimanenza' mi viene calcolato la differenza.
Senza flag di spunta al momento ho solo il dato della casella associata
'versato' e se inserito erroneamente quando viene tolto mi ripulisce tutto.
Sin qui non ci sono problemi.
Adesso mi occorrerebbe che senza il flag, sulla casella 'Rimanenza' mi
compaia l'intero importo della fattura, (molto comodo per sapere ancora cosa
si deve ancora incassare) naturalmente senza rinunciare al discorso del flag
inserito erroneamente.
Per una migliore comprensione inserisco il codice vb:
Private Sub Da_Pagare_gotFocus()
Me.Da_Pagare = Me.Rimanenza  'Riporta il valore da incassare sulla tabella
Da_Pagare'
End Sub
----
Private Sub Liquidato_AfterUpdate()
Me!Rimanenza = Me![versato] - [Liquidato]
Me.Da_Pagare.SetFocus
End Sub
-----
Private Sub Pagato_AfterUpdate()
If Me![Pagato] = True Then   'Flag di spunta'
    Me![Data Pagamento] = Date
    Me!Liquidato = versato
Else
    Me![Data Pagamento] = ""
    Me!Liquidato = ""
    Me!Rimanenza = ""
    Me.Da_Pagare = ""
End If
End Sub
--------
Grazie
Massimo

 tornando al discorso della casella di spunta, se è mancante sulla casella

Quanto a cautelarsi dal fatto di modificare accidentalmente il flag, a
fronte dell'evento "Prima di aggiornare" del controllo relativo al flag,
tramite una MsgBox, chiedi conferma all'operatore se vuole veramente
modificare il flag, e se la risposta è no, tramite il comando Undo (vedi
help) annulla la modifica.
Quanto al resto, se fa quello che volevi, vuol dire che è OK.


 Roberto
Veramente non fa tutto che volevo, non riesco ad avere tutto l'importo della
fattura su 'Rimanenza' quando il flag non č spuntato.
Ciao
Massimo


Scusami ma la tua realizzazione mi sembra un pochino contorta. Fra l'altro
non capisco perché, dopo che, con tua piena soddisfazione, avevamo tolto il
giochino del SetFocus mi vedo riproporre un codice VBA vecchia maniera.
Io ho capito che nel controllo Versato c'è l'importo della fattura, che nel
controllo Liquidato digiti ciò che il cliente ti paga e contiene un valore
non significatovo (zero o null) se il cliente non ti ha pagato; non ho
capito invece che differenza c'è tra il controllo Rimanenza ed il controllo
Da_Pagare (mi sembra che contengano sempre gli stessi valori), pertanto nel
mio ragionamento del secondo controllo non terrò conto.
Mi sembra che tu abbia asserito (causa il pignolo) che è vero che Rimanenza
è SEMPRE uguale alla differenza tra Versato e Liquidato, infatti se il
cliente non ha pagato Rimanenza deve assumere il controllo di Versato
(ovvero della fattura).
Se così è non ho capito a che ti serve il flag Pagato (visto la possibilità
di errore in cui puoi accidentalmente incorrere); tutti i tuoi test per
sapere se un cliente ha pagato li puoi fare basandoti sul fatto che il
controllo Liquidato sia significativo o meno.
Insomma a fronte dell'evento "Su corrente" della tua maschera genererei il
seguente codice VBA:
If IsNull(Me!Liquidato) OR Me!Liquidato=0 Then
    Me!Liquidato=0
    Me![Data Pagamento] = ""
End If
Me!Rimanenza = Me!Versato - Me!Liquidato
e a fronte dell'evento "Dopo aggiornamento"  del controllo Liquidato
genererei il seguente codice VBA:
If IsNull(Me!Liquidato) OR Me!Liquidato=0 Then
    Me!Liquidato=0
    Me![Data Pagamento] = ""
Else
    Me![Data Pagamento] = Date()
End If
Me!Rimanenza = Me!Versato - Me!Liquidato
Ti sconsiglio di effettuare calcoli a fronte dell'evento "Su attivato" di un
controllo; tale calcolo ti verrà eseguito anche se accidentalmente ti ci
posizioni con il mouse o con il tasto Invio o Tabulazione.
Io la vedo così, ora decidi tu.


 Io la vedo così, ora decidi tu.
Inserito il tuo codice e disabilitato per il momento il discorso del flag
ottengo questi risultati:
All'apertura della maschera, senza aver inserito alcun dato sul controllo
Liquidato, sul controllo Rimanenza non appare nulla. Se inserisco l'importo
pagato uguale od inferiore al controllo Versato mi da automaticamente la
data del versamento e l'eventuale differenza degli importi, se però dopo
aver fatto operazioni su altri record ci ritorno con grande stupore, sul
controllo Rimanenza mi compare il valore del controllo Liquidato in
negativo, cioè tanto per essere più chiari, incasso L.10.000 e su Rimanenza
ho L.0 se poi ritorno sul record su controllo Rimanenza mi appare  - L.
10.000.
Può dipendere dal fatto che il controllo versato ha come origine la somma
dei sottoutenti della sottomaschera moltiplicata l'importo della quota. Sul
controllo Versato il valore mi esce leggermente in ritardo rispetto agli
altri dati.
Comunque mi è molto comodo il flag Pagato, il tempo di digitazione si riduce
notevolmente.
Allego il codice attuale:
Private Sub Form_Current()
If IsNull(Me!Liquidato) Or Me!Liquidato = 0 Then
    Me!Liquidato = 0
    Me![Data Pagamento] = ""
End If
Me!Rimanenza = Me.versato - Me!Liquidato
End Sub
Private Sub Form_Open(Cancel As Integer)
   'Personalizza l'icona della barra del titolo della Form
   Call SendMessage(hWnd, WM_SETICON, 0, ByVal LoadImage(0&, "c:\Logo.ico",
IMAGE_ICON, 64, 64, LR_LOADFROMFILE))
  'Impostazioni d'ambiente
   With Application
        .SetOption "Mostra barra di stato", False
        .SetOption "Sottolinea collegamenti", False
        .SetOption "Conferma modifiche record", False
        .SetOption "Conferma query di comando", False
        .SetOption "Comportamento cursore nel campo", 0
        .SetOption "Con INVIO passa a", 1
   End With
End Sub
Private Sub Liquidato_AfterUpdate()
If IsNull(Me!Liquidato) Or Me!Liquidato = 0 Then
    Me!Liquidato = 0
    Me![Data Pagamento] = ""
Else
    Me![Data Pagamento] = Date
End If
Me!Rimanenza = Me.versato - Me!Liquidato
End Sub
Private Sub CasellaCombinata65_AfterUpdate()
    ' Trova il record corrispondente al controllo
    Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[Cod Ut] = " & Str(Me![CasellaCombinata65])
    Me.Bookmark = rs.Bookmark
End Sub

 notevolmente.
Ripristina il flag Pagato e ripeti i calcoli effettuati per a fronte di
"Dopo aggiornamento" di Liquidato anche a fronte dell'evento su clic di
Pagato, facendoli precedere dalla MsgBox e dal caricamento del valore di
Versato nel controllo Liquidato se Pagato è True.
