Clarion - Cálculo de Edad

 
Vista:

Cálculo de Edad

Publicado por Carina (30 intervenciones) el 10/06/2009 12:19:28
Hola. Estoy programando en Clarion 5.5 . Necesito saber si hay alguna función para poder calcular la edad de una persona a partir de la carga de la fecha de nacimiento. Desde ya muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Cálculo de Edad

Publicado por Federico Aquino (43 intervenciones) el 06/04/2011 22:22:35
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.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Cálculo de Edad

Publicado por Marcelo Madelon (572 intervenciones) el 10/06/2009 14:24:35
! Calculo edad años, meses y dias (Historias Clínicas)

IF HIS:FechaNacimiento > 0
HIS:AniosEdad = YEAR(Today()) - YEAR(HIS:FechaNacimiento)
HIS:MesEdad = MONTH(Today()) - MONTH(HIS:FechaNacimiento)
HIS:DiasEdad = DAY(TODAY()) - DAY(HIS:FechaNacimiento)

IF HIS:DiasEdad < 0
HIS:DiasEdad = DAY(HIS:FechaNacimiento) + HIS:DiasEdad
END
IF HIS:MesEdad < 0
HIS:AniosEdad -= 1
HIS:MesEdad = MONTH(HIS:FechaNacimiento) + HIS:MesEdad
End
End

! Calculo la proxima fecha

LOC:Incremento (variable que trae el incremento)
LOC:FechaProxima = Date(Month(LOC:FechaAnterior) + LOC:Incremento,DAY(LOC:FechaAnterior),YEAR(LOC:FechaAnterior))


! Meses del Año

LOC:NombreMes = ''
Case MONTH(CA2:FechaEmision)
Of 1
LOC:NombreMes = 'Enero'
Of 2
LOC:NombreMes = 'Febrero'
Of 3
LOC:NombreMes = 'Marzo'
Of 4
LOC:NombreMes = 'Abril'
Of 5
LOC:NombreMes = 'Mayo'
Of 6
LOC:NombreMes = 'Junio'
Of 7
LOC:NombreMes = 'Julio'
Of 8
LOC:NombreMes = 'Agosto'
Of 9
LOC:NombreMes = 'Setiembre'
Of 10
LOC:NombreMes = 'Octubre'
Of 11
LOC:NombreMes = 'Noviembre'
Of 12
LOC:NombreMes = 'Diciembre'
End

! Nombre del Día

EXECUTE (LOC:FECHA % 7) + 1
LOC:Dia = 'Domingo'
LOC:Dia = 'Lunes'
LOC:Dia = 'Martes'
LOC:Dia = 'Miércoles'
LOC:Dia = 'Jueves'
LOC:Dia = 'Viernes'
LOC:Dia = 'Sábado'
END

! Otra forma
LOC:DiaSemana = choose((today() %7)+1,'Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado')


Espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cálculo de Edad

Publicado por Carina (30 intervenciones) el 10/06/2009 15:48:22
Bárbaro. Te agradezco mucho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar