Hola
Perdon (trate de editarlo pero no pude, se borra lo bonito) creo que va asi:
Código Delphi
[-]
sqlFactura.SQL.Clear;
sqlFactura.SQL.Text 'SELECT numefact AS Factura, sum(valor) AS Valor,'+
'fechinivig AS Inicio_Vigencia, fechfinvig AS Fin_Vigencia' +
'FROM factura' +
'WHERE cedula = :sCedula and sum(valor) <> 0 and compania ='+
':sCompania and producto = :sProducto' +
'GROUP BY cedula, numefact, fechinivig, fechfinvig,'+
'compania, producto' +
'ORDER BY cedula, fechinivig' +
sqlFactura.ParamByName('sCedula').AsString := F_Recaudos.eCedula.Text;
sqlFactura.ParamByName('sCompania').AsString := F_Recaudos.cbxCompania.Text;
sqlFactura.ParamByName('sProducto').AsString := F_Recaudos.cbxProducto.Text;
sqlFactura.Open;
El where antes del group by.
En el caso del having si es correcta la posicion.
Saludos