Lo puedes implementar de varias maneras, dependiendo de la funcionalidad de tu formulario.
Si tu formulario tiene una opción de DESHACER o UNDO o CANCELAR, es decir que el usuario puede apretar un botón y deshacer la alta, entonces tienes que generar el consecutivo al momento de guardar los datos y no al momento de COMENZAR la alta.
En cambio si en tu formulario sólo puedes GUARDAR la información después de iniciar una alta, entonces puedes generar el consecutivo al PRINCIPIO de la ALTA.
Para hacer esto tienes dos formas:
1.- Hacerlo con un campo en la tabla de tipo AUTOINCREMENT. Este campo es numérico y fox controlará automáticamente el siguiente consecutivo. Cada vez que agregues un registro, fox pondrá en este campo el siguiente consecutivo disponible.
Si usas esta opción, y en tu formulario puedes CANCELAR la alta, debes tener cuidado de hacer el INSERT o el APPEND sólo cuando vayas a guardar y no antes, porque de otra manera perderás el consecutivo (tendrás huecos).
Por otro lado si tu formulario no tiene la opción de deshacer, puedes hacer el insert o el append desde el inicio y luego actualizar los datos con REPLACE o UPDATE.
2.- Lo puedes hacer con un campo numérico normal, en donde el consecutivo lo controlas tú manualmente. Personalmente yo uso esto porque me da el control del consecutivo en el momento preciso en que yo lo deseo.
Para usar esto, el consecutivo se asigna sólo al momento de GUARDAR los datos de la alta y no antes.
En ese momento se hace algo así:
* Bloqueas la tabla
lock clientes
select max(num_cli) +1 as consec_cte into cursor consecutivo
select consecutivo
if eof()
* esto hay que ponerlo si usas VFP 8 o MENOR
num_cliente = 1
else
* aquihay que poner el NVL para fox 9,
num_cliente = nvl(consecutivo.consec_cte,1)
endif
*
* insertas los datos en la tabla con append o insert
*
Unlock in 'clientes'
Recuerda que los CEROS delante del consecutivo no existen, por lo que para efectos de los reportes y demás, deberás poner en el formato o máscara que le agregue los CEROS a la izquierda (leading zeros).