bueno, vamos a profundizar un poco más en el código y algunos aspectos, veamos,
La aplicación, va asociada o "conectada", a un pc principal con otro programa digamos TPV (terminal punto de venta) con pantalla táctil, pero existe también la versión sin pc central. Con el TPV, la aplicación en su arranque realiza una conexión de prueba con el servidor, avisando en caso de fallo,

si la conexión es buena, o sea ha contestado el servidor entraremos en la aplicación, decir que la primera entrada la debemos configurar, con un código de acceso, "111666", es un ej, pues se puede variar

y accedemos a la configuración del pda y conexión,

En la casilla PDA1, ahà podemos configurar el nombre de nuestro dispositivo, evidentemente el programa está preparado, para varios dispositivos a la vez numerados como nosotros veamos, Cam1 - Cam2 ..., escogemos la ruta vemos que pone \BarpasPocket\ esa es una ruta wifi configurada real en un pc, conectado por esta via, podrÃa ser, c:\pruebas\, en esta ruta se crean y copian los ficheros necesarios, digamos que si ponermos Cam1, y damos "ok" nos creara la siguiente ruta:
\pruebas\Cam1
\cobrar - para el módulo de cobros, si no lleva TPV
\imprimir - aquà guardamo en formato *.txt - para la lectura via wifi, al TPV (1)
\leer - el PDa, lee del terminal TPV, digamos que avisamo de alguna cuestión TPV-PDA
\mesas - igual que leer pero para el control de las mesas, existentes
\ultimo - en esta carpeta más importante, realiza el TPV, la lectura, por si ha habido algún tipo de modificación en (nueva mesa), (nuevo ArtÃculo), asà desde el TPV, actualizamos datos y en la primera conexión el PDA, actualiza sus datos.
(1), este serÃa el formato,
3B*ELENA*REFRESCOS*-1-124=3-17*WEBING*19
3B*ELENA*REFRESCOS*-1-124=3-17*WEBING*20
3B*ELENA*CERVEZAS*-1-127=1-3*WEBING*21
3B*ELENA*REFRESCOS*-1-124=3-17*WEBING*22
3B*ELENA*GINEBRA*-1-128=4-23+11-121*WEBING*24
3B*ELENA*VODKA*-1-126=2-14+11-119*WEBING*26
3B*ELENA*GINEBRA*-1-128=4-21+11-118*WEBING*28
además en el raÃz de la aplicación, digamos en \PRUEBAS\ sin entrar en ningún nombre o carpeta de PDA la aplicacion ha creado 5 ficheros *.txt básicos para la lectura y actualización, donde lee en cada conexión.
bueno, comprendido esto veamos un poco de código,
On Error Resume Next
Err.Number = CInt(0)
#If APPFORGE Then
database = "\BarPasPocket\pasqui.cdb"
datasi = "\Windows\si.cdb"
#Else
database = "c:\BarPasPocket\mdb\pasqui.mdb"
datasi = "c:\BarPasPocket\mdb\si.mdb"
#End If
'CREAMOS LAS CARPETAS
Set pasdire = pasfiche.OpenDirectory(rutapda, True)
Set pasdire = pasfiche.OpenDirectory(rutapda & "\" & CStr("imprimir"), True)
Set pasdire = pasfiche.OpenDirectory(rutapda & "\" & CStr("cobrar"), True)
Set pasdire = pasfiche.OpenDirectory(rutapda & "\" & CStr("leer"), True)
Set pasdire = pasfiche.OpenDirectory(rutapda & "\" & CStr("ultimo"), True)
Set pasdire = pasfiche.OpenDirectory(rutapda & "\" & CStr("mesas"), True)
'CREAMOS LAS CARPETAS
'EJEMPLO DE FICHERO
Set pcUarticulos = pasfiche.OpenAsText(rutaultimo & "\Uarticulos" & ".txt", afFileModeCreate)
Set pcUarticulos = Nothing
'EJEMPLO DE FICHERO
una vez que se realiza la conexión correctamente nos cargarÃa en la ruta, los usuarios,

decir que según el nivel de acceso le hayamos dado al cliente podremos realizar según que cosas en el programa, por ej. miren esto,
YOLI~1~1~1~WEBING~
ELENA~1~1~1~WEBING~
EMILIO~1~1~0~WEBING~
MANUEL~1~1~0~WEBING~
RAUL~1~1~1~WEBING~
el camarero, Yoli, tiene nivel 1 y el camarero Manuel y Emilio nivel 0 quiere decir que unos el
nivel 1 verá esto al entrar

las mesas, que como verán se pueden configurar más de una pantalla,

y con el nivel 0 verÃan esto:

muchas más opciones de programa, aquà por ej, podemos ver la opción de
cuentas, decir que con la versión PDA y TPV, estas opciones no son necesarias pues el control de cobros y demás se harÃa desde el TPV, bien, si entramos en cuentas, veamos la entrada en el código,
OpeningasDatabase
OpenmesasDatabase
cuentas.Show
Unload principal
vemos que hacemos una llamada y abrimos dos tablas, "ingas" y "mesas", veamos el código de la tabla "ingas", realmente llamamos a un módulo,
declaración de los campos
Global tningas As tingasrecord
Option Explicit
Public Enum tingasDatabaseFields
cingfecha = 0
cingdescri = 1
cingingreso = 2
cinggasto = 3
cingingas = 4
cingciudad = 5
cingusuario = 6
cingmesa = 7
cingtarifa = 8
cinghora = 9
cingid = 10
End Enum
Public Type tingasrecord
cingfecha As Date
cingdescri As String
cingingreso As Double
cinggasto As Double
cingingas As Boolean
cingciudad As String
cingusuario As String
cingmesa As String
cingtarifa As String
cinghora As Date
cingid As Long
End Type
conexion
Public conn As AFDatabaseLib.IConnection
abrimos
Public Sub OpeningasDatabase()
On Error GoTo DBOpenError
Dim iMsgBoxResult As Integer
Set mgr = New AFDatabaseLib.CDBAccessManager
Set conn = mgr.OpenConnection("CEDB", database)
Set tingas = conn.OpenTable(cingas)
tingas.MoveFirst
Exit Sub
DBOpenError:
#If APPFORGE Then
If Err.Number = -2147206501 Then
MsgBox "No existe la *cdb, base de datos,", vbOKOnly
If iMsgBoxResult = vbYes Then
Else
MsgBox "Aplicación cerrada", vbOKOnly
End
End If
End If
#End If
End Sub
y vemos,

aquà podemos hacer cierres diarios y ver diferentes consultas respecto a los totales y las mesas,
volviendo a las mesas, cuando seleccionamos una que esté en verde, quiere decir que está libre, accedemos a la mesa,
los colores
Sub nmesa_Click(Index As Integer)
If nmesa(Index).BackColor = &H80C0FF Then
nmesa(Index).BackColor = &H8080FF
mesa(Index).BackColor = &H8080FF
End If
mesa_Click (Index)
End Sub
un poco de código amplio del acceso a una mesa donde se verá si está ocupada si tiene algún pedido etc,
Sub mesa_Click(Index As Integer)
totalnota = 0
lamesa = mesa(Index).Caption
'añaerror "SELECCION DE MESA: " & CStr(lamesa)
If mesa(CLng(lamesa)).BackColor = &H80FF80 Then
sitiene = 0
Else
sitiene = 1
End If
nomtarifa = "NO"
tmesas.MoveFirst
For I = 1 To tmesas.RecordCount
If tmesas.FieldAsString(1) = ciudad And tmesas.FieldAsLong(0) = CLng(lamesa) Then
If mesa(CLng(lamesa)).BackColor = &H80FF80 Then
lafecha = Date 'tmesas.FieldAsDate(5)
lahora = Time 'tmesas.FieldAsDate(4)
lamesajr = tmesas.FieldAsString(9)
I = tmesas.RecordCount
tmesas.MoveNext
Else
nomtarifa = tmesas.FieldAsString(6)
lafecha = tmesas.FieldAsDate(5)
lahora = tmesas.FieldAsDate(4)
lamesajr = tmesas.FieldAsString(9)
tmesas.MoveNext
End If
Else
tmesas.MoveNext
End If
Next
If Sintarifa.Value = afCheckBoxValueUnchecked Then
'miramos si hay tarifas
If nomtarifa = "NO" Then
If ttarifa.RecordCount > 0 Then
Lista.Visible = True
Ltarifa.Visible = True
Otarifa.Visible = True
ElseIf ttarifa.RecordCount = 0 Then
'OpenserviciosDatabase
'OpenarticuDatabase
'OpeningasDatabase
servmesa.Caption = "MESA: " & lamesajr
servmesa.Show
Unload servicios
End If
ElseIf nomtarifa <> "NO" Then
ttarifa.MoveFirst
busco = ttarifa.FindString(CLng(0), CStr(nomtarifa), afDBFindEqual)
If busco = True Then
nomtarifa = ttarifa.FieldAsString(0)
latarifa = ttarifa.FieldAsDouble(1)
End If
'OpenserviciosDatabase
'OpenarticuDatabase
'OpeningasDatabase
servmesa.Caption = lamesajr & "-" & nomtarifa
servmesa.Show
Unload servicios
End If
'miramos si hay tarifas
ElseIf Sintarifa.Value = afCheckBoxValueChecked Then
latarifa = CDbl(0)
nomtarifa = "NO"
'OpenserviciosDatabase
'OpenarticuDatabase
'OpeningasDatabase
servmesa.Caption = lamesajr
servmesa.Show
Unload servicios
End If
End Sub
una vez vamos seleccionando los diferentes pedidos, según tenemos configurado, si pulsamos a salir nos aparece una pregunta como esta

"enviar nota", nos dice si queremos enviar al TPV, la nota realizada para que aparezca en la pantalla del terminal, servidor,
un poco de código, no explicaré de momento solo vean y pregunten
iMsgBoxResult = MsgBox("¿ENVIAR NOTA?", vbYesNo) 'Show the message
lascomprobaciones = CInt(2)
tlincombi.Close
OpenlincombiDatabase
tlincombi.MoveLast
tlincombi.MoveFirst
On Error Resume Next
Err.Number = CInt(0)
'MsgBox Err.Number
If iMsgBoxResult = 6 Then
Set paswri = pasfiche.OpenAsText(rutaimprimir & "\" & CStr(vtridnota) & ".txt", afFileModeCreate)
'MsgBox rutaimprimir
'MsgBox Err.Number
If Err.Number = CInt(0) Or Err.Number = CInt(91) Then
'MIRAMOS SI TIENE COMBINADO
tlincombi.MoveFirst
For I = CInt(1) To tlincombi.RecordCount
If tlincombi.FieldAsString(0) = lamesajr Then
'AQUI COMPROBAMOS SI SE HA IMPRESO EN NOTAMESA
'MsgBox tlincombi.FieldAsLong(9)
If tlincombi.FieldAsBoolean(10) = False Then
If tlincombi.FieldAsString(3) <> CStr("NO") And tlincombi.FieldAsString(4) = CStr("NO") And tlincombi.FieldAsString(5) = CStr("NO") And tlincombi.FieldAsString(6) = CStr("NO") And tlincombi.FieldAsString(7) = CStr("NO") Then
paswri.WriteLine (lamesajr & CStr("*") & usu & CStr("*") & tlincombi.FieldAsString(2) & CStr("*") & tlincombi.FieldAsString(3) & CStr("*") & ciudad & CStr("*") & tlincombi.FieldAsLong(9))
fichecero = CInt(1)
ElseIf tlincombi.FieldAsString(4) <> CStr("NO") And tlincombi.FieldAsString(5) = CStr("NO") And tlincombi.FieldAsString(6) = CStr("NO") And tlincombi.FieldAsString(7) = CStr("NO") Then
paswri.WriteLine (lamesajr & CStr("*") & usu & CStr("*") & tlincombi.FieldAsString(2) & CStr("*") & tlincombi.FieldAsString(3) & CStr("=") & tlincombi.FieldAsString(4) & CStr("*") & ciudad & CStr("*") & tlincombi.FieldAsLong(9))
fichecero = CInt(1)
ElseIf tlincombi.FieldAsString(4) <> CStr("NO") And tlincombi.FieldAsString(5) <> CStr("NO") And tlincombi.FieldAsString(6) = CStr("NO") And tlincombi.FieldAsString(7) = CStr("NO") Then
paswri.WriteLine (lamesajr & CStr("*") & usu & CStr("*") & tlincombi.FieldAsString(2) & CStr("*") & tlincombi.FieldAsString(3) & CStr("=") & tlincombi.FieldAsString(4) & CStr("+") & tlincombi.FieldAsString(5) & CStr("*") & ciudad & CStr("*") & tlincombi.FieldAsLong(9))
fichecero = CInt(1)
ElseIf tlincombi.FieldAsString(4) <> CStr("NO") And tlincombi.FieldAsString(5) <> CStr("NO") And tlincombi.FieldAsString(6) <> CStr("NO") And tlincombi.FieldAsString(7) = CStr("NO") Then
paswri.WriteLine (lamesajr & CStr("*") & usu & CStr("*") & tlincombi.FieldAsString(2) & CStr("*") & tlincombi.FieldAsString(3) & CStr("=") & tlincombi.FieldAsString(4) & CStr("+") & tlincombi.FieldAsString(5) & CStr("+") & tlincombi.FieldAsString(6) & CStr("*") & ciudad & CStr("*") & tlincombi.FieldAsLong(9))
fichecero = CInt(1)
End If
'guardalincombi
'cambialincombi
'tlincombi.MoveNext
'ElseIf sehaimpreso = CInt(1) Then
ElseIf tlincombi.FieldAsBoolean(10) = True Then
If tlincombi.FieldAsString(3) <> CStr("NO") And tlincombi.FieldAsString(4) = CStr("NO") And tlincombi.FieldAsString(5) = CStr("NO") And tlincombi.FieldAsString(6) = CStr("NO") And tlincombi.FieldAsString(7) = CStr("NO") Then
paswri.WriteLine (CStr("*") & lamesajr & CStr("*") & usu & CStr("*") & tlincombi.FieldAsString(2) & CStr("*") & tlincombi.FieldAsString(3) & CStr("*") & ciudad & CStr("*") & tlincombi.FieldAsLong(9))
fichecero = CInt(1)
ElseIf tlincombi.FieldAsString(4) <> CStr("NO") And tlincombi.FieldAsString(5) = CStr("NO") And tlincombi.FieldAsString(6) = CStr("NO") And tlincombi.FieldAsString(7) = CStr("NO") Then
paswri.WriteLine (CStr("*") & lamesajr & CStr("*") & usu & CStr("*") & tlincombi.FieldAsString(2) & CStr("*") & tlincombi.FieldAsString(3) & CStr("=") & tlincombi.FieldAsString(4) & CStr("*") & ciudad & CStr("*") & tlincombi.FieldAsLong(9))
fichecero = CInt(1)
ElseIf tlincombi.FieldAsString(4) <> CStr("NO") And tlincombi.FieldAsString(5) <> CStr("NO") And tlincombi.FieldAsString(6) = CStr("NO") And tlincombi.FieldAsString(7) = CStr("NO") Then
paswri.WriteLine (CStr("*") & lamesajr & CStr("*") & usu & CStr("*") & tlincombi.FieldAsString(2) & CStr("*") & tlincombi.FieldAsString(3) & CStr("=") & tlincombi.FieldAsString(4) & CStr("+") & tlincombi.FieldAsString(5) & CStr("*") & ciudad & CStr("*") & tlincombi.FieldAsLong(9))
fichecero = CInt(1)
ElseIf tlincombi.FieldAsString(4) <> CStr("NO") And tlincombi.FieldAsString(5) <> CStr("NO") And tlincombi.FieldAsString(6) <> CStr("NO") And tlincombi.FieldAsString(7) = CStr("NO") Then
paswri.WriteLine (CStr("*") & lamesajr & CStr("*") & usu & CStr("*") & tlincombi.FieldAsString(2) & CStr("*") & tlincombi.FieldAsString(3) & CStr("=") & tlincombi.FieldAsString(4) & CStr("+") & tlincombi.FieldAsString(5) & CStr("+") & tlincombi.FieldAsString(6) & CStr("*") & ciudad & CStr("*") & tlincombi.FieldAsLong(9))
fichecero = CInt(1)
End If
End If
guardalincombi
cambialincombi
tlincombi.MoveNext
ElseIf tlincombi.FieldAsString(0) <> lamesajr Then
tlincombi.MoveNext
End If
Next
'MIRAMOS SI TIENE COMBINADO
tnotamesa.MoveFirst
For I = 1 To tnotamesa.RecordCount
guardadatos
cambianota
tnotamesa.MoveNext
Next
If fichecero = CInt(0) Then
paswri.WriteLine (CStr("*") & lamesajr & CStr("*") & usu & CStr("*") & ciudad)
End If
tmesas.MoveFirst
For I = 1 To tmesas.RecordCount
If tmesas.FieldAsLong(0) = CLng(lamesa) And tmesas.FieldAsString(1) = ciudad Then
vtridmesas = tmesas.FieldAsLong(7)
If fichecero <> CInt(0) Then
modiimprimir
Else
desocupada
End If
tmesas.MoveNext
Else
tmesas.MoveNext
End If
Next
Set paswri = Nothing
Err.Clear
mesayaconecta
Else
MsgBox CStr("No hay CONEXION"), vbInformation
mesasconecta
'servicios.nmesa(1).BackColor = &H80C0FF
'mesanaranja = CInt(Labmesa.Caption)
Set paswri = Nothing
Err.Clear
End If
'HASTA AQUI LLEGA EL SI DEL ENVIO
bueno, decir que podemos evidentemente borrar alguna anotación,

evidentemente se borrará u actualizará en el TPV,
esto es todo de momento ya me dirán que les parece,
saludos,