Problemas de impresión en Matricial y Térmica
Cómo están:
Tengo un problema y espero poder obtener su ayuda urgentemente.
Tengo una aplicación que me permite enviar un documento de venta a dos tipos de impresoras diferentes instaladas en la misma máquina.
Los documentos (ejem: Boleta y Factura) están diseñadas en Crystal Report 8.0, mi aplicación está desarrollada en Visual Basic 6.0 y la base de datos en SQL Server 2000.
El código es el siguiente, después de obtener la clase de documento (boleta o factura) y su respectiva impresora guardada en la base de datos:
/* Utilizo el objeto Printer para obtener el nombre del controlador y el puerto y asignarle al objeto de Crystal (crptInforme) */
For Each X In Printers
If X.DeviceName = EsNulo(rsImpresoras!NomImpresora, "") Then
With crptInforme
.PrinterDriver = X.DriverName
.PrinterName = X.DeviceName
.PrinterPort = X.port
End With
'Cambiamos la impresora por defecto para mantener márgenes
SetDefaultPrinter X.DeviceName, X.DriverName, X.port
EstablecerImpresoraCRpt = True
Exit Function
End If
Next X
/* Necesariamente utilizo estas APIs para que los márgenes de los documentos no se vean afectados al cambio de impresoras. Con esto predetermino la impresora seleccionada*/
Public Sub SetDefaultPrinter(ByVal PrinterName As String, ByVal DriverName As String, ByVal PrinterPort As String)
Dim DeviceLine As String
Dim r As Long
Dim l As Long
DeviceLine = PrinterName & "," & DriverName & "," & PrinterPort
r = WriteProfileString("windows", "Device", DeviceLine)
l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, "windows")
End Sub
Bueno, el problema está que en algún momento al realizar el cambio de impresoras, ésta no cambia a predeterminada y entonces el documento se envía en la otra impresora y sale totalmente distinta. A veces se cuelga la computadora. Otras veces imprime hasta la mitad, etc.
Quisiera saber si es necesario predeterminar la impresora (utilizando estas APIs) para que los márgenes de los papeles no cambien, o habrá alguna otra forma, ¿tal vez sin utilizarlas?
Y qué pasaría con los archivos en cola en una y otra impresora. ¿Se descuadran los márgenes al momento de imprimir sus respectivos documentos ya que no está predeterminada una de sus impresoras?
He notado también algunas mejoras en Crystal Report 8.5, donde se le puede especificar el tamaño del papel en el control, lo que no se hace en Crystal Report 8.0.
Le agradecería de antemano las posibles respuestas.
Tengo un problema y espero poder obtener su ayuda urgentemente.
Tengo una aplicación que me permite enviar un documento de venta a dos tipos de impresoras diferentes instaladas en la misma máquina.
Los documentos (ejem: Boleta y Factura) están diseñadas en Crystal Report 8.0, mi aplicación está desarrollada en Visual Basic 6.0 y la base de datos en SQL Server 2000.
El código es el siguiente, después de obtener la clase de documento (boleta o factura) y su respectiva impresora guardada en la base de datos:
/* Utilizo el objeto Printer para obtener el nombre del controlador y el puerto y asignarle al objeto de Crystal (crptInforme) */
For Each X In Printers
If X.DeviceName = EsNulo(rsImpresoras!NomImpresora, "") Then
With crptInforme
.PrinterDriver = X.DriverName
.PrinterName = X.DeviceName
.PrinterPort = X.port
End With
'Cambiamos la impresora por defecto para mantener márgenes
SetDefaultPrinter X.DeviceName, X.DriverName, X.port
EstablecerImpresoraCRpt = True
Exit Function
End If
Next X
/* Necesariamente utilizo estas APIs para que los márgenes de los documentos no se vean afectados al cambio de impresoras. Con esto predetermino la impresora seleccionada*/
Public Sub SetDefaultPrinter(ByVal PrinterName As String, ByVal DriverName As String, ByVal PrinterPort As String)
Dim DeviceLine As String
Dim r As Long
Dim l As Long
DeviceLine = PrinterName & "," & DriverName & "," & PrinterPort
r = WriteProfileString("windows", "Device", DeviceLine)
l = SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, "windows")
End Sub
Bueno, el problema está que en algún momento al realizar el cambio de impresoras, ésta no cambia a predeterminada y entonces el documento se envía en la otra impresora y sale totalmente distinta. A veces se cuelga la computadora. Otras veces imprime hasta la mitad, etc.
Quisiera saber si es necesario predeterminar la impresora (utilizando estas APIs) para que los márgenes de los papeles no cambien, o habrá alguna otra forma, ¿tal vez sin utilizarlas?
Y qué pasaría con los archivos en cola en una y otra impresora. ¿Se descuadran los márgenes al momento de imprimir sus respectivos documentos ya que no está predeterminada una de sus impresoras?
He notado también algunas mejoras en Crystal Report 8.5, donde se le puede especificar el tamaño del papel en el control, lo que no se hace en Crystal Report 8.0.
Le agradecería de antemano las posibles respuestas.
{"Lat":-6.75189646484337,"Lng":-79.8486328125}
1 respuesta
Respuesta de Roberto Alvarado
1