FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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; Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
|||
|
|||
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. |
#4
|
||||
|
||||
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; 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 .... |
#5
|
|||
|
|||
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.
|
#6
|
||||
|
||||
Hola, disculpame, ya te pongo dos formas de llamarlo.
Código:
procedure TForm1.Button1Click(Sender: TObject); begin PonerFechas('2000'); end; Código:
procedure TForm1.Button1Click(Sender: TObject); begin PonerFechas(Edit1.Text); // suponiendo que allí tengas el año end;
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
||||
|
||||
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;
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#8
|
|||
|
|||
Mil Gracias amigo.
|
#9
|
||||
|
||||
De nada, ha sido un gusto.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
|
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 |
|