Salvare record di una query in pdf

di il
11 risposte

Salvare record di una query in pdf

Buongiorno a tutti e Buone Feste.

Il mio db con query di aggiornamento associa i rapporti ad una pratica. Con codice su routine evento, un pulsante crea una cartella nominata con id_pratica & argomento al cui interno si trova il relativo rapporto salvato in pdf.

Sono settimane che cerco il modo di salvare contemporaneamente in pdf distinti più record (rapporti) della query ( 1 pratica infiniti rapporti) nella cartella id_pratica. Ho studiato qualcosa con loop ma mi mancano pezzi ddI cultura in merito…

Grazie

11 Risposte

  • Re: Salvare record di una query in pdf

    Io personalment  non ho capito niente di quello che hai detto e quello che vorresti realizzare.

    Puoi essere più chiaro e magari postare il codice o una schermata di quello che vorresri realizzare, anche se non funziona?

  • Re: Salvare record di una query in pdf

    In effetti non si capisce concretamente quale sia il problema su cui studi da settimane.

    Per quello che ho afferrato, non sai salvare tanti pdf magari usando un ciclo ma è meglio che chiarisci

  • Re: Salvare record di una query in pdf

    28/12/2022 - Ommdelatempesta ha scritto:


    Il mio db con query di aggiornamento associa i rapporti ad una pratica.

    Fornisci nomi propri dei campi delle tabelle Pratiche e Rapporti, nome proprio della query di aggiornamento mostrando il codice SQL oppure una immagine della visualizzazione struttura.

    28/12/2022 - Ommdelatempesta ha scritto:


    Con codice su routine evento, un pulsante crea una cartella nominata con id_pratica & argomento al cui interno si trova il relativo rapporto salvato in pdf.

    Mostra questo codice.

  • Re: Salvare record di una query in pdf

    28/12/2022 - fratac ha scritto:


    Io personalment  non ho capito niente di quello che hai detto e quello che vorresti realizzare.

    Puoi essere più chiaro e magari postare il codice o una schermata di quello che vorresri realizzare, anche se non funziona?

    ciao, provo a spiegarmi meglio: ho una tabella con campo"id_pratica" etc etc una tabella con campo “id_rapporto” etc etc messe in relazione con una query  “q_associarapporto” .

    SELECT t_pratica.*, t_rapporto.*, t_pratica.[data pratica]
    FROM t_pratica RIGHT JOIN t_rapporto ON t_pratica.id_pratica = t_rapporto.id_pratica
    WHERE (((t_pratica.[data pratica]) Is Null));
    

    ho creato una maschera da “t_rapporti” filtrata su nuovo record ed un pulsante che compila il relativo report e lo salva in pdf in una determinata cartella.

    Private Sub Comando28_Click()
    nome = "C:\Users\sabrina\Desktop\naval\" & "Rapporto di Servizio n. " & Forms![m_rapporto_nuovo]![id_rapporto] & " datato " & Format(Forms![m_rapporto_nuovo]![data], "dd-mm-yyyy") & " " & Forms![m_rapporto_nuovo]![argomento] & ".pdf"
    If Len(Dir(nome, vbDirectory)) > 0 Then
         MsgBox ("Rapporto di servizio già salvato!")
         
    Else
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    DoCmd.OpenReport "r_rapporto", acViewPreview, , , acHidden
    DoCmd.OutputTo acOutputReport, "r_rapporto", acFormatPDF, nome
    DoCmd.Close acReport, "r_rapporto"
    
    nome1 = "Rapporto di Servizio n. " & Forms![m_rapporto_nuovo]![id_rapporto] & " datato " & Format(Forms![m_rapporto_nuovo]![data], "dd-mm-yyyy") & " " & Forms![m_rapporto_nuovo]![argomento] & ".pdf"
    indirizzo = "C:\Users\sabrina\Desktop\naval\"
    MsgBox ("Il " & nome1 & " è stato salvato in " & indirizzo)
    End If
    
    DoCmd.Close acForm, "m_rapporto_nuovo"
    Forms![m_home].Refresh
    
    
    End Sub
    

    ho creato una maschera con cui popolo la tabella "t_pratica" ed una sottomaschera con l'elenco dei record della tabella “t_rapporti” in cui c'è un campo si/no.

    Vi sono poi due pulsanti: comando39 che apre “q_aggiornapraticarapporto” e l'sql è qui sotto. poi comando69

    UPDATE t_rapporto INNER JOIN q_associarapporto ON t_rapporto.id_rapporto = q_associarapporto.id_rapporto SET q_associarapporto.t_rapporto.id_pratica = Forms![m_associarapporto]!id_pratica
    WHERE (((t_rapporto.associato)=On));
    
    Private Sub Comando39_Click()
    DoCmd.OpenQuery "q_aggiornapraticarapporto"
    Forms!m_associarapporto!elencorapporti!.Requery
    Me.Refresh
    End Sub
    
    Private Sub Comando69_Click()
    Dim path As String
       Const mainfolder As String = "C:\Users\sabrina\Desktop\naval\"
      
           path = "Pratica N. " & [id_pratica] & " del " & Format(Forms![m_associarapporto]![data pratica], "dd-mm-yyyy") & " " & [argomento_pratica]
       
       If Dir(mainfolder & path, vbDirectory) = "" Then
           MkDir (mainfolder & path)
           MsgBox (path & " è stata salvata in " & mainfolder)
           DoCmd.Close acForm, "m_associarapporto"
           
           Else
        MsgBox ("La cartella della " & path & " è già stata creata e salvata in " & mainfolder)
        DoCmd.Close acForm, "m_associarapporto"
        End If
    End Sub
    

    detto ciò, mi trovo che il comando28 crea file pdf e li salva in una cartella.

    In pratica vorrei che il codice vba prenda i file pdf dei record filtrati dalla query che associa “id_rapporti” a “id_pratica”, e che li sposti nella cartella creata con il comando69.

    grazie mille!!

  • Re: Salvare record di una query in pdf

    28/12/2022 - fratac ha scritto:


    Io personalment  non ho capito niente di quello che hai detto e quello che vorresti realizzare.

    Puoi essere più chiaro e magari postare il codice o una schermata di quello che vorresri realizzare, anche se non funziona?

    ciao, provo a spiegarmi meglio: ho una tabella con campo"id_pratica" etc etc una tabella con campo “id_rapporto” etc etc messe in relazione con una query  “q_associarapporto” .

    SELECT t_pratica.*, t_rapporto.*, t_pratica.[data pratica]
    FROM t_pratica RIGHT JOIN t_rapporto ON t_pratica.id_pratica = t_rapporto.id_pratica
    WHERE (((t_pratica.[data pratica]) Is Null));
    

    ho creato una maschera da “t_rapporti” filtrata su nuovo record ed un pulsante che compila il relativo report e lo salva in pdf in una determinata cartella.

    Private Sub Comando28_Click()
    nome = "C:\Users\sabrina\Desktop\naval\" & "Rapporto di Servizio n. " & Forms![m_rapporto_nuovo]![id_rapporto] & " datato " & Format(Forms![m_rapporto_nuovo]![data], "dd-mm-yyyy") & " " & Forms![m_rapporto_nuovo]![argomento] & ".pdf"
    If Len(Dir(nome, vbDirectory)) > 0 Then
         MsgBox ("Rapporto di servizio già salvato!")
         
    Else
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    DoCmd.OpenReport "r_rapporto", acViewPreview, , , acHidden
    DoCmd.OutputTo acOutputReport, "r_rapporto", acFormatPDF, nome
    DoCmd.Close acReport, "r_rapporto"
    
    nome1 = "Rapporto di Servizio n. " & Forms![m_rapporto_nuovo]![id_rapporto] & " datato " & Format(Forms![m_rapporto_nuovo]![data], "dd-mm-yyyy") & " " & Forms![m_rapporto_nuovo]![argomento] & ".pdf"
    indirizzo = "C:\Users\sabrina\Desktop\naval\"
    MsgBox ("Il " & nome1 & " è stato salvato in " & indirizzo)
    End If
    
    DoCmd.Close acForm, "m_rapporto_nuovo"
    Forms![m_home].Refresh
    
    
    End Sub
    

    ho creato una maschera con cui popolo la tabella "t_pratica" ed una sottomaschera con l'elenco dei record della tabella “t_rapporti” in cui c'è un campo si/no.

    Vi sono poi due pulsanti: comando39 che apre “q_aggiornapraticarapporto” e l'sql è qui sotto. poi comando69

    UPDATE t_rapporto INNER JOIN q_associarapporto ON t_rapporto.id_rapporto = q_associarapporto.id_rapporto SET q_associarapporto.t_rapporto.id_pratica = Forms![m_associarapporto]!id_pratica
    WHERE (((t_rapporto.associato)=On));
    
    Private Sub Comando39_Click()
    DoCmd.OpenQuery "q_aggiornapraticarapporto"
    Forms!m_associarapporto!elencorapporti!.Requery
    Me.Refresh
    End Sub
    
    Private Sub Comando69_Click()
    Dim path As String
       Const mainfolder As String = "C:\Users\sabrina\Desktop\naval\"
      
           path = "Pratica N. " & [id_pratica] & " del " & Format(Forms![m_associarapporto]![data pratica], "dd-mm-yyyy") & " " & [argomento_pratica]
       
       If Dir(mainfolder & path, vbDirectory) = "" Then
           MkDir (mainfolder & path)
           MsgBox (path & " è stata salvata in " & mainfolder)
           DoCmd.Close acForm, "m_associarapporto"
           
           Else
        MsgBox ("La cartella della " & path & " è già stata creata e salvata in " & mainfolder)
        DoCmd.Close acForm, "m_associarapporto"
        End If
    End Sub
    

    detto ciò, mi trovo che il comando28 crea file pdf e li salva in una cartella.

    In pratica vorrei che il codice vba prenda i file pdf dei record filtrati dalla query che associa “id_rapporti” a “id_pratica”, e che li sposti nella cartella creata con il comando69.

    grazie mille!!

  • Re: Salvare record di una query in pdf

    Forse raggiro il problema, ma:
    1. Se devi spostare i file da una cartella in un'altra, immagino si tratti di una operazione che vuoi fare una volta sola. Se sì, potresti anche spostarli manualmente.
    2. Poi modifica il codice del Comando_28 in modo tale che salvi/esporti i pdf nella nuova cartella.

  • Re: Salvare record di una query in pdf

    Grazie della risposta.

    Corretto il punto 1, infatti l'idea nativa sarebbe quella;

    per modificare il codice del comando 28 mi sono bloccato. non so richiamare il record con campo On… da una query

  • Re: Salvare record di una query in pdf

    Perdonami, saranno le abbuffate di Natale, ma continuo a non capire.

    Devi spostare un file da una cartella all altra?

    Quindi con l istruzione copyfile , o vuoi ricaricare i dati contenuti nel pdf, per poi modificarli e risalvarli?

  • Re: Salvare record di una query in pdf

    Effettivamente come dice @Fratac non comprendo ancora appieno la tua richiesta.

    Provo a decifrarla così.

    Hai due tabelle: Una MASTER chiamata PRATICHE ed una SECONDARIA chiamata RAPPORTI.
    Crei dei rapporti PDF.
    Vuoi spostarli in una cartella.

    Cmq vado a naso dato che mi son appena svegliato. 

    Sapendo i nomi della pratica da spostare 

    nome = "C:\Users\sabrina\Desktop\naval\" & "Rapporto di Servizio n. " & Forms![m_rapporto_nuovo]![id_rapporto] & " datato " & Format(Forms![m_rapporto_nuovo]![data], "dd-mm-yyyy") & " " & Forms![m_rapporto_nuovo]![argomento] & “.pdf”

    Basta fare un filecopy ed eventualmente una volta copiato un kill del file precedente (se non serve più)

    FileCopy source, destination

    Kill pathname

    Inoltre per semplificare un po' di consiglierei di scriverti qualche funzione che ti restituisca Forms!M_rapporto_nuovo!id_rapporto, Forms![m_rapporto_nuovo]![argomento] e Format(Forms![m_rapporto_nuovo]![data], "dd-mm-yyyy")

    Così spannometricamente nome diventerebbe

    nome = "C:\Users\sabrina\Desktop\naval\Rapporto di Servizio n. " & GetIdRapporto() & " datato " & GetDataRapporto() & " " & GetArgomento() & “.pdf”

    Se inoltre Il DB risiede nella medesima cartella dove salvi i documenti si potrebbe pensare di fare anche questo:

    nome = Currentproject.path & "\Rapporto di Servizio n. " & GetIdRapporto() & " datato " & GetDataRapporto() & " " & GetArgomento() & “.pdf”

    Secondo me lavorando in questo modo hai più possibilità di ritrovare i documenti necessari. Ma è solo un'idea

  • Re: Salvare record di una query in pdf

    28/12/2022 - Ommdelatempesta ha scritto:


    Grazie della risposta.

    Corretto il punto 1, infatti l'idea nativa sarebbe quella;

    per modificare il codice del comando 28 mi sono bloccato. non so richiamare il record con campo On… da una query

    …non riesco a seguire tutta la logica della struttura query. Sei sicuro che la sintassi =On sia corretta? Prova =True. Prova a controllare anche la visualizzazione struttura query. Occorre anche cambiare la stringa del path finale della directory dove esportare i file pdf.

  • Re: Salvare record di una query in pdf

    Per ora grazie mille a tutti per gli spunti di idee. Mi applico un po e spero presto di postare la soluzione ottenuta

Devi accedere o registrarti per scrivere nel forum
11 risposte