Ver Mensaje Individual
  #5  
Antiguo 13-10-2012
Avatar de Chogo
Chogo Chogo is offline
Miembro
 
Registrado: may 2005
Ubicación: Pto Cortes,Honduras,C.A.
Posts: 148
Reputación: 19
Chogo Va por buen camino
ya resolvi mi problema , voy repasar mi problema y la soluccion

hice esta función en un modulo de acces para calcular los días entre dos fecha sin contar sabado y domingo.
Código:
Public Function Dias_sin_fin_semana(Desde As Date, Hasta As Date) As Integer
      Dim dias As Integer
      Dim i As Date
     
      dias = 0
      i = Desde
      
      Do While i <= Hasta
      
          If Weekday(i, 1) >= 2 And Weekday(i, 1) <= 6 Then
                dias = dias + 1
          End If
          i = i + 1
      Loop
      Dias_sin_fin_semana = dias

End Function
Luego use esta función en una query de access que quize utilizar en delphi, pero mis compañeros del foro me explicaron que no puedo usar esta funciones desde delphi.
Código SQL [-]
SELECT
       proveedores.Nombre AS proveedor,
       Clientes.Nombre AS cliente,
       REG_GARANTIA.serie,
       REG_GARANTIA.Codpro,
       REG_GARANTIA.Producto,
       REG_GARANTIA.Problema,
       REG_GARANTIA.estado_telefono,
       REG_GARANTIA.FECHA_INGRESO,
       REG_GARANTIA.FECHA_ENVIO,
       Dias_sin_fin_semana(REG_GARANTIA.FECHA_ENVIO,DATE()) AS DIAS
    FROM
       (REG_GARANTIA INNER JOIN Clientes ON REG_GARANTIA.CodCli=Clientes.CodCli) INNER JOIN proveedores ON REG_GARANTIA.ID_PROVEEDOR=proveedores.registro
    WHERE
       REG_GARANTIA.ID_ESTADO)=2;

asi que decidi eliminar esa funcion de la query y cree la funcion en delphi para hacer el calculo en delphi, pero necesitaba hacer un filtro de registros. usando el mismo campo calculado

aqui esta mi funcion en delphi

Código Delphi [-]
function Dias_sin_fin_semana(desde, hasta: double): integer;
var
    dias:integer;
    iouble;

begin

      dias:=0;
      i:=desde;
      while  i <= hasta do
      begin
          if (DayOfWeek(i) >=2)  and (DayOfWeek(i) <=6) then
          dias := dias + 1;
          i:=i + 1;
      end;
      result:=dias;

end;

Realize mi calculo en delphi usando un campo calculado
Código Delphi [-]
procedure TDmReport_Garantias.REVISION_PROVEECalcFields(DataSet: TDataSet);
begin
      REVISION_PROVEEDIAS.AsFloat:=Dias_sin_fin_semana(REVISION_PROVEEFECHA_ENVIO.AsDateTime,Date); 
end;

Aplique mi filtro sobre el campo calculado. usando el evento OnFilterRecord que se ejecuta despues del evento open del TAdoquery.

Código Delphi [-]
procedure TDmReport_Garantias.REVISION_PROVEEFilterRecord(
  DataSet: TDataSet; var Accept: Boolean);
begin
      Accept := REVISION_PROVEEDIAS.AsFloat > 20;

end;

Hay que tener el cuidade de poner a True la propiedad Filtered, antes llamar el evento open

Código Delphi [-]
REVISION_PROVEE.Close;
REVISION_PROVEE.Filtered:=True;
REVISION_PROVEE.Open;

Espero me halla explicado bien
Responder Con Cita