none
1URGENTE¡, SerialPort, Perdida de Información al Mandar a Imprimir VB.NET 2005 RRS feed

  • Pregunta

  • Hola a Todos, estoY desarrollando una aplicacion Movil en VB.NET 2005 LA APLICACION ES SIMPLE solo se conecta via a Blutoohth a un Puerto(el de la impresora), y manda a imprimir pero cuando mando a imprimir la cadena con la informacion de las facturas se pierden los datos, ejemplo:

            Dim sResultado As String = String.Empty
                    Static Fila As Integer = 0
                    For Each r As DataRow In data.Rows
                        Dim cadena As String = r("DATA")
                       
                        sResultado = sResultado + Chr(27) + Chr(119) + "B" + cadena + Chr(13)
                                  Next
                 
    
                  
                    pCOM.Write(sResultado)
                 

    Ese es el codigo q utilizo para mandar a imprimir pero solo imprime 2 paginas en la 3 pagina se pierden los datos e intentado aumentando la memoria del buffer pero nada 

     Me.pCOM.DiscardNull = False
                pCOM.ReadBufferSize = 9024
                pCOM.WriteBufferSize = 9024
                pCOM.WriteTimeout = -1
    Alguna idea o solución que me puedan brindar.


    jeferson

    lunes, 2 de marzo de 2015 22:41

Respuestas

  • Respondiendome yo mismo, 

    Uso una impresora Matricial DATAMAX O´Neil vmp2000  que solo acepta 4576 caracteres por cada vez que llamamos al metodo WRITE del SerialPort,

    por lo cual tuve que dividir el contenido en caso de que supere el máximo permitido, y con un Sleep de 30000 ms

    para que termine de imprimir la primera parte y seguidamente se imprime la segunda parte.

      ' DONDE sResultado es la variable que contiene la informacion a Imprimir
                    Dim LON As Integer = sResultado.Length
                    'Limpiamos el Buffer
    SALTO:
                    pCOM.DiscardOutBuffer()
                    pCOM.DiscardInBuffer()
                    'LA IMPRESORA ACEPTA 4576 CARACTERES POR ESCRITURA
                    'EN OTRAS PALABRAS CADA VEZ QUE LLAMAMOS AL METODO WRITE DEL SERIAL PORT
                    'SOLO IMPRIMIRA LOS PRIMEROS 4576 CARACTERES ES POR ESO QUE SE PIERDE EL RESTO DEL
                    'CONTENIDO
                    If LON >= 4576 Then
                        Dim strPart1 As String = Mid(sResultado, 1, 4576)
                        Dim strPart2 As String = Mid(sResultado, 4577, sResultado.Length - 4577)
                        Me.pCOM.Write(strPart1)
                        System.Threading.Thread.Sleep(30000)
                        sResultado = strPart2 + Chr(13)
                        LON = strPart2.Length
                        GoTo SALTO
                    Else
                        Me.pCOM.Write(sResultado)
                    End If


    jeferson

    • Marcado como respuesta Jeferson014 martes, 3 de marzo de 2015 20:43
    martes, 3 de marzo de 2015 20:43

Todas las respuestas

  • Respondiendome yo mismo, 

    Uso una impresora Matricial DATAMAX O´Neil vmp2000  que solo acepta 4576 caracteres por cada vez que llamamos al metodo WRITE del SerialPort,

    por lo cual tuve que dividir el contenido en caso de que supere el máximo permitido, y con un Sleep de 30000 ms

    para que termine de imprimir la primera parte y seguidamente se imprime la segunda parte.

      ' DONDE sResultado es la variable que contiene la informacion a Imprimir
                    Dim LON As Integer = sResultado.Length
                    'Limpiamos el Buffer
    SALTO:
                    pCOM.DiscardOutBuffer()
                    pCOM.DiscardInBuffer()
                    'LA IMPRESORA ACEPTA 4576 CARACTERES POR ESCRITURA
                    'EN OTRAS PALABRAS CADA VEZ QUE LLAMAMOS AL METODO WRITE DEL SERIAL PORT
                    'SOLO IMPRIMIRA LOS PRIMEROS 4576 CARACTERES ES POR ESO QUE SE PIERDE EL RESTO DEL
                    'CONTENIDO
                    If LON >= 4576 Then
                        Dim strPart1 As String = Mid(sResultado, 1, 4576)
                        Dim strPart2 As String = Mid(sResultado, 4577, sResultado.Length - 4577)
                        Me.pCOM.Write(strPart1)
                        System.Threading.Thread.Sleep(30000)
                        sResultado = strPart2 + Chr(13)
                        LON = strPart2.Length
                        GoTo SALTO
                    Else
                        Me.pCOM.Write(sResultado)
                    End If


    jeferson

    • Marcado como respuesta Jeferson014 martes, 3 de marzo de 2015 20:43
    martes, 3 de marzo de 2015 20:43
  • Buenas:

    ¿Hay alguna manera que no sea 4576 con Preview Visual 2015 o el 2013?

    Saludos.


    http://electronica-pic.blogspot.com

    sábado, 7 de marzo de 2015 0:33