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
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


0