Newsgroup: it.comp.appl.access
Titolo: Report Tosto (per me)- Tabellone scrutini

C'č qualche anima buona che in ricordo degli anni passati a scuola mi dą
una mano?
Bisogna "semplicemente" stampare un Report con i risultati degli
scrutini, classe per classe.
Dispongo gią di una tabella con record formati da:
MATRICOLA
CLASSE
MATERIA
SCRITTO 
ORALE
PRATICO
ASSENZE
Per ogni alunno ci sono tanti record quante sono le materie della sua
classe.
MATRICOLA č agganciata a una tabella di anagrafico con Cognome e Nome.
Dovrei produrre il classico tabellone:
Alunno  |  ITALIANO     |   STORIA      | .......
        | S | O | P |Ass| S | O | P |Ass| .......
BIANCHI | 6 | 7 |   |  2|   | 8 |   | 12| .......
ROSSI   | 4 | 3 |   | 56|   | 3 |   | 28| .......
Per intenderci, il nome delle materie cambia da classe a classe.
Ma come diavolo si puņ fare?  
C'č qualche esperto che esclama "Ma č una cavolata!" o qualcuno che ha
un po' di tempo da perdere per me (domani č domenica e pioverą...)
GRAZIE in anticipo al santo salvatore!
AIUTA LA SCUOLA SE LA SCUOLA HA AIUTATO TE !!!

 AIUTA LA SCUOLA SE LA SCUOLA HA AIUTATO TE !!!
Ipotizzando che la tua tabella si chiami Tabelle1, che i campi SCRITTO,
ORALE, PRATICO e ASSENZE siano numerici, devi crearti una query a campi
incrociati che ha il seguente codice SQL:
TRANSFORM First(Format$(Str$([SCRITTO]),"@@@") &
Format$(Str$([ORALE]),"@@@") & Format$(Str$([PRATICO]),"@@@") &
Format$(Str$([ASSENZE]),"@@@@")) AS [Il valore]
SELECT Tabella1.CLASSE, Tabella1.MATRICOLA
FROM Tabella1
GROUP BY Tabella1.CLASSE, Tabella1.MATRICOLA
ORDER BY Tabella1.CLASSE, Tabella1.MATRICOLA
PIVOT Tabella1.MATERIA;
Quindi il tuo report deve avere come origine record la query e come
raggruppamento CLASSE.
Tieni conto però che nel "tabellone" ti compariranno tutte le materie;
naturalmente per ogni classe le colonne delle materie non insegnate
resteranno vuote; non sono in grado di darti indicazioni per fare un report
che riporti solo le materie utili per ogni classe, ovvero con numero di
colonne variabile; a meno che tu non voglia fare una query ed un report per
ogni classe (ma non credo sia il caso).
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------

 
Intanto, Grazie
Il problema è proprio quello di far variare il numero (e il nome) delle
colonne del report.
Ho realizzato anch'io una query parametrica a campi incrociati che
chiede la classe e mi dà il risultato voluto, ma si può trasformarla in
report?
Dovrebbe risultarne un report "parametrico" (se esiste). Ho tentato ma
con risultati nulli.
Attualmente non so pensare niente di meglio che generare le query,
classe per classe, esportarle una per una su Excel e poi stamparle, ma
insomma ...
Grazie comunque.

 Grazie comunque.
Innanzitutto cambia il nome al campo CLASSE: è un nome riservato; me ne sono
accorto quando, per scrupolo, sono andato a testare la soluzione che sto per
scrivere: non mi ha funzionato sino a quando non ho sostituito il nome
CLASSE con CLASSE1.
Non ero affatto soddisfatto della soluzione che avevo trovato
precedentemente, pertanto ci ho rimuginato sopra e ne ho trovata una che a
mio avviso è accettabile; ha sicuramente il pregio di cambiare le
intestazioni di colonna (il nome delle materie) classe per classe, di usare
un'unica query a campi incrociati non personalizzata, di usare un solo
report e di dover lanciare il report una sola volta (stamperà uno di seguito
all'altro i "tabelloni" di tutte le classi).
Devi solo stabilire quale sia il numero massimo di materie che possono
essere insegnate in una classe: per semplicità ipotizziamo che siano 10.
Ebbene, nella mia nuova soluzione, tutti i "tabelloni" avranno 10 colonne,
anche se quelle eventualmente inutulizzate saraano tutte in fondo, vuote e
senza intestazione.
Questa è la struttura delle tabelle:
Tabella Alunni
----------------
MATRICOLA            Contatore e chiave primaria
CognomeNome           Testo
ecc. ecc.
---------------------------------------------------
tabella MATERIE
------------------
CLASSE1                    Testo
Colonna                        Numerico
MATERIA                    Testo
La chiave primaria di questa tabella è l'insieme dei due campi CLASSE1 e
Colonna.
Nel campo Colonna va indicato il numero della colonna del report nella quale
deve comparire la materia specificata nel campo MATERIA.
Se hai ipotizzato che il numero massimo delle materie per una singola classe
sia 10, è TASSATIVO che in questa tabella, per ogni classe, ci siano 10
record; se poi per una classe le materie sono 8, i record con il campo
Colonna che ha un valore compreso tra 1 e 8 avranno anche una descrizione
nel campo MATERIA, mentre i record con il campo Colonna con valore 9 e 10
non avranno alcunché nel campo MATRICOLA, ovvero:
--------------------------------------------------
tabella Tabella1
---------------
ID                            Contatore e chiave primaria
MATRICOLA         Numerico
CLASSE1                Testo
MATERIA                Numerico
SCRITTO                Testo
ORALE                    Testo
PRATICO                Testo
ASSENZE                Numerico
Ho ritenuto opportuno dichiarare i campi SCRITTO, ORALE e PRATICO di tipo
testo così che possano contenere anche il valore NC (Non Classificato).
Relativamente al campo MATRICOLA va eseguta l'Autocomposizione Ricerca....
basata sulla tabella Alunni.
Il campo MATERIA è numerico e contiene il valore del campo Colonna della
tabella MATERIE relativo alla materia relativa al record che stai digitando.
---------------------------------------------------
Per meglio gestire l'intreccio Colonna/MATERIA, per registrare i dati in
Tabella1 mi sono creato una maschera (Maschera1) che ha come origine record
Tabella1 e una visualizzazione a Maschera singola.
In Maschera1 ho trasformato il controllo MATERIA in una casella combinata
associata; la combo ha tre colonne, delle quali alla prima ed alla terza ho
assegnato larghezza zero.
All'origine riga della casella combinata MATERIA ho assegnato il nome di una
query che ha il seguente codice SQL:
SELECT MATERIE.Colonna, MATERIE.MATERIA, MATERIE.CLASSE1
FROM MATERIE
WHERE (((MATERIE.CLASSE1)=[FORMS]![Maschera1]![CLASSE1]));
Sia a fronte dell'evento "Su corrente" di Maschera1 che a fronte dell'evento
"Dopo aggiornamaento" del controllo CLASSE1 ho generato il seguente codice
VBA:
Me![MATERIA].Requery
A questo punto mi sono creato una query a campi incrociati (Query1) che ha
il seguente codice SQL:
TRANSFORM First(Format$(IIf(IsNull([SCRITTO]),"     ",[SCRITTO]),"@@@") & "
l " & Format$(IIf(IsNull([ORALE]),"    ",[ORALE]),"@@@") & " l" &
Format$(IIf(IsNull([PRATICO]),"    ",[PRATICO]),"@@@") & " l" &
Format$(Str$([ASSENZE]),"@@@@")) AS [Il valore]
SELECT Tabella1.CLASSE1, Tabella1.MATRICOLA
FROM Tabella1
GROUP BY Tabella1.CLASSE1, Tabella1.MATRICOLA
ORDER BY Tabella1.CLASSE1, Tabella1.MATRICOLA
PIVOT Tabella1.MATERIA;
Mi sono poi creato con l'autocomposizione (con i report non me la cavo tanto
bene) un report che avesse come origine record Query1. Al wizard ho chiesto
il raggruppamento su CLASSE1 e di andare a foglio nuovo al cambio di gruppo.
Ho quindi aperto la struttura del report ,e dalla sezione Intestazione
CLASSE1 ho sostituito le labels che rappresentavano le intestazioni di
colonna con altrettante caselle di testo non associate. Nell'origine
controllo della prima casella di testo non associata ho scritto:
=DLookUp("[MATERIA]";"MATERIE";"Colonna = 1 AND CLASSE1 = " & Chr$(34) &
[CLASSE1] & Chr$(34))
nell'origine controllo della seconda casella di testo non associata ho
scritto:
=DLookUp("[MATERIA]";"MATERIE";"Colonna = 2 AND CLASSE1 = " & Chr$(34) &
[CLASSE1] & Chr$(34))
e così via per le restanti caselle di testo non associate.
A questo punto ho aperto l'anteprima del report ed ho visto ciò che mi
aspettavo, sperando che è anche ciò che tu volevi.
Poichè posso essermi dimenticato di scrivere qualcosa, ti invio al tuo
e-mail il database con cui ho testato tale soluzione così puoi guardarci
dentro.


 
Quando Roberto ci rimugina, ....
Bravissimo, è proprio quello che mi serviva!
Ci sto già lavorando per inserire quelle poche cosette che avevo già
fatto (una routine per la creazione della tabella Classi-Materie, le
righe sul report per ottenere la griglia e altre cosette minori.)
 GRAZIE di tutto cuore!

  GRAZIE di tutto cuore!
E di che.
D'altra parte non può mica sempra averla vinta Access, ca**olina!! ;-)
