Forum > Spanish

Dias de vencimiento, consulta sobre fechas

(1/1)

daragor:
Hola compañeros de lazarus, acudo nuevamente a uds. a fin de encontrar el mejor método para hacer un algoritmo que.. dadas 2 fechas del mes .. o mejor dicho dos días en numero pueda generar las fechas puntuales.

Veamos un ejemplo con numero reales, ... estamos creando un crédito para un cliente q pagara en cuotas, supongamos 6 cuotas y los días de vencimiento .. o de pago son los 1 y 15 de cada mes, es decir el día 1 debe pagar una cuota y el día 15 debe pagar otra.. y así sucesivamente. Entonces dada una fecha de inicio por ejemplo el 1/4/22 debemos generar en una tabla los días de vencimiento para q el sistema luego los tome y los informe... quedaría:

cuota 1:: 01/04/22
cuota 2:: 15/04/22
cuota 3:: 01/05/22
cuota 4:: 15/05/22
cuota 5:: 01/06/22
cuota 6:: 15/06/22

Aclaremos el usuario coloca los 2 números de los 2 días de fechas en el ingreso, pueden ser los días que quiera, por ejemplo el 5 y 20, el 10 y 25 etc.. no hay un patrón de 15 días de diferencia, puede ser el 10 y 20, 7 y 21.. también. Mas adelante se podría pensar que pasa si cae 30 de febrero, o 29..

Espero que se entienda, sino me dicen, pero desde ya agradezco su ayuda!

winni:
Hi!


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---var DeltaDays : integer;      StartDate, EndDate : TDateTime;....DeltaDays := 14; StartDate := Now;EndDate := StartDate + DeltaDays;showMessage (DateToStr(EndDate));  
Winni


daragor:
Hola Winni, veo que intentas leer en español, suerte con eso, el tema es que lo que me propones no sirve en absoluto para el problema planteado. Muchas gracias! Thx

Por mí parte ya he resuelto el tema, aún estoy puliendo el algoritmo con un par de cambios o mejoras como por ejemplo correr los días sábados y domingos, así que pronto lo estaré compartiendo, si surge una idea bienvenida sea!

daragor:
Bueno colegas, si a alguno les sirve les dejo la solución que he creado para la situación planteada en el post.
Si alguien quiere aportar mejoras, bienvenidas son.

Se deben usar las unidades DateUtils y StrUtils


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure TForm1.Button1Click(Sender: TObject);var  i, fin, d1, d2, dm, mes, x: byte;  anio: integer;  fechas: TDate;  diasem: string;begin  vinfo.Clear;  {Variables}  d1:= strtoint(dia1.Text);  // dia 1  d2:= strtoint(dia2.Text);  // dia 2  fin:= strtoint(cc.Text);   // cant. de cuotas  fechas:= fi.Value;         // fecha inicial, se graba primero  dm:= DayOf(fechas);        // dia inicial del ciclo  x:= 1;                     // ciclos, cambios de dia.  mes:= MonthOf(fechas);     // mes para cambios  anio:= YearOf(fechas);     // año para cambios  {Ciclo de Generación}  for i:= 1 to fin do        // cant. de cuotas  begin    diasem:= AnsiProperCase(LongDayNames[DayOfWeek(fechas)],[]); // nombre del dia!    {Fix dia sabado y domingo}    case diasem of     'Sábado':       begin         diasem:= 'Viernes *';         fechas:= StrToDate(inttostr(dm-1)+'/'+inttostr(mes)+'/'+inttostr(anio));       end;     'Domingo':       begin         diasem:= 'Lunes *';         fechas:= StrToDate(inttostr(dm+1)+'/'+inttostr(mes)+'/'+inttostr(anio));       end;    end;    {mostramos en lista}    vinfo.Lines.Add('Cuota '+inttostr(i)+' | '+FormatDateTime('dd/MM/YYYY',fechas)+' | Día: '+diasem);    {Algoritmo de Dias en incremento}    if dm = d1 then dm:= d2 else dm:= d1;    if x = 2 then            // 2 veces por mes!    begin      x:= 1;      inc(mes);              // aumenta mes      if mes = 13 then       // cambio de año y reinicio de mes      begin        mes:= 1;        inc(anio);           // aumenta año      end;    end else x:= 2;    fechas:= StrToDate(inttostr(dm)+'/'+inttostr(mes)+'/'+inttostr(anio));    {Fin}  end;end; 
Yo en mi sistema grabo todo en un tabla, aqui solo lo muestro en un tmemo.

Saludos

Navigation

[0] Message Index

Go to full version