kracol Posted October 13, 2012 Report Share Posted October 13, 2012 Hola, estoy desarrollando una aplicacion en vb.net pero tengo unos problemas. Quiero imprimir una boleta con el codigo de ejemplo de epson que es este: Me.epson.AddDataField(Chr(&HA) + Chr(&H1)) Me.epson.AddDataField(Chr(&H0) + Chr(&H0)) ' Número del Logotipo Me.epson.AddDataField("") ' Resolucion del logo Me.epson.AddDataField("") Me.epson.SendCommand() While epson.State = EFP_S_Busy DoEvents() End While Me.epson.AddDataField(Chr(&HA) + Chr(&H2)) Me.epson.AddDataField(Chr(&H0) + Chr(&H0)) Me.epson.AddDataField("") Me.epson.AddDataField("") Me.epson.AddDataField("") Me.epson.AddDataField("") Me.epson.AddDataField("") Me.epson.AddDataField("Fotografia Stand 3ro.A") Me.epson.AddDataField("10000") Me.epson.AddDataField("8000000") Me.epson.AddDataField("1900") Me.epson.SendCommand() While epson.State = EFP_S_Busy DoEvents() End While ' PAGO Me.epson.AddDataField(Chr(&HA) + Chr(&H5)) Me.epson.AddDataField(Chr(&H0) + Chr(&H0)) Me.epson.AddDataField("1") Me.epson.AddDataField("800") Me.epson.SendCommand() While epson.State = EFP_S_Busy DoEvents() End While 'Cerrar Boleta Me.epson.AddDataField(Chr(&HA) & Chr(&H6)) If Check_autocorte = 1 Then Me.epson.AddDataField(Chr(&H0) & Chr(&H1)) Else Me.epson.AddDataField(Chr(&H0) & Chr(&H0)) End If Me.epson.AddDataField("3") Me.epson.AddDataField("Gracias por su compra") Me.epson.AddDataField("") Me.epson.AddDataField("") Me.epson.AddDataField("") Me.epson.AddDataField("") Me.epson.SendCommand() While epson.State = EFP_S_Busy DoEvents() End While el problema es en : While epson.State = EFP_S_Busy DoEvents() End While y en If Check_autocorte = 1 Then Me.epson.AddDataField(Chr(&H0) & Chr(&H1)) Else Me.epson.AddDataField(Chr(&H0) & Chr(&H0)) End If Estos codigos funcionan en vb6 pero en vb.net no los reconoce. Ayudaa por favor Link to comment Share on other sites More sharing options...
susodicho Posted October 14, 2012 Report Share Posted October 14, 2012 (edited) El DoEvents() cámbialo por Application.DoEvents() (además deberías agregarle un Thread.Sleep de unos pocos milisegundos dentro del ciclo While)El código de ejemplo que estás usando ¿es para VB.NET o para VB6?No me queda claro a qué te refieres cuando dices que los códigos te funcionan en VB6, pero no en VB.NET.¿Te refieres a los códigos que estás pasando a la impresora o te refieres al código fuente? ¿Has probado algo más simple que te indique que puedes usar la impresora usando .NET? ¿Reconoce algún comando enviado desde una aplicación .NET?En algunas partes usas el operador + y en otras el & para unir los comandos.He visto en otros ejemplos por ahí que los comandos se pasan de otra manera a la impresora (creo que usan otros métodos, pero no AddDataField ni SendCommand como lo estás haciendo tú). Así que no estoy seguro si estás haciendo una "traducción directa" de VB6 a VB.NET o si has leído documentación actual de la impresora (actualizada para .NET). Edited October 14, 2012 by susodicho Link to comment Share on other sites More sharing options...
kracol Posted October 14, 2012 Author Report Share Posted October 14, 2012 Hola, estoy pasando de vb6 a vb.net El programa en vb.net imprimie el encabezado sin problemas pero a la hora de imprimir un producto no lo hace y el error es aca While epson.State = EFP_S_Busy DoEvents() End While No reconoce el comando epson.State = EFP_S_Busy el cual en vb6 lo reconoce sin problemas Ayuda please Link to comment Share on other sites More sharing options...
susodicho Posted October 14, 2012 Report Share Posted October 14, 2012 Lo primero, trata de ser más específica, o sea, dices que no lo reconoce, pero ¿cuál es exactamente el problema?:No compila (especifica el error que manda)Ocurre una excepción (qué excepción)Se queda pegadoEl programa se ejecuta y termina normalmente, pero no realiza la acción que tú quieres que haga Lo otro, si no reconoce el EFP_S_Busy (que no es un comando) y dices que en VB6 funciona sin problemas, entonces puede que la constante EFP_S_Busy no esté definida. Si fuese así, entonces bastaría con que lo ejecutes y/o depures en VB6 para ver el valor de ésta. En alguna parte debe estar definida esta constante (en algún archivo *.BAS ó *.INC). Yo te recomendaría que busques qué valor tiene dicha constante (asumo que es un entero), podrías modificar algún programa en VB6 para que muestre su valor.En todo caso, parece que EFP_S_Busy vale 2, pero deberías asegurarte que sea así para la impresora que estás usando. Además te dije que cambiaras el DoEvents() por Application.DoEvents() ;)Escríbelo así: While epson.State = EFP_S_Busy Application.DoEvents() Thread.Sleep(20) End While Ojo, estoy asumiendo que estás desarrollando una aplicación Windows Forms. Link to comment Share on other sites More sharing options...
kracol Posted October 15, 2012 Author Report Share Posted October 15, 2012 Hola, no compila, me dice que epson.state es un tipo y no puede ser usado como un expresion. Te mando unas capturas http://dl.dropbox.co...9/pantalla1.JPGhttp://dl.dropbox.co...9/pantalla2.JPGhttp://dl.dropbox.co...9/pantalla3.JPG Link to comment Share on other sites More sharing options...
susodicho Posted October 16, 2012 Report Share Posted October 16, 2012 Intenta de esta forma:While epson.CtlState = TxFiscalState.EFP_S_Busy Application.DoEvents() Thread.Sleep(20) End While IMPORTANTE: Cada vez que llames a SendCommand tienes que hacer lo mismo. O sea, tienes que esperar hasta que el comando haya terminado de ejecutarse, para eso usas ciclo While que se ejecuta hasta que la bandera de estado indica que la impresora ya no está ocupada (Busy). El Thread.Sleep es para darle algo de tiempo para que realice su trabajo. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now