Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Apoyo con un programa en VB6

Estas en el tema de Apoyo con un programa en VB6 en el foro de Visual Basic clásico en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 06/07/2009, 09:05
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Apoyo con un programa en VB6

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.
  #2 (permalink)  
Antiguo 06/07/2009, 18:55
 
Fecha de Ingreso: febrero-2009
Ubicación: Villa Ocampo - Santa Fe
Mensajes: 100
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Apoyo con un programa en VB6

Hola Middrel intentaste usar el Active Report??? si te interesa te puedo dejar un ejemplo es muuuuuuyy sencillo de usar e imprime donde se te ocurra saludos
  #3 (permalink)  
Antiguo 06/07/2009, 22:01
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Apoyo con un programa en VB6

Hola ValentinoMolinari, la verdad no lo he intentado, y para serte franco no sabía que existía hasta ahora que lo mencionas. Si me puedas pasar el ejemplo te lo agradecería mucho, probaría implementarlo y ver si funciona.

El problema principal, creo, es que este programa yo no lo hice y la verdad nunca he trabajado el VB, y lo estoy aprendiendo en la marcha (sintaxis, sentencias, formas, etc), por lo tanto he tratado de implementar los códigos como lo he hecho en otros lenguajes (C++, PHP por ejemplo) y la forma de definirlos no me funciona bien.

Te agradezco tu respuesta, saludos.
  #4 (permalink)  
Antiguo 06/07/2009, 23:24
 
Fecha de Ingreso: mayo-2009
Mensajes: 238
Antigüedad: 15 años
Puntos: 7
Respuesta: Apoyo con un programa en VB6

Tio para empezar ese tipo de programacion te complica la vida.
Por otro lado el crystal report ó el active report no son muy recomendables sobre todo el 1ero se presentan varios problemas de conexion y registro de dll y ocx.

Lo mas recomendable es migrar el codigo que has dado a un datareport, debes hacerlo desde cero, como ya tienes los modelos ya sabes exactamente que hacer.
  #5 (permalink)  
Antiguo 11/07/2009, 15:42
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Apoyo con un programa en VB6

He estado trabajado ultimamente sobre todo el código (otra vez) y ya logré algo. Como al inicio, todo me lleva de regreso al módulo de impresión. Lo he modificado y quedo de la siguiente manera:

Módulo de impresión:

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 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
          
End Sub
Módulo para crear archivo de texto:

Código:
Private Sub CrearArchivoTextoImpresion(texto As String)
    Dim n As Integer
    On Local Error Resume Next
    
    Kill App.Path & "\temp.tmp"
    If Err Then Err.Clear
    n = FreeFile
    Open App.Path & "\temp.tmp" For Binary As n
        Put #n, , texto
    Close
    If Err Then
        Debug.Print Err.Number, Err.Description
        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
End Sub
Ahora les explicó como funcionó y que falta:

1. Al ejecutar el programa y mandar una impresión, abre una ventana de vista previa del ticket,
2. Se genera un archivo de texto temporal, el cual se guarda en una carpeta (Si lo hace, si funciona),
3. En la vista previa hay un botón de impresión, se le da click,
4. Abre un enlace a MS-DOS y lo cierra inmediatamente (el archivo queda cargado)
5. La impresión queda cargada en un archivo por lotes *.bat

Aquí emíeza lo interesante: Al parecer no se imprime el ticket, no lo manda directamente a la impresora, pero queda cargado en el archivo *.bat, si yo le doy doble click a ese archivo, manda la impresión como debe ser, pero esto sólo desde la carpeta donde esta guardado.

El problema que veo es que no se imprime directamente, solo queda cargado, viendo el código, alguien sabe que me está fallando todavía, ¿alguién podría ayudarme con esto?

De antemano les agradezco su ayuda. Saludos.
  #6 (permalink)  
Antiguo 13/07/2009, 14:05
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Apoyo con un programa en VB6

Sólo para compensar un poco la ayuda que he recibido

Después de pasar un fin de semana de locos buscando la solución a esto, por fin lo logré, les pongo aquí el código final para aquél que desee emplearlo.

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

        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
        Printer.Print Texto
        Printer.EndDoc
        
        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
         
End Sub
Para los que no lo hayan notado, solo coloqué la siguiente instrucción:

Código:
Debug.Print "len del texto a imprimir: "; Len(Texto)
        CrearArchivoTextoImpresion Texto
        Printer.Print Texto
        Printer.EndDoc
Con eso, el sistema ya imprime facturas, notas, tickets y reportes para la tienda de autoservicio y no depende de una sola impresora ni de un sólo sistema operativo.

Saludos y gracias a todos los que me apoyaron
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:34.