Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

4.31 Report dinamici basati su query a campi incrociati parametriche (sito comune)

900 views
Skip to first unread message

Giuseppe

unread,
Apr 1, 2010, 7:20:38 AM4/1/10
to
Prendendo spunto dalla faq in oggetto, ho cercato di mettere in atto
nel mio db questa soluzione.
Il mio report è mensile e non giornaliero, ma quello che non capisco è
il perchè nella mia query a campi incrociati non riconosce il nome
della maschera nei criteri ("il modulo di gestione di Microsoft Office
Access non riconosce '[Forms]![MascheraParametri]![Anno]' come nome di
campo o espressione valida).
Assicuro che la maschera è la stessa presente nella faq (l'ho
importata , così come ho copiato e incollato i due campi della query)
e l'origine l'ho cambiata da Year: ([DataPresenza]) in Year:
([DataFattura]).
Qual'è il motivo?
Grazie.
Giuseppe.

Karl Donaubauer

unread,
Apr 1, 2010, 7:37:24 AM4/1/10
to
Giuseppe wrote:
> Prendendo spunto dalla faq in oggetto, ho cercato di mettere in atto
> nel mio db questa soluzione.
> Il mio report � mensile e non giornaliero, ma quello che non capisco �
> il perch� nella mia query a campi incrociati non riconosce il nome

> della maschera nei criteri ("il modulo di gestione di Microsoft Office
> Access non riconosce '[Forms]![MascheraParametri]![Anno]' come nome di
> campo o espressione valida).
> Assicuro che la maschera � la stessa presente nella faq (l'ho
> importata , cos� come ho copiato e incollato i due campi della query)

> e l'origine l'ho cambiata da Year: ([DataPresenza]) in Year:
> ([DataFattura]).
> Qual'� il motivo?

Non hai cambiato niente nella maschera? P.e. i nomi dei controlli?
Posta anche la stringa SQL della tua query.

--
cu
Karl
*********
Access FAQ: www.donkarl.com/it


Giuseppe

unread,
Apr 1, 2010, 9:23:03 AM4/1/10
to

Ciao Karl.
Assolutamente non ho cambiato niente alla maschera.
Questo è l'SQL della mia query:
TRANSFORM Sum(IIf([prezzo]>58,[Qta],[Qta]/2)) AS Quantità
SELECT tblArticoli.DescrizioneBene, tblArticoli.IDCategoria,
TblTipoArticolo.NotaArticolo, Sum(IIf([prezzo]>58,[Qta],[Qta])) AS
[Totale Quantità]
FROM [tblFattureTemp Query] INNER JOIN (TblTipoArticolo INNER JOIN
(tblArticoli INNER JOIN [tblRigheFattureTemp Query] ON
tblArticoli.IdArticolo = [tblRigheFattureTemp Query].idarticolo) ON
TblTipoArticolo.IDTipoArticolo = [tblRigheFattureTemp
Query].idtipoarticolo) ON [tblFattureTemp Query].id =
[tblRigheFattureTemp Query].id
WHERE (((tblArticoli.IDCategoria)=1 Or (tblArticoli.IDCategoria)=3 Or
(tblArticoli.IDCategoria)=4) AND ((Year([Datafattura]))=[Forms]!
[MascheraParametri]![Anno]) AND ((Month([Datafattura]))=[Forms]!
[MascheraParametri]![Mese]))
GROUP BY tblArticoli.DescrizioneBene, tblArticoli.IDCategoria,
TblTipoArticolo.NotaArticolo
ORDER BY tblArticoli.IDCategoria
PIVOT Format([tblfatturetemp query].[Periodo],"mmmm yy");

Senza i campi Anno e mese o senza il criterio negli stessi funziona
perfettamente.
Ciao.
Giuseppe.

Karl Donaubauer

unread,
Apr 1, 2010, 9:36:27 AM4/1/10
to
Giuseppe wrote:

> Karl Donaubauer wrote:
>>> Prendendo spunto dalla faq in oggetto, ho cercato di mettere in atto
>>> nel mio db questa soluzione.
>>> Il mio report mensile e non giornaliero, ma quello che non capisco
>>> il perch nella mia query a campi incrociati non riconosce il nome
>>> della maschera nei criteri ("il modulo di gestione di Microsoft
>>> Office Access non riconosce '[Forms]![MascheraParametri]![Anno]'
>>> come nome di campo o espressione valida).
>>> Assicuro che la maschera la stessa presente nella faq (l'ho
>>> importata , cos come ho copiato e incollato i due campi della query)
>>> e l'origine l'ho cambiata da Year: ([DataPresenza]) in Year:
>>> ([DataFattura]).
>>> Qual' il motivo?
>>
>> Non hai cambiato niente nella maschera? P.e. i nomi dei controlli?
>> Posta anche la stringa SQL della tua query.
> ...

> Assolutamente non ho cambiato niente alla maschera.
> Questo è l'SQL della mia query:
> TRANSFORM Sum(IIf([prezzo]>58,[Qta],[Qta]/2)) AS Quantità
> ...

Non hai preso la query dell'esempio. Nella tua mancano i parametri.
Vedi www.donkarl.com/it?FAQ3.18.

--
HTH

Giuseppe

unread,
Apr 1, 2010, 11:18:58 AM4/1/10
to

Grazie Karl

Giuseppe

unread,
Apr 1, 2010, 12:09:36 PM4/1/10
to

Scusa Karl ancora un aiuto.
Come faccio a far venire i nomi delle colonne in formato gennaio,
febbraio, marzo ecc . in ordine?
Io riesco a far uscire i nomi dei mesi ma non in ordine.
Grazie.

Karl Donaubauer

unread,
Apr 1, 2010, 12:31:03 PM4/1/10
to
Giuseppe wrote:
>>>>>> Prendendo spunto dalla faq in oggetto, ho cercato di mettere in
>>>>>> atto nel mio db questa soluzione.
> ...

> Come faccio a far venire i nomi delle colonne in formato gennaio,
> febbraio, marzo ecc . in ordine?
> Io riesco a far uscire i nomi dei mesi ma non in ordine.

Leggi la discussione "Query campi incrociati - ordinamento mesi"
di oggi e qui.

--
cu

Giuseppe

unread,
Apr 2, 2010, 4:49:13 AM4/2/10
to

Si Karl quella discussione la leggevo in parallelo alla mia.
Anch'io sono riuscito ad ottenere l'ordinamento dei mesi utilizzando
mm come formato mese; il problema è che io vorrei farli uscire
ordinati con il formato mmm o mmmm e non potendo utilizzare più di una
intestazione colonna ho adoperato il formato (mm) - (mmm) in questo
modo le colonne vengono:
(01) - gen
(02) - feb
(03) - mar
e così via. Se si potesse ottenere lo stesso risultato senza gli "(xx)
- " sarebbe esteticamente meglio.
Ciao.
Giuseppe.

Karl Donaubauer

unread,
Apr 2, 2010, 8:05:45 AM4/2/10
to
Giuseppe wrote:
> Karl Donaubauer wrote:
>>> ...
>>> Come faccio a far venire i nomi delle colonne in formato gennaio,
>>> febbraio, marzo ecc . in ordine?
>>> Io riesco a far uscire i nomi dei mesi ma non in ordine.
>>
>> Leggi la discussione "Query campi incrociati - ordinamento mesi"
>> di oggi e qui.
> ...

> Si Karl quella discussione la leggevo in parallelo alla mia.
> Anch'io sono riuscito ad ottenere l'ordinamento dei mesi utilizzando
> mm come formato mese; il problema è che io vorrei farli uscire
> ordinati con il formato mmm o mmmm e non potendo utilizzare più di una
> intestazione colonna ho adoperato il formato (mm) - (mmm) in questo
> modo le colonne vengono:
> (01) - gen
> (02) - feb
> (03) - mar
> e così via. Se si potesse ottenere lo stesso risultato senza gli "(xx)
> - " sarebbe esteticamente meglio.

Se come "Intestaz. colonna" hai: Format([TuoCampo];"mmm")
puoi impostare la proprietà "Intestazioni colonne" della query
alle abbreviazioni delle mesi, cioè:
"gen";"feb";"mar"; ecc.

Lo stesso ti fa anche la creazioni guidata per query a campi incrociati
se nel dialogo scegli di avere un campo data con intervallo mese.

--
HTH

Giuseppe

unread,
Apr 2, 2010, 9:16:34 AM4/2/10
to

Scusa Karl non so se non iterpreto bene io la tua risposta.
Se metto: Format([TuoCampo];"mmm") mi vengono gen, feb, mar, ecc.. ma
in ordine alfabetico cioè Ago, Apr, Dic, Feb, Mag, ecc...
Io li vorrei nello stesso formato ma in ordine non alfabetico ma
temporale.
Spero di non aver compreso bene il tuo ultimo post. Se così fosse ti
prego di spiegarmi meglio come devo cambiare la formula.
Al momento ho messo : Format([TuoCampo];("mm")-"mmm") ottenendo (01)-
gen e così via.
Grazie per le risposte.
Ciao.

Karl Donaubauer

unread,
Apr 2, 2010, 9:34:56 AM4/2/10
to
Giuseppe wrote:
> Karl Donaubauer wrote:
>>>>> ...
>>>>> Query campi incrociati
>>> ...

>>> Anch'io sono riuscito ad ottenere l'ordinamento dei mesi utilizzando
>>> mm come formato mese; il problema � che io vorrei farli uscire
>>> ordinati con il formato mmm o mmmm e non potendo utilizzare pi� di

>>> una intestazione colonna ho adoperato il formato (mm) - (mmm) in
>>> questo modo le colonne vengono:
>>> (01) - gen
>>> (02) - feb
>>> (03) - mar
>>> e cos� via. Se si potesse ottenere lo stesso risultato senza gli

>>> "(xx)
>>> - " sarebbe esteticamente meglio.
>>
>> Se come "Intestaz. colonna" hai: Format([TuoCampo];"mmm")
>> puoi impostare la propriet� "Intestazioni colonne" della query
>> alle abbreviazioni delle mesi, cio�:

>> "gen";"feb";"mar"; ecc.
>>
>> Lo stesso ti fa anche la creazioni guidata per query a campi
>> incrociati se nel dialogo scegli di avere un campo data con
>> intervallo mese.
> ...

> Scusa Karl non so se non iterpreto bene io la tua risposta.
> Se metto: Format([TuoCampo];"mmm") mi vengono gen, feb, mar, ecc.. ma
> in ordine alfabetico cio� Ago, Apr, Dic, Feb, Mag, ecc...

> Io li vorrei nello stesso formato ma in ordine non alfabetico ma
> temporale.
> Spero di non aver compreso bene il tuo ultimo post. Se cos� fosse ti

> prego di spiegarmi meglio come devo cambiare la formula.
> Al momento ho messo : Format([TuoCampo];("mm")-"mmm") ottenendo (01)-
> gen e cos� via.

Non so se posso spiegarlo meglio, ma forse aiuta ripeterlo
passo a passo.

Come formula metti: Format([TuoCampo];"mmm")

Poi nella vis. struttura della query scegli la voce di men�
Visualizza - Propriet�
per vedere le propriet� della query.

Cerca la propriet� "Intestazioni colonne" e riempila con le
12 abbreviazioni nell'ordine temporale:

"gen";"feb";"mar"; ecc. ecc.

Poi apri la vis. foglio dati della query e stupisciti.

Giuseppe

unread,
Apr 2, 2010, 10:08:15 AM4/2/10
to

Karl non so come ringraziarti.
Non avevo dubbi che fossi io a non aver capito.
Grazie ancora e Buona Pasqua a te e a tutti coloro che frequentano
questo stupendo NG.
Giuseppe.

Giuseppe

unread,
Apr 8, 2010, 4:47:03 AM4/8/10
to
On 1 Apr, 15:36, "Karl Donaubauer" <NoS...@donkarl.com> wrote:

Modificando le altre query a campi incrociati ho la necessita di
indicare nei parametri che il parametro relativo all'anno non mi deve
far esplodere i record solo quando l'anno è uguale ma anche di quelli
degli anni successivi.
Se provo a cambiare nei parametri della query a campi incrociati da
[Forms]![MascheraParametri]![Anno] a
=>[Forms]![MascheraParametri]![Anno]
mi dà il seguente messaggio di errore:
Parentesi non valide nel nome '[=>[Forms]![MascheraParametri]![Anno]]'
Si può ottenere e come il risultato da me voluto?
Grazie.
Giuseppe.

Karl Donaubauer

unread,
Apr 8, 2010, 1:25:15 PM4/8/10
to
Giuseppe wrote:
> ...

> Modificando le altre query a campi incrociati ho la necessita di
> indicare nei parametri che il parametro relativo all'anno non mi deve
> far esplodere i record solo quando l'anno è uguale ma anche di quelli
> degli anni successivi.
> Se provo a cambiare nei parametri della query a campi incrociati da
> [Forms]![MascheraParametri]![Anno] a
> =>[Forms]![MascheraParametri]![Anno]
> mi dà il seguente messaggio di errore:
> Parentesi non valide nel nome '[=>[Forms]![MascheraParametri]![Anno]]'
> Si può ottenere e come il risultato da me voluto?

Gli operatori devi scrivere solo nel criterio della query.
Nel dialogo dei parametri basta: [Forms]![MascheraParametri]![Anno]

Giuseppe

unread,
Apr 9, 2010, 4:42:12 AM4/9/10
to

Giusto.
Quando ci ho provato, non c'erano record per gli elementi selezionati.
Ora provando con criteri con cui la query restituisce record,
funziona.
Grazie Karl.
Giuseppe.

Giuseppe

unread,
Apr 9, 2010, 12:54:56 PM4/9/10
to

Ancora su report basati su query a campi incrociati.
Le etichette e i controlli li ho chiamati Etichetta1, Etichetta2 e
così per i Controlli.
Con il codice su apertura report:
Set rst = qdf.OpenRecordset
Conta = 1
For Each fld In rst.Fields
Me("Etichetta" & Trim(Conta)).Caption = fld.Name
Me("Etichetta" & Trim(Conta)).Visible = True
Me("Controllo" & Trim(Conta)).ControlSource = fld.Name
Me("Controllo" & Trim(Conta)).Visible = True
Conta = Conta + 1
Next
Set rst = Nothing
Set qdf = Nothing
Set fld = Nothing
vengono assegnati a tali etichette e controlli i nomi dei campi della
query a campi incrociati.
La terza colonna del report si chiama sempre "totale" mentre dalla
quarta fino alla sesta la query restituisce come nome campo l'anno di
riferimento che cambia in base ai parametri della query.
Nel piè di pagina in corrispondenza della colonna "totale" inserisco
una casella di testo con origine =Somma([totale]) e ottengo il totale.
Come faccio invece a impostare la somma dei controlli di cui il nome
assegnato varia in base agli anni scelti in fase di selezione
parametri della query?
Ho provato a mettere =somma([controllo4]) e non funziona, se metto
=somma([2009]) mi fa la somma, ma se in fase di selezione parametri
parto dal 2010 la
colonna n. 4 si chiamerà 2010 e non funzionerà.
Giuseppe.

Karl Donaubauer

unread,
Apr 9, 2010, 2:55:03 PM4/9/10
to
Giuseppe wrote:
>> Karl Donaubauer wrote:
>>>> ...

>>> Nel dialogo dei parametri basta:
>>> [Forms]![MascheraParametri]![Anno]
>
> Ancora su report basati su query a campi incrociati.
> Le etichette e i controlli li ho chiamati Etichetta1, Etichetta2 e
> cos� per i Controlli.

> Con il codice su apertura report:
> Set rst = qdf.OpenRecordset
> Conta = 1
> For Each fld In rst.Fields
> Me("Etichetta" & Trim(Conta)).Caption = fld.Name
> Me("Etichetta" & Trim(Conta)).Visible = True
> Me("Controllo" & Trim(Conta)).ControlSource = fld.Name
> Me("Controllo" & Trim(Conta)).Visible = True
> Conta = Conta + 1
> Next
> Set rst = Nothing
> Set qdf = Nothing
> Set fld = Nothing
> vengono assegnati a tali etichette e controlli i nomi dei campi
> della query a campi incrociati.
> La terza colonna del report si chiama sempre "totale" mentre dalla
> quarta fino alla sesta la query restituisce come nome campo l'anno
> di riferimento che cambia in base ai parametri della query.
> Nel pi� di pagina in corrispondenza della colonna "totale" inserisco

> una casella di testo con origine =Somma([totale]) e ottengo il
> totale. Come faccio invece a impostare la somma dei controlli di
> cui il nome assegnato varia in base agli anni scelti in fase di
> selezione parametri della query?
> Ho provato a mettere =somma([controllo4]) e non funziona, se metto
> =somma([2009]) mi fa la somma, ma se in fase di selezione parametri
> parto dal 2010 la
> colonna n. 4 si chiamer� 2010 e non funzioner�.

Se ti capisco bene puoi aggiungere al tuo codice:

Me("TuoControlloTotale").ControlSource = _
"=Sum(" & Forms!MascheraParametri!Anno & ")"

Giuseppe

unread,
Apr 10, 2010, 10:55:47 AM4/10/10
to

Ti riferisci al codice sull'evento report_open?
I parametri della maschera possono scatenare i seguenti nomi delle
caselle di testo:
Totale -----> 2008 ------> 2009 -------> 2010
oppure solo Totale -----> 2009 ------> 2010
o anche Totale -----> 2010.
Giuseppe.

Giuseppe

unread,
Apr 17, 2010, 4:30:58 AM4/17/10
to

Ciao Karl.
Aspettavo una spiegazione più semplice al tuo ultimo post.
Mi aiuti a compleatare il report?
Grazie.
Giuseppe.

Karl Donaubauer

unread,
Apr 17, 2010, 6:14:13 AM4/17/10
to
Giuseppe wrote:
> Karl Donaubauer wrote:
> ...
> Aspettavo una spiegazione più semplice al tuo ultimo post.
> Mi aiuti a compleatare il report?

No.
Non ti ho risposto perché dalla tua risposta avevo visto che
non ho capito bene cosa fai.

--
cu

Giuseppe

unread,
Apr 20, 2010, 6:41:15 AM4/20/10
to

Ciao Karl.
Spiego meglio la situazione.
Come da tuo aiuto, la query incrociata ha dei parametri (da anno ad
anno2) definiti in una maschera.
Ho impostato che si possano confrontare massimo tre anni, per cui il
report ha 5 colonne:
descrizione (nome colonna fisso)
totale (nome colonna fisso)
anno xxxx (nome colonna variabile)
anno xxxx (nome colonna variabile)
anno xxxx (nome colonna variabile)
Come ho scritto nel post del 9 Apr, 18:54 i nomi delle colonne
vengono assegnati da codice.
Nel piè di pagina devo calcolare i totali. In corrispondenza della


colonna "totale" inserisco
una casella di testo con origine =Somma([totale]) e ottengo il totale.

I nomi delle colonne relative agli anni invece variano in base agli
anni selezionati nella maschera di selezione.
Quindi non avendo un nome fisso, come faccio ad ottenere la somma
delle tre colonne relative agli anni?
Giuseppe.
P.S. A volte gli anni da confrontare possono essere solo due o
addirittura per una nuova ditta solo uno.
Grazie.

Karl Donaubauer

unread,
Apr 21, 2010, 6:03:27 AM4/21/10
to
Giuseppe wrote:
> Karl Donaubauer wrote:
>>> ...
>>> Aspettavo una spiegazione più semplice al tuo ultimo post.
>>> Mi aiuti a compleatare il report?
>>
>> No.
>> Non ti ho risposto perché dalla tua risposta avevo visto che
>> non ho capito bene cosa fai.
>
> Spiego meglio la situazione.
> ...

Visto che nessuno risponde sembra che non solo io non
capisce cosa fai. Se non riesci, forse puoi prepare un
download su un qualsiasi sito con un piccolo mdb solo
con le parti rilevanti che presenta il problema.

Giuseppe

unread,
Apr 23, 2010, 12:21:24 PM4/23/10
to

Il file è scaricabile da
http://www.megaupload.com/?d=KGTCCKH9
le correzioni da apportare sono nel piè di pagina alle caselle di
testo che devono sommare il totale per anno (tenendo conto che in base
alla selezione degli anni dalla maschera di impostazione parametri,
gli stessi non sono sempre uguali).
Giuseppe.
Giuseppe.

Karl Donaubauer

unread,
Apr 23, 2010, 2:19:45 PM4/23/10
to
Giuseppe wrote:
> ...

> Il file è scaricabile da
> http://www.megaupload.com/?d=KGTCCKH9
> le correzioni da apportare sono nel piè di pagina alle caselle di
> testo che devono sommare il totale per anno (tenendo conto che in base
> alla selezione degli anni dalla maschera di impostazione parametri,
> gli stessi non sono sempre uguali).

Prima chiami i tuoi controlli per le somme:
txtSomma1, txtSomma2, txtSomma3

Poi nel codice del Report_Open dopo la riga con solo "Next" aggiungi:

For Conta = 0 To _
Forms![comparazione fatturato]!Anno2 _
- Forms![comparazione fatturato]!Anno

Me("txtSomma" & Conta + 1).ControlSource = _
"=Sum([" & Forms![comparazione fatturato]!Anno + Conta & "])"
Next

--
HTH

Giuseppe

unread,
Apr 24, 2010, 10:46:38 AM4/24/10
to

Ciao Karl.
Funziona in parte.
In pratica siccome la ditta "1" al momento ha fatturato solo due anni
"2009" e "2010" la terza colonna fa la somma uguale a quella del
totale generale.
Grazie e saluti.
Giuseppe.

Giuseppe

unread,
Apr 24, 2010, 11:06:17 AM4/24/10
to

Per completezza di informazione, dalla maschera parametri si deve
poter scegliere di comparare da una a max tre annualità.
Per cui nella stessa ho impostato che se la differenza tra i due
controlli "anno" e "anno2" è maggiore di 2, appare il msgbox di
avviso.
Giuseppe.
Giuseppe.

Giuseppe

unread,
Apr 24, 2010, 11:12:06 AM4/24/10
to
On 24 Apr, 16:46, Giuseppe <gcardas...@tin.it> wrote:

Risolto.
Non avevo cancellato la formula nelle caselle di controllo.
Ciao.
Giuseppe.

0 new messages