Newsgroup: it.comp.appl.access
Titolo: report con elenco mesi

Buon pomeriggio a tutti.
In un report devo mostrare le presenze per ogni mese di un paziente.
Ad esempio per l'anno corrente, anche se da Maggio in poi le presenze non sono state ancora inserite, il report deve comunque riportare uno sotto l'altro i mesi da gennaio a dicembre, così come se un paziente è stato ricoverato a marzo, il report deve comunque riportare anche gennaio e febbraio.
Ho provato nella query a mettere in relazione la tblMesi e la tabella con le presenze, con join che deve mostrare tutti i record della tblMesi e solo i record della tabella tblpresenze o ad esempio creare una tblPresenzeTemp con un record per ogni mese e successivamente creare una query union.
Ma nè una soluzione, nè l'altra mi danno il risultato sperato.
Qual'è la strada corretta?
Grazie.
Giuseppe


secondo me ti conviene mettere i mesi come intestazione colonna e non di 
riga visto che sai che sono 12 e puoi gestirteli bene sulla larghezza 
del report
 
mentre i pazienti possono aumentare e diventare troppi per contenerli in 
una larghezza fissa di un report
 
se hai una tabella presenze con
id contatore
datap data/ora
paziente testo
 
con una query a campi incrociati
 
TRANSFORM Count(Presenze.ID) AS ConteggioDiID
SELECT Presenze.Paziente, Count(Presenze.ID) AS [Totale di ID]
FROM Presenze
GROUP BY Presenze.Paziente
PIVOT Format([DataP],"mmm") In 
("gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic");
 
otterresti questo
 
https://i.imgur.com/1RJzMUi.png
 
 
 
se invece per forza vuoi i mesi sulle righe ti crei una tabella mesi
idmese	mese
1	GEN
2	FEB
3	MAR
4	APR
5	MAG
6	GIU
7	LUG
8	AGO
9	SET
10	OTT
11	NOV
12	DIC
 
una query
 
SELECT Presenze.DataP, Presenze.Paziente, mese, idmese
FROM Presenze RIGHT JOIN Mesi ON Month(Presenze.DataP) = Mesi.idmese
ORDER BY idmese;
 
e una query a campi incrociati
 
TRANSFORM Count(PresenzeMese.DataP) AS ConteggioDiDataP
SELECT PresenzeMese.idmese, Count(PresenzeMese.DataP) AS [Totale di DataP]
FROM PresenzeMese
GROUP BY PresenzeMese.idmese
ORDER BY PresenzeMese.idmese
PIVOT PresenzeMese.Paziente;
 
 
risultato
 
 
 
https://i.imgur.com/oymAG74.png
 
 
 
BFS
 
 
-- 
Questa email è stata esaminata alla ricerca di virus da AVG.
http://www.avg.com
 
 


Ciao Fabio, grazie per la risposta.
In questo tipo di report, il paziente è sempre solo uno.
Quindi attualmente ho:
https://imgur.com/a/IyWlAhK
 
e invece vorrei
https://imgur.com/a/lktA18F
 
 
Grazie.
Giuseppe

 
 
quindi si tratta di forzare tutti i mesi e tutti i giorni, 
indipendentemente da quelli che sono presenti nei dati
 
aspetto con curiosità di sapere come fare :)
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

 Giuseppe
 
Se nel REPORT gestisci il Raggruppamento per Mese, se non ricordo male lo puoi fare dal WIZARD in fase di costruzione, otterrai già una divisione del mese, ti resta inserire nel CORPO la TextBox con il Mese che copierai dalla Sezione Raggruppata che avrà ALTEZZA=0 e le 31 TextBox che dovrai popolare su Format del Corpo da codice....
Avendo cura di Nominare le TextBox con un nome riconducibile al giorno, d1÷d31, ricavando nella sezione corpo il Day(data) accedi alla textBox specifica Me.Controls("d" & Day(tuadata)).Value=TuoTesto facendo 
 
@Alex

 @Alex
 
Alternativa, valida anche se non sembrerebbe, è DISEGNARE da codice i Rettangoli inibendo il cambio pagina nella Sezione Raggruppata e mettendo il Corpo ad altezza=0
 
Io ho usato questo metodo percheè consente di gestire molto bene tutto, scritto un po di codice... ma funziona bene.
 
@Alex

 Giuseppe
 
io per un report del genere mi disegnerei una griglia di label
chiamandole M1...M12
31 label per riga per i giorni(più le altre colonne)
 
le chiamerei con M1G1....M1G31.....M12G1....M12G31
 
in pratica il 01/01 corrisponde a mese 1 giorno 1 quindi label M1G1
il 20/05 sarebbe la laber M5G20
e da codice vba andrei a scriverci il valore dentro
 
tipo se il paziente è presente il giorno 05/02  andrei a scrivere 
qualcosa tipo
 
me.controls("M2G5").caption="P"
 
scorrendo il recordset delle presenze... supponendo che la data presenza 
sia RS.field("datap")
 
 
il codice sarebbe qualcosa del tipo :
 
while not RS.eof
	me.controls("m" & month(RS.field("datap")) & "G" & 
day(rs.fields("datap")).caption="P"
   )
	rs.movenext
wend



Alex grazie per le risposte.
Credo di aver capito quello che dici.
Già in altri report, avevo bisogno di avere un certo numero di righe fisse, anche se poi ne erano compilate solo alcune, e funziona appunto con dei rettangoli che sono visibili se il record è vuoto.
La differenza però con questo è che non ho bisogno solo delle righe vuote, ma che nella prima colonna ci sia l'elenco dei mesi che però nell'origine del report non sempre ci sono dal primo all'ultimo.
Correggimi se sbaglio o ho capito male.
Giuseppe


Grazie Fabio.
Mi sembra un'ottima idea su cui lavorarci.
Spero di riuscire a metterla in pratica. 
Ci provo.
Grazie

 Giuseppe
 
In nessuna delle 2 soluzioni date avresti righe vuote...
La mia prima soluzione è nella sostanza quella data da Fabio.
La mia seconda soluzione usa solo la parte Raggruppata e disegna rettangoli con un ciclo 1-31 e dentro ci scrivi quello che nella Sezione Format viene generato senza che si veda...
 
La seconda è un poco più fantasiosa ma ci ho fatto dei GANT aziendali con anche i legami tra le attività con questo metodo... e funziona perfettamente.
 
Saluti
@Alex


Grazie.
Da domani mi metto a fare prove e vediamo se ci riesco.
Giuseppe

 
 
sono 372 oggetti, più quelli di contorno: ricordo che tempo fa, in una 
maschera molto complessa, ebbi problemi perché erano troppi (>255)
 
era access 2010, file mdb: magari nelle versioni nuove il limite è stato 
alzato


 
 
http://www.donkarl.com/it/?FAQ1.4
 
 
ciao


 
 
che tipo di problemi?
in questa maschera
 
https://i.imgur.com/LahTerc.png
 
 
la griglia che vedi è composta dal 800 controlli etichette che vado a 
colorare/scrivere da codice e non mi ha mai dato fastidi
creata con AXP e portata avanti fino ad oggi nelle varie versioni


 -- 
 
 
Scusa ma perchè così tanti oggetti... un mese ha 31gg quanta roba mai ci devi mettere in una Sezione...?
 
In ogin caso, molto sottovalutato in questi casi ma a torto, è proprio la possibilità di disegnare nei report.
 
@Alex

 
 
ehm... era molto prima di access 2010
probabilmente un 2000/XP o addirittura un 97
 
la schermata qui sotto era quella dei cosiddetti 'calcoli', in pratica uno 
strumento per calcolare il prezzo di vendita di un prodotto partendo dal 
costo al fabbricante e risalendo fino al cliente finale attraverso 
importatori, grossisti, distributori, negozianti, etc
 
https://i.imgur.com/7sg06aW.png
 
 
esiste ancora oggi, riscritto da zero e semplificato
prima ce ne era una versione con FE eseguibile (non gestita da me) e prima 
ancora una versione in GWBASIC... ridendo e scherzando son più di 30 anni 
che viene usato
 
nota che la versione gwbasic faceva uso di fabs plus :)



aggiungo al piatto anche una soluzione anni 70 ...
 
una unica label con carattere equispaziato tipo Courrier New chiamata mese
 
qualche ciclo
 
Dim seq As String
 
seq = "Giorni  : "
For i = 1 To 31
     seq = seq & "[" & Format(i, "00") & "]"
Next i
seq = seq + vbCrLf
For m = 1 To 12
     seq = seq & "Mese " & Format(m, "00") & " : "
     For G = 1 To 31
         If G = m Then
             seq = seq & "[ P]"
         Else
             seq = seq & "[  ]"
         End If
     Next G
     seq = seq & vbCrLf
Next m
Me.Mese.Caption = seq
 
 
risultato senza pretese grafiche
 
https://i.imgur.com/4FtSwBp.png
 


 BFS 
 
A me piace moltissimo invece... hai mai provato ad usare FONT Currier New con caratteri UNICODE...?
CHRB(9500) giusto per fare un esempio... ,i numeri ovviamente sono da trovare in base al simbolo grafico, io mi ero fatto una mascherina con 10x10 TextBox che popolavo a partire da 1000 step 100 per esplorare
i caratteri grafici e da 8500 fino a 13000 ci sono cosette utili...
 
@Alex

Il giorno lunedì 11 aprile 2022 alle 08:08:51 UTC+2 BFS ha scritto:

Ciao Fabio.
In attesa di cimentarmi con la costruzione del report come da oggetto del trhead, sto realizzando l'altro report come da te suggerito.
Su  excel  ho il risultato che vorrei ottenere 
https://imgur.com/qm8hBpY
 
e questo invece è ciò che  ottengo con access
https://imgur.com/YHXn0VL
 
In pratica per ogni paziente devo avere tre righe con i totali per tipologia (presenza, assenza, ricovero) ma riesco a creare solo la riga per una tipologia.
Mentre i mesi, se formatto come intestazione colonna, Format([IdMese];"mmm") il nome del mese non corrisponde, e se lascio come intestazione colonna solo IdMese, mi crea solo le colonne dei mesi di cui sono state inserite le presenze. 
Questo il codice sql della query:
PARAMETERS Anno Short, IdAziendaStruttura Short;
TRANSFORM Sum(qsmRiepDegenzeMensili.TotalePresenze) AS SommaDiTotalePresenze
SELECT qsmRiepDegenzeMensili.Assistito, Sum(qsmRiepDegenzeMensili.TotalePresenze) AS SommaDiTotalePresenze1
FROM qsmRiepDegenzeMensili
WHERE (((qsmRiepDegenzeMensili.Anno)=2022) AND ((qsmRiepDegenzeMensili.IdAziendaStruttura)=10))
GROUP BY qsmRiepDegenzeMensili.Assistito, qsmRiepDegenzeMensili.Anno, qsmRiepDegenzeMensili.IdAziendaStruttura
ORDER BY qsmRiepDegenzeMensili.Assistito
PIVOT qsmRiepDegenzeMensili.IDMese;
L'origine della query (qsmRiepDegenzeMensili) ha i seguenti campi: 
IdDegenzaMensile, IDDegenza, Anno, IDMese, IdAziendaStruttura, IdAnagrafica, IdAzienda, Assistito, [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31], TotalePresenze, TotaleAssenze, TotaleRicoveri
Si può ottenere con questi dati ciò che ho in excel?
Grazie.
Giuseppe


Buongiorno e buona domenica.
Ho scomposto la tabella con tutti i record in tre query, ognuna per tipologia.
Ho unito le tre query con una query unione che mi triplica i record mettendo uno sotto l'altro per ogni paziente, anno, mese e struttura e per ogni record il corripettivo toale.
Funziona, i problemi che restano sono:
1) Per il 2022 mi mostra solo i primi tre mesi (senza trasformare idmese in Format([IdMese],"mmm");
https://imgur.com/FhT2Lvr
 
2) Nel trasformare IdMese (numerico) in PIVOT Format([IdMese],"mmm") In
("gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"); accade che mi somma Gennaio e Febbraio, mentre Marzo diventa dicembre
https://imgur.com/3Roi9p4
 
 
Quindi la soluzione al primo punto, va bene ma vorrei tutti i mesi (se possibile) e in formato "mmm".
Cosa cè ancora da correggere?
Grazie.
Giuseppe.


Sono riuscito ad ottenere il risultato sperato mediante la creazione di una tabella identica a quella in cui vengono memorizzate le presenze in cui ho  inserito solo dodici record, uno per ogni mese.
Con una query unione li unisco e questo è il risultato:
https://imgur.com/WQHvlNo
 
Grazie a tutti.
Giuseppe