Newsgroup: it.comp.appl.access
Titolo: Ancora sulla memorizzazione in una tabella di un campo calcolato (abbiate pazienza, e' un caso speciale)

Ho un problema che non so risolvere nonostante abbia cercato nei
messaggi precedenti e ne abbia trovati alcuni che trattavano la
questione. Ho cercato di seguire le indicazioni, ma inutilmente.
Ho la solita base di dati, Negozi, Ordini, Prodotti, Aziende
(fornitori) complicata dal fatto che i prodotti non sono venduti sfusi
ma raccolti in confezioni. Tra la tabella Ordini e Confezioni c'e' la
tabella DettagliOrdini con le due chiavi primarie IDOrdine e
IDConfezione e naturalmente il campo Quantitā. In questa tabella devo
memorizzare anche il prezzo della confezione al momento dell'ordine
poiche' esso, pur potendo essere calcolato, puo' cambiare nel tempo
(puo' cambiare il prezzo del prodotto, possono cambiare le quantita'
che compaiono nella confezione, ecc.).
Naturalmente tra le tabelle Confezione e Prodotti (relazione molti a
molti) c'e' la tabella DettagliConfezioni con le due chiavi primarie
(IDConfezione ed IDProdotto) oltre al campo Quantita'.
Ho creato una maschera per la memorizzazione dei campi della tabella
Confezioni mediante input diretto dei dati (IDConfezione, IDTipoConf,
Nome, AliquotaIVA, Descrizione). Resterebbe da memorizzare il Prezzo
della confezione dopo averlo calcolato con i dati inseriti dall'utente
tramite una sottomaschera. Questa si appoggia ad una query che lavora
sia sui dati della tabella DettagliConfezione sia su quelli della
tabella Prodotti.
In particolare, mediante una casella combinata scelgo l'IDProdotto.
Immediatamente la query visualizza altri campi del prodotto tra i
quali quelli che mi interessano per il calcolo del prezzo della
confezione. Dopo l'immissione della Quantita' nel pie' di pagina della
maschera viene visualizzato mediante due caselle di testo non
associate l'imponibile ed il prezzo totale della confezione, man mano
che aggiungo righe nella sottomaschera, cioe' man mano che aggiungo
prodotti nella confezione. Essendo l'aliquota IVA uguale per tutti i
prodotti (qui sono stato abbastanza fortunato) dal totale posso
ricavare l'imponibile. Decido dunque di memorizzare nella tabella
Confezioni solo l'imponibile. Ed e' da questo punto che non so andare
avanti.
Poiche' le caselle di testo create nel pie' di pagina maschera sono
calcolate mediante dati della sottomaschera, non sono associate a
nessun campo della tabella Confezioni e percio' il loro valore non
puo' essere memorizzato nella tabella stessa. Ho provato a creare una
nuova casella di testo associata al campo Imponibile della tabella
Confezioni. Nelle proprieta' del campo Quantita' della sottomaschera
ho inserito in Dopo aggiornamento la seguente routine
Private Sub Quantitā_AfterUpdate()
    Me![Imponibile] = Me![Testo22]
End Sub
Testo22 e' il nome dell'elemento del pie' di pagina sotomaschera che
ha come origine controllo la formula =Somma([Prezzo]*[Quantitā]) e che
mi permette di visualizzare nel pie' di pagina maschera l'imponibile,
che e' poi il valore da memorizzare nella tabella Confezioni. L'errore
prodotto e' il seguente: impossibile trovare il campo Imponibile.
Confidando nella pazienza di chi mi ha seguito fin qui e consapevole
della lunghezza del messaggio, attendo fiducioso un aiuto.
Saluti a tutti.
-- 
ing. Franco Varoli
fva...@tin.it
fva...@libero.it

 
fva...@libero.it
Sei sicuro che "Imponibile" sia il nome (nome <> origine controllo) del
controllo?... il messaggio d'errore dice propio il contrario
ciao omnitow


Nel pie' di pagina sottomaschera ho due controlli non associati:
1) Nome:Testo22
    Origine Controllo: =Somma([Prezzo]*[Quantità])
2) Nome: TotaleConfezione
    Origine C.: =Somma([Totale])
[Totale] e' il Nome e l'Origine controllo che ho su ogni riga della
sottomaschera e che mi da' il Totale (ivato) di ogni prodotto della
confezione
Nel pie' di pagina maschera ho tre controlli:
1) Nome: Testo26
    Origine C.: =[DettagliConfezione Sottomaschera].Form![Testo22]
Mi visualizza correttamente l'imponibile della confezione
2) Nome: Testo14
    Origine C.: =[DettagliConfezione
Sottomaschera].Form![TotaleConfezione]
Mi visualizza correttamente il totale con IVA della confezione. Questi
due controlli servono solo per visualizzare a schermo i valori.
Veniamo al terzo che e' quello che dovrebbe servire ad aggiornare la
tabella Confezioni
3) Nome: Testo31
    Origine C.: Imponibile
Se non sbaglio questa dovrebbe essere una casella associata dato che
Imponibile e' un campo della tabella Confezioni (formato Valuta) dove
vorrei memorizzare l'imponibile corrente della confezione in modo che
quando immetto le righe di ogni ordine lo abbia gia' pronto e venga a
sua volta memorizzato nella tabella DettagliOrdini.
La casella Quantità di ogni riga della sottomaschera, generata come ho
gia' detto da una query, ha Quantità come Nome e pure come Origine
Controllo. Quantità e' un campo della tabella DettagliConfezioni. In
dopo aggiornamento ho indicato di eseguire il codice Me![Imponibile] =
Me![Testo22].
Mi da' l'errore di run-time 2465 e precisa che e' impossibile trovare
il campo 'Imponibile'.
Sparo un'ipotesi fantascientifica, nel senso che non ci credo molto.
Non e' che Access 2000 faccia confusione con il campo Quantità della
tabella DettagliOrdini che in questo frangente non e' aperta?  Non
credo ma se fosse cosi' cambiarei i nomi.
Saluti e grazie dell'attenzione.


 ing. Franco Varoli
come dicevo "Imponibile" è il nome o l'origine controllo del controllo
chiamato "Testo31"?
Private Sub Quantità_AfterUpdate()
Me![Testo31] = Me![Testo22]
End Sub
ciao omnitow

End Sub
Testo31 e' il nome elemento, Imponibile e' l'origine controllo. Ho
modificato la routine come mi hai indicato ed ora l'errore e'
diventato:
Impossibile trovare il campo 'Test31' a cui si fa riferimento
nell'espressione.
Ricordo che Testo22 e' il nome di un controllo nel pie' di pagina
della sottomaschera, mentre Testo31 e' un controllo nel pie' di pagina
della maschera.
Saluti.



In ogni caso è sempre una tua svista...
ciao omnitow


Sono convinto che sia un mio errore ma non riesco a venirne a capo.


ciao omnitow
Non mi piace come ho risolto ma non trovo alternative. Ho creato una
query con cui calcolo per ogni confezione l'imponibile ed ho
trasformato la query in query di aggiornamento. Pessima soluzione ma
almeno funziona.
Saluti e grazie comunque.
