Newsgroup: it.comp.appl.access
Titolo: 4.31 Report dinamici basati su query a campi incrociati parametriche  (sito comune)

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.

 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
 


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.

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


Grazie Karl


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.

 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



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.

 - " 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



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.

 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.



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.

 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.

 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]



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.


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.

 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 & ")"



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.

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

 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



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.

 ...
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.



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.

 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



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.


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.

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