Es un placer saludarte. Gracias por consultar y espero poder ayudarte.
Lo que pides es fácil. ¿Qué tipo de datos es el campo? Imagino que carácter. La siguiente respuesta aplica a tipo de datos carácter. Si es numérico, simplemente los transformamos a carácter con STR().
Cuando decís que quieres darles un nuevo formato, imagino que te referís a reemplazar el dato del campo 001-1589 por 0001-0001589. ¿En otra tabla? ¿O en la misma tabla? Va, eso seria así:
LOCAL lcValor1, lnExtension, lnExt1, lcExpre1, lcValorReal1, lcValorReal2, lcNuevaExp
**--
SELECT tabla
GO TOP
**--Activamos scanner
SCAN
lcValor1 = tabla1.campoaformatear
**--Extension total de la expresión
lnExtension = LEN(lcValor1)
**--
lnExt1 = 1
**--
**--Evaluamos la primera parte de la expresión antes del "-"
FOR i = lnExtension TO 1 STEP -1
lcExpre1 = SUBSTR(lcValor1, lnExt1, 1)
**--Si el carácter es "-"
IF lcExpre1 = "-"
**--Obtenemos parte de la cadena hasta donde
**--delimita el primer guion
lcValorReal1 = SUBSTR(lcValor1, 1, lnExt1 - 1)
**--Rellenamos ceros a la izquierda
lcValorReal1 = PADL(lcValorReal1, 4, "0")
**--Tomamos el resto de la cadena después del guion y rellenamos con ceros
**--a la izquierda.
lcValorReal2 = SUBSTR(lcValor1, lnExt1 + 1, lnExtension - (lnExt1))
lcValorReal2 = PADL(lcValorReal2, 7, "0")
EXIT
ENDIF
**--Recargamos para pasar al siguiente valor
lnExt1 = lnExt1 + 1
ENDFOR
**--Armamos nueva cadena.
lcNuevaExp = lcValorReal1 + "-" + lcValorReal2
**--reemplazamos el dato en el campo en la misma tabla
SELECT tabla1
TABLEREVERT(.F.)
REPLACE tabla1.campoaformatear WITH lcNuevaExp
TABLEUPDATE(.F.)
ENDSCAN
**--//
Ahora mencionas esto:
Estos datos están vinculados a un registro ¿Cómo verifico que el cambio sea en el registro correcto?
¿No son todos los datos de la tabla? Pues en ese caso, tenes que aplicar un FOR al comando SCAN
SCAN tabla1 FOR campo1 = condiciondeseada
ENDSCAN
**--//
Y listo. :)
Avisame cualquier cosa!
Un abrazo!
Desde Managua, Nicaragua!
Ravenn