Hola, buenos días...
En casos anteriores he solicitado su ayuda para solucionar un problema que tengo con un programa hecho en VB6. Es un programa para procesar las ventas de una tienda de comida rápida hecho en donde trabajo allá por el 2000, creo, pero lo hicieron para que funcionara exclusivamente en una impresora de tipo punto de venta SP200 de Star Micronics. Gracias a su ayuda he resuelto varios enredos en el código, pero el problema que tengo es que no puedo mandar a imprimir en otra impresora.
Analizando el código tengo lo siguiente (esto es una forma):
Código:
Private Sub btnImprimir_Click()
' NoPreguntarFiltro = True
' GenerarReporte
' NoPreguntarFiltro = False
Select Case cboReporte.Text
Case "Ventas por pedido"
MandarAminiPrinter StringImpresionReporteVentas()
Case "Ventas por forma de pago"
MandarAminiPrinter StringImpresionReporteVentasFormaPago
Case "Ventas por Vendedor"
MandarAminiPrinter StringImpresionReporteVentasVendedor
Case "Ventas por Producto"
MandarAminiPrinter StringImpresionReporteVentasProducto
Case "Ventas a Detalle"
MandarAminiPrinter StringImpresionReporteVentasDetalle
Case "Resumen de ventas por forma de pago"
MandarAminiPrinter StringImpresionResumenVentasFormaPago
Case "Resumen de ventas por Vendedor"
MandarAminiPrinter StringImpresionResumenVentasVendedor
Case "Resumen de ventas por Producto"
MandarAminiPrinter StringImpresionResumenVentasProducto
End Select
End Sub
Son tres opciones en el sistema para imprimir, similares a la de arriba. Si se dan cuenta todas mandan a una función llamada "MandarAminiPrinter", todas las que dicen "StringXXXXX..." son configuraciones de como saldría la impresión (formato, acomodo, etc).
La opción de MandarAminiPrinter es la siguiente (está definida como un módulo):
Código:
Public Sub MandarAminiPrinter(texto As String, Optional Preview As Boolean = True)
Dim tempstr As String
Dim b() As Byte
Dim n As Integer
On Local Error Resume Next
If Preview Then
Dim f As New frmTicketPreview
Load f
f.texto = texto
f.Show vbModal
Exit Sub
End If
If Dir(App.Path & "\sp200.dos") <> "" Then
n = FreeFile
Open App.Path & "\sp200.dos" For Binary As n
tempstr = String(LOF(n), " ")
Get #n, , tempstr
Close n
texto = tempstr & texto
Else
texto = Chr(&H1B) & Chr(&H40) & texto
End If
'If pref("ImprimirDOS") Then
b = LoadResData(101, "CUSTOM")
n = FreeFile
If Dir(App.Path & "\bat.bat.pif") <> "" Then
FileCopy App.Path & "\bat.bat.pif", App.Path & "\b.pif"
Else
Kill "b.pif"
If Err Then Err.Clear
Open App.Path & "\b.pif" For Binary As n
Put #n, , b
Close
If Err Then Err.Clear
End If
Debug.Print "len del texto a imprimir: "; Len(texto)
CrearArchivoTextoImpresion texto
Kill "C:\bat.bat"
If Err Then Err.Clear
Open "C:\bat.bat" For Binary As n
Put #n, , "copy """ & App.Path & "\temp.tmp"" lpt1:"
Close
If Err Then
MsgBox "Hipocaja no pudo escribir un archivo temporal de impresión. Cierre los archivos que esté utilizando, y si el problema persiste, reinicie su computadora. Hipocaja intentará mandar la impresión correctamente.", vbCritical, Titulo_Largo
Err.Clear
End If
Shell App.Path & "\b.pif", vbHide
' DoEvents
' Kill App.Path & "\temp.tmp"
' Kill "c:\bat.bat"
' Kill App.Path & "\b.pif"
'Else
' Printer.NewPage
' Printer.print
' Printer.EndDoc
'End If
End Sub
He encontrado opciones de impresión por la web y en este foro, y las he tratado de implementar en este último módulo pero cuando mando la impresión, sale la hoja en blanco.
Les soy sincero... no he podido solucionar este problema y espero que alguien pudiera apoyarme, no soy muy bueno en VB y lo que he corregido ha sido sobre la marcha y gracias a su ayuda en otros post. Espero y alguien pueda ayudarme.
Saludos y ante todo agradezco sus comentarios.