Newsgroup: it.comp.appl.access
Titolo: Stessa operazione su stessa maschera da moduli diversi, come cambia il codice?

Nel modulo di classe di una certa maschera che si chiama Ordini ho
definito una certa routine che è questa qui:
Private Sub Salva_Click()
Me.Subtotale_ordini = [Sottomaschera Dettagli ordini].Form![Subtotale
ordini]
Me.Subtotale_Vendor = Me![Sottomaschera Dettagli
ordini].Form![Subotale vendor]
Me.Imposta__vendite = CLng([Subtotale ordini] * [%ImpostaVendite] *
100) / 100
Me.IVA_Fornitore = CLng([Subtotale Vendor] * [%ImpostaVendite] * 100)
/ 100
Me.Totale_Fornitori_Ivato = Me.Subtotale_Vendor + Me.SpeseTrasporto +
Me.IVA_Fornitore
Me.Totale_ordini = Me.Subtotale_ordini + Me.SpeseTrasporto +
Me.Imposta__vendite
Me.GuadagnoNegozio = 0.5 * Me.Totale_ordini - 0.5 *
Me.Totale_Fornitori_Ivato
Me.GuadagnoRoberto = 0.5 * Me.Totale_ordini - 0.5 *
Me.Totale_Fornitori_Ivato
Me.ImportoDovuto = [Totale ordini] - Nz([Totale pagamenti])
End Sub
Ora vorrei che le stesse operazioni vengano eseguite con una routine
che sta nel modulo di classe di un altra maschera, precisamente di una
sottomaschera chiamata Sottomaschera Dettagli ordini.
Le cose sono due, ho richiamo la routine che ho scritto sopra
all'interno della sottomaschera oppure scrivo del codice VBA che
esegua le stesse operazioni.
Così ho pensato di riscrivere questo codice usando una sintassi del
tipo
Forms!Ordini!Subtotale_ordini = Me.Subtotale_ordini 
al posto di
Me.Subtotale_ordini = [Sottomaschera Dettagli ordini].Form![Subtotale
ordini] 
e così via per ogni riga.
La cosa però non è andata bene, per esempio il campo Subtotale_ordini
viene scritto zero con
Me.Subtotale_ordini = [Sottomaschera Dettagli ordini].Form![Subtotale
ordini] 
della maschera va tutto bene.
mentre nella sottomaschera con 
Forms!Ordini![Subtotale ordini] = [Sottomaschera Dettagli
ordini].Form![Subtotale ordini] 
ottenengo l'errore 2465 per avere fatto riferimento al campo "|" che
non esite (e ti credo che | non è il nome di nessun campo ... )
Allora Ho provato con 
Forms!Ordini![Subtotale ordini] = Me.Subtotale_ordini  
nella routine della sottomaschera ma mi da zero
Lo stesso con Forms!Ordini![Subtotale ordini] = Me![Subtotale ordini]
Poi con 
Forms!Ordini![Subtotale ordini] =Forms![Sottomaschera Dettagli
Ordini]![Subtotale ordini]
ma mi dice che non trova quella sottomaschera dettagli ordini il cui
nome è stato inserito per copia-incolla per evitare errori di
battitura.
Però se uso Forms!Ordini![Subtotale ordini] = 55 cioè un numero
semplice semplice va bene.
Usando un campo di prova ho capito che è proprio il campo Subtotale
Ordini ad essere problematico.
Esso è definito con un =nz(Somma([Totale riga])) dove Totale riga è un
campo della sottamaschera, mentre Subtotale ordini sta nel pie' di
pagina della maschera.
Ho provato a inserire un DoCmd.Requery "Subtotale Ordini" prima della
riga in questione, ma è stato inutile.
Ora vorrei sapere come devo trasformare questo codice secondo voi?

 pagina della maschera.
Ma come viene valorizzato questo CONTROLLO (i campi sono solo nelle tabelle)
Sib

Ma come viene valorizzato questo CONTROLLO (i campi sono solo nelle tabelle)
Cosa significa "valorizzato"? Scusate l'ignoranza.
Se intendi come viene calcolato ti rispondo che non lo so bene, perché
non l'ho fatto io ma l'ho trovato già fatto in un esempio di access
che per mancanza mia di capacità ho dovuto adattare alle mie
necessità.
Ti posso dire che l'origine controllo è =nz(Somma([Totale riga]))
ho provato =Somma([Totale riga]) ma non è servito a nulla il controllo
è sempre nullo.
Anche usando questa sintassi 
Forms!Ordini![Subtotale ordini] = Forms!Ordini![Sottomaschera Dettagli
ordini].Form![Subtotale ordini]
il controllo è nullo.
Comunque ora le cose funzionano
Ho inserito 
un requery della sottomaschera seguito da 
Forms!Ordini![Subtotale ordini] = Forms!Ordini![Sottomaschera Dettagli
ordini].Form![Subtotale ordini]
in una public sub dentro un modulo non di classe e richiamando la
routine in questione le cose funzionano.
C'è solo un piccolo particolare che non capisco.
La maschera ha come origine record
SELECT DISTINCTROW [Dettagli sugli ordini].*,
CLng(([Quantità]*[PrezzoUnitario])*(1-[Sconto])*100)/100 AS [Totale
riga], CLng(([Quantità]*[PrezzoIvato])*(1-[Sconto])*100)/100 AS
[Totale riga ivato],
CLng(([Quantità]*[PrezzoVendor])*(1-[Sconto])*100)/100 AS [Totale riga
Vendor] FROM [Dettagli sugli ordini]; 
e così funge, ma se aggiungo ORDER BY [Dettagli sugli
ordini].TipoProdotto ritorno ad avere tutti zeri senza appello!
Cosa gli cambia se ordino i record all'apertura?

 Cosa gli cambia se ordino i record all'apertura?
In che senso all'apertura?
prova a ordinare direttamente la query di origine.
Sib

 grazie dei consigli.
Di niente.
Sib
--
http://www.sitocomune.com
http://digilander.iol.it/syb
 (a vostro rischio e pericolo)

Sib