Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-02-2004
jrcosta75 jrcosta75 is offline
Miembro
 
Registrado: feb 2004
Ubicación: Argentina
Posts: 13
Poder: 0
jrcosta75 Va por buen camino
Calculo de Años

Necesito calcular los anos transcurridos entre el año de compra de una producto el cual lo introdusco a una tabla mediante un dbedit, y la fecha actual que posee la computador.
Ejemplo:
AÑo de compra: 1999
Año actual : 2004
Resultado: 5
Precisaria que si se puede me pasen todo el codigo completo del calculo. Desde ya muchas gracias.
Aclaración: trabajo en Delphi 5 entreprice y con tablas paradox 7
__________________
Cita:
El servir es mejor que el recibir
Responder Con Cita
  #2  
Antiguo 20-02-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Me suena que hay una función, pero como no tengo el Delphi delante....

Código:
var
  D, M, AIni, AFin : Word;
begin
  DecodeDate(AFin, M, D, Date);
  DecodeDate(AIni, M, D, TablaCampoFecha.AsDateTime);
  ShowMessage('Diferencia de años : ' + IntToStr(AFin - AIni));
end;
PD: Frases como esta
Cita:
Empezado por jrcosta75
Precisaria que si se puede me pasen todo el codigo completo del calculo
no suelen gustar. Así que te aconsejo no ponerlas. Aquí se ayuda, pero no se trabaja para nadie

Última edición por __cadetill fecha: 20-02-2004 a las 14:30:01.
Responder Con Cita
  #3  
Antiguo 20-02-2004
jrcosta75 jrcosta75 is offline
Miembro
 
Registrado: feb 2004
Ubicación: Argentina
Posts: 13
Poder: 0
jrcosta75 Va por buen camino
Talking Calculo de anio

CADETILL UTILICE EL SIGUIENTE CODIGO :

procedure TModeloDatos.TblMuebleCalcFields(DataSet: TDataSet);
Var

D, M, AIni, AFin : Word;
Begin
DecodeDate(AFin, M, D, Date);
AIni:=ModeloDatos.TblMueble.FieldValues['Añocompra'];
ShowMessage('Diferencia de años : ' + IntToStr(AFin - AIni));
end;



PARA CALCULAR LOS ANOS TRANSCURRIDOS ENTRE EL AÑO DE COMPRA DE UN PRODUCTO Y EL ACTUAL Y ME DA EL SIGUIENTE ERROR:

[Error] ModDat.pas(104): Types of actual and formal var parameters must be identical
[Fatal Error] CStock.dpr(15): Could not compile used unit 'ModDat.pas'


Y NO SE COMO ARREGLARLO
Saludos, jrcosta75
__________________
Cita:
El servir es mejor que el recibir
Responder Con Cita
  #4  
Antiguo 20-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Código:
procedure TForm1.Button1Click(Sender: TObject);
 
  function Edad(FechaNacimiento:string):integer;
  var 
     iTemp,iTemp2,Nada:word;
     Fecha:TDate;
  begin 
    Fecha:=StrToDate(FechaNacimiento);
    DecodeDate(Date,itemp,Nada,Nada);
    DecodeDate(Fecha,itemp2,Nada,Nada);
     if FormatDateTime('mmdd',Date) <
        FormatDateTime('mmdd',Fecha) then Result:=iTemp-iTemp2-1
                                     else Result:=iTemp-iTemp2;
  end; 
 
begin 
  Label1.Caption:=intToStr(Edad('07/09/1969'));
end;
Te da la edad en años. Ese procedure está en el truco 628 de trucomanía
__________________
:)
Responder Con Cita
  #5  
Antiguo 20-02-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
se supone que

Código:
ModeloDatos.TblMueble.FieldValues['Añocompra']
es de tipo DateTime, no?
Pues entonces has de hacer lo que te proponia en el mensaje anterior

Código:
var
  D, M, AIni, AFin : Word;
begin
  DecodeDate(AFin, M, D, Date);
  DecodeDate(AIni, M, D, ModeloDatos.TblMueble.FieldValues['Añocompra']);
  ShowMessage('Diferencia de años : ' + IntToStr(AFin - AIni));
end;
Responder Con Cita
  #6  
Antiguo 20-02-2004
maruenda maruenda is offline
Miembro
 
Registrado: oct 2003
Ubicación: elche
Posts: 173
Poder: 21
maruenda Va por buen camino
Thumbs down pregunta

que ocurre si compro algo el 31/12/03 y lo vendo el 01/01/04. ?
que resultado debe dar? deberia dar 0 años. no? creo que no habria querestar solo los años, sino tener en cuenta toda la fecha.
__________________
frenadol
Responder Con Cita
  #7  
Antiguo 21-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
manrueda... yo intento poner mi granito de arena conforme a mis conocimientos (o capacidad de búsqueda de información), es verdad lo que dices, debería de dar la fecha completa, el caso es que no se :d
__________________
:)
Responder Con Cita
  #8  
Antiguo 21-02-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Código:
 
function Edad(FecNac, FecAct: tDateTime): Integer;
var
   nAnoAct, nMesAct, nDiaAct: word;
   nAnoNac, nMesNac, nDiaNac: word;
   Edad: Integer;
begin
   //Calcula la edad en años
   //Desglosa la Fecha
   DecodeDate(FecNac, nAnoNac, nMesNac, nDiaNac);
   DecodeDate(FecAct, nAnoAct, nMesAct, nDiaAct);
   //Verifica una fecha
   if FecNac = 0 then
   begin
      Result := 0;
      Exit;
   end;
   //Edad en años
   Edad := nAnoAct - nAnoNac;
   //Calculo del mes
   if nMesAct = nMesNac then
   begin
      //Para el Dia
      if nDiaAct < nDiaNac then Edad := Edad - 1;
   end
   else if nMesAct < nMesNac then Edad := Edad - 1;
   //Devuelve el valor
   Result := Edad;
end;
para el qiue la necesite es unafuncion que devuelve la edad exacta en años tomando en cuenta hasta el dia.

FecNac: Fecha de Nacimiento
FecAct: Fecha Actual o fecha a la cual se quiere calcular la edad

Cualquier duda pregunten, esta funcion esta 100% operativa
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #9  
Antiguo 21-02-2004
maruenda maruenda is offline
Miembro
 
Registrado: oct 2003
Ubicación: elche
Posts: 173
Poder: 21
maruenda Va por buen camino
Cool sin animo de ofender

darkbyte, no tenia intencion de infravalorar tus conocimientos . Seguro que son superiores a los mios. solamente que anoche viendo esta pregunta se me ocurrio que podria tener esa pega. Que ademas es muy comun , no solo en programacion sino en cualquier ambito de la vida, cuando calculamos el tiempo transcurrido entre dos fechas. Solo di mi punto de vista. Espero no ofender a nadie. Aqui estamos para aprender y compartir conocimientos, ya que 4 ojos ven mas que 2. Son muchas las veces que alguien de este foro me ha ayudado con algun problema, o me ha aclarado alguno duda. un saludo.
__________________
frenadol
Responder Con Cita
  #10  
Antiguo 21-02-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Me alegro de la aclaración hecha pues DarkByte es un asiduo coloborador del Club, por otra parte añadir que si restamos 2 fechas es decir dos variables del tipo Tdate, obtenemos días:
Código:
procedure TForm1.Button1Click(Sender: TObject);
var
dIni,dFin:Tdate;
nDias:Double;
begin
dIni:=Date - 10;
dFin:=Date;
nDias:=dFin - dIni;
ShowMessage(FormatFloat(',0.0000',n));
end;
En cuanto al ejemplo que propones, creo que habría que matizar, un bien adquirido el dia 20-08-1999 al día de hoy de 2004 no tendría 5 años y esto sería importante por ejemplo si pretendemos calcular la amortización del mismo.

Lo que propongo como solución sería restar los 2 fechas y dividirlas entre 365 si es que es posible es decir si el resultante fuera > 365

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #11  
Antiguo 21-02-2004
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
Hola a todos, en este caso yo propondría utilizar una de las funciones que tenemos en los utilitarios de fechas (unit DateUtils), de forma general podemos usar el siguiente código:
Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
        Label1.Caption:='Han transcurrido '+FloatToStr(YearSpan(date,ModeloDatos.TblMueble.FieldByName('Añocompra').AsDateTime)+ 'años';
end;
Por supuesto propongo un TLabel pero pudiera ser en mensaje como propuso Cadetill.
Esta función devuelve los años con fracciones y solventa el caso de periodos menores de uno vale para el asunto señalado por Marcos para amortizaciones.
Si se trabaja con otras funciones de este grupo se pudiera llegar a mostrar los años, meses y días transcurridos quedando mas elegante la presentación.
Saludos
Responder Con Cita
  #12  
Antiguo 21-02-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
Cita:
Empezado por maruenda
darkbyte, no tenia intencion de infravalorar tus conocimientos .
Jeje, que yo sepa nunca lo has hecho, me alegra que me corrijan, pues así veo cuales de mis teorías son erróneas y me ayuda a mejorar, por lo tanto quedo agradecido a los que me corrijen. Aquí tienes tú y todos los del foro un amigo para cuando lo necesitéis
Cita:
Empezado por maruenda
Seguro que son superiores a los mios.
Eso lo dudo
Cita:
Empezado por maruenda
solamente que anoche viendo esta pregunta se me ocurrio que podria tener esa pega.
Has hecho lo correcto, pues para eso está el foro...
Cita:
Empezado por maruenda
Aqui estamos para aprender y compartir conocimientos, ya que 4 ojos ven mas que 2.
Pues claro!!, para eso está el foro!! , yo estoy aquí por lo mismo, aunque no puedo compartir mucho... pues no tengo el qué
Cita:
Empezado por maruenda
un saludo.
Otro para tí...
__________________
:)
Responder Con Cita
  #13  
Antiguo 24-02-2004
buitrago buitrago is offline
Miembro
 
Registrado: sep 2003
Posts: 156
Poder: 21
buitrago Va por buen camino
Aqui encontrarás unas Units que son una maravilla

http://fundementals.sourceforge.net/
Responder Con Cita
  #14  
Antiguo 24-02-2004
jrcosta75 jrcosta75 is offline
Miembro
 
Registrado: feb 2004
Ubicación: Argentina
Posts: 13
Poder: 0
jrcosta75 Va por buen camino
Talking Ayudaaaaa.

Probe de todas formas para calcular los anos transcurridos y no hay forma me da error

PUSE:

procedure TForm10.BitBtn1Click(Sender: TObject);
Var
d,m,Aini,Afin:Word;
begin
Decodedate(Date,Afin,m,d,);
Decodedate(ModeloDatos.TblMueble.FieldValues['Fechcomp'],Aini,m,d,);
ShowMessage('Diferencia de años:'+IntToStr(Afin-Aini));
end;

Y ME DIO EL SIGUIENTE ERROR

[Error] Unit10.pas(105): Too many actual parameters
[Error] Unit10.pas(106): Too many actual parameters
[Fatal Error] CStock.dpr(15): Could not compile used unit 'Unit10.pas'

TAMBIEN PUSE:

procedure TForm10.BitBtn1Click(Sender: TObject);
Var
d,m,Aini,Afin:Word;
begin
Decodedate(Afin,m,d,Date);
Decodedate(Aini,m,d,ModeloDatos.TblMueble.FieldValues['Fechcomp']);
ShowMessage('Diferencia de años:'+IntToStr(Afin-Aini));

end;

Y ME DIO EL SIGUIENTE ERROR

[Error] Unit10.pas(105): Types of actual and formal var parameters must be identical
[Error] Unit10.pas(106): Types of actual and formal var parameters must be identical
[Fatal Error] CStock.dpr(15): Could not compile used unit 'Unit10.pas'

NO SE COMO HACERLO NECESITO AYUDA
GRACIAS.
__________________
Cita:
El servir es mejor que el recibir
Responder Con Cita
  #15  
Antiguo 24-02-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Con solo darle a F1 verás que la sintaxis correcta es la primera. Para que te funcione, prueba a no poner paréntesis de más.

Código:
procedure TForm10.BitBtn1Click(Sender: TObject);
Var d,m,Aini,Afin:Word;
begin
  Decodedate(Date,Afin,m,d);
  Decodedate(ModeloDatos.TblMueble.FieldValues['Fechcomp'],Aini,m,d);
  ShowMessage('Diferencia de años:'+IntToStr(Afin-Aini));
end;
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #16  
Antiguo 24-02-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Código:
procedure TForm10.BitBtn1Click(Sender: TObject);
Var
d,m,Aini,Afin:Word;
begin
Decodedate(Date,Afin,m,d,);//La coma sobra
Decodedate(ModeloDatos.TblMueble.FieldValues['Fechcomp'],Aini,m,d,);
ShowMessage('Diferencia de años:'+IntToStr(Afin-Aini));
end;
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.

Última edición por marcoszorrilla fecha: 24-02-2004 a las 22:16:59.
Responder Con Cita
  #17  
Antiguo 24-02-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
donde dije paréntesis de más, digo diego, digo quise decir comas de más.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #18  
Antiguo 24-02-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Escribimos casi al mismo tiempo Marc, cuando he enviado mi mensaje aún no estaba el tuyo.

Donde dije Diego no digo nada.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 15:03:45.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi