Recent

Author Topic: Dias de vencimiento, consulta sobre fechas  (Read 469 times)

daragor

  • Jr. Member
  • **
  • Posts: 60
    • Blog Webscom
Dias de vencimiento, consulta sobre fechas
« on: April 14, 2022, 03:14:18 pm »
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!
Inculcando el software libre.
https://www.webscom.com.ar

winni

  • Hero Member
  • *****
  • Posts: 3134
Re: Dias de vencimiento, consulta sobre fechas
« Reply #1 on: April 14, 2022, 07:23:26 pm »
Hi!

Code: Pascal  [Select][+][-]
  1. var DeltaDays : integer;
  2.       StartDate, EndDate : TDateTime;
  3. ....
  4. DeltaDays := 14;
  5. StartDate := Now;
  6. EndDate := StartDate + DeltaDays;
  7. showMessage (DateToStr(EndDate));
  8.  
  9.  

Winni



daragor

  • Jr. Member
  • **
  • Posts: 60
    • Blog Webscom
Re: Dias de vencimiento, consulta sobre fechas
« Reply #2 on: April 14, 2022, 08:23:39 pm »
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!
« Last Edit: April 14, 2022, 08:30:18 pm by daragor »
Inculcando el software libre.
https://www.webscom.com.ar

daragor

  • Jr. Member
  • **
  • Posts: 60
    • Blog Webscom
Re: Dias de vencimiento, consulta sobre fechas
« Reply #3 on: April 15, 2022, 09:29:14 pm »
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  [Select][+][-]
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   i, fin, d1, d2, dm, mes, x: byte;
  4.   anio: integer;
  5.   fechas: TDate;
  6.   diasem: string;
  7. begin
  8.   vinfo.Clear;
  9.   {Variables}
  10.   d1:= strtoint(dia1.Text);  // dia 1
  11.   d2:= strtoint(dia2.Text);  // dia 2
  12.   fin:= strtoint(cc.Text);   // cant. de cuotas
  13.   fechas:= fi.Value;         // fecha inicial, se graba primero
  14.   dm:= DayOf(fechas);        // dia inicial del ciclo
  15.   x:= 1;                     // ciclos, cambios de dia.
  16.   mes:= MonthOf(fechas);     // mes para cambios
  17.   anio:= YearOf(fechas);     // año para cambios
  18.   {Ciclo de Generación}
  19.   for i:= 1 to fin do        // cant. de cuotas
  20.   begin
  21.     diasem:= AnsiProperCase(LongDayNames[DayOfWeek(fechas)],[]); // nombre del dia!
  22.     {Fix dia sabado y domingo}
  23.     case diasem of
  24.      'Sábado':
  25.        begin
  26.          diasem:= 'Viernes *';
  27.          fechas:= StrToDate(inttostr(dm-1)+'/'+inttostr(mes)+'/'+inttostr(anio));
  28.        end;
  29.      'Domingo':
  30.        begin
  31.          diasem:= 'Lunes *';
  32.          fechas:= StrToDate(inttostr(dm+1)+'/'+inttostr(mes)+'/'+inttostr(anio));
  33.        end;
  34.     end;
  35.     {mostramos en lista}
  36.     vinfo.Lines.Add('Cuota '+inttostr(i)+' | '+FormatDateTime('dd/MM/YYYY',fechas)+' | Día: '+diasem);
  37.     {Algoritmo de Dias en incremento}
  38.     if dm = d1 then dm:= d2 else dm:= d1;
  39.     if x = 2 then            // 2 veces por mes!
  40.     begin
  41.       x:= 1;
  42.       inc(mes);              // aumenta mes
  43.       if mes = 13 then       // cambio de año y reinicio de mes
  44.       begin
  45.         mes:= 1;
  46.         inc(anio);           // aumenta año
  47.       end;
  48.     end else x:= 2;
  49.     fechas:= StrToDate(inttostr(dm)+'/'+inttostr(mes)+'/'+inttostr(anio));
  50.     {Fin}
  51.   end;
  52. end;
  53.  

Yo en mi sistema grabo todo en un tabla, aqui solo lo muestro en un tmemo.

Saludos
Inculcando el software libre.
https://www.webscom.com.ar

 

TinyPortal © 2005-2018