lamentablemente sos muy malo man, tu codigo no solo es incierto sino que falla a la hora de calcular las edades, espero esto te sirva:
1) crear un source, yo le puse el nombre de EdadActual, y dentro de el pasar estos datos locales, hace un copy paste de esto y pegalo en Data:
[SCREENCONTROLS]
! PROMPT('Edad:'),USE(?Edad:Prompt)
! ENTRY(@n-14.2),USE(Edad),DECIMAL(12)
[REPORTCONTROLS]
! STRING(@n-14.2),USE(Edad),DECIMAL(12)
Edad DECIMAL(10,2),DIM(3)
!!> IDENT(4294924911),PROMPT('Edad:'),HEADER('Edad'),PICTURE(@n-14.2),JUSTIFY(DECIMAL,12)
[SCREENCONTROLS]
! PROMPT('Fecha:'),USE(?Fecha:Prompt)
! ENTRY(@d6),USE(Fecha),RIGHT(1)
[REPORTCONTROLS]
! STRING(@d6),USE(Fecha),RIGHT(1)
Fecha LONG
!!> IDENT(4294924910),PROMPT('Fecha:'),HEADER('Fecha'),PICTURE(@d6),JUSTIFY(RIGHT,1)
[SCREENCONTROLS]
! PROMPT('Dias:'),USE(?Dias:Prompt)
! ENTRY(@n-14.2),USE(Dias),DECIMAL(12)
[REPORTCONTROLS]
! STRING(@n-14.2),USE(Dias),DECIMAL(12)
Dias DECIMAL(10,2)
!!> IDENT(4294924909),PROMPT('Dias:'),HEADER('Dias'),PICTURE(@n-14.2),JUSTIFY(DECIMAL,12)
[SCREENCONTROLS]
! PROMPT('Edad Actual 1:'),USE(?Edad_Actual_1:Prompt)
! ENTRY(@s30),USE(Edad_Actual_1)
[REPORTCONTROLS]
! STRING(@s30),USE(Edad_Actual_1)
Edad_Actual_1 STRING(30)
!!> IDENT(4294924908),PROMPT('Edad Actual 1:'),HEADER('Edad Actual 1'),PICTURE(@s30)
[SCREENCONTROLS]
! PROMPT('Edad Actual 2:'),USE(?Edad_Actual_2:Prompt)
! ENTRY(@s30),USE(Edad_Actual_2)
[REPORTCONTROLS]
! STRING(@s30),USE(Edad_Actual_2)
Edad_Actual_2 STRING(30)
!!> IDENT(4294924907),PROMPT('Edad Actual 2:'),HEADER('Edad Actual 2'),PICTURE(@s30)
[SCREENCONTROLS]
! PROMPT('Edad Actual 3:'),USE(?Edad_Actual_3:Prompt)
! ENTRY(@s30),USE(Edad_Actual_3)
[REPORTCONTROLS]
! STRING(@s30),USE(Edad_Actual_3)
Edad_Actual_3 STRING(30)
!!> IDENT(4294924906),PROMPT('Edad Actual 3:'),HEADER('Edad Actual 3'),PICTURE(@s30)
2) al crearse este source se le debe indicar que es una funcion, poner en Prototype: (long),string
y en Parameters: (infecha)
3) en el embed copiar esto en el nivel Processed Code...
Edad[1] = (YEAR(TODAY()) - YEAR(infecha))
TOPE# = 12
IF DAY(infecha) > DAY(TODAY()) !Si el dia es mayor al dia actual
IF MONTH(infecha) > MONTH(TODAY()) !Si el mes es mayor al mes actual
Edad[1] -= 1
Edad[2] = TOPE# - MONTH(infecha)
Edad[2] += MONTH(TODAY())
Edad[2] -= 1
ELSIF MONTH(infecha) = MONTH(TODAY()) !Si el mes es igual al mes actual
Edad[1] -= 1
Edad[2] = TOPE# - 1
ELSIF MONTH(infecha) < MONTH(TODAY()) !Si el mes es menor al mes actual
IF Edad[1]
Edad[2] = ((MONTH(TODAY())-TOPE#) + MONTH(infecha)) - 1
IF Edad[2] < 0
Edad[2] = Edad[2]*(-1)
END
ELSE
Edad[2] = (MONTH(TODAY())-MONTH(infecha))-1
END
END
Fecha = (DATE((MONTH(infecha) + 1),1,YEAR(TODAY()))) - 1
Dias = DAY(Fecha)
Edad[3] = (Dias - DAY(infecha)) + DAY(TODAY())
ELSIF DAY(infecha) < DAY(TODAY()) !Si el dia es menor al dia actual
IF MONTH(infecha) > MONTH(TODAY()) !Si el mes es mayor al mes actual
Edad[1] -= 1
Edad[2] = (TOPE# - MONTH(infecha)) + MONTH(TODAY())
ELSIF MONTH(infecha) = MONTH(TODAY()) !Si el mes es igual al mes actual
Edad[2] = 0
ELSIF MONTH(infecha) < MONTH(TODAY()) !Si el mes es menor al mes actual
Edad[2] = MONTH(TODAY()) - MONTH(infecha)
END
Edad[3] = DAY(TODAY()) - DAY(infecha)
ELSIF DAY(infecha) = DAY(TODAY()) !Si el dia es igual
IF MONTH(infecha) > MONTH(TODAY())
Edad[1] -= 1
Edad[2] = (TOPE# - MONTH(infecha)) + MONTH(TODAY())
ELSIF MONTH(infecha) = MONTH(TODAY())
Edad[2] = MONTH(TODAY()) - MONTH(infecha)
ELSIF MONTH(infecha) < MONTH(TODAY())
Edad[2] = MONTH(TODAY()) - MONTH(infecha)
END
Edad[3] = 0
END
IF Edad[1] = 1
Edad_Actual_1 = CLIP(Edad[1]) & ' Año '
ELSIF Edad[1] > 1
Edad_Actual_1 = CLIP(Edad[1]) & ' Años '
ELSIF Edad[1] < 1
Edad_Actual_1 = ' '
END
IF Edad[2] = 1
Edad_Actual_2 = (CLIP(Edad_Actual_1) & ' ' & CLIP(Edad[2])&' Mes ')
ELSIF Edad[2] > 1
Edad_Actual_2 = (CLIP(Edad_Actual_1) & ' ' & CLIP(Edad[2])&' Meses ')
ELSIF Edad[2] < 1
IF Edad_Actual_1
Edad_Actual_2 = CLIP(Edad_Actual_1)
END
END
IF Edad[3] = 1
Edad_Actual_3 = (CLIP(Edad_Actual_2) & ' ' & CLIP(Edad[3])&' Dia')
ELSIF Edad[3] > 1
Edad_Actual_3 = (CLIP(Edad_Actual_2) & ' ' & CLIP(Edad[3])&' Dias')
ELSIF Edad[3] < 1
IF Edad_Actual_2
Edad_Actual_3 = CLIP(Edad_Actual_2)
END
END
RETURN(Edad_Actual_3)
y grabarlo, pero tenes que acordarte de que ese nombre que le pones es el nombre de tu funcion... luego podes utilizar esta funcion de la siguiente manera.
Ejemplo:
CLEAR(LOC:Edad)
IF BEN:Fecha_Nac
LOC:Edad = EdadActual(BEN:Fecha_Nac)
ELSE
LOC:Edad = 'SIN FECHA DE NACIMIENTO'
END
DISPLAY
en cualquier browse, form, report, lo que sea, el tema es enviarle una fecha a la funcion que la misma te devuelve en letras lo que dice la fecha enviada. Ahhh!!!! no te olvides nunca de enganchar la funcion en el Procedures de las propiedades del objeto donde vayas a necesitarlo. Por ejemplo en un browse de alumnos.... BrowseAlumnos, entras en propiedades y le enganchas la funcion en el procedures, marcando la funcion.
Por ahi si podes mejorar el codigo, enviame lo "mejorado" y asi compartimos man.
Desde Paraguay te saluda Federico Aquino.