Access - Automatizar Access.

 
Vista:

Automatizar Access.

Publicado por David (4 intervenciones) el 02/12/2013 10:02:30
Buenos días,

Como a todos nos pasa una vez en la vida en el que nos toca programas o hacer algo en el que no estamos acostumbrados aquí os pregunto un par de dudas.

La idea principal es crear una automatización para que el solo mediante macro (autoexec) pueda hacer las consultas, e imprimir-las a pdf.

Tengo o mas bien me darán una base de datos en access 2010. Esa base de datos en access hace consultas a oracle e las importa a este mismo fichero access. Según tengo entendido, habrá una macro que calculara unos valores e me dejara en una tabla separada los datos que quieren que imprima.

Cada linea/producto es una impresión en pdf única en el cual hay solo 1 producto por hoja. Tengo alrededor de 7000 impresiones a hacer...

Actualmente se como imprimir todos esos productos a pdf a partir de un informe mediante macro pero no consigo que imprima solo 1 producto ya que debajo se van añadiendo los demas productos.

Este es el "problemilla" mas problemático que tengo el resto de automatización cuando tenga el fichero access podre apañar-melas... espero...

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Automatizar Access.

Publicado por David (4 intervenciones) el 02/12/2013 11:18:17
Buenas de nuevo,

Haber consigo con este codigo filtrar el informe de un solo vendedor.

DoCmd.OpenReport "Resumen ventas anuales por Vendedor", Viewpreview, , "[NombreVendedor] = Carlos"

Primer problema no se porque me pide el nombre que en ese caso ya pongo.. es decir me sale un input pidiendome el nombre del vendedor. Si no lo pongo, el informe sale vacio. En caso que lo ponga el informe se imprime bien.

Al momento de imprimir me pide una ruta e me lo guarda con la impresora predeterminada, hay alguna manera para indicarle que lo imprima en pdf y lo guarde en la ruta X ?

Gracias nuevamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Automatizar Access.

Publicado por Norberto (753 intervenciones) el 03/12/2013 12:54:56
Hola.

En cuanto al filtro, debes de poner el nombre entre comillas simples de la siguiente manera: "[NombreVendedor] = 'Carlos'". En el caso de que el nombre estuviese en una variable, la cosa quedaría así: "[NombreVendedor] = '" & Vend & "'".

Para pasar el informe a pdf, si tienes la versión 2007 o superior, usa DoCmd.OuputTo. Si no es así, debes de tener algún programa que convierta a pdf funcionando como una impresora. Yo descargé MyPDFConverter de Softonic.

Este programa se puede configurar para determinar la ruta de salida y que no pida nada al generar el pdf. Para imprimir por éste en vez de por la impresora predeterminada, puedes usar lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
...
Dim OldPrint As String
...
 
...
...
OldPrint = Application.Printer.DeviceName 'Guardamos la impresora predetermianda de Access
Application.Printer = Application.Printers("MyPDFConverter") 'Cambiamoa al convertidor de pdf
DoCmd.PrintOut 'Imprimimos (generamos el pdf)
Application.Printer = Application.Printers(OldPrint) 'Restauramos la impresora
...
...

Un saludo,

Nor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Automatizar Access.

Publicado por David (4 intervenciones) el 04/12/2013 09:08:21
Buenos dias Norberto,

Estuve haciendo pruebas con lo que comentaste a mas de documentacion do.cmd de msdn.

Haber actualmente estoy en una macro de access 2010, hago un sql con un distict del numero de persona.

dentro de ese bucle cada vez que tengo un numero de persona nuevo deberia darme un report diferente.

DoCmd.OpenReport "ventas", Viewpreview, "[Person nr] = " & num_person & ""

La variable "num_person " coge el valor correctamente pero no obstante siempre me "imprime" el primer numero que aparece en la tabla. Vamos que el criterio se lo passa por el "·$"·$·$ de los ·"·$"$"$.

P.D: tambien lo e probado con comillas simples DoCmd.OpenReport "ventas", Viewpreview, "[Person nr] = '" & num_person & "'"

La impresion PDF tiene de guardar el numero de esa persona es decir Persona_20213131313.pdf pero veo que me pide que ponga nombre a cada vez.

Con el DoCmd.OutputTo acOutputReport puedo personalizar el nombre pero entonces aqui como puedo aplicar el filtro/criterio ?

Alguien puede echarme un cable ?

Gracias a todos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Automatizar Access.

Publicado por Norberto (753 intervenciones) el 04/12/2013 11:21:47
Hola de nuevo.

Si el campo [Person nr] es numérico no debes usar las comillas y debería funcionar sin más. El problema que veo es que estás poniendo el filtro en el parámetro FilterName en vez de WhereConditions. Prueba con DoCmd.OpenReport "ventas", acViewPreview, ,"[Person nr] = " & num_person. Es decir con dos comas entre acViewPreview y la condición.

En cuanto a la exportación a pdf propiamente dicha, el tema está en el sistema de conversión que usas. Como te dije, yo uso MyPDFConverter y me permite especificar la ruta de destino y que el nombre lo saque automáticamente del informe. Luego sería cuestión de usar la instrucción Name nombre As nuevonombre para cambiarlo por el que quieras.

En cuanto a usar DoCmd.OutputTo, sólo se me ocurre que el informe se base en una consulta. Antes de llamar a este comando, le cambias la SQL para que sólo coja un registro, algo así como:

CurrentDb.QueryDefs("Consulta").SQL = "SELECT.... WHERE (Ventas.[Person nr] = " & num_person & ") ORDER BY ...;"

Espero que te sirva.

Un saludo,

Nor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Automatizar Access.

Publicado por David (4 intervenciones) el 04/12/2013 11:34:54
Solucion.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Function pdf_export()
    Dim rst1 As DAO.Recordset ', Rst2 As DAO.Recordset
    Dim num_person As String
    Dim count As Integer
 
    count = 0
 
    Set rst1 = CurrentDb.OpenRecordset("SELECT DISTINCT [persona num] FROM [P5-modulo] WHERE [pdf] = 's'")
 
    Do While Not rst1.EOF
        count = count + 1
        num_persona = (rst1![Persona num])
 
        DoCmd.OpenReport "Modelo", acViewPreview, , "[Person num] = " & num_person
        DoCmd.OutputTo acOutputReport, "Modelo", "PDFFormat(*.pdf)", "c:\pdf_export\Persona_" & num_person & ".pdf", , "", 0, acExportQualityPrint
        DoCmd.Close acReport, "Modelo", acSaveNo
 
        'Siguiente registro
        rst1.MoveNext
    Loop
 
    'cerramos consulta
    rst1.Close
 
    Set rst1 = Nothing
End Function

Lo solucione un pelin antes de tu post pero igualmente lo que comentas seguramente sea una solucion.

Gracias por la ayuda, ire pasando para ver si puedo ayudar en algo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Automatizar Access.

Publicado por Norberto (753 intervenciones) el 05/12/2013 11:00:53
Hola de nuevo.

Había probado lo de abrir el informe con condición antes de exportarlo pero me pareció que no respetaba el filtro y exportaba la totalidad. Al ver tu solución lo he vuelto a hacer y, efectivamente, sólo exporta el correspondiente al registro que se muestra. Enhorabuena por la solución que has encontrado y que simplifica enormemente el proceso.

Un saludo y hasta otra ocasión,

Nor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar