Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-05-2010
TheNew TheNew is offline
Registrado
 
Registrado: jun 2006
Posts: 6
Poder: 0
TheNew Va por buen camino
Fechas de Pagos 15 y 30 de cada mes!

Hola a todos los miembros de este gran equipo. Soy novato de delphi y necesito saber como hago un bucle para fechas de pago 15 y 30 de
cada mes y que pueda aceptar tambien el cambio del año, si es visiesto.
Gracias de antemano.

Ej: 15/01/2010
30/01/2010
15/02/2010
28/02/2010
15/03/2010
30/03/2010
Responder Con Cita
  #2  
Antiguo 11-05-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola TheNew.

No está muy claro el planteo de lo que querés hacer, pero supongo que querrás validar los ingresos,
de forma que no acepte fechas que no estén entre los días 15 y el máximo día del mes ingresado.
Para correr el código siguiente deberás previamente complementar con ceros.
Por ejemplo si ingresa la cadena: '2/2/2008' tendrás que llevarla a: '02/02/2008'.
Esto se simplificaría si usaras TDate como argumento de la función... es más,
sería sencillísimo si usaras por ejemplo; un TDateTimePicker para el ingreso de las fechas,
puesto que sólo tendrías que verificar el día:
if YearOf(Date) < 15 then 'Error' (YearOf está en la Unit DateUtils).

Pero suponiendo que usamos un TEdit sería:
Código:
{ SUPONE FECHA EN FORMATO : DD/MM/AAAA }
function FechaEnRango(Fecha: string): Boolean;
{$J+}
const DiasMes: array[1..12] of Byte=(31,28,31,30,31,30,31,31,30,31,30,31);
{$J-}
var
  Dia,Mes,Anio: Integer;
begin
  Result:= True;
  Anio:= StrToInt(Copy(Fecha,7,4));
  Mes:=  StrToInt(Copy(Fecha,4,2));
  Dia:=  StrToInt(Copy(Fecha,1,2));
  // si el año es bisiesto agregar 1 día a enero
  if ((Anio mod 4 = 0)and(Anio mod 100 <> 0))or(Anio mod 400 = 0) then 
   DiasMes[2]:= DiasMes[2] + 1; 
  if (Dia < 15)or(Dia > DiasMes[Mes]) then Result:= False;
end;
Espero te pueda servir.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 11-05-2010
TheNew TheNew is offline
Registrado
 
Registrado: jun 2006
Posts: 6
Poder: 0
TheNew Va por buen camino
Gracias ecfisa. pero me gustaria saber en realidad como desplego en un dbgrid la amortizacion de las fechas. osea visualizar en el grid por medio de un bucle los dias de pagos asi.

cuota fecha pago valor cuota
1 15/01/2010 1500
2 30/01/2010 1500
3 15/02/2010 1500
4 28/02/2010 1500

la cantidad de cuotas las tomo de un Tedit y el valor de las cuotas la obtengo al calcular los field del adoquery. pero no se manejar las fechas para hacer un bucle con ellas, donde solo se pueda visualizar los cortes los 15 y 30 dias de cada mes. Infinitamente agradecido por tu disposicion a ayudarme.

Última edición por TheNew fecha: 11-05-2010 a las 18:49:22.
Responder Con Cita
  #4  
Antiguo 11-05-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo, ahora sí está claro.

Mirá, se me ocurre esto:
Código:
procedure TForm1.PonerFechas(AYear: string);
{$J+}
const
  DiasMes: array[1..12] of string=('31','28','31','30','31','30',
      '31','31','30','31','30','31');
  Mes: array[1..12] of string=('01','02','03','04','05','06','07',
      '08','09','10','11','12');
{$J-}
var
  i,Anio: Integer;
  FeStr: string;
  BM: TBookMarkStr;
  d15: Boolean;
begin
  Anio:= StrToInt(AYear);
  if ((Anio mod 4 = 0)and(Anio mod 100 <> 0))or(Anio mod 400 = 0) then
   DiasMes[2]:= '29';
  d15:= False;
  // al último para agregar, guardar 1er fecha
  with tbPrueba do
  begin
    Last;
    Append;
    FieldByName('FECHA').Value:= '15/' + Mes[1] + '/' +AYear;
    Post;
    BM:= Bookmark; // guardar posicion para ingresar
    for i:= 2 to 12 do
    begin
      Append;
      d15:= not d15;
      if d15 then
        FeStr:= '15'
      else
        FeStr:= DiasMes[i];
      FieldByName('FECHA').Value:= FeStr + '/' + Mes[i] + '/' +AYear;
      Post;
    end;
    Bookmark:= BM;  // en posición de ingreso
  end;
end;
El código crea las fechas en el DBGrid (en realidad en el DataSet), respetando
los días 29 de enero de los años bisiestos, por supuesto deberá existir el campo 'FECHA'
en el DataSet.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 12-05-2010
TheNew TheNew is offline
Registrado
 
Registrado: jun 2006
Posts: 6
Poder: 0
TheNew Va por buen camino
Gracias amigo. pero aun no se como ejecutar ese procedimiento en un TButton, como te dige al inicio soy novato de delphi7. Como hago para ejecutar este procedimiento al hacer click en un Tbutton.
Responder Con Cita
  #6  
Antiguo 12-05-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola, disculpame, ya te pongo dos formas de llamarlo.

Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
  PonerFechas('2000');
end;
o también:
Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
  PonerFechas(Edit1.Text); // suponiendo que allí tengas el año
end;
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 12-05-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola TheNew.

Mil disculpas, cometí un error al copiar y pegar. Puse una versión anterior de mis pruebas.
Pero como todavía no pudiste probarla, estoy a tiempo.

Esta es la que funciona:
Código:
procedure TForm1.PonerFechas(AYear: string);
{$J+}
const
  DiasMes: array[1..12] of string=('31','28','31','30','31','30',
      '31','31','30','31','30','31');
  Mes: array[1..12] of string=('01','02','03','04','05','06','07',
      '08','09','10','11','12');
{$J-}
var
  i,Anio: Integer;
  BM: TBookMarkStr;
begin
  Anio:= StrToInt(AYear);
  if ((Anio mod 4 = 0)and(Anio mod 100 <> 0))or(Anio mod 400 = 0) then
   DiasMes[2]:= '29';
  with tbPrueba do
  begin
    Last;   // al último para agregar, guardar 1er fecha
    BM:= Bookmark; // guardar posicion para ingreso
    for i:= 1 to 12 do
    begin
      Append; // agregar dia 15 del mes 'i'
      FieldByName('FECHA').Value:= '15/' + Mes[i] + '/' +AYear;
      Post;
      Append; // agregar dia 'N' del mes 'i'
      FieldByName('FECHA').Value:= DiasMes[i]+'/'+ Mes[i] + '/' +AYear;
      Post;
    end;
    Bookmark:= BM;  // en posición de ingreso
  end;
end;
Perdón nuevamente y Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 25-05-2010
TheNew TheNew is offline
Registrado
 
Registrado: jun 2006
Posts: 6
Poder: 0
TheNew Va por buen camino
Mil Gracias amigo.
Responder Con Cita
  #9  
Antiguo 26-05-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
De nada, ha sido un gusto.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
bucle para fechas de pagos chino150 Varios 5 19-05-2008 16:01:28
Como Insertar por Procedimiento 10 o mas registros para un calendario de pagos? IcebergDelphi Firebird e Interbase 1 20-05-2007 23:23:56
"Pagos por publicidad" jhonny Debates 15 22-09-2005 03:10:20
Imprimir Pagos en Matriz de Punto y Papel Continuo ? BlueSteel Impresión 0 28-04-2005 17:17:32


La franja horaria es GMT +2. Ahora son las 00:18:37.


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