Bajar archivos en PDF desde una tabla

Estoy realizando Access que me crea documentos. Estos documentos los registra en una tabla temporal y debo guardarlos en PDF.

El tema es que los guardo desde una consulta de selección a un PDF pero debo hacerlo de a uno y en cada uno de ellos debo indicarle la ruta y el nombre que le quiero dar.

¿Sería posible con código hacer que me imprima todos los documentos de la tabla en una carpeta que elija y que el nombre sea el Numero de ese documento?

El código que utilice es:

Private Sub Lista_DblClick(Cancel As Integer)

     If IsNull([Firmante]) Then

        Mje1 = MsgBox(" Debe ingresar el firmante antes de continuar  ", vbCritical, "Error.")

        Me.Firmante.SetFocus

      Else

        mensaje = MsgBox("¿Desea realizar la acción solicitada.?       ", vbYesNo + vbQuestion + vbDefaultButton2, "Acción.")

         If mensaje = vbYes Then

              If Me.Opciones = 1 Then

                stDocName = " Informe PRT"

                DoCmd.OpenReport stDocName

            End If

            If Me.Opciones = 2 Then

                stDocName = "Informe PDF"

DoCmd. OutputTo acOutputReport, stDocName, "PDFFormat(*.pdf)", "", False, "",, acExportQualityPrint

            End If

            If Me.Opciones = 3 Then

                stDocName = "Informe PRT"

                DoCmd.OpenReport stDocName, acViewReport

            End If

        Else

            Mje4 = MsgBox("La solicitud de eliminación ha sido cancelada.       ", vbInformation, "Accion 

        End If

    End If

 End Sub

1 respuesta

Respuesta
2

Jorge: En mi opinión deberías declarar un Recordset y recorrerlo, guardando un informe por registro de esa tabla que comentas.

Private Sub BtnTodosLosCliente_Click()
Dim NombreInforme As String
Dim RutaPDF As String, IzqPDF As String, CentroPDF As String, StrFecha As String, NombreInfPDF As String, RutaYFicheroPDF As String
Dim QryVarios As String
Dim RstVarios As DAO.Recordset
NombreInforme = "Clientes"
QryVarios = "SELECT IdCliente FROM ClientesUnosPocos;"
Set RstVarios = CurrentDb.OpenRecordset(QryVarios, dbOpenSnapshot)
If Not RstVarios.EOF And Not RstVarios.BOF Then
        RstVarios.MoveLast
        RstVarios.MoveFirst
        Do While Not RstVarios.EOF
                'Defino la Parte Izquierda como el NombreInforme, pero puede ser Cpmpuesto
                IzqPDF = NombreInforme
                'Defino la parte Central del Informe
                CentroPDF = CStr(RstVarios!IdCliente)
                StrFecha = Format(Date, "yyyymmdd")
                'Defino el Nombre completo del Fichero que se va a guardar
                NombreInfPDF = IzqPDF & CentroPDF & StrFecha & ".pdf"
                'Defino la Ruta donde están los Ficheros PDF
                RutaPDF = Application.CurrentProject.Path & "\InformesPDF\"
                'Completo la cadena para guardarlo
                RutaYFicheroPDF = RutaPDF & NombreInfPDF
                'Aquí exportamos y visualizamos el Informe en PDF. Para visualizar >> AutoStart: = True
                DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:=NombreInforme, OutputFormat:=acFormatPDF, OutputFile:=RutaYFicheroPDF, AutoStart:=False 'True
                RstVarios.MoveNext
        Loop
Else
End If
RstVarios.Close
Set RstVarios = Nothing
End Sub

Creo que algo parecido a ésto. Has de crear una carpeta colgando de la que alberga a tu BD, con el Nombre de InformesPDF. ClientesUnosPocos es el Nombre de la Tabla.

IdCliente es un campo de la Tabla, que uso para que el Nombre del PDF vaya cambiando y sea localizable. Puede ser el equivalente a tu "Firmante"

El resto de variables las puedes cambiar según tu necesidad. Saludos >> Jacinto

Jacinto: Ante todo Muchas gracias: Es exactamente lo que necesito hacer. Tome el código que me enviaste y lo asocie a un botón llamado Documentos. 

Modifique:

NombreInforme = "Informe PDF"

QryVarios = "SELECT IdCliente FROM CR-DOCUMENTOS;"

CentroPDF = CStr(RstVarios!DocInvent)

RutaPDF = Application.CurrentProject.Path & "\Escritorio\InformesPDF\" (Cree una carpeta en el escritorio)

Me tira siguiente error en: Set RstVarios = CurrentDb.OpenRecordset(QryVarios, dbOpenSnapshot)

No soy muy bueno en esto y seguramente me estoy olvidando de algo. Podrías ayudarme?

Muchas gracias.

Saludos

Jorge

Jorge: Así en frio lo que se me ocurre es que no tengas un campo que se llame IdCliente en la Tabla >> CR-DOCUMENTOS

Al parecer lo citas mas abajo como >> DocInvent

Mira si fuera eso lo que provoca el error. De otro lado, asegura que tienes dada de alta en Referencias la Librería

Microsoft Office x.y Access Database Engine Object Library

Un saludo >> Jacinto

Gracias Jacinto:

Efectivamente no complete bien la línea. Quedo así:

QryVarios = "SELECT DocInvent FROM DOCUMENTOS;"

ahora el error me lo tira a lo ultimo en la linea:

DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:=NombreInforme, OutputFormat:=acFormatPDF, OutputFile:=RutaYFicheroPDF, AutoStart:=False 'True

Puede que haya especificado mal la ruta:???

RutaPDF = Application.CurrentProject.Path & "\Escritorio\InformesPDF\"

por su parte me fije en las librerías y la que tengo habilitada es:

Saludos Jorge

Jorge: Es posible que sea la Ruta, en cuyo caso la prueba inmediata que puedes hacer es abrir directamente una carpeta en C: que se llame InformesPDF y cambiar >>

RutaPDF = Application.CurrentProject.Path & "\Escritorio\InformesPDF\" por

RutaPDF = "C:\InformesPDF\"

Así te será más fácil ver si el fallo viene de ahí. Un saludo >> Jacinto

¡Gracias!

Ahora si. Excelente!

Muchísimas gracias por tu tiempo.

Saludos. Jorge

Jacinto Buenos días:

Viendo los archivos que me baja el código, si bien me baja todos los documentos de la tabla con su nombre correctamente, en su interior siempre es el mismo numero, me lo repite en todos igual. Seguramente estoy metiendo la pata en algo y no puedo darme cuenta en que. Podrías ayudarme?

Muchas gracias.

Jorge.

Jorge: Con lo que me comentas, no me queda claro cual es el problema.

Me dices >> "....nombre correctamente, en su interior siempre es el mismo numero, me lo repite en todos igual. ". Si puedes poner una imagen o alguna otra explicación quizá podamos ver dónde se produce la anomalía. Un saludo >> Jacinto

Buenos días Jacinto: No fui muy especifico. Te comento que el código me baja los 2 documentos que encontró en la tabla: el 838 y 839:

pero cuando abro estos dos documentos están en los 2 documentos los datos del primero (838) Te puse solo el encabezado:

Los dos documentos son iguales.

Saludos y Gracias.

Jorge

Jorge: Creo que la anomalía viene de un descuido inicial mio, ya que falta abrir el Informe cada vez que hace el bucle, con el Nombre del DocInvent correspondiente.

Así, después de la línea >> Do While Not RstVarios. EOF has de poner>>

DoCmd.OpenReport NombreInforme, acViewPreview, , "DocInvent = " & RstVarios!DocInvent, acHidden

Y otra línea de cierre del informe, inmediatamente después del DoCmd.OutputTo... y antes del RstVarios. MoveNext. Osea entre las dos.

DoCmd. Close acReport, NombreInforme

Espero que con ésto solucionemos el problema. Un saludo >> Jacinto

¡Gracias! 

Ahora si funciona. Me falta arreglar un par de cosas dentro de los informes pero creo que ya me puedo arreglar.

Nuevamente gracias por tu respuesta.

Saludos

Jorge

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas