Hola!
Por que no haces un numero combinado con la terminal? Así cada terminal tendrá su propia numeración:
Para la terminal 1 las secuencias:
• T1-0001
• T1-0002
• T1-0003
...
...
• T1-004
Para la terminal 2 las secuencias:
• T2-0001
• T2-0002
• T2-0003
...
...
• T2-004
Y así sucesivamente...
Una forma para números no repetidos, es una combinación de la fecha y la hora, así:
• YYMMDDHHMMSS = 120514135625
El código seria
Código vb:
Ver originalNumero=Format(DateValue(Date), "YYMMDD") _
& Replace(Replace(UCase(Replace(TimeValue(Time), ":", "")), "AM", ""), "PM", "")
Pero de esta forma no seran correlativos por los minutos y segundos...
O tambien puedes poner un bloqueo en la aplicacion al momento de guardar la transaccion, mientras esta bloqueado, que se muestre el relog de arena o alguna información en un Label y cuando se termine de guardar se desbloquee esa transaccion y asi se continua con la otra que estaba en cola... Con un Timer que verifique el estado de la transaccion en una tabla (si se esta guardando o no) se resuelve... algo asi:
Código vb:
Ver originalPrivate Sub Timer_Timer()
'CON LAS PROPIEDADES DEL TIMER ENABLED=TRUE
'Y CON UN INTERVALO DE 1000 (QUE ES 1 SEGUNDO)
Dim strSelect As String, strInsert As String
Dim rstEstado As ADODB.Recordset
Set rstEstado = New ADODB.Recordset
strSelect = "SELECT * FROM ESTADO"
rstEstado.Source = strSelect
rstEstado.Open , Conexion, adOpenDynamic, adLockBatchOptimistic
'CONSULTA EL ESTADO, SI SE ESTA GUARDANDO O NO
'DEBES INSERTAR UN LABEL CON EL NOMBRE= lblInformacion
If rstEstado.EOF = False Then
lblInformacion.Caption= "Espere un momento..."
'LIBERAMOS EL RECORDSET
If rstEstado.State=1 then rstEstado.Close
Set rstEstado=Nothing
Exit Sub
End If
'SI NO HAY DATOS GUARDÁNDOSE EN LA TABLA, ENTONCES
'SE INSERTA ESTADO DE LA CARGA EN LA BD
'DEBES CREAR UNA TABLA LLAMADA "ESTADO" CON LOS CAMPOS "FECHA" Y "ESTADO", AMBOS TIPO VARCHAR
strInsert = "INSERT INTO ESTADO (FECHA, ESTADO) VALUES ('" _
& Format(DateValue(Date), "DD/MM/YYYY") & "','GUARDANDO')"
Conexion.Execute strInsert
'AQUI GUARDAS TU TRANSACCION
'
' CODIGO DE GUARDAR
'
'AQUI GUARDAS TU TRANSACCION
DoEvents
'AQUI SE LIMPIA LA TABLA DE ESTADO PORQUE YA GUARDAMOS NUESTRA TRANSACCION
Conexion.Execute "DELETE FROM ESTADO"
'LIBERAMOS EL RECORDSET
If rstEstado.State=1 then rstEstado.Close
Set rstEstado=Nothing
lblInformacion.Caption= Empty
End Sub
Tambien si validas en tu base de datos que el numero de documento no se duplique, al momento de guardar y otro usuario ya tomó esa numeracion, le saltará una advertencia al usuario, y al intentar otra vez debe guardar sin problemas, porque el anterior ya guardó... el problema está en que si son varias terminales, el usuario va a estar dando clic al boton de guardar hasta que guarde... o haces una rutina con un FOR para que la aplicacion intente guardar automaticamente cuando presente este error.
Espero que te ayude...
