Convertire i report generati su access da Snapshot a PDF/Word

di il
3 risposte

Convertire i report generati su access da Snapshot a PDF/Word

Buongiorno a tutti,

Volevo avere un aiuto su un problema che mi si è presentato con il passaggio a W10. Non è possibile installare il Viewer di snapshot, per tanto in azienda mi ritrovo con dei database access creati da un utente che non lavora più per noi, che generano dei Report in questo formato.

Premesso che sono un utente base di access con conoscenze minime, sono riuscito a trovare il form di generazione del report SNP. Lo riporto qui:
Option Compare Database

Private Sub cliente_AfterUpdate()
    Me.marchio.Requery
    Me.stabilimento.Requery
End Sub

Private Sub customer_id_AfterUpdate()

End Sub


Private Sub factory_id_BeforeUpdate(Cancel As Integer)

End Sub

Private Sub Form_Open(Cancel As Integer)
   DoCmd.Restore
   DoCmd.GoToRecord acActiveDataObject, , acLast
End Sub
Private Sub report_Click()
On Error GoTo Err_report_Click

    Dim stDocName As String
    stDocName = "nc_tag_report_new"
    
    Forms!nc_entry_frm_new.Refresh
    
    DoCmd.OpenReport stDocName, acPreview


Exit_report_Click:
    Exit Sub

Err_report_Click:
    MsgBox Err.description
    Resume Exit_report_Click
    
End Sub
Private Sub send_cmd_Click()
On Error GoTo Err_send_cmd_Click

    Dim stMailTxt(4), stMailTitleTxt, stDocName, stDocFileName, stDocFilePath, stToList, stCcList As String
    Dim rstRecipients, rstExtraRecipients As Object
    
    Forms!nc_entry_frm_new.Refresh
    If IsNull(Forms!nc_entry_frm_new.phase_id) Then Exit Sub
    
    Set rstRecipients = CurrentDb.OpenRecordset("SELECT * FROM recipient_list_tbl WHERE factory_id=" & Me.factory_id & "AND phase_id=" & Me.phase_id)
    If rstRecipients.BOF Then
        MsgBox "Stabilimento o fase mancante o non riconosciuta!"
        rstRecipients.Close
        Exit Sub
    End If
    
    Set rstExtraRecipients = CurrentDb.OpenRecordset("SELECT * FROM extra_recipient_list_tbl")
    If rstExtraRecipients.BOF Then
        MsgBox "Destinatati extra non trovati"
        rstExtraRecipients.Close
    End If
    
    If Forms!nc_entry_frm_new.factory_id = 1 Then
    'Imbersago
        stMailTitleTxt = "IMBERSAGO - Verbale interno nr. " & Forms!nc_entry_frm_new.nc_id & " del " & _
            Forms!nc_entry_frm_new.nc_date & ", articolo " & Forms!nc_entry_frm_new.product_pn & " " & _
            Forms!nc_entry_frm_new.technical_reference
        stDocFilePath = "S:\Qualità\Non conformita'\Interne\"
        stDocFileName = "IMBERSAGO_" & Format(Forms!nc_entry_frm_new.nc_id, "000000") & "_rapporto di non conformita' interno"
    ElseIf Forms!nc_entry_frm_new.factory_id = 2 Then
    'Verderio
        stMailTitleTxt = "VERDERIO - Verbale interno nr. " & Forms!nc_entry_frm_new.nc_id & " del " & _
            Forms!nc_entry_frm_new.nc_date & ", articolo " & Forms!nc_entry_frm_new.product_pn & " " & _
            Forms!nc_entry_frm_new.technical_reference
        stDocFilePath = "S:\Qualità\Non conformita'\Interne\"
        stDocFileName = "VERDERIO_" & Format(Forms!nc_entry_frm_new.nc_id, "000000") & "_rapporto di non conformita' interno"
    ElseIf Forms!nc_entry_frm_new.factory_id = 3 Then
    'Bottanuco
        stMailTitleTxt = "BOTTANUCO - Verbale interno nr. " & Forms!nc_entry_frm_new.nc_id & " del " & _
            Forms!nc_entry_frm_new.nc_date & ", articolo " & Forms!nc_entry_frm_new.product_pn & " " & _
            Forms!nc_entry_frm_new.technical_reference
        stDocFilePath = "S:\Qualità\Non conformita'\Interne\"
        stDocFileName = "BOTTANUCO_" & Format(Forms!nc_entry_frm_new.nc_id, "000000") & "_rapporto di non conformita' interno"
    End If
    
    
    stMailTxt(0) = "Nella cartella: " & stDocFilePath
    stMailTxt(1) = Chr(13) & Chr(10) & "leggere il file: " & stDocFileName & Chr(13) & Chr(10)
    
    stDocName = "nc_tag_report_new"
    'DoCmd.OutputTo acOutputReport, stDocName, acFormatSNP, stDocFilePath & stDocFileName & ".snp", True
    
    DelTempFile (stDocName & ".snp") 'Cancella file temporaneo per evitare errore Lotus Notes in invio
    
   [color=#FF0000] Select Case Me.decision
        Case 3 'Distruzione
            stMailTitleTxt = "VERBALE DI DISTRUZIONE - " & stMailTitleTxt
            DoCmd.SendObject acSendReport, stDocName, "Snapshot Format", rstExtraRecipients!extra_recipient_list_to & rstRecipients!recipient_list_to, rstRecipients!recipient_list_cc, , _[/color]
                stMailTitleTxt, stMailTxt(0) & stMailTxt(1), True
        
        Case Else
            DoCmd.SendObject acSendReport, stDocName, "Snapshot Format", rstRecipients!recipient_list_to, rstRecipients!recipient_list_cc, , _
                stMailTitleTxt, stMailTxt(0) & stMailTxt(1) & stMailTxt(2), True
    End Select
    

    rstRecipients.Close
    rstExtraRecipients.Close

Exit_send_cmd_Click:
    Exit Sub

Err_send_cmd_Click:
    MsgBox Err.description
    Resume Exit_send_cmd_Click
    
End Sub
Sub DelTempFile(stFileName As String)
Dim fs As Object
Dim stPath As String

Set fs = CreateObject("Scripting.FileSystemObject")
stPath = Environ("TEMP") & "\"  'Cerca la variabile d'ambiente

    On Error Resume Next
    fs.DeleteFile stPath & stFileName
    
End Sub
Private Sub label_cmd_Click()
On Error GoTo Err_label_cmd_Click

    Dim stDocName, stCopies As String
    
    Me.Refresh
    stDocName = "nc_label_report_new"
    stCopies = InputBox("Indicare il numero di etichette da stampare:", _
        Title:="Informazioni utente", XPos:=2000, YPos:=2000)
    
    DoCmd.OpenReport stDocName, acPreview
    DoCmd.PrintOut acSelection, , , , CInt(stCopies)
    DoCmd.Close

Exit_label_cmd_Click:
    Exit Sub

Err_label_cmd_Click:
    MsgBox Err.description
    Resume Exit_label_cmd_Click
    
End Sub

Private Sub find_record_cmd_Click()
On Error GoTo Err_find_record_cmd_Click

    Me.nc_id.SetFocus
    DoCmd.FindRecord InputBox("Indicare un nr. di rapporto:", "Ricerca")

Exit_find_record_cmd_Click:
    Exit Sub

Err_find_record_cmd_Click:
    MsgBox Err.description
    Resume Exit_find_record_cmd_Click
    
End Sub
Private Sub Form_Close()
    Forms![navigation_panel_frm].Requery
    If Not IsNull(Me.nc_id) Then DoCmd.FindRecord Me.nc_id, , True, , True
End Sub

Private Sub close_cmd_Click()
On Error GoTo Err_close_cmd_Click
    
    DoCmd.Close

Exit_close_cmd_Click:
    Exit Sub

Err_close_cmd_Click:
    MsgBox Err.description
    Resume Exit_close_cmd_Click
    
End Sub
Private Sub print_cmd_Click()
On Error GoTo Err_print_cmd_Click
    Dim stDocName As String

    Forms!nc_entry_frm_new.Refresh
    stDocName = "nc_tag_report_new"
    DoCmd.OpenReport stDocName, acNormal

Exit_print_cmd_Click:
    Exit Sub

Err_print_cmd_Click:
    MsgBox Err.description
    Resume Exit_print_cmd_Click
    
End Sub
Ho evidenziato in rosso la stringa che penso si riferisca alla generazione del report. Non so se è sufficiente sostituire l'output format o bisogna riscrivere interamente parti di codice. A me interessa che il comando invia presente nella tabella che genera questi report, li generi direttamente in Word o PDF. Attualmente gli utenti usano un software locale per la conversione ma non è comodissimo.

Qualche anima pia potrebbe darmi una dritta?

3 Risposte

  • Re: Convertire i report generati su access da Snapshot a PDF/Word

    Ignoro tutta la logica del codice, ma prova a sostituire quel acFormatSNP in acFormatRTF (per Word) oppure acFormatPDF (per PDF).
  • Re: Convertire i report generati su access da Snapshot a PDF/Word

    Grazie della ripsposta...

    Penso che tu ti riferisca a questo :

    stDocName = "nc_tag_report_new"
    'DoCmd.OutputTo acOutputReport, stDocName, acFormatSNP, stDocFilePath & stDocFileName & ".snp", True

    DelTempFile (stDocName & ".snp") 'Cancella file temporaneo per evitare errore Lotus Notes in invio

    é tra virgolette in Verde in access, quindi se non erro, è soltatanto testo per lui. Non dovrebbe essere una stringa valida.

    L'unico pezzo di codice dove trovo presente SNP è questo:

    Select Case Me.decision
    Case 3 'Distruzione
    stMailTitleTxt = "VERBALE DI DISTRUZIONE - " & stMailTitleTxt
    DoCmd.SendObject acSendReport, stDocName, "Snapshot Format", rstExtraRecipients!extra_recipient_list_to & rstRecipients!recipient_list_to, rstRecipients!recipient_list_cc, , _
    stMailTitleTxt, stMailTxt(0) & stMailTxt(1), True

    Case Else
    DoCmd.SendObject acSendReport, stDocName, "Snapshot Format", rstRecipients!recipient_list_to, rstRecipients!recipient_list_cc, , _
    stMailTitleTxt, stMailTxt(0) & stMailTxt(1) & stMailTxt(2), True



    Puo essere che vada sostituito solo qui...?? ma non capisco sinceramente il comando.... Sono dubbioso su come generi questo file SNP.
  • Re: Convertire i report generati su access da Snapshot a PDF/Word

    Devi leggere quanto meno le istruzioni sono chiarissime:
    https://msdn.microsoft.com/en-us/vba/access-vba/articles/docmd-sendobject-method-access
Devi accedere o registrarti per scrivere nel forum
3 risposte