Esportare in pdf solo alcuni numeri di pagina di un report

di il
27 risposte

Esportare in pdf solo alcuni numeri di pagina di un report

Ciao A tutti,

ho un pulsante che esporta in pdf un report e vorrei inserire come parametro il numero dele pagine da stampare, ad esempio la 1 e la 2 o la 3 e la 4 etc.

DoCmd.OpenReport stDocName, acViewPreview, , filtro, acHidden
   DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, pth &  " TEST.pdf"
   DoCmd.Close acReport, stDocName, acSaveNo
  
é fattibile?
ho trovato qualcosa online ma non riesco a capire dove inserire questi parametri.


inoltre ho un'altro codice su un command button differente, che apre in preview il report, ma da quanto ho capito, credo che in preview non sia fattibile quanto chiedo giusto?
DoCmd.OpenReport stDocName, acViewPreview, , filtro
Grazie!

27 Risposte

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

    Per stampare in relazione alla selezione delle Pagine devi usare la Funzione PrintOut, che consente appunto di passare come parametri [DaPagina],[APagina]

    Questo però richiede tu abbia installata una VIRTUALPRINTER, come Driver di stampa da Selezionare prima della Stampa tramite l'oggetto Printer...
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    Grazie, provo ad informarmi su quanto hai detto.

    Quindi é corretto quanto dicevo, cioé che in preview non sarà possibile visualizzare solo alcune delle pagine del report?
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    fabionik2004 ha scritto:


    Quindi é corretto quanto dicevo, cioé che in preview non sarà possibile visualizzare solo alcune delle pagine del report?
    Ni ...
    Nativamente no, usando vba sono fiducioso che si possa fare.
    Concettualmente :
    - deve passare al report tramite openargs (o con variabile public) un array di interi (ogni elemento contiene il n° della pagina da visualizzare in anteprima/stampare)
    - nell'evento format se la pagina corrente (proprietà page del report) NON è inclusa nell'array forzi un salto pagina (o cancelli l'evento)

    Si tratta di un'idea buttata lì, non provata, ma dovrebbe funzionare (occorre comunque fare un po' di prove) ... se però non conosci vba (o lo conosci poco) e/o non sai fare debug, lascia perdere e usa la proposta di Alex.

    P.S. - Al momento non posso fare prove in quanto sono in modalità 'reinstallazione/upgrade/riorganizzazione' del mio s.o. con tutti gli annessi e connessi.
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    Grazie per le dritte.

    Con le mie poche conoscenze di access VBA penso sia abbastanza difficile.
    Invece ho questa idea, pensate sia fattibile?

    Creo un report principale che contiene 2 pagine nell'intestazione report.
    Nel corpo inserisco un sottoreport che contiene altre 2 pagine.
    Nel pie di pagina report inserisco un sottoreport che contiene le altre 2 pagine.

    -All'apertura del report, se ho attivo il pulsante opzione 1, viauslizzo l'intestazione report e nascondo il resto
    -se attivo il pulsante opzione 2 visualizzo anche il corpo
    -se attivo anche il pulsante opzione 3 visualizzo tutto

    cosa ne pensate?
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    fabionik2004 ha scritto:


    ...
    cosa ne pensate?
    Relativamente semplice da fare e potrebbe fare al caso tuo : prova e poi ci dici.

    Non so che cosa stampi e come organizzi i tuoi report però, devo ricordarti che se pensi di stampare più documenti in un'unica volta (con più documenti intendo più preventivi/più polizze/più quello che vuoi tu) con l'utilizzo delle sezioni report header/footer come hai ipotizzato tu non funziona : devi utilizzare le sezioni header/footer di (almeno) un raggruppamento per ID documento. Io utilizzo 2 o a volte anche 3 raggruppamenti sull'ID e mi gestisco le specifiche sezioni Header/Footer per ottenere effetti particolari nei report (banalmente per stampare sempre un n° di pagine pari per singolo report quando stampo più documenti - serve per gestire la stampa 'fisica' fronte/retro).
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    Se ho capito bene quello che vuoi fare. Non è stilisticamente corretto, ma quello che vuoi fare, tutti i programmi, anche quelli professionali prima si vain anteprima di stampa e dopo si scrivono le pagine che vuoi stampare oppure esportare in pdf. Si fa così perche a priori l utente non sa quale pagine dovrà stampare.
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    Ma se fai una query parametrica dove selezioni le pagine e poi le invii direttamemte in stampa?

    Oppure su ogni documento metti una check box visualizzata solo a schermo e selezioni i documenti che vuoi stampare e gli fai stampare solo quelli con la casella spuntata?
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    fratac ha scritto:


    Ma se fai una query parametrica dove selezioni le pagine e poi le invii direttamemte in stampa?
    Spiega che rapporto hai tra i dati e le pagine del Report.... tali da poter filtrare da una query le pagine... suggerimento assai dubbio.
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    @Alex ha scritto:


    fratac ha scritto:


    Ma se fai una query parametrica dove selezioni le pagine e poi le invii direttamemte in stampa?
    Spiega che rapporto hai tra i dati e le pagine del Report.... tali da poter filtrare da una query le pagine... suggerimento assai dubbio.
    Da quello che ho capito, lui visualizza il report su una maschera, e non visualizza l' anteprima altrimenti potrebbe scegliere da li le pagine. Ma giustamente se le deve ricordare a memoria,poi con dei tasti, nel corpo del report, stampa la sezione che desidera, nascondendo le sezioni header, corpo etc. Soluzione che non so se funziona e che cmq potrebbe fargli stampare pagine vuote. Quello che intendo io è che lui visualizza il report, con un pulsante richiama una quey parametrica dove inserisci i numeri e su quella query ricrea un altro report che manda direttamente in stampa.
    Oppure, seleziona con una check box e stampa solo quelli.
    Ho detto una baggianata? In realtà sono 10 anni circa che non gestisco la stampa da access e quindi il rischio che abbia tirato i porci alle mele è alto.

    AGGIORNAMENTO:
    Con la query forse ho direttamente tirato tutto il porcile.
    Ragionavo in termini di record, dimenticando invece che i report sono più complessi e se si escludono delle pagine la numerazione poi cambia, quindi, anche se forse fattibile, di cui dubito, per realizzarlo si fa prima a disegnare a matita quello che si vede a schermo
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    La soluzione di Max è sicuramente funzionante ma, relativamente semplice... ed il relativamente la rende molto soggettiva come realizzazione ma è da considerare come unica soluzione Nativa full-access, ottima idea peraltro è senza dubbio da privilegiare.

    La soluzione che ho proposto con un Driver free e 2 righe di codice la riesce ad implementare chiunque.
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    Ciao, grazie per i vostri consigli, dunque sono quasi riuscito a venirne fuori con qeuste due righe
    Me.IntestazioneReport.Visible = False
    Me.Corpo.Visible = False
    Che vengono applicate al caricamento del report in base al valore di alcune checkbox.

    Mi mancano due cose:

    1) non riesco a capire quale sia la proprietà che indica il piedipaginareport per poi metterlo su false
    2) Quando sia il corpo che l'intestazione report sono nascosti, viene stampata la prima pagina vuota, come posso ovviare a questo?

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

    Me.Section(IndiceSection).Visible=True/False
    Quì trovi le costanti da inserire come IndiceSection, la tua potrebbe essere [acPageFooter=4]:
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    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.
  • Re: Esportare in pdf solo alcuni numeri di pagina di un report

    @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.
Devi accedere o registrarti per scrivere nel forum
27 risposte