Puedes utilizar el procedimiento de PortalFox (L.M.Guayán) modificando la tabla propuesta. Le agregas un campo "prefijo" y cuando traes el valor
RETURN ALLTRIM(PREFIJO)+Padl(LTrim(str(numero+1)),nEspacios,"0").
CREATE TABLE ADDBS(Ruta)+"NUMDORES" FREE ;
("IDOPER" C(3),; && Codigo interno de operacion
"TABLA" C(20),; && nombre de la tabla controladora
"PREFIJO" C(10),; && prefijo
"TIPO" C(1),; && "C" Caracter, "N" numérico (tipo de numerador)
"CAMPO" C(10),; && Campo de la tabla que contiene el ID
"ESPACIOS" N(2)) && Cantidad de caracteres que tiene el ID
SELECT NUMDORES
INDEX ON IDOPER+PREFIJO TAG INUMDORES
El campo idoper permite que una misma tabla controle varios numeradores, donde la variante es el prefijo.
Por ejemplo, una tabla de facturas, en Argentina, tiene numeradores por punto de venta y código de comprobante ("01","06" etc). La tabla de cabeceras de facturas debe controlar tantos numeradores como combinaciones haya de Código de comprobante y punto de emisión.
Por ejemplo, el IDOPER para facturas "A", podrías ser "F01" y para facturas "B" "F06". Para cada IDOPER pueden existir hasta 9998 prefijos (numeradores), que corresponden al punto de emisión del comprobante.
El campo prefijo contendrá las descripciones SECTOR,DIAGNO,VETER ó nada.
Supongamos una función que se llama Numere(), la convocatoria sería Numere(cIdoper+cPrefijo,.T.), y la rutina Numere() busca el primer parámetro en la tabla y devuelve el número incrementado en 1: Si el segundo parámetro es .T. guarda el nuevo valor (solicitud en el momento en que se graba la operación). Si el segundo parámetro es .F., no guarda el nuevo valor (lo tomo al principio de una operación, a modo orientativo).
eJ
APPEND BLANK
Replace CODOPER WITH Numere("RST"+"SECTOR",.T.) ... Suponiendo que "RST" es un IDOPER
APPEND BLANK
Replace CODOPER WITH Numere("RST"+"DIAGNO",.T.) ...
El fundamento es exactamente el mismo que el publicado por L.M.G., atendiendo a algunas particularidades.
En la instalación ó mantenimiento, el sistema debe tener la rutina que rellena la tabla de numeradores,
En el mantenimiento puedes poner una rutina de reconstrucción de numeradores (total o parcial).