** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Problemas con tamaño papel definido por el usuario
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoProblemas con tamaño papel definido por el usuario

 Responder Responder
Autor
Mensaje
manrod65 Ver desplegable
Nuevo
Nuevo


Unido: 24/Abril/2013
Localización: Valladolid, Esp
Estado: Sin conexión
Puntos: 21
Enlace directo a este mensaje Tema: Problemas con tamaño papel definido por el usuario
    Enviado: 14/Noviembre/2021 a las 11:26
Buenos días a tod@s.

Tengo una base de datos de gestión distribuida. El front-end está desarrollado en Access 365 y uso el Runtime para la ejecución. Trabaja en red sobre una base de datos MySQL.

En esta aplicación, tengo un informe de factura que está configurado con una impresora fija y un tamaño de papel definido por el usuario. 
El papel que se usa son formularios preimpresos de triple hoja autocalcante y la impresora es una de agujas Epson LQ-590 ESC/P2 en el puerto LPT3.

Hasta hace una semana (+/-) funcionaba perfectamente, incluso después de modificar el informe. Aunque hay varias impresoras instaladas en el equipo el informe de Factura siempre se imprimía por la Epson y con el formato de papel "Factura" (definido a través del servidor de impresión del equipo).

Ahora tengo un problema que este informe se imprime por la impresora Epson, pero con un formato de papel A4 o A5 aleatoriamente y por supuesto el informe no cabe en el papel y se descuadra totalmente.
Si abro la presentación preliminar del informe sale con formato A4, pero si desde esta presentación preliminar selecciono en la impresora Epson el tamaño de papel "Factura", el informe se imprime perfectamente. Esto no es operativo porque se hacen del orden 150-200 facturas de cada vez.

En el equipo de desarrollo si que me abre el informe con el papel "Factura" en la presentación preliminar, pero al pasarlo a otro equipo con solo el Runtime ya me da el fallo.  

Este problema lo he detectado después de una actualización de Windows 10 (no se cual porque en estos días se han hecho varias).

He mirado en el foro y en internet, pero no he encontrado ninguna solución valida.

Cualquier ayuda y/o orientacion de como proceder sería bienvenida.
Gracias a tod@s por adelantado.


Un saludo, Manuel Rodriguez

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 14/Noviembre/2021 a las 12:22
Yo me decantaría por 'elegir' la impresora por VBA antes de lanzar la impresión.

Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
manrod65 Ver desplegable
Nuevo
Nuevo


Unido: 24/Abril/2013
Localización: Valladolid, Esp
Estado: Sin conexión
Puntos: 21
Enlace directo a este mensaje Enviado: 16/Noviembre/2021 a las 20:24
Buenas tardes Mihura y muchas gracias por tu respuesta.

Ya he probado eso, pero al cambiar de PC cambia la configuración del tamaño del papel y me coge aleatoriamente A4 o Carta y el informe se descuadra totalmente.

Buscando por mis discos con ficheros ejemplo de aplicaciones de Access al final he encontrado una, con versiones de Access 2003 y 2007, que me permite seleccionar todos los parámetros de la impresora para un determinado informe y al implementarlo en mi aplicación se ha resuelto el problema.

Lo que no sé es como poder subirla al foro por si le puede ser de utilidad a alguien mas.

Un saludo, Manuel


Arriba
manrod65 Ver desplegable
Nuevo
Nuevo


Unido: 24/Abril/2013
Localización: Valladolid, Esp
Estado: Sin conexión
Puntos: 21
Enlace directo a este mensaje Enviado: 16/Noviembre/2021 a las 20:25
por mi parte se puede cerrar este hilo.

Muchas gracias.
Un saludo, Manuel
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 16/Noviembre/2021 a las 20:30
Publicado originalmente por manrod65 manrod65 escribió:

Buscando por mis discos con ficheros ejemplo de aplicaciones de Access al final he encontrado una, con versiones de Access 2003 y 2007, que me permite seleccionar todos los parámetros de la impresora para un determinado informe y al implementarlo en mi aplicación se ha resuelto el problema.

A eso me refería. Simplemente copia el código aquí, es más que suficiente.

Un saludo.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
manrod65 Ver desplegable
Nuevo
Nuevo


Unido: 24/Abril/2013
Localización: Valladolid, Esp
Estado: Sin conexión
Puntos: 21
Enlace directo a este mensaje Enviado: 16/Noviembre/2021 a las 21:29

La función que se usa para imprimir está en un módulo.

----------------------------------------------------------------------------------

Public Function PrintSelectPrinter(strSelRpt As String, PrintView As Byte, intFmtRec As Byte, _

                                   Optional stLinkcriteria As String, _

                                   Optional strArgs As String, Optional bolNoMargins As Boolean)

On Error GoTo err_proc

 

Debug.Print intFmtRec & "  " & strSelRpt

 

'PrintPrev = 2 (Preview), =0 Normal (Print)

'Prints report defined by strSelRpt to Card Printer, defined by printer stored in tblPrntDflts

'IntFmtRec defines the record in tblPrntDflts where the formatting for the report is stored

'IntFmtRec = 0.  Standard report (portrait) _

             1.  Standard report (landscape) _

 

 

'PrintView = 0.  Print direct to printer _

             2.  Preview report - reference to formatting if acViewReport or acViewPreview _

             10. Open report hidden (For e-mailing by calling procedure

    Dim rst As Recordset

    Dim strSql As String

    Dim prt As Printer

    Dim strPrinter As String

    Dim intPreview As Byte

    Dim dbs As DAO.Database

    Dim strMessage As String

  

    strSql = "SELECT tblPrntDflts.* FROM tblPrntDflts WHERE AdminID=" & intFmtRec

    Debug.Print strSql

    Set dbs = CurrentDb

        Set rst = dbs.OpenRecordset(strSql)

        If rst.BOF = True Then GoTo exit_proc

        rst.MoveFirst

        strPrinter = Nz(rst![LabelPrinter], "")

        If strPrinter = "" Then GoTo OpenReport   'If no printer specified then user default printer

       

        For Each prt In Application.Printers

            If strPrinter = prt.DeviceName Then GoTo SetPrinter

        Next

        'Printer not found in available printers list

        strMessage = "The assigned printer is not available." & Chr(13) & Chr(13) & _

                     "Please contact your system administrator."

        MsgBox strMessage, vbExclamation

        GoTo exit_proc

       

SetPrinter:

        'Printer name is case sensitive - update name if case incorrect

        If StrComp(strPrinter, prt.DeviceName, vbBinaryCompare) <> 0 Then

            rst.Edit

                rst![LabelPrinter] = prt.DeviceName

            rst.Update

            strPrinter = prt.DeviceName

        End If

        Application.Printer = Application.Printers(strPrinter)

        Set prt = Application.Printers(strPrinter)

        GoSub SetRptProps

 

OpenReport:

    ' Open and print the report using the new application-level printer settings.

    Application.Echo False

    Select Case PrintView

    Case 0

        DoCmd.OpenReport strSelRpt, 2, , stLinkcriteria, acHidden, strArgs

        DoCmd.SelectObject acReport, strSelRpt

        If strPrinter = "" Then

            Set prt = Reports(strSelRpt).Printer

            GoSub SetRptProps

        Else

            Reports(strSelRpt).Printer = prt

        End If

        DoCmd.PrintOut acPrintAll, , , acHigh

        DoCmd.Close acReport, strSelRpt

    Case acViewPreview

        intPreview = (rst![RptPreviewMode] * -3) + 2

        DoCmd.OpenReport strSelRpt, intPreview, , stLinkcriteria, , strArgs

        DoCmd.SelectObject acReport, strSelRpt

        If strPrinter = "" Then

            Set prt = Reports(strSelRpt).Printer

            GoSub SetRptProps

        Else

            Reports(strSelRpt).Printer = prt

        End If

    Case 10     'Open hidden for e-mail, which is set up and sent by calling code by

        DoCmd.OpenReport strSelRpt, 2, , stLinkcriteria, 1, strArgs

        DoCmd.SelectObject acReport, strSelRpt

        If strPrinter = "" Then

            Set prt = Reports(strSelRpt).Printer

            GoSub SetRptProps

        Else

            Reports(strSelRpt).Printer = prt

        End If

    End Select

       

    ' Reset the application printer as the default.

    Set Application.Printer = Nothing

 

exit_proc:

Application.Echo True

On Error Resume Next

    Set dbs = Nothing

    rst.Close

    Exit Function

   

err_proc:

    If Err.Number = 2501 Then

        strMessage = "There are no records to display"

    Else

        strMessage = Err.Description

    End If

    MsgBox strMessage, vbInformation

    Resume exit_proc

 

SetRptProps:

    With prt

        If Nz(rst![PaperSize], 0) > 0 Then .PaperSize = Nz(rst![PaperSize], 0)

        .Orientation = rst![Orient]

        If rst![PaperSize] = 256 Then

            .DefaultSize = False

            If rst!ValHt > 0 Then .ItemSizeHeight = rst!ValHt * 567     '567 twips per cm

            If rst!ValWd > 0 Then .ItemSizeWidth = rst!ValWd * 567      '567 twips per cm

        End If

        .PrintQuality = rst!PrintQual

        If rst!PrintMono = -1 Then .ColorMode = acPRCMMonochrome

       

        If Nz(rst!PaperBin, 0) > 0 Then .PaperBin = rst!PaperBin

        If rst!DuplexPrint > 1 Then .Duplex = acPRDPVertical

 

        'if BolMargins = -1 then all margins set to 0 irrespective of saved settings from recordset

        If bolNoMargins = 0 Then

            .RightMargin = rst![MarginRight] * 56.7                     '56.7 twips per mm

            .LeftMargin = rst![MarginLeft] * 56.7                       '56.7 twips per mm

            .BottomMargin = rst![MarginBottom] * 56.7                   '56.7 twips per mm

            .TopMargin = rst![MarginTop] * 56.7                         '56.7 twips per mm

        Else

            .RightMargin = 0

            .LeftMargin = 0

            .BottomMargin = 0

            .TopMargin = 0

        End If

    End With

    Return

   

End Function

----------------------------------------------------------------------------------

Arriba
manrod65 Ver desplegable
Nuevo
Nuevo


Unido: 24/Abril/2013
Localización: Valladolid, Esp
Estado: Sin conexión
Puntos: 21
Enlace directo a este mensaje Enviado: 16/Noviembre/2021 a las 21:30
La aplicación de ejemplo tiene 3 tablas, 2 son para los datos del informe que utiliza de ejemplo y una para guardar
los parámetros de la impresora para un determinado informe.
Para seleccionar estos datos tiene este formulario.
Interfaz de usuario gráfica    Descripción generada automáticamente
 
 
 
La estructura de la tabla de impresoras es:
----------------------------------------------------------------------------------
 Tabla: tblPrntDflts
          Nombre  Campo                                                  Tip                          Tamaño
          AdminID                                                   Entero largo                                4
          LocalPrinter                                              Texto corto                               255
          LabelPrinter                                              Texto corto                               255
          PaperSize                                                 Entero                                      2
          ValHt                                                     Simple                                      4
          ValWd                                                     Simple                                      4
          Orient                                                    Entero largo                                4
          MarginTop                                                 Simple                                      4
          MarginBottom                                              Simple                                      4
          MarginLeft                                                Simple                                      4
          MarginRight                                               Simple                                      4
          StdPrinter                                                Texto corto                               255
          PDF                                                       Sí/No                                       1
          RptPreviewMode                                            Sí/No                                       1
          BEUpdate                                                  Fecha con hora                              8
          Test                                                      Texto corto                               255
          PaperBin                                                  Entero                                      2
          PrintMono                                                 Sí/No                                       1
          DuplexPrint                                               Byte                                        1
          PrintQual                                                 Entero                                      2
Índices de tabla
          AdminID                                   
               AdminID                     Ascendente
          PrimaryKey                                
               AdminID                     Ascendente
----------------------------------------------------------------------------------

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 17/Noviembre/2021 a las 08:36
Perfecto, muchas zenkius. Tongue
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable