Nascondere Campi in un Report

di il
11 risposte

Nascondere Campi in un Report

Buonasera a tutti,
ho un problema con la creazione di un report in un database di access.
Si tratta di un report che deve contenere parecchi dati e che occupa in media sulle 2/3 pagine di A4,
quindi ho cercato una soluzione per poter far sparire tutti quei campi che risultano null per facilitarne la consultazione e ridurre lo spazio.
Ho adottato la seguente soluzione:
1 - ho trasformato le etichette dei vari campi all'interno del report in caselle di testo,
2 - ho ridotto alla dimensione minima (altezza 0,01) sia il campo che la sua etichetta,
3 - nelle proprietà delle due caselle di testo ho messo "si" a espandibile e riducibile
4 - nella etichetta che ho trasformato in casella di testo ho messo la seguente stringa:
=IIf(IsNull([campo1]) Or [campo1]="";Null;"Testo Etichetta:")
Con questo sistema se il mio campo è vuoto sia la sua etichetta (casella di testo) che il campo stesso non compariranno
mentre se ha un valore si espanderà normalmente mostrandomelo.
Questo sistema mi ha dato un buon risultato con un problema però:
Quando si arriva in prossimità del margine di fondo pagina a volte "non" passa alla pagina successiva ma mi taglia il campo con il suo valore
con il risultato che l'utente che consulta il report non lo vede e quindi lo considera come nullo!
Spero di essere stato abbastanza chiaro...
Quale soluzione alternativa posso adottare per ottenere un miglior risultato?
Grazie.

11 Risposte

  • Re: Nascondere Campi in un Report

    Non è chiaro come hai disposto Etichette e Campi, affinchè tu abbia la necessità di nascondere i Null. Poi, mi sa tanto che la scelta di scambiare le Etichette per Caselle di testo non sia stata tanto felice e il problema potrebbe risiedere proprio lì. So di non aver risposto alla tua domanda, ma temo che il mix di diverse proprietà, vattele a pesca quali, possa aver creato questo problema.
    Una altezza di 0,01 mi appare davvero molto piccola e magari il testo non lo vedi nemmeno...ho fatto un test al riguardo e confermo.
  • Re: Nascondere Campi in un Report

    Buongiorno,
    sono d'accordo con te che proprio questa soluzione sia la causa del mio problema. I campi con relativa etichetta sono disposti a cascata, uno sotto l'altro, però sono parecchi e il fatto che molti di questi ogni volta rimanga vuoto distrae l'utente durante la consultazione del report stesso...
  • Re: Nascondere Campi in un Report

    Ciao ho provato a risolvere, come da tuo consiglio, utilizzando un metodo più ortodosso per far sparire le etichette e cioè con il seguente codice:
    Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
    Me.Etichetta1.Visible = Len(Me.prova.Value & "") > 0
    Me.Etichetta8.Visible = Len(Me.Testo7.Value & "") > 0
    Me.Etichetta10.Visible = Len(Me.Testo9.Value & "") > 0
    
    End Sub
    Ora l'etichetta sparisce però ovviamente nel report ci sono degli spazi bianchi qua e la occupati dalle caselle rese invisibili.
    E possibile in qualche modo formattare/compattare il tutto per evitare i "buchi" all'interno del report?
    Grazie
  • Re: Nascondere Campi in un Report

    luca81 ha scritto:


    I campi con relativa etichetta sono disposti a cascata, uno sotto l'altro
    Sinceramente non ho capito come è fatto il report con o senza i campi Null e/o le etichette. Potresti mostrare almeno 5 record per capire meglio come appare o deve apparire il tutto?
    Il tuo problema è verticale o orizzontale?
    Anche elencare tutti i campi può essere utile per inquadrare nelle nostre menti tutto il discorso.
  • Re: Nascondere Campi in un Report

    Luca forse io non ho ben compreso lo scenario... ma se le ETICHETTE(Label) sono AGGANCIATE alle CASELLEDITESTO(TextBox) basta rendere NON VISIBILE la TEXTBOX...!!!

    Ovviamente per essere Agganciate devono essere nella stessa sezione...!
    Se non sono nella stessa sezione ma sono nell'Intestazione di Sezione... allora la cosa cambia...
    ma il tutto diverrebbe impossibile.
  • Re: Nascondere Campi in un Report

    Scusate, volevo inviarvi un esempio del report in un database ma non riesco ad allegarlo..
    Quiali formati sono accettati?
    Io ho provato zip e rar...
  • Re: Nascondere Campi in un Report

    Buongiorno a tutti,
    allego due immagini del report in questione.
    La prima (Report) mostra il report con tutti i campi (anche quelli vuoti), la seconda che è un anteprima di stampa mette in mostra solo quelli compilati. Per ottenere ciò ho usato quel codice che ho allegato nel messaggio precedente. Io vorrei trovarei il modo per eliminare quello spazio che divide il primo campo "Cliente" compilato dall'ultimo "Condizioni".
    Spero di essere stato più chiaro con quest' esempio.
    Buona giornata a tutti.
    Allegati:
    10344_5b3e219f9480757e79eb466d637ab986.jpg
    10344_5b3e219f9480757e79eb466d637ab986.jpg

    10344_2b663bf478659af90ed61539ae3b6d05.jpg
    10344_2b663bf478659af90ed61539ae3b6d05.jpg
  • Re: Nascondere Campi in un Report

    Immaginavo fosse una cosa simile... certo la tua spiegazione è decisamente FUORVIANTE, oltretutto la mia osservazione della LABEL CONNESSA è sempre valida, cosa che non hai capito forse....!!!

    Per ottenere quello che vuoi devi creare un CICLO sui controlli(DataBound ovvero quelli con Origine Controllo) contenuti nel CORPO, se, la proprietà VALUE dei controlli corrisponde al Null o NullString allora non solo devi renderli VISIBILE=FALSE, ma devi memorizzarne le coordinate per spostare il controllo SUCCESSIVO sovrapponendolo a quello NON VISIBILE...

    Questo lavoro è "RELATIVAMENTE" semplice..., il relativamente è legato a quanto sai gestire il modello oggetti del Report da VBA.

    Mio suggerimento è di inserire nella Proprietà TAG dei controlli da GESTIRE un Char di riconoscimento, ad esempio "X"...!
    A quel punto fai un ciclo così
    
    Dim blPrevControlIsVisible As Boolean
    Dim lngTop as Long
    Dim lngLeft as Long
    Dim ctl As Access.Control
    For each ctl in Me.Controls
        If ctl.TAG="X" Then
           If blPrevControlIsVisible =True then
              ctl.Top=lngTop
              ctl.Left=lngLeft
           End if
           If Len(ctl.value & vbNullstring)=0 Then
              blPrevControlIsVisible=true
              ctl.Visible=False
              lngTop=ctl.Top
              lngLeft=ctl.Left
           Else
              blPrevControlIsVisible =False
           End if
    Next
    Devi tuttavia fare ATTENZIONE a come disponi i controlli in fase di DISEGNO... se non li generi in modo sequenziale il CICLO non avrà la progressione corretta...!

    Per ovviare a questo la soluzione potrebbe essere di assegnare come NOME dei controlli(TextBox o quelli DataBound) un nome con progressivo... ad esempio:
    
    txt1
    txt2
    txt3
    ...
    A quel punto, la TAG "X" non servirebbe più ed il ciclo sarebbe sempre funzionante modificato in questo modo:
    
    Dim blPrevControlIsVisible As Boolean
    Dim lngTop as Long
    Dim lngLeft as Long
    Dim ctl As Access.Control
    Dim i As Integer
    For i=1 to 5 ' Ipotiziamo siano fino a txt5
           Set ctl=Me.Controls("txt" & i)
           If blPrevControlIsVisible =True then
              ctl.Top=lngTop
              ctl.Left=lngLeft
           End if
           If Len(ctl.value & vbNullstring)=0 Then
              blPrevControlIsVisible=true
              ctl.Visible=False
              lngTop=ctl.Top
              lngLeft=ctl.Left
           Else
              blPrevControlIsVisible =False
           End if
    Next
    Fai tu le tue opportune verifiche e valutazioni, il codice proposto NON è testato, ma scritto a braccio solo per darti una strada utile...
  • Re: Nascondere Campi in un Report

    Ho verificato!la soluzione con i TXT progressivi è perfetta con il mio caso. Direi che funziona.
    La mia conoscenza di vba purtroppo è minima ma nel mettere giù il disegno del report me la dovrei cavare..
    Grazie a tutti per le dritte.
    Buona giornata.
  • Re: Nascondere Campi in un Report

    Ciao,
    purtroppo l'altro giorno sono stato troppo precipitoso nelle conclusioni.
    C'è un problema nella soluzione che mi hai dato ovvero la seconda perchè nella prima il codice mi dà un errore e non riesco a sistemarlo..

    Nei due report che allego viene evidenziato il problema:
    - ho una serie di campi in cui solo "data ordine" non è compilato e si vede nel "report1".
    - Nel report2 si nota come il campo successivo a "data ordine" si avvicini correttamente al blocco in alto ma che lo spazio lasciato da "data ordine" scivoli verso il basso creando un buco.
    Spero di essere stato il più chiaro possibile..
    Ciao
    Allegati:
    10344_ce8741764834f05492e5be0d66ca9ad2.jpg
    10344_ce8741764834f05492e5be0d66ca9ad2.jpg

    10344_c5013e96ae1a4ec6a419e353adbe8bd8.jpg
    10344_c5013e96ae1a4ec6a419e353adbe8bd8.jpg
  • Re: Nascondere Campi in un Report

    Beh capito il concetto ora devi corrergli dietro... in sostanza si fa DEBUG e si leggono passo passo i valori impostati, prima e dopo, e se per ogni passaggio eseguito con F8 dopo aver messo dei BREACKPOINT tutte le condizioni sono quelle che ci si aspetta...!
    Esiste il Visualizzatore Variabili Locali, che mostra tutte le valorizzazioni di Variabili e controlli(con relative prorietaà)...!

    Ho sempre sostenuto che il DEBUG è un'arte... e che prima di imparare a scrivere 1 sola riga di codice serve sapere come si fa DEBUG.

    Quì trovi un TUTORIAL:
    http://forum.masterdrive.it/access-79/access-debug-44533/
Devi accedere o registrarti per scrivere nel forum
11 risposte