+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Dividere record in ultima pagina Report

  1. #1
    webmamo non è in linea Novello
    Salve a tutti, sono nuovo del forum e sono un novello in Access e Vb6.
    Vi spiego in breve il mio problema.
    Ho un Db per la fatturazione che ha il classico report fattura composto da:
    - Intestazione Pagina Pagina con il logo ed i dati del cliente
    - Corpo con i record che "riempiono" la mia fattura
    - PièdiPagina Pagina con i soliti totali (che voglio vengano visualizzati a fondo pagina per una questione di estetica)

    Nel PièdiPaginaPagina ho il sottoreport "FATTURA3" ed un etichetta con titolo "Segue Pagina >>" ed entrambi hanno la posizione da margine superiore = 0,5 (per cui sono sovrapposti)

    La chicca sta nel fatto che sulla formattazione del PièdiPaginaPagina ho inserito questo codice:

    Private Sub SezionePièDiPagina_Format(Cancel As Integer, FormatCount As Integer)
    
    If Me.Page = Pages Then
    Me.FATTURA3.Visible = True
    Me.SEGUE_PAGINA.Visible = False
    Me.SezionePièDiPagina.Height = 4139
    Me.FATTURA3.Height = 4139
    Else
    Me.SEGUE_PAGINA.Visible = True
    Me.SezionePièDiPagina.Height = 700
    Me.FATTURA3.Height = 0
    Me.FATTURA3.Visible = False
    End If
    
    End Sub
    
    che praticamente fa sì che se ho una pagina sola mi vengono visualizzati 19 record nel corpo e si vede il riquadro dei totali, MENTRE se ci sono più pagine mi vengono stampati 30 record per pagina con a fondo pagina SOLO l'etichetta "Segue pagina >>" ed il riquadro dei totali SOLO nell'ultima pagina.
    Il tutto è per me PERFETTO se non fosse che SE nell'ultima pagina capitano DAI 20 ai 30 record, mi si visualizzano 19 record e l'etichetta "Segue pagina >>" ed in teoria i totali mi andrebbero in una ulteriore ultima pagina a cui non riesco ad accedere.

    Per fare un esempio pratico ho:

    - Fattura con 19 record = 1/1 pagine con riquadro totali a fondo pagina
    - Fattura con 31 record = 1/2 pagina con 30 record ed etichetta "segue pagina>>" a fondo pagina e 2/2 pagina con 1 record e riquadro totali a fondo pagina
    - Fattura con 20-30 record = 1/2 pagina con 20-30 record ed etichetta "segue pagina>>" a fondo pagina e 2/2 pagina non accessibile come se non fosse stata creata
    - Fattura con 168 record = da 1/6 a 5/6 pagine con 30 record ed etichetta "segue pagina>>" afp e pagina 6/6 con 18 record e riquadro totali afp
    - Fattura con 237 record =da 1/9 a 7/9 pagine con 30 record ed etichetta "segue pagina>>" afp pagina 8/9 con 27 record ed etichetta "segue pagina>>" afp e pagina 9/9 non accessibile

    Ho provato ad intervenire sul codice con l'escamotage di aumentare l'altezza del controllo quantità per allargare lo spazio tra un record e l'altro in modo da far occupare il range di 20-30 record adattandoli ai 49 (per cui 2 pagine 1 da 30 e una da 19) ma quando succede, mi sia allargano tutte le pagine e su 168 record a 6 pagine passo a quasi il doppio perché al posto di avere pagine da 30 record ne ho 19 ad altezza doppia.

    Mi servirebbe il modo di intervenire sul codice in modo tale da stabilire
    Se nell'ultima pagina capitano dai 20 ai 30 record dividi i record in modo da ottenere una pagina in più con 2-3 record ma con il riquadro totali visibile tipo:
    - su pages visualizza 19 record distribuiti su tutta la pagina (anche l'occhio vuole la sua parte) e aggiungi pages+1 con 1 record e visualizza il riquadro totali.

    Ho provato col codice:

    Dim NrRec
    NrRec = txtCount - (Fix(txtCount/30)*30)   'dove txtCount è un controllo text con Origine Record = 1 e Somma su totali per calcolare il totale dei record della fattura e NrRec è il numero di record sull'ultima pagina con formattazione a 30 record
    
    If 20<= NrRec <= 30 Tehn    'se nell'ultima pagina ho dai 20 ai 30 record
    Me.QTA.Height = 460               'imposta l'altezza della text quantità al doppio 
    Me.SEGUE_PAGINA.Visible = True     ' riduci il piè di pagina in modo da visualizzare 30 record
    Me.SezionePièDiPagina.Height = 700        'nascondi i totali e visualizza il segue
    Me.FATTURA3.Height = 0
    Me.FATTURA3.Visible = False
    
    >> così effettivamente funziona ma lo spazio tra i record aumenta su tutte le pagine e non solo sull'ultima (che sarebbe un po' come usare il ForceNewPage), invece come soluzione mi andrebbe bene sull'ultima pagina, così me ne aggiunge una in più che mi fa ottenere l'effetto desiderato.

    Sperando di essere stato chiaro ringrazio anticipatamente chiunque sia in grado di aiutarmi anche perché ormai sono 10 giorni che ci sto sbattendo la testa senza cavare un ragno dal buco.
    Ultima modifica di AntonioG; 18-02-2017 15:58  Motivo: I tag CODE per il codice !

  2. #2
    Phil_cattivocarattere non è in linea Topo di biblioteca
    Quote Originariamente inviato da webmamo Visualizza il messaggio
    ...
    Sperando di essere stato chiaro ringrazio anticipatamente chiunque sia in grado di aiutarmi...
    Hai reso l'idea ma affrontare il caso concreto è un po' complicato, almeno per me.
    Sicuramente hai guardato sul web quindi probabilmente questi link ti sono già noti
    Printing Two Records Per Page on a Microsoft Access Report
    Limit Number of Records Per Page - Access Report
    Report to ALWAYS display fixed number of records in a grid
    E se vuoi che anche noi ci divertiamo un po', se fra n giorni non ne sei uscito, pubblica qualcosa su cui fare qualche prova. Siccome sei un nuovo iscritto anticipo la domanda: per pubblicare devi usare un sito di file sharing free (e senza registrazione, almeno per me)

  3. #3
    webmamo non è in linea Novello
    Quote Originariamente inviato da Phil_cattivocarattere Visualizza il messaggio
    Hai reso l'idea ma affrontare il caso concreto è un po' complicato, almeno per me.
    Sicuramente hai guardato sul web quindi probabilmente questi link ti sono già noti
    Printing Two Records Per Page on a Microsoft Access Report
    Limit Number of Records Per Page - Access Report
    Report to ALWAYS display fixed number of records in a grid
    E se vuoi che anche noi ci divertiamo un po', se fra n giorni non ne sei uscito, pubblica qualcosa su cui fare qualche prova. Siccome sei un nuovo iscritto anticipo la domanda: per pubblicare devi usare un sito di file sharing free (e senza registrazione, almeno per me)
    Ciao Phil_cattivocarattere,
    grazie per la risposta e come hai già detto tu, i link me li sono letti e stra-letti provati e riprovati, infatti proprio grazie agli esempi che mi hai allegato, ho raggiunto la conclusione di ottenere i 30 record per pagina ed i 19 sull'ultima con la visualizzazione dei totali.
    Oggi facendo l'ennesimo tentativo mi era venuto in mente di fare una sorta di select case sui record per cercare di abbattere quel maledetto muro dei record tra 20 e 30 sull'ultima pagina.
    Il mio problema è che NON ho la ben che minima idea di come intercettare esattamente il numero di record (o righe) che verranno visualizzate nell'ultima pagina e dirgli di visualizzarle come dico io.

    In teoria con la formula matematica:
    NrRigheTotale lo conosco
    NrRigheUltima = NrRigheTotale - (Fix(NrRigheTotali/30)*30) dovrei arrivare a conoscere quante righe ho nell'ultima pagina... da qui basterebbe un criterio che mi dica:
    Se NrRigheUltima è compreso tra 20 e 30 allora:
    UlitimoRigo = NrRigheUltima - 1
    PaginaAggiunta = Pages + 1
    Visualizza NrRigheUltima - 1 sulla mia ultima pagina (ovvero Pages) e il record che avanza in una nuova pagina ( UltimoRigo su PaginaAggiunta... e già cge ci sei in SOLO in Pages visualizza il campo Qta alto 460 al posto del solito 283.

    Per logica quello che ho scritto dovrebbe funzionare... ma in pratica ahimè non so come tradurlo in codice funzionante.
    Se sai come aiutarmi te ne sarei molto grato.

  4. #4
    Phil_cattivocarattere non è in linea Topo di biblioteca
    Quote Originariamente inviato da webmamo Visualizza il messaggio
    ...
    Per logica quello che ho scritto dovrebbe funzionare... ma in pratica ahimè non so come tradurlo in codice funzionante.
    Se sai come aiutarmi te ne sarei molto grato.
    Non so se questo ti può essere utile (servono parecchi debug.print e/o punti di interruzione per "vederlo all'opera") ma la costruzione dei report ha molti eventi che si ripetono. Se scrivi codice in un evento format di una sezione trovi un "contatore" che ti dice quante volte quell'evento si è ripetuto
    Esempio
    Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
    
    In questo è FormatCount. Prova a vedere se questa ulteriore informazione ti può essere utile per discriminare l'esecuzione del codice. Per trovare la combinazione giusta, nonostante a quel tempo avessi le idee ben chiare (ora ho dimenticato parecchio) ho dovuto fare molti tentativi. Prima però devi vederlo "in azione", cioè vedere quante volte format e print vengono eseguiti. Magari in quel momento capisci qual è il punto giusto.

  5. #5
    webmamo non è in linea Novello
    Caro Phil_cattivocarattere
    sto già facendo le prove sul format del corpo e del pièdipagina pagina...
    ma tu per caso sai dirmi come faccio nel corpo a dirgli di visualizzare il numero di record che nel post precedente ho calcolato come UltimoRigo?

    tipo:

    Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)

    if Me.Page = Pages Then

    Me.Corpo."Visualizza Nr Record" = a UltimoRigo
    e il resto in una nuova pagina
    End if

  6. #6
    L'avatar di willy55
    willy55 non è in linea Scribacchino
    webmamo,
    chiedo se hai valutato di fissare a priori il sottoreport (nel corpo del report) che presenta i dati dei movimenti (con i record degli articoli a cui si riferisce la fattura) in modo che possa contenere i 30 record (che sono il tuo massimo) al fine di avere, nella pagina (ad esempio A4) stabilite verticalmente le occupazioni delle varie sezioni, per cui saranno fissi corpo,intestazione ed il piè di pagina (ove potrà essere presente l'eventuale messaggio con l'etichetta "Segue pagina >>" solo sull'ultima pagina, in base al controllo se il numero di pagina è uguale a Pages).
    In tal modo nessun calcolo è necessario per stabilire l'ampiezza, in verticale, delle parti che compongono il report.
    ℹ️ Leggi di più su willy55 ...

  7. #7
    webmamo non è in linea Novello
    Ciao willy55,
    grazie per il tuo intervento.
    Si il mio problema è proprio dovuto al fatto che ho fissato i sottoreport del corpo a 30 record in funzione del pièdipagina pagina alto 700 con l'etichetta segue pagina o in alternativa a 19 record nel caso di pièdipagina alto 4142 con il sottoreport dei totali.
    Il problema è che nell'intervallo di mezzo cioè tra 20 e 30 record rimango fregato sull'ultima pagina.
    So bene che spostando da pagina a report il piedi risolverei il problema ma esteticamente non sarebbe accettabile.
    Del mio ultimo post di risposta a Phil tu sapresti darmi una mano?

  8. #8
    L'avatar di willy55
    willy55 non è in linea Scribacchino

  9. #9
    webmamo non è in linea Novello
    Il brutto per me del sito comune è che l'esempio per n costante è in versione access'97 ed io ho il 2016

  10. #10
    L'avatar di willy55
    willy55 non è in linea Scribacchino
    Visto che hai la versione 2016 di Access (la quale non permette più di convertire i file MDB creati con la versione '97) ho aperto il demo, in tua vece, ed allego il codice presente nel report:
    '**************************
    'Autore: Federico Luciani
    'email:  fluciani@libero.it
    '**************************
    
    Option Compare Database
    Option Explicit
    
    Dim intCR As Integer        'contatore di righe
    Dim intCP As Integer        'contatore di pagine per gruppo
    Const intNR As Integer = 20 'numero di righe da stampare
    
    
    Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
        'incrementa il contatore di righe
        intCR = intCR + 1
        If intCR = intNR Then
            'se il numero di riga coincide con il numero max di righe stampabili
                'se il numero di riga e' maggiore dell'ultimo record
                'rende invisibili i controlli testo nel corpo
            If intCR + intNR * intCP > Me.txtTRec Then ControlliAssociatiVisibili False
            'imposta l'interruzione di pagina se non e' l'ultima pagina
            If intCP + 1 < Me.txtTRec / intNR Then Me.IntPagina.Visible = True
        ElseIf intCR + intNR * intCP = Me.txtTRec Then
            'se il numero di riga coincide con l'ultimo record
            'evita lo spostamento sul record successivo
            Me.NextRecord = False
        ElseIf intCR + intNR * intCP > Me.txtTRec Then
            'se il numero di riga e' maggiore dell'ultimo record
            'evita lo spostamento sul record successivo
            'e rende invisibili i controlli testo nel corpo
            Me.NextRecord = False
            ControlliAssociatiVisibili False
        End If
    
    End Sub
    
    Private Sub IntestazioneGruppo0_Format(Cancel As Integer, FormatCount As Integer)
        'incrementa il contatore di pagine per gruppo
        intCP = 0
    End Sub
    
    Private Sub IntestazionePagina_Format(Cancel As Integer, FormatCount As Integer)
        'azzera il contatore di righe
        intCR = 0
        'incrementa il contatore di pagine per gruppo
        intCP = intCP + 1
        'elimina l'interruzione di pagina
        Me.IntPagina.Visible = False
        'rende visibili i controlli testo nel corpo
        ControlliAssociatiVisibili True
    End Sub
    
    Private Sub ControlliAssociatiVisibili(blnStato As Boolean)
        Me.descrizione.Visible = blnStato
        Me.prezzo.Visible = blnStato
    End Sub
    
    ℹ️ Leggi di più su willy55 ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Visualizzare un report partendo dall'ultima pagina
    Da giovepan nel forum Microsoft Access
    Risposte: 6
    Ultimo Post: 18-07-2015, 14:43
  2. Risposte: 2
    Ultimo Post: 04-06-2012, 10:07
  3. Report: stampa un record per pagina
    Da murdok69 nel forum Microsoft Word
    Risposte: 4
    Ultimo Post: 07-04-2011, 10:47
  4. datareport ultima pagina
    Da seby nel forum Visual Basic 6
    Risposte: 6
    Ultimo Post: 21-07-2008, 23:49
  5. ACCESS - Apertura report all'ultima pagina
    Da The Gang nel forum Microsoft Access
    Risposte: 8
    Ultimo Post: 10-07-2007, 08:04