Newsgroup: it.comp.appl.access
Titolo: Sommare valori campi compresi tra due date.

Salve,
come posso fare a sommare dei valori (per la precisione, si tratta di
incassi) contenuti nel campo di una query, compresi tra due date?
Praticamente voglio ottenere una maschera o un report che mi consentano
di sapere quanto ho incassato a gennaio, ad esempio, o quanto ho
incassato tra gennaio e aprile. Insomma, l'intervallo di tempo in cui
calcolare la somma degli incassi vorrei stabilirlo io.

 ha scritto nel messaggio
news:1149893263....@c74g2000cwc.googlegroups.com...

nei criteri della query in corrispondenza della data potresti utilizzare
l'operatore betweeen and
per filtrare i dati secondo un periodo da te prescelto,
E' chiaro cosa vuoi fare ma non è chiara la struttura del tuo db, se non
riesci con le scarne indicazioni che ti ho dato prova  a spiegarti meglio.


Spero che avrai la pazienza di leggere quello che sto per scrivere :-)
Facendo qualche ricerca, sono riuscito ad ottenere la somma dell'IVA
calcolata tra due date da me prestabilite, solo che adesso ho il
seguente problema:
Ho creato 12 query, ognuna per un mese dell'anno, collegate alla query
dove sono i dati delle fatture.
Riporto l'SQL delle query che ho creato, relativa al mese di gennaio:
SELECT DISTINCTROW Sum(Q_Fattura.IVA) AS Gennaio
FROM Q_Fattura
WHERE (((Q_Fattura.DataFattura) Between DateSerial(Year(Date()),1,1)
And DateSerial(Year(Date()),2,0)));
Tutti le query dei 12 mesi hanno la medesima struttura.
Poi ho creato un'ulteriore query, che raggruppa i Totali IVA delle 12
query suddette, che ha il seguente SQL:
SELECT Q_IVA_Gennaio.Gennaio, Q_IVA_Febbraio.Febbraio ecc.
FROM Q_IVA_Gennaio, Q_IVA_Febbraio, ecc.
in modo che mi dia i totali dell'Iva di tutti i 12 mesi.
Infine, ho creato una maschera collegata a quest'ultima query:
Gennaio: TotaleIVA mese Gennaio
Febbraio: TotaleIVA mese Febbraio
Marzo: TotaleIVA mese Marzo
   1° Trimestre: =Gennaio+Febbraio+Marzo
e così via, per tutti i 12 mesi e i 4 trimestri.
E funziona tutto alla perfezione. L'unico problema è che, dovendo fare
questo lavoro non solo per l'IVA, ma anche per gli incassi netti e per
l'imponibile, dovrei utilizzare 36 query + 3 query per unire i totali
di ciascuna categoria.
Può creare problemi la presenza di tutte queste query? Se la risposta
è no, lascio tutto com'è.
Se la risposta è sì, è possibile creare una sola query che svolga,
ad esempio per l'IVA, le stesse funzioni delle 13 che ho creato io?

 ha scritto nel messaggio 
news:1149893263....@c74g2000cwc.googlegroups.com...

Se vuoi visualizzare in una maschera la sommatoria degli incassi fatti in un 
periodo di tempo che èreciserai di volta in volta, creati una maschera non 
associata nella quale inserirai tre caselle di testo non associate chimate 
rispettivamente InizioPeriodo, FinePeriodo e TotaleIncassi.
Se i dati sono contenuti in una tabella chiamata Tabella1.
Se i data da sommare sono contenuti in un campo di tipo Valuta di Tabella1 
chiamati Incasso.
Se la selezione dei record da sommare la devi fare in base ad un campo di 
tipo Data/ora chiamato MiaData.
Nell'origine controllo della casella di testo non associata chiamata 
TotaleIncassi scrivi quanto segue:
=IIf(Not IsNull([InizioPeriodo]) And Not 
IsNull([FinePeriodo]);DSum("Incasso"; "Tabella1"; "MiaData Between #" & 
Format([InizioPeriodo]; "mm/gg/aaaa") & "# And #" & Format([FinePeriodo]; 
"mm/gg/aaaa") & "#"); Null)
A questo punto apri la maschera di cui sopra e nelle caselle di testo 
InizioPeriodo e FinePeriodo digita le due date che delimitano il periodo del 
quale vuoi conoscere la sommatoria degli incassi: nella casella di testo 
TotaleIncassi vedrai quanto da te desiderato.
-- 
Roberto
-----------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
-----------------------------------------------

Roberto dal portatile ha scritto:

Grazie per la risposta Roberto. Il fatto è che ho cambiato idea e
preferirei avere una maschera che mi mostri fissi i totali per ogni
mese e per ogni trimestre, come ho detto nel mio secondo messaggio.
Ho anche trovato un metodo per realizzare ciò, ma non mi va bene, in
quanto mi visualizza solo i mesi e i trimestri in cui sono state emesse
delle fatture. Io vorrei, invece, che venissero visualizzati tutti i
mesi e tutti i trimestri, anche quelli in cui la somma è pari a 0. Per
il momento, l'unico metodo che ho trovato è quello descritto nel mio
secondo messaggio, e vorrei sapere se esiste un altro metodo che mi
consenta solo una query, invece di 13.

consenta solo una query, invece di 13.
Per ottenere con un'unica query (invece di 13) i totali dei 12 mesi (uno per 
ogni colonna) è sufficiente che ti crei una query a campi incrociati (vedi 
help) dove il mese sia l'intestazione di colonna; impostando adeguatamente 
la proprietà Intestazioni colonne (vedi help) di detta query, otterrai che 
ti compaiano sempre 12 colonne, ovvero anche quelle relative ai mesi che non 
sono stati movomentati, naturalmente avranno il totale Null o a zero.
Per avere i dati solo dell'anno in corso dovrai naturalmente parametrizzare 
la query a campi incrociati in modo che prenda in considerazione solo i 
movimenti dell'anno corrente, un po' come avevi fatto già tu con 
Year(Date()).



Ciao Roberto,
questa mattina, leggendo il tuo suggerimento, ho provato a fare qualche
tentativo, guida alla mano, ma si è rivelato tutto infruttuoso :-)
Io ho una query (Q_Fattura) dove, tra le altre cose, sono presenti la
data della fattura (campo DataFattura) e il calcolo dell'IVA (campo
IVA), che credo siano gli elementi da estrapolare per creare la query a
campi incrociati. L'unica cosa che mi è chiara è di impostare il
campo IVA di Q_Fattura come Valore della query a campi incrociati. Per
il resto, non mi è ben chiaro come procedere, essendo poco esperto
nell'uso di Access.
Se, in base ai dati che ti ho fornito, mi potessi guidare passo passo,
te ne sarei molto grato.


Ce l'ho fatta! L'errore nasceva dal fatto che ero convinto che il
separatore di elenco predefinito fosse la virgola, invece, guardando
nelle opzioni internazionali, ho visto che è un punto e virgola. :-)
Ciao e grazie di tutto!

ro...@hotmail.it
 ha scritto:

Ho un ultimo piccolo problema.
Nella maschera collegata alla query a campi incrociati, ho inserito,
come avevamo detto, tutti i mesi, anche quelli che non sono stati
movimentati.
Visto che nella maschera ho creato delle caselle di testo per avere i
totale dei trimestri, (es. Trimestre1= gennaio+febbraio+marzo), il
calcolo non viene eseguito se gli addendi sono dei campi null. Ho
provato quindi ad impostare direttamente dalla maschera il valore
predefinito per i mesi non movimentati a 0, ma non cambia nulla.
Probabilmente dovrei operare direttamente sulla query a campi
incrociati, ma non so dove.
Ti riporto l'SQL della query a campi incrociati:
TRANSFORM Sum(Q_Fattura.IVA) AS SommaDiIVA
SELECT Year([DataFattura]) AS AnnoOrdine
FROM Q_Fattura
WHERE (((Q_Fattura.DataFattura) Between #1/1/2006# And #12/31/2006#))
GROUP BY Year([DataFattura])
PIVOT Format$(Q_Fattura.DataFattura,'mmmm') In
("Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre");

("Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre");
Prova a modificare la TRANSFORM nel modo seguente:
TRANSFORM Nz(Sum(Q_Fattura.IVA), 0) AS SommaDiIVA
Cosě le colonne senza movimenti dovrebbero assumere il valore zero invece 
che Null, quindi dovresti avere correttamente i tali trimestrali.
In alternativa la funzione Nz potresti usarla nel fare la somma dei tre mesi 
e invece di:
Trimestre1= gennaio+febbraio+marzo
prova con:
Trimestre1= Nz(gennaio,0) + Nz(febbraio,0) + Nz(marzo, 0)


 -----------------------------------------------
Se uso la funzione Nz direttamente nella query, la somma dei dati
trimestrali nella maschera diventa l'affiancamento dei tre addendi e mi
perde il formato euro.
Es.
per Gennaio: 200,6
    Febbraio: 350
    Marzo: 125,4
il risultato è 200,6350125,4
Mentre, se uso la funzione Nz direttamente nella casella di testo della
maschera, ho il seguente errore:
"Errore di sintassi nell'espressione.
Operando o operatore mancante, carattere o virgola non valida oppure
testo immesso non racchiuso tra virgolette."

ro...@hotmail.it
 ha scritto:

Ho risolto nella maschera. Ho dato un'occhiata alla funzione Nz sulla
guida e ho provato a eliminare gli 0, ottenendo
=Nz([Gennaio])+Nz([Febbraio])+Nz([Marzo]) e in questo modo funziona.
Grazie di tutto!

cut
Ho risolto nella maschera. Ho dato un'occhiata alla funzione Nz sulla
guida e ho provato a eliminare gli 0, ottenendo
=Nz([Gennaio])+Nz([Febbraio])+Nz([Marzo]) e in questo modo funziona.
Grazie di tutto!
Nelle maschere o meglio nei controlli devi usare il punto e virgola (;) e 
non la virgola.
Nz([Gennaio];0)+....
Ciao, Carlo

Carlo Costarella ha scritto:

Ah, lo stesso inghippo che ho avuto nel modificare le intestazioni
delle colonne, di cui ho parlato poco più su. Comunque, sembrerebbe
funzionare anche senza ;0. Per sicurezza, l'ho aggiunto.
Un grosso grazie a Roberto che con pazienza è riuscito a risolvermi un
problema non da poco (per me) e un grazie anche a te per l'intervento.
Ciao.