Hola, he hecho este código para
crear un código automático para mis registros, pues bien, resulta que cuando dos
personas crean un registro nuevo, uno se queda colgado, entiendo que se queda en
el bucle. Por favor me podeis ayudar, no entiendo por que el requery() no
funciona y dejar dar el alta:
FUNCTION NewId(tcAlias)
LOCAL
lcAlias, lnId,lcOldReprocess, lnOldArea
local w_dev1,
w_dev2
lnOldArea=SELECT()
IF
PARAMETERS()<1
lcAlias=UPPER(ALIAS())
ELSE
lcAlias=UPPER(tcAlias)
ENDIF
w_dev1="0"
do
while w_dev1="0"
* generamos un nuevo id para esta
tabla
select v_generador
requery
('v_generador')
locate for
v_generador.tabla=lcalias
if found() && si
encontramos el contador
lnID=str(v_generador.siguiente_id ,
v_generador.longitud_id)
lnID=v_generador.prefijo+strtran(lnID,'
','0')
REPLACE
v_generador.siguiente_id WITH (v_generador.siguiente_id +
1)
endif
begin
transaction
w_dev2 =
tableupdate(0,.f.,'v_generador')
end
transaction
if
w_dev2=.f.
tablerevert(.f.,'v_generador') && revertimos los cambios en la
vista
* si la actualización de la
tabla falla, entonces volvemos a generar otro id
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
* el proceso puede fallar, si otra persona genera otro id para esta tabla,
* mientras nosotros generamos el
nuestro
w_dev1= "0"
else
* si todo va bien, pues nada,
devolvemos el id y listos
w_dev1=
lnID
endif
enddo
select (lnOldArea)
return
w_dev1
ENDFUNC
Un saludo,
Tolo,
Mallorca