Newsgroup: it.comp.appl.access
Titolo: Help me, formattazione report

Ciao, chiedo scusa per i molti messaggi che ho postato in questi ultimi 2
giorni ma stò facendo un report che mi fa diventare matto. Il report si basa
su una query a campi incrociati, quindi i campi del report sono dinamici.
Ora per le intestazioni di riga non ci sono problemi, così come per le
etichette. Ho invece un grosso problema per l'intestazione di colonna.
Quest'ultima infatti, a seconda dei record può contenere o meno dei valori;
provo a spiegarlo con un esempio:
 Padre       240     250    260    270   280
   1                       250
   2            240                         270
   3                                  260
   4                      250                        280
In questo caso nel primo record l'intestazione di riga è "1", l'intestazione
di colonna è prima "", poi "250", poi "", poi "", poi""
Il secondo record ha come intestazione di riga "2", l'ntestazione di colonna
è prima "240", poi"", poi"", poi "270", poi""
.......
Vorrei avere tutti i valori dell'intestazione di colonna sulla sinistra in
modo tale da ottenere:
   1            250
   2            240    270
   3            260
   4            250    280
La mia idea era di scorrere i record una per uno, controllare quando il
valore dell'intestazione di colonna è vuoto e in quel caso non considerarlo.
Non riesco però a trovare un controllo che mi permetta di capire quando
l'intestazione di colonna è vuota. Riporto si seguito cosa ho fatto finora:
Private Sub Report_Open(Cancel As Integer)
Dim rst As Recordset
Dim CMP As Field
Dim Conta As Integer
Set rst = CurrentDb.OpenRecordset("Query1")
Conta = 1
  For Each CMP In rst.Fields
       If    ????????? <> "" then
           Me("Controllo" & Trim(Conta)).ControlSource = CMP.Name
           Me("Controllo" & Trim(Conta)).Visible = True
           Conta = Conta + 1
       End If
  Next
Set rst = Nothing
End Sub
Guardando il debug del codice non ho trovato nessun valore che cambia quando
il valore dell'intestazione di colonna è "" o uguale a "pippo". CMP.name è
sempre uguale al valore dell'intestazione di colonna, anche se il suo valore
è blank.
Qualcuno può aiutarmi a risolvere questa cosa? Cosa devo mettere al posto
dei ????????
Grazie e ciao

 ha scritto nel messaggio
news:ao416a$mkf$1...@fe1.cs.interbusiness.it...

Se è questo il problema, non si tratta di gestire dinamicamente l'origine
controllo dei controlli di un report con il codice VBA di cui sopra a fronte
dell'evento su apertura  del report: naturalmente tutti i record della query
a campi incrociati hanno lo stesso numero di campi e in tutti i record i
campi hanno naturalmente lo stesso nome.
A mio avviso devi dichiararti nel corpo del report 11 controlli associati
agli 11 campi della query che rappresentano le 11 intestazioni di riga;
quindi inserisci altre 13 caselle di testo non associate in cui inserirai i
valori delle 13 possibili intestazioni di colonna; a fronte dell'evento "Su
formattazione" del corpo del report, per ogni record imposti a Null le 13
caselle di testo non associate; dichiari in memoria una variabile di tipo
matrice di 13 elementi e ad ogni elemento assegni un valore Null; carichi
negli elementi della matrice SOLO i valori significativi dei 13 campi
intestazione-colonna della query; scarichi i valori memorizzati negli
elementi della matrice nei valori delle caselle di testo non associate.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 elementi della matrice nei valori delle caselle di testo non associate.
Grazie. Non è che per caso possa trovare un esempio da qualche parte?
Dimenticavo di dire che il numero dei valori per l'intestazione di colonna
può essere anche >30, ma i valori significativi per ogni record non supera i
12. Ecco perchè ho bisogno che vengano riportati solo i valori
significativi, altrimenti nella pagina del report non avrei abbastanza
spazio. Cambia qualcosa nel suggerimento che mi hai dato dopo questa
informazione?
Ciao

 > intestazione-colonna della query;
Come faccio a prendere SOLO i significativi? E' la cosa più importante
Ciao

 Ciao


 ha scritto nel messaggio
news:ao623f$5uq$1...@fe2.cs.interbusiness.it...

Devi trattare i valori contenuti in TUTTI i campi (quindi non devi fare
alcuna indagine strana sul nome dei campi della query), ma memorizzare nella
matrice solo i valori significativi (i valori diversi da Null o da zero, a
seconda di come è fatta la query a campi incrociati).


elementi della matrice nei valori delle caselle di testo non associate
OK.
Ciao

No, non č quella la strada con la quale puoi risolvere il problema.
Forse pe te č piů intuitivo normalizzare il contenuto della query a campi
incrociati in una tabella temporanea chiamata Temp e poi con il report
stampare la tabella Temp.
Se come tu hai detto precedentemente la query ha i primi 11 campi fissi
(intestazioni di riga) e un numero imprecisato di altri campi dei quali solo
13 sono significativi e solo questi vanno stampati compattando i valori
significativi verso sinistra.
Se i campi non significativi della Query hanno valore Null (attento che se
hanno valore zero cambia la musica).
Creati una tabella chiamata Temp che contenga 24 campi chiamati Campo1,
Campo2, Campo3, ... Campo24.
Esegui il seguente codice VBA:
Dim rst As Recordset
Dim rst1 As Recordset
Dim CMP As Field
Dim Conta1 As Integer, Conta2 As Integer
DoCmd.SetWarnings False
DoCmd.RunSQL "DELETE * FROM TEMP;"
DoCmd.SetWarnings True
Set rst = CurrentDb().OpenRecordset("Query1")
Set rst1 = CurrentDb().OpenRecordset("Temp")
rst.MoveFirst
Do Until rst.EOF
    rst1.AddNew
    Conta1 = 0
    Conta2 = 1
    For Each CMP In rst.Fields
    If Conta1 < 11 Then
        rst1.Fields(Conta1) = rst.Fields(Conta1)
    Else
        If Not IsNull(rst.Fields(Conta1)) Then
            rst1("Campo" & Trim(Conta2)) = rst.Fields(Conta1)
            Conta2 = Conta2 + 1
        End If
    End If
    Conta1 = Conta1 + 1
    Next
    rst1.Update
    rst.MoveNext
Loop
Set rst = Nothing
Set rst1 = Nothing
A questo punto crea un report che abbia la tabella Temp come origine record
e che visualizzi tutti e 24 i suoi campi; non credo che avrai problemi visto
che i campi sono sicuramente 24 ed hanno nomi noti.
