FoxPro/Visual FoxPro - problema con secuenciador

 
Vista:

problema con secuenciador

Publicado por alexcoinc (450 intervenciones) el 20/02/2008 15:58:10
De antemano muchas gracias.

NECESITO AYUDA SOBRE LO SIGUIENTE.
Tengo una aplicación de facturación, en la cual manejo el consecutivo de facturas automáticamente.
Asi el sistema le informa al usuario que numero de factura grabo.

Tengo entonces, dos tablas. Una es la que guarada la información de las facturas con sus items y la otra es una
tabla que yo la llamo contador.dbf , que es en donde tengo un campo llamado secuencia, el cual es el que me dice
cual fue la última factura grabada.

Cuando necesito que el sistema me de un numero de factura para mi factura (valga la redondancia), ejecuto la función
asi:

select 50 && en este select tengo abierto el archivo contador.dbf
num=secuencia+1 && incremento el numero de la ultima factura en 1, pues presumiblemente ese me tocaria a mi
&& obviamente digo presumible, pues puede que no sea, ya que estoy trabajando en una red
nume=regsecue(num) && llamo la función que me asignará el numero de factura que sigue.

* Cuando vuelva de la función la variable 'nume' tendrá el valor de factura asignado por el sistema y ese numero
* lo grabaré en mi tabla de facturas.

**** ESTAS SON LAS FUNCIONES

*--------------------
FUNCTION REGSECUE
parameters consesi
DO WHILE .T.
IF RLOCK() && Si logra bloquear el archivo ... es decir el que esta en el select 50
IF consesi>secuencia && consesi: variable que recibe el parametro, y secuencia es el campo de la tabla 'contador'
cam_can('secuencia',consesi) && en la tabla que maneja el consecutivo existe un campo llamado secuencia
exit
ELSE && si alguien se me adelantó, incremento en 1 el campo , desbloqueo y vuelvo al ciclo
&& para evaluar nuevamente.
consesi=consesi+1
UNLOCK
ENDIF
ENDIF
ENDDO
RETURN consesi && este es el numero de la factura que me asignó

*--------------------
FUNCTION CAM_CAN
PARAMETERS nca,nva
DO WHILE .T.
IF RLOCK()
REPL &nca. with nva && Aqui reemplaza el campo llamado secuencia (lo actualiza)
UNLOCK
EXIT
ENDIF
ENDDO
RETURN


***************************************************************************************
MI PROBLEMA ESTA EN QUE EN ALGUNA OCASION ME DIO DOS NUMERO IGUALES PARA DOS USUARIOS DIFERENTES Y ESO ES INACEPTABLE.

DONDE PUEDE ESTAR LA INCONGRUENCIA O LA FALLA EN EL CODIGO.

Gracias nuevamente por su ayuda.

alexcoinc
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:problema con secuenciador

Publicado por JorgeE (423 intervenciones) el 20/02/2008 17:04:45
Hola
Talves por que por alguna razon no esta haciendo el bloqueo de registro, al asignar o intentar actualizar el campo secuencia?...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 4
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:problema con secuenciador

Publicado por kong (682 intervenciones) el 20/02/2008 17:57:34
Que tal.
Creo que no tienes que dar tantas vueltas.
Una vez que consigues bloquear el registro solo haz un
Replace secuencia with secuencia+1.

Bueno eso creo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con secuenciador

Publicado por alexcoinc (450 intervenciones) el 20/02/2008 18:29:13
POR QUE CREES..... ALGUNA IDEA ??

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 4
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:problema con secuenciador

Publicado por kong (682 intervenciones) el 20/02/2008 19:22:14
en el post anterior tengo un error, disculpen.... Pero pasamos a lo importante.
.......................
Supongo lo siguiente:
Si neccesitas agregar un registro con un numero en consecutivo, entonces:
..Bloquear el archivo con flock()
..sec_actual=secuencia
..append blank
..replace secuencia with sec_actual+1
..sec_nueva=secuencia
..desbloquea el archivo
..return sec_nueva

Cuando tienes una tabla con todas las secuencias ya registradas, tiene otro procedimiento

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con secuenciador

Publicado por alexcoinc (450 intervenciones) el 20/02/2008 20:48:17
Lo que pasa Kong, es que no necesito bloquear todo el archivo solo el registro

Pero como dijo Jorge E, en el post anterior, por alguna razón no está bloqueando con RLOCK() y eso me tiene preocupado.

Gracias de todas maneras por preocuparte y querer colaborar y valga la oportunidad si tienes alguna sugerencia adicional, pues siempre será bienvenida.

Gracias otra vez.

alexcoinc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:problema con secuenciador

Publicado por chomi chomi (1 intervención) el 13/03/2008 17:13:02
:........................:::::::···························:::::
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar