Hola, amigos, espero que estén todos bien de salud.
Iba a escribir esta pregunta en el foro "principal", pero tras haberla traducido al inglés (con el google translator y el deepl), creo que no se entendía bien, así que mejor me explico en español.
Tengo una aplicación típica de ventas que cuando se termina de hacer una factura/albarán/pedido/etc. pregunta si quiere imprimirla (siempre por bluetooth), y funciona bien.
Estoy usando el código de este otro hilo.
Ùltimamente le he añadido la funcionalidad de imprimir también recibos de cobros, y ahí empezó el problema, me explico:
El usuario selecciona "ventas", escoge el cliente, el programa le avisa de que debe dinero de otras ventas anteriores, entonces desde esa activity "ventas" se abre la activity "cobros", ahí se cobra y pregunta si quiere imprimir un recibo del cobro para entregar al cliente.
Una vez terminado el cobro, se cierra la activity "cobros" y regresa a la de "ventas", hace la factura/albarán/etc. y la imprime, bueno, lo intenta, porque ahí está el problema.
Si se abre "cobros" entonces se puede imprimir tantos recibos como se quiera.
Si se abre "ventas" entonces se puede imprimir tantos facturas/albaranes/etc. como se quiera.
El problema es cuando va de ventas a cobros, y de cobros a ventas. Se pierde la conexión con la impresora, si se intenta conectar salta una excepción, si la cierro antes salta excepción, si no la cierro para abrirla tampoco funciona, etc. etc. etc. muchos problemas que no sé "por dónde cogerlos" ("asir" para los argentinos ).
He intentado muchas cosas, he declarado compartida las variables para todas las activity, luego las he puesto privadas para cada activity por separado, he creado conexiones "para todos", y luego para cada activity por separado, etc.
No sé si tenéis hecho algo similar, o sea, poder imprimir desde disstintas activity que se llaman unas a otras, imprimir una factura en "ventas", enlazar a "cobros" e imprimir un recibo, volver a "ventas" e imprimir un albarán, etc. etc. etc.
Gracias, y perdón por el mogollón que he soltado
El código, básicamente es el del hilo que he indicado antes, lo pego aquí:
Iba a escribir esta pregunta en el foro "principal", pero tras haberla traducido al inglés (con el google translator y el deepl), creo que no se entendía bien, así que mejor me explico en español.
Tengo una aplicación típica de ventas que cuando se termina de hacer una factura/albarán/pedido/etc. pregunta si quiere imprimirla (siempre por bluetooth), y funciona bien.
Estoy usando el código de este otro hilo.
Ùltimamente le he añadido la funcionalidad de imprimir también recibos de cobros, y ahí empezó el problema, me explico:
El usuario selecciona "ventas", escoge el cliente, el programa le avisa de que debe dinero de otras ventas anteriores, entonces desde esa activity "ventas" se abre la activity "cobros", ahí se cobra y pregunta si quiere imprimir un recibo del cobro para entregar al cliente.
Una vez terminado el cobro, se cierra la activity "cobros" y regresa a la de "ventas", hace la factura/albarán/etc. y la imprime, bueno, lo intenta, porque ahí está el problema.
Si se abre "cobros" entonces se puede imprimir tantos recibos como se quiera.
Si se abre "ventas" entonces se puede imprimir tantos facturas/albaranes/etc. como se quiera.
El problema es cuando va de ventas a cobros, y de cobros a ventas. Se pierde la conexión con la impresora, si se intenta conectar salta una excepción, si la cierro antes salta excepción, si no la cierro para abrirla tampoco funciona, etc. etc. etc. muchos problemas que no sé "por dónde cogerlos" ("asir" para los argentinos ).
He intentado muchas cosas, he declarado compartida las variables para todas las activity, luego las he puesto privadas para cada activity por separado, he creado conexiones "para todos", y luego para cada activity por separado, etc.
No sé si tenéis hecho algo similar, o sea, poder imprimir desde disstintas activity que se llaman unas a otras, imprimir una factura en "ventas", enlazar a "cobros" e imprimir un recibo, volver a "ventas" e imprimir un albarán, etc. etc. etc.
Gracias, y perdón por el mogollón que he soltado
El código, básicamente es el del hilo que he indicado antes, lo pego aquí:
B4X:
#Region Module Attributes
#FullScreen: False
#IncludeTitle: True
#ApplicationLabel: Bluetooth POS Printing
#VersionCode: 1
#VersionName:
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False
#End Region
Sub Process_Globals
Dim PrintBuffer As String
Dim BtAdmin As BluetoothAdmin
Dim BTConnection As Serial
Dim Printer As TextWriter
End Sub
Sub Globals
End Sub
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
BtAdmin.Initialize("BlueTooth")
BTConnection.Initialize("Printer")
Dim PairedDevices As Map
PairedDevices = BTConnection.GetPairedDevices
Dim l As List
Dim DeviceName, MacAddress As String
l.Initialize
For i = 0 To PairedDevices.Size - 1 'Check all devices
l.Add(PairedDevices.GetKeyAt(i))
DeviceName=PairedDevices.Getkeyat(i)
MacAddress=PairedDevices.GetValueAt(i)
Log(DeviceName & " -> " & MacAddress)
If DeviceName.Contains("Thermal") Then 'Insert the BT-Name of the printer or use the MAC address
Exit
End If
Next
BTConnection.Connect(MacAddress)
End If
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause
End Sub
Sub Printer_Connected (Success As Boolean)
If Success Then
Printer.Initialize2(BTConnection.OutputStream,"windows-1252") 'important to print f.e. German/French chars
PrintBuffer=Chr(27)&"t"&Chr(16)&"Hello öäüßéèê" 'Set codepage 1252
Printer.WriteLine(PrintBuffer)
Printer.Flush
Msgbox("Printed!","")
Printer.Close
BTConnection.Disconnect 'disable this if you like
Else
Msgbox("No printer found...","Print error")
End If
End Sub