Esportare in pdf solo alcuni numeri di pagina di un report

di il
27 risposte

27 Risposte - Pagina 2

  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    fratac ha scritto:


    Ciao.

    Purtroppo sono vittima del mio stesso copia incolla. Nel corso di tutti gli anni, ho praticamente scritto e realizzato il 90 percento del codice che di solito uso e che ho archiviato nel mio database personale dove ho tutti i codici, gli esempi e le strutture belle e pronte, quindi quando realizzo qualcosa di nuovo raramente scrivo nuovo codice a mano. Copio, incollo, modifico giusto i nomi dei controlli, testo e via.

    Questo si sta ritorcendo contro me stesso, infatti, ora quando provo a ragionare o scrivere codice a mano, mi sto rendendo conto che non mi ricordo nemmeno la sintassi di una semplice msgbox. E me ne sto rendendo conto ora che sono tornato nei vari forum.
    Purtroppo senza questo quadernino sono peggio di un pivello alle prime armi.

    A parte questa parentesi, anni fa quando avevo un associazione di volontariato, praticamente stampavo i singoli badge degli associati. Un singolo badge era una singola pagina del report. Ma non ricordavo bene come avevo fatto.
    Ora sono tornato a casa dal lavoro ed ho aperto il mio quadernino.
    Praticamente avevo fatto in questo modo.

    Nella tabella contenente i dati degli associati, ho aggiunto un campo checkbox da spuntare.

    poi, ho creato un report (solo corpo) basato su una query creata visualizzando tutti i dati degli associati, con la condizione (criterio) che deve ricavare solo i record che hanno la checkbox impostata su true.

    Il report si chiama Badge

    Poi ho creato una maschera con fonte dati la tabella contenente i dati degli associati, in modalità "visualizzazione maschera divisa".
    Sopra vedo tutti i record con cognomi e nomi degli associati più la casella checkbox e nella parte inferiore vedo il singolo record con i dati dell'associato.

    La maschera si chiama "Stampa badge"

    Questo fa si che, sopra seleziono i badge da stampare, e sotto, forzo access a creare una pagina separata del report per ogni associato, perchè i dati gli arrivano tramite una visualizzazione a singolo record e non in modo continuo.

    Nella parte inferiore, dove posso aggiungere controlli, ho inserito un pulsante "Esportabadge".

    Nel pulsante ho scritto questo codice (Si devo mettere la pappa pronta, ma mi perdonerete)
    Ho modificato e testato il codice in modo che ti esporta subito in pdf, senza stampare.
    
    Private Sub Esportabadge_Click()
    
    Dim NomeReport As String
    
    NomeReport = "Badge"
    
    DoCmd.OutputTo acOutputReport, NomeReport, acFormatPDF, "", False
    
    End Sub
    
    Praticamente, quando voglio stampare un badge, apro la maschera "esporta badge", spunto le check box su "vero" degli associati che voglio esportare e clicco il pulsante "Esportabadge"

    Ti chiede di dare un nome al file da salvare e ti crea un PDF, dove in ogni singola pagina, c'è un singolo badge, oppure se vai in stampa diretta, ti stampa un badge per ogni pagina.

    Poi io l'avevo affinato, facendo in modo che in automatico creasse un singolo file per singolo badge chiamato con il nome dell'associato.
    Ma questa è un'altra storia.

    Comunque, se devi esportare o stampare tutti i record tramite un normalissimo report, ed uno per pagina, basta che metti una interruzione di pagina alla fine del gruppo di dati che vuoi stampare.
    Nell'anteprima o nella stampa, metterà un report per pagina. Naturalmente se hai 10.000 report, te li stampa tutti.
    Con il metodo sopra, a parte il dover selezionare i record da stampare, puoi stampare anche un singolo record su 10.000.

    Spero di esserti stato di aiuto.
    Ciao e grazie.

    Non so se il tuo codice fa esattamente al caso mio.

    Io ho un report con 6 pagine (6 immagini) 2 nell'intestazione report, 2 nel corpo e 2 nel pie di pagina report.

    Quindi al caricamento del report in base ad alcune checkbox devo visualizzare solo pagine che mi servono
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    
    'Public Enum eplGroups
    '    plDetail = 0
    '    plReportHeader = 1
    '    plReportFooter = 2
    '    plPageHeader = 3
    '    plPageFooter = 4
    '    plGroupLevel1Header = 5
    '    plGroupLevel1Footer = 6
    '    plGroupLevel2Header = 7
    '    plGroupLevel2Footer = 8
    '    plGroupLevel3Header = 9
    '    plGroupLevel3Footer = 10
    '    plGroupLevel4Header = 11
    '    plGroupLevel4Footer = 12
    '    plGroupLevel5Header = 13
    '    plGroupLevel5Footer = 14
    '    plGroupLevel6Header = 15
    '    plGroupLevel6Footer = 16
    '    plGroupLevel7Header = 17
    '    plGroupLevel7Footer = 18
    '    plGroupLevel8Header = 19
    '    plGroupLevel8Footer = 20
    'End Enum
    
    ReportHeader/Footer -> 1 e 2
    PageHeader/Footer -> 3 e 4
    Io NON agirei sul Report o Page Header/Footer ma come già scritto, su una sezione raggruppamento (creata ad esempio sulla chiave univoca del documento) e poi non agirei sulla proprietà visible ma annullerei l'evento format (Header o Footer del raggruppamento) ...
    Giusto per chiarezza : le sezioni del Header/Footer Report avvengono SOLO 1 volta (ad inizio e a fine report), le sezioni Header/Footer Page avvengono per OGNI pagina del report.
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    fabionik2004 ha scritto:


    @Alex ha scritto:


    Me.Section(IndiceSection).Visible=True/False
    Quì trovi le costanti da inserire come IndiceSection, la tua potrebbe essere [acPageFooter=4]:
    Ciao Ho provato con questa riga
    Me.Section(4).Visible = False
    ma non nasconde il pie di pagina report

    ho anche provato a cambiare il parametro 4 ma il pie di pagina report é sempre visibile.
    PièDiPaginaPagina... non Report... tu hai parlato di questo...!
    In ogni caso già Max ti ha spiegato meglio.
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    max.riservo ha scritto:


    
    'Public Enum eplGroups
    '    plDetail = 0
    '    plReportHeader = 1
    '    plReportFooter = 2
    '    plPageHeader = 3
    '    plPageFooter = 4
    '    plGroupLevel1Header = 5
    '    plGroupLevel1Footer = 6
    '    plGroupLevel2Header = 7
    '    plGroupLevel2Footer = 8
    '    plGroupLevel3Header = 9
    '    plGroupLevel3Footer = 10
    '    plGroupLevel4Header = 11
    '    plGroupLevel4Footer = 12
    '    plGroupLevel5Header = 13
    '    plGroupLevel5Footer = 14
    '    plGroupLevel6Header = 15
    '    plGroupLevel6Footer = 16
    '    plGroupLevel7Header = 17
    '    plGroupLevel7Footer = 18
    '    plGroupLevel8Header = 19
    '    plGroupLevel8Footer = 20
    'End Enum
    
    ReportHeader/Footer -> 1 e 2
    PageHeader/Footer -> 3 e 4
    Io NON agirei sul Report o Page Header/Footer ma come già scritto, su una sezione raggruppamento (creata ad esempio sulla chiave univoca del documento) e poi non agirei sulla proprietà visible ma annullerei l'evento format (Header o Footer del raggruppamento) ...
    Giusto per chiarezza : le sezioni del Header/Footer Report avvengono SOLO 1 volta (ad inizio e a fine report), le sezioni Header/Footer Page avvengono per OGNI pagina del report.
    Credo di aver corretto come dici tu e funziona:

    Questo ad esempio riguarda l'intestazione report
    Private Sub IntestazioneReport_Format(Cancel As Integer, FormatCount As Integer)
    If Forms!NewContract!opt1 = False Then
    Cancel = True
    End If
    End Sub
    Il problema che ho adesso é questo
    -eliminando il pie di pagina report al caricamento, mi rimane una pagina bianca alla fine
    -eliminando l'intestazione report mi rimane una pagina bianca all'inizio
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    Prova ad usare la proprietà FORCENEWPAGE insieme a quel condizionamento...!

  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    @Alex ha scritto:


    Prova ad usare la proprietà FORCENEWPAGE insieme a quel condizionamento...!

    Se ho capito bene il funzionamento di questa proprietà inserendo come valore 0 non dovrebbe creare ulteriori pagine?
    ho provato ma rimane ancora una pagina bianca
    Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
    If Forms!NewContract!opt2 = False Then
    Cancel = True
    Me.Section(acDetail).ForceNewPage = 0
    End If
    End Sub
    
    Private Sub IntestazioneReport_Format(Cancel As Integer, FormatCount As Integer)
    If Forms!NewContract!opt1 = False Then
    Cancel = True
    Me.Section(acDetail).ForceNewPage = 0
    End If
    End Sub
    
    Private Sub PièDiPaginaReport_Format(Cancel As Integer, FormatCount As Integer)
    If Forms!NewContract!opt3 = False Then
    Cancel = True
    Me.Section(acDetail).ForceNewPage = 0
    End If
    End Sub
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    Premesso che queste cose vanno provate... e non ho modo, il VALORE=0 è di default quindi quello che hai fatto non serve a nulla... ovvero non cambia alcun comportamento.
    Io avrei pensato a questo:
    
    Private Sub PièDiPaginaReport_Format(Cancel As Integer, FormatCount As Integer)
        If Forms!NewContract!opt3 = False Then
            Cancel = True
            Me.Section(acDetail).ForceNewPage = 2
        Else
            Me.Section(acDetail).ForceNewPage = 0
        End If
    End Sub
    
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    Sto provando ad effettuare qualche test con il codice che mi hai indicato

    magari tramite questi test riesci a capirci qualcosa?

    -Visualizzando solo il piedipaginareport ho una pagina bianca all'inizio
    -Visualizzando piedipaginareport e corpo e tralasciando l'intestazione report non ho nessuna pagina bianca

    -visualizzando intestazione report e corpo e tralasciando piedipagina report ho una pagina bianca alla fine
    -visualizzando solo intestazione report ho una pagina bianca alla fine
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    max.riservo ha scritto:


    Io NON agirei sul Report o Page Header/Footer ma come già scritto, su una sezione raggruppamento (creata ad esempio sulla chiave univoca del documento) e poi non agirei sulla proprietà visible ma annullerei l'evento format (Header o Footer del raggruppamento) ...
    Riesci gentilmente ad ABBANDONARE il Report Header/Footer,
    a creare una raggruppamento su un campo (o più campi) e a spostare quello che hai messo nel
    Report Header (-> Raggruppamento Header) e nel Report Footer (-> Raggruppamento Footer) ?

    Poi ti studi bene la sequenza di eventi per capire come avviene l'impaginazione (metti un bel debug.print dentro ogni evento format di ogni sezione : stampi il nome della routine e le proprietà me.page, me.pages).

    Poi cerchi di capire se possa andar meglio :
    - annullare l'evento format (cancel = true)
    - forzare la visibilità a false della sezione
    - forzare il salto pagina (forcenewpage = 1)

    Un'altra soluzione potrebbe essere quella di creare un report principale con 3 raggruppamenti sullo stesso campo (campi),
    nella sezione header di ogni raggruppamento inserisci un sottoreport (che è legato al report principale tramite il campo del raggruppamento).
    Ogni sottoreport rappresenta solo 1 pagina del report ed è strutturato in modo da visualizzare solo 2 foto (da capire quale criterio utilizzare per far visualizzare solo 2 foto).
    Poi nel report principale tramite le tue selezioni abiliti/disabiliti i sottoreport specifici (le sezioni header).

    Se proprio non ne vieni a capo, ci prepari un mini demo con il minimo necessario a replicare il problema :
    - no dati sensibili
    - 2 o 3 ID documento più le relative foto (puoi anche creare delle immagini stupide con solo delle scritte : immagine1, immagine2, etc)
    - che sia il più basico possibile ... ad inacidirlo ci pensiamo noi
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    Grazie! Sono riuscito tramite i 3 raggruppamenti ed utilizzando i sottoreport come hai detto tu!
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    fabionik2004 ha scritto:


    Grazie! Sono riuscito tramite i 3 raggruppamenti ed utilizzando i sottoreport come hai detto tu!
    Bene, alla fine hai recepito che dovevi abbandonare le sezioni del report in favore delle sezioni dei raggruppamenti

    Senza i sottoreport ma solo creando i 3 raggruppamenti sul campo Cod e inserendo nelle sezioni header dei 3 raggruppamenti il seguente codice :
    
    Private Sub Page01_Header_Format(Cancel As Integer, FormatCount As Integer)
        
        If Forms!Maschera1!opt1 = False Then
            Cancel = True
        End If
    End Sub
    
    Private Sub Page03_Header_Format(Cancel As Integer, FormatCount As Integer)
        
        If Forms!Maschera1!opt2 = False Then
            Cancel = True
        End If
    
    End Sub
    
    Private Sub Page05_Header_Format(Cancel As Integer, FormatCount As Integer)
        
        If Forms!Maschera1!opt3 = False Then
            Cancel = True
        End If
    
    End Sub
    
    ottieni lo stesso risultato.

    Certo che per come hai impostato il report è veramente impegnativo fare lo scroll dello stesso (a design time)
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    Il db d'esempio potevi anche lasciarlo ... magari qualcun altro di proponeva una soluzione più elegante
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    max.riservo ha scritto:


    Il db d'esempio potevi anche lasciarlo ... magari qualcun altro di proponeva una soluzione più elegante
    L'ho eliminato perché era quello basato sulle sezioni Header e Footer del report quindi penso sia inutile.
    Comunque Grazie per il supporto!!
Devi accedere o registrarti per scrivere nel forum
27 risposte