Problemas con tamaño papel definido por el usuario |
Responder |
Autor | |
manrod65
Nuevo Unido: 24/Abril/2013 Localización: Valladolid, Esp Estado: Sin conexión Puntos: 21 |
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 |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Enviado: 14/Noviembre/2021 a las 12:22 |
Yo me decantaría por 'elegir' la impresora por VBA antes de lanzar la impresión.
|
|
manrod65
Nuevo Unido: 24/Abril/2013 Localización: Valladolid, Esp Estado: Sin conexión Puntos: 21 |
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 |
|
manrod65
Nuevo Unido: 24/Abril/2013 Localización: Valladolid, Esp Estado: Sin conexión Puntos: 21 |
Enviado: 16/Noviembre/2021 a las 20:25 |
por mi parte se puede cerrar este hilo.
Muchas gracias. Un saludo, Manuel
|
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Enviado: 16/Noviembre/2021 a las 20:30 |
A eso me refería. Simplemente copia el código aquí, es más que suficiente. Un saludo.
|
|
manrod65
Nuevo Unido: 24/Abril/2013 Localización: Valladolid, Esp Estado: Sin conexión Puntos: 21 |
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 ---------------------------------------------------------------------------------- |
|
manrod65
Nuevo Unido: 24/Abril/2013 Localización: Valladolid, Esp Estado: Sin conexión Puntos: 21 |
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.
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
----------------------------------------------------------------------------------
|
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Enviado: 17/Noviembre/2021 a las 08:36 |
Perfecto, muchas zenkius.
|
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |