Vários critérios na adoquery, preenchendo um listbox

Delphi

10/10/2018

Bom dia amigos. Minha dúvida é a seguinte.

Na minha tabela saídas tenho os campos IdSaida, Data, IdTipoSaida, Discriminação, Valor.

O Idtiposaida recebe a id de uma outra tabela que tem os tipos de saída: 1 = Despesas fixas, 2 = manutenção, etc.

Assim, quero fazer um relatório de todas as saídas entre o dia 01 e o dia 20, por exemplo. E quero que ele some todas as saídas com Idtiposaida 1 nesse periodo e preencha uma linha num listbox. Depois todas as saídas com Idtiposaida 2, e preencha outra linha, etc.

Mas queria que, além disso, ele discriminasse. Por exemplo. Id 1 é despesa fixa. Então ele soma todas e preenche uma linha. Mas debaixo dessa linha ele mostre todos os registros, de despesa fixa daquele período, um por um, com seus devidos valores, uma vez que, na id despesas fixas terá várias discriminações diferentes, como aluguel, salários, etc.

Logo, seria um textbox mais ou menos assim:

Despesas fixas 1000,00
________________________________
Aluguel. 500,00
Salários. 500,00

Ou seja. A linha despesas fixas traz o total da soma de todas as despesas fixas daquele período. No caso foi um aluguel de 500 é um salário de 500.

É possível uma adoquery que faça tudo isso? Como seria o SQL?

E depois que a query fizer o serviço, como preencher o listbox?
Edilson Santiago

Edilson Santiago

Curtidas 0

Melhor post

Fernando Duwe

Fernando Duwe

19/10/2018

Oi Edilson,

Você tem duas possibilidades no seu exercício...

1ª: Monte os totalizadores através de um SQL, seria mais ou menos assim:

SELECT IDTIPOSAIDA, SUM(VALOR)
FROM TABLE 
WHERE DATA BETWEEN :PRDATAINICIAL AND :PRDATAFINAL
GROUP BY IDTIPOSAIDA, VALOR
ORDER BY 1


Assim, seu SQL já trará os valores corretamente.

2ª: Faça um select:
SELECT *
FROM TABLE 
WHERE DATA BETWEEN :PRDATAINICIAL AND :PRDATAFINAL
ORDER BY IDTIPOSAIDA


e percorra-o, no delphi, montando os totalizadores manualmente.

      while not vrQry.Eof do
      begin
         case vrQry.FieldByName('IDTIPOSAIDA').AsInteger 
               1 : vrTotalDespesasFixas := vrTotalDespesasFixas  + vrQry.FieldByName('VALOR').AsFloat
{
         E assim por diante...
}
         vrQry.Next;
      end;

GOSTEI 1
POSTAR