FoxyDb tiene una función .CODE() que facilita enormemente este proceso, es parecido a lo que comentas realiza el bloqueo de un registro en una tabla para obtener el correlativo, por lo que es super importante que este proceso lo hagas cuando ya no sea necesaria la intervención del usuario, es decir cuando presiones el botón de guardar.
Puedes usar una tabla para todos los correlativos o puedes usar una tabla para cada correlativo, en mi caso prefiero una tabla para cada correlativo, aunque MariaDb solo bloquea el registro de la tabla y no toda.
Si revisas el código fuente de FoxyDb ahí esta documentado los parámetros de cada función.
* Obtener Códigos Únicos (Correlativos)
* Parámetros
* __tableName, Nombre de la Tabla Real en el servidor
* __fieldNameToIncrease, Nombre del campo a incrementar su valor
* __fieldName, Lista de Campos para usar como filtro o agregar registro
* __fieldValue, Lista de Valores para el filtro o agregar registro
* __defaultValue, Valor inicial del contador
* __defaultValueChange, Si remplaza el valor aun cuando ya existe
* Valor devuelto
* true Código Generado
* false Código NO Generado
Ejemplos:
* Tabla sin campos adicionales
odb.Code("Facturas_folios", "folio")
* Tabla sin campos adicionales y que inicie en el filio 100
odb.Code("Facturas_folios", "folio", "", "", 100)
* Tabla manejando Serie de Factura
odb.Code("Facturas_folios", "folio", "serie", "'A'")
NOTA: Checa las comillas simples, pues son importantes para determinar el tipo del valor del campo " 'A' "
* Tabla manejando Serie de Factura por Sucursal
odb.Code("Facturas_folios", "folio", "idsucursal, serie", "1, 'A'")
NOTA: Los valores numéricos no van entre comillas simples, los alfanuméricos si!!!
odb.Code() te devuelve .t. o .f., para saber que valor obtuvo es por medio de la propiedad
id_Code = 0 && Numero de código único generado por la función .CODE()
if odb.Code("............)
? odb.id_Code
endif
saludos
Antonio Meza