FoxyDb tiene una función que facilita realizar esta tarea se llama foxydb.Code() te permite hacer lo mismo que comentas que haces tu, incrementando el valor de un campo +1 con una sola linea de código, de igual forma aplica un bloqueo al registro para incrementarlo e impedir que otro usuario obtenga otro valor por lo que es muy pero muy importante no solicitar un Código si aun falta por confirmar algo, porque la transacción debe durar lo menos posible.
Antes de explicarte, note que comentas que obtienes ese valor y lo reemplazas tanto en la tabla principal como en las tablas hijas, y te comento que esto no es necesario y a demás no es una buena practica de diseño de base de datos, para eso tienes los campos ID para relacionar las tablas, solo debes almacenarlo en la tabla principal y del tipo carácter ni siquiera es necesario que sea numérico este campo en la tabla principal, donde si debe ser numérico es en la tabla Códigos que comentas que manejas.
El orden para guardar los datos en lo personal te recomiendo la siguiente forma.
1.- Verificar si hay cambios en cualquier tabla .Changes()
2.-.Si no hay cambios terminar (fin)
3.- Verificar si hay cambios en tabla principal .CursorChange("tabla_principal")
4.- Si hay cambios y esta tabla requiere de un campo código entonces obtener primero el código .Code()
5.- Una vez obtenido el código remplazar el valor en el campo correspondiente en la tabla principal
6.- Enviar a actualizar la tabla principal .Update("tabla_principal",.t.) y solicitar obtener el ultimo ID
7.- Verificar cambios en tablas hijas .CursorChange("tabla_hija1"), si hay cambios verificar si es un registro nuevo y remplazar campo ID que usas para relacionar la tabla principal con las tablas hijas.
8 remplazar el campo IDtabla_principal de la tabla hija con el valor del ultimo ID obtenido de la tabla principal .id_Last
9 Realizar el mismo punto 8 pero con otra tabla hija
10 Guardar los cambios .Save()
En conclusión, ya cuando vas a guardar y el usuario no tiene que intervenir ni confirmar nada, solicitas primero obtener el Código, luego remplazas el campo de la tabla principal por el código y mandas a actualizar la tabla principal solicitando el valor del campo ID autoincrementable, para luego remplazar solo este Id en las tablas hijas y guardar.
Según el nombre y estructura de tu tabla la función .Code() seria así para tu caso
If foxydb.Code("codigos","sign","tabla,serie","'FACTURAS','A'")
wait windows foxyDb.id_Code
ENDIF
La función .Code() acepta 5 parámetros
1.- Nombre de la tabla real en el servidor
2.- Nombre del Campo a incrementar
3.- Lista de Campos separados por coma para filtrar el registro sin comillas simples por cada campo
4.- Lista de Valores usados para filtrar el registro, en el caso de valores carácter debe ir entre comillas simples
5.- Valor predeterminado, si quieres modificar el valor o que inicie en un valor especial
saludos
Antonio Meza