Problema esportazione report

di il
10 risposte

Problema esportazione report

Buona sera a tutti,
mi rivolgo qui e passo dal gruppo it.compl.app.access
vedo che anche qui Alex e' super attivo,
voglio postare qui perche' il codice e' piu' leggibile

problemino:
ho un report da cui estrapolo le rette di un asilo del mese di riferimento, vorrei poter esportare in pdf con un pulsante tutte le rette in una cartella
con il codice che posto qui di seguito come risultato ottengo i pdf di tutti i record presenti nella tabella

sono veramente alle prime armi con vba

la select che faccio sembra andar bene mi seleziona tutti i dati che mi servono dove come condizione prendo solo il campo numerico MESANN (mese e anno di riferimento: 92018 per settembre 2018 102018 per ottobre 2018)

vado ad aprire il report ed il risultato e' ok stampa un pdf
per ogni PrimoDiCOGNOME_NOME] (e' chi fattura) e per ogni [bimbo] (chi e' il destinatario della fattura)
ma per tutti i record (anche quelli dove la condizione dell'SQL non e' soddisfatta
WHERE (((([RETTA_TRAVASO_TESTATA]![MESANN]))=" & variabile_meseannopass & ")

cosa sbaglio?

'****CHIUDE IL REPORT GIA' APERTO
DoCmd.Close acReport, "STAMPA_RETTA"

'****DEFINISCE LA VARIABILE LONG CHE PRENDE DALLA MASCHERA
Dim variabile_meseannopass As Long
variabile_meseannopass = Int(([Forms]![PRESENZA_CON_COGNOME_CampiIncrociati_PER_MASCHERA]![TRASP].Value))


'****QUERY SELECT
Dim SQL As String, pathname As String, rs As Recordset
SQL = SQL & "SELECT RETTA_TRAVASO_TESTATA.EDUCATRICE AS EDUCATRICE_RIFERIMENTO, RETTA_TRAVASO_TESTATA.ID, RETTA_TRAVASO_TESTATA.MESANN, RETTA_TRAVASO_TESTATA.PrimoDiCOGNOME_NOME, RETTA_TRAVASO_TESTATA.PrimoDiINDIRIZZO, RETTA_TRAVASO_TESTATA.PrimoDiCAP_E_CITTA, RETTA_TRAVASO_TESTATA.PrimoDiPIVA, [PrimoDiCOGNOME] & ' ' & [primodinome] AS bimbo, RETTA_TRAVASO_TESTATA.PrimoDiIND_BAMB, [PrimoDiCAP] & ' ' & [PRIMODICITTA] & ' ' & [PRIMODIPROVINCIA] AS CAPCITPROV, RETTA_TRAVASO_TESTATA.PrimoDiCF_BAMBINO, RETTA_TRAVASO_TESTATA.PrimoDiMESANDESC1, RETTA_TRAVASO_TESTATA.ACCONTO, RETTA_TRAVASO_TESTATA.ABBATTIMENTO, RETTA_TRAVASO_TESTATA.SCONTO_SECONDO, RETTA_TRAVASO_RIGA.TIPO_RETT_CON_ASSENZA, RETTA_TRAVASO_RIGA.PrimoDidescrizione, RETTA_TRAVASO_RIGA.SommaDiConteggioDiTIPO_RETT_CON_ASSENZA, RETTA_TRAVASO_RIGA.PrimoDiimporto, RETTA_TRAVASO_RIGA.SommaDiSUBTOT, RETTA_TRAVASO_RIGA.PrimoDiANNO, RETTA_TRAVASO_RIGA.PrimoDiMESE, "
SQL = SQL & "RETTA_TRAVASO_TESTATA.CONTATORE, [COGN_FATT] & ' ' & [NOME_FATT] AS COGN_NOM_FAT, RETTA_TRAVASO_TESTATA.CF_FATT,  "
SQL = SQL & "RETTA_TRAVASO_TESTATA.CONTATORE, RETTA_TRAVASO_TESTATA.INDIRIZZO_FATT, [CAP_FATT] & ' ' & [CITTA_FATT] & ' ' & [PROVINCIA_FATT] AS CAP_CIT_PROV_FATT, (int([RETTA_TRAVASO_TESTATA].[MESANN])) AS MESANN_INT  "
SQL = SQL & "FROM RETTA_TRAVASO_RIGA INNER JOIN RETTA_TRAVASO_TESTATA ON (RETTA_TRAVASO_RIGA.MESANN = RETTA_TRAVASO_TESTATA.MESANN) AND (RETTA_TRAVASO_RIGA.ID = RETTA_TRAVASO_TESTATA.ID) AND (RETTA_TRAVASO_RIGA.EDUCATRICE = RETTA_TRAVASO_TESTATA.EDUCATRICE)  "
SQL = SQL & "WHERE (((([RETTA_TRAVASO_TESTATA]![MESANN]))=" & variabile_meseannopass & "))"

Set rs = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
DoCmd.Echo False
Do Until rs.EOF

'****APRE IL REPORT ED ESPORTA LE SINGOLE PAGINE
DoCmd.OpenReport "STAMPA_RETTA_X_EXPORT", acViewPreview, , "primodicognome_nome='" & rs![PrimoDiCOGNOME_NOME] & "'" & "AND bimbo='" & rs![bimbo] & "'"
DoCmd.OutputTo acOutputReport, "", acFormatPDF, "C:\ASILO_NIDO\RETTE\" & rs![PrimoDiCOGNOME_NOME] & "_" & rs![bimbo] & ".pdf", False
DoCmd.Close acReport, "STAMPA_RETTA_X_EXPORT"
    rs.MoveNext
Loop
DoCmd.Echo True
MsgBox "Le rette sono state esportate sulla cartella Asilonido\rette", vbCritical + vbOKOnly, "Esportazione eseguita"
Application.FollowHyperlink "C:\ASILO_NIDO\RETTE\"

10 Risposte

  • Re: Problema esportazione report

    Ciao Mario, la prima cosa che ti faccio notare è il REGOLAMENTO da leggere e rispettare, il Forum non è il NewsGroup, è moderato e siamo intransigenti.

    Nello specifico il CROSSPOST è vietato, motivo per il quale se si usa questo strumento, serve darne indicazione chiara con i Link, ma solo dopo che non si ha avuto risposta...!

    Ti chiedo pertanto di adoperarti per consentirci di darti supporto.

    Nel tuo caso, metti un DEBUG.PRINT subito prima di:
    
    Debug.Print SQL
    Set rs = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
    Quindi vai nella finestra Immediata del VBEditor e leggi il predicato SQL e magari ti accorgi delle anomalie a vista.
    NEl caso non siano così immediate lo provi ad inserire in una Query INCOLLANDO il predicato e cerchi di correggere pian piano gli errori.

    Ci sono diverse cose che io sistemerei:
    
    [PrimoDiCOGNOME] & ' ' & [primodinome] AS bimbo
    MEtti le Parentesi
    
    ([PrimoDiCOGNOME] & ' ' & [primodinome]) AS bimbo
    ci sono altri casi come questo...

    Poi non comprendo... il Campo [RETTA_TRAVASO_TESTATA]![MESANN] che tipo di dato è...?
    Sicuro sia Numero Intero...?
  • Re: Problema esportazione report

    @Alex ha scritto:


    Ciao Mario, la prima cosa che ti faccio notare è il REGOLAMENTO da leggere e rispettare, il Forum non è il NewsGroup, è moderato e siamo intransigenti.

    Nello specifico il CROSSPOST è vietato, motivo per il quale se si usa questo strumento, serve darne indicazione chiara con i Link, ma solo dopo che non si ha avuto risposta...!
    ciao Alex, grazie dell'aiuto, mi scuso per il Crosspost, assolutamente non voluto, ma volevo inserirmi qui visto che postare righe di codice su newsgroup sarebbe stato di difficile lettura, solo questo il motivo

    @Alex ha scritto:


    Nel tuo caso, metti un DEBUG.PRINT subito prima di:
    
    Debug.Print SQL
    Set rs = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
    incollando in una query ottengo esattamente il risultato voluto (vengono selezionati i record uguali alla variabile passata)

    @Alex ha scritto:


    Ci sono diverse cose che io sistemerei:
    
    [PrimoDiCOGNOME] & ' ' & [primodinome] AS bimbo
    MEtti le Parentesi
    
    [/quote]
    
    ok grazie
    
    [quote="@Alex"]
    Poi non comprendo... il Campo [RETTA_TRAVASO_TESTATA]![MESANN] che tipo di dato è...?
    Sicuro sia Numero Intero...?[/quote]
    
    si, confermo, vedi immagine, ma il risultato che ottengo è tutti i record (sembra infischiarsene del where)
    
    [img]http://i68.tinypic.com/ajtr1g.jpg[/img]
  • Re: Problema esportazione report

    Prova a concatenare la Stringa in modo diverso.
    Nel VBEditor ci sono limiti, non ricordo il numero, di righe concatenate.... prova così
    
    Dim SQL As String
    SQL = SQL & "Primo pezzo"
    SQL = SQL & "Secondo pezzo"
    SQL = SQL & "Terzo pezzo"
    SQL = SQL & "QUarto pezzo"
    Alla fine otterrai la stessa cosa ma senza la criticità del limite di righe del VBE.

    Mi dici un valore di quel campo... ho bisogno di capirlo, dal Nome mi aspetto un Numero che indichi MeseAnno, e nella mia testa fatico a trovare una relazione.

    Premesso che hai un sacco di campi che non servono e possono creare problemi... Mese/Anno/MesAnn
    Basta avere il campo Data specifico, magari più di uno se ci soino riferimenti aggiuntivi, ma MAI dati parziali di Mese o Anno... MAI.
    Mese ed Anno si ricavano con Month(Data) e con Year(Data).
    Lo stesso campo MesAnn, nella mia testa [09/18] è un Format(Data,"mm/yy")
    Per questo a mio avviso è meglio tu elimini la possibilità di aver disallineamenti tra i campi omologhi... in quanto un campo Data ha già in se tutte le informazioni.
  • Re: Problema esportazione report

    @Alex ha scritto:


    Prova a concatenare la Stringa in modo diverso.
    Nel VBEditor ci sono limiti, non ricordo il numero, di righe concatenate.... prova così
    
    Dim SQL As String
    SQL = SQL & "Primo pezzo"
    SQL = SQL & "Secondo pezzo"
    SQL = SQL & "Terzo pezzo"
    SQL = SQL & "QUarto pezzo"
    Alla fine otterrai la stessa cosa ma senza la criticità del limite di righe del VBE.

    Mi dici un valore di quel campo... ho bisogno di capirlo, dal Nome mi aspetto un Numero che indichi MeseAnno, e nella mia testa fatico a trovare una relazione.

    Premesso che hai un sacco di campi che non servono e possono creare problemi... Mese/Anno/MesAnn
    Basta avere il campo Data specifico, magari più di uno se ci soino riferimenti aggiuntivi, ma MAI dati parziali di Mese o Anno... MAI.
    Mese ed Anno si ricavano con Month(Data) e con Year(Data).
    Lo stesso campo MesAnn, nella mia testa [09/18] è un Format(Data,"mm/yy")
    Per questo a mio avviso è meglio tu elimini la possibilità di aver disallineamenti tra i campi omologhi... in quanto un campo Data ha già in se tutte le informazioni.
    ciao Alex, grazie infinite ancora,
    sono perfettamente consapevole che sono moltissimi i campi superflui che possono essere gestiti e creati con query, ci lavorero' con il tempo per scremarli, purtroppo sto correndo dietro al tempo della prima fatturazione prevista per fine mese
    MESANN e' 92018 per settembre 2018 102018 per ottobre 2018

    mi sono accorto pero' che il problema non è nella select (che viene correttamente risolta)
    ma nel report (quel report e' costruito con una origine record di un'altra query e all'apertura viene chiaramente aperto con questa origine dati) in piu' c'e' un filtro in apertura del report,

    grazie per la pazienza, sto facendo delle prove, sicuramente (purtroppo) vi chiedero' un aiuto,
    ma prima voglio usare la mia testa,
  • Re: Problema esportazione report

    Eccomi qua di nuovo,
    ho gia' aperto il report selezionato

    c'e' la possibilita' per il comando
    DoCmd.OutputTo acOutputReport stampare una singola pagina? nelle guide reperite in rete non ho trovato nulla

    vorrei risolvere il mio problema con lo scorrimento dei record selezionati

    Do Until rs.EOF

    e mettere un contatore pagina che parta da 1 ed incrementi ad ogni loop
    vorrei esportare in pdf la pagina singola relativa a quel contatore

    quindi un qualcosa di simile
    dim contatore as integer
    contatore = 1

    Do Until rs.EOF
    DoCmd.OutputTo acOutputReport 'stampa la pagina singola relativa a quel contatore
    contatore = contatore + 1
    rs.MoveNext
    loop
    ...

    grazie in anticipo
  • Re: Problema esportazione report

    Prova a vedere PrintOut...
    
    Sub PrintOut([PrintRange As AcPrintRange = acPrintAll], [PageFrom], [PageTo], [PrintQuality As AcPrintQuality = acHigh], [Copies], [CollateCopies])
        Membro di Access.DoCmd
  • Re: Problema esportazione report

    Ciao,

    sto andando avanti con il mio problema, ma non ne vengo a capo su questo

    perche' se apro un report in acviewreport

    e su un pulsante sul click ho questo codice
    DoCmd.OutputTo acOutputReport, "STAMPA_RETTA_SINGOLA_MENSILE", acFormatPDF, "C:\ASILO_NIDO\FATTURE_DASTAMPARE\" & "L" & "_" & annoretta & "_" & contaretta & "_" & cognomenomeretta & "_RET" & ".pdf", False

    tutto va

    ma se inserisco il docmd.outputto nell'evento load del report ottengo
    errore runtime 2585 impossibile eseguire questa operazione durante l'elaborazione di un evento di maschera o di report?

    ho provato anche ad inserire un timer ma niente da fare

    in pratica vorrei utilizzare una maschera che filtra i dati
    poi aprire un report sul campo corrente
    esporto il pdf
    chiudo il report
    passo al record successivo
    apro il report corrente e cosi' via

    grazie a tutti in anticipo
  • Re: Problema esportazione report

    Ciao,
    sto cercando di risolvere il problema senza venirne a capo,

    vi chiederei questo se riuscire a darmi una mano:

    perche' sull'evento load del report
    come prima istruzione ho
    ho Reports![nomedelreport].Requery

    ricevo un errore run time 2467
    oggetto chiuso o eliminato?

    cioe' carico il report e subito dopo faccio un requery

    ma il report e' gia chiuso?
  • Re: Problema esportazione report

    Ti ho suggerito di usare PRINTOUT ... lo hai fatto..?
    Se SI cos'altro non va...?
    Se NO ....

    Quel codice chi lo ha scritto...? Tu oppure altri...?
    Un Requery su load di un report non ha alcun senso mai.
  • Re: Problema esportazione report

    Ciao Alex,

    grazie per il supporto,
    purtroppo non sono molto ferrato con il vba (ho dei vaghi ricordi di visual basic dalle superiori e sto cercando di rispolverare dopo oltre 20anni di utilizzo sporadico) e con quella funzione che mi hai segnalato non sono riuscito a risolvere il problema

    ho pero' risolto con una funzione pubblica in un modulo che ho richiamato in una macro con un autokeys

    stesso codice e nessun problema:
    ora apro il report ed esporto in pdf con un tasto

    se puo' essere utile a qualcuno
Devi accedere o registrarti per scrivere nel forum
10 risposte