Fórum SQL(consulta em 2 tabs-a soma elouqueceu!) #203549
30/12/2003
0
Feliz Ano Novo!
Estou com o seguinte problema em um relatório...
Eu tenho uma tabela de itens e uma tabela de lançamentos.
A tabela de lançamentos recebe os itens através de um dbLookupComboBox.
Nem todos os itens são lançados no mês e quando faço a consulta para o relatório ele exibe somente os itens lançados e seus respectivos valores.
Até ai tudo bem...
ADOQuery.Close;
ADOQuery.SQL.Clear;
ADOQuery.SQL.Add(´SELECT ENTRADAS, TIPOENTRADA, ITEMENTRADA, ITEM, VALOR´);
ADOQuery.SQL.Add(´From ItemEntrada,LancEntrada´);
ADOQuery.SQL.Add(´Where ITEM = ITEMENTRADA´);
ADOQuery.SQL.Add(´Order By ENTRADAS,TIPOENTRADA´);
ADOQuery.Open;
{ITEM e VALOR são campos da tabela LancEntrada}
O que venho tentando fazer sem resultado positivo é exibir todos os itens da tebela de itens que não tenham sido lançados sem valor ou com valor zerado.
Usei esta cláusula do sql, que até exibe todos os itens (mesmo não lançados), mas o somatório enlouqueceu!
... ADOQuery.SQL.Add(´Where ITEM = ITEMENTRADA or ITEM <> ITEMENTRADA´); ...
Para cada item não lançado o valor associado deveria ser ZERO ou nenhum, mas o que aparece é o somatório de todos os itens lançados.
ex.:
lancei CERVEJA, e COCACOLA (2,00 e 2,50(entrada manual de valor))
não lancei GARANÁ.
resultado:
CERVEJA 2,00
COCACOLA 2,50
GARANÁ 4,50 (deveria ser 0,00 ou vazio)
O relatório que estou fazendo é agrupado e utiliza RAVE via código.
segue detalhe do código...
Var SomaTotal : Double; SomaENTRADA, SomaTIPO, SomaITEM : Double; iENTRADA : String; iTIPO : String; iITEM : String; Begin SomaTotal := 0; ADOQuery.Close; ADOQuery.SQL.Clear; ADOQuery.SQL.Add(´SELECT ENTRADAS, TIPOENTRADA, ITEMENTRADA, ITEM, VALOR´); ADOQuery.SQL.Add(´From ItemEntrada,LancEntrada´); ADOQuery.SQL.Add(´Where ITEM = ITEMENTRADA or ITEM <> ITEMENTRADA´); ADOQuery.SQL.Add(´Order By ENTRADAS,TIPOENTRADA´); ADOQuery.Open; While not ADOQuery.Eof do Begin // Grupo por ENTRADAS SomaENTRADA := 0; iENTRADA := ADOQuery.FieldByName(´ENTRADAS´).AsString; RvSystemRelatorios.BaseReport.PrintCenter(iENTRADA,10); NextLine(RvSystemRelatorios); While (iENTRADA=ADOQuery.FieldByName(´ENTRADAS´).AsString) and (not ADOQuery.Eof) do Begin // Grupo por TIPO SomaTIPO := 0; iTIPO := ADOQuery.FieldByName(´TIPOENTRADA´).AsString; RvSystemRelatorios.BaseReport.PrintLeft(iTIPO,1); While (iTIPO= ADOQuery.FieldByName(´TIPOENTRADA´).AsString) and (iENTRADA=ADOQuery.FieldByName(´ENTRADAS´).AsString) and (not ADOQuery.Eof) do Begin // Grupo por ITEM SomaITEM := 0; iITEM := ADOQuery.FieldByName(´ITEMENTRADA´).AsString; While (iITEM = ADOQuery.FieldByName(´ITEMENTRADA´).AsString) and (iTIPO = ADOQuery.FieldByName(´TIPOENTRADA´).AsString) and (iENTRADA = ADOQuery.FieldByName(´ENTRADAS´).AsString) and (not ADOQuery.Eof) do Begin SomaITEM := SomaITEM + ADOQuery.FieldByName(´VALOR´).asFloat; SomaTIPO := SomaITEM + SomaTIPO; SomaENTRADA := SomaITEM + SomaENTRADA; SomaTotal := SomaITEM + SomaTotal; ADOQuery.Next; End; // Total do Grupo ITEM //RvSystemRelatorios.BaseReport.PrintRight( FormatFloat(´#,0.00´,SomaITEM),15.8); End; // Total do Grupo TIPO RvSystemRelatorios.BaseReport.PrintRight( FormatFloat(´,0.00´,SomaITEM),15.8); NextLine(RvSystemRelatorios); End; // Total do Grupo ENTRADAS RvSystemRelatorios.BaseReport.PrintRight( FormatFloat(´SubTotal - R$ ,0.00´,SomaENTRADA),19.5); NextLine(RvSystemRelatorios); End; // Imprime o Total Geral de Saídas With RvSystemRelatorios.BaseReport do Begin GotoFooter; PrintLeft( ´Total Geral´,MarginLeft); PrintRight( FormatFloat(´,0.00´,SomaTotal),19); End; End;
O que fazer??
desde já obrigado por toda ajuda!!
Douglas Bitencourt
Curtir tópico
+ 0Posts
30/12/2003
Douglas Bitencourt
Gostei + 0
30/12/2003
Douglas Bitencourt
Gostei + 0
30/12/2003
Douglas Bitencourt
como faço para vizualizar os registros lançados e não lançados em um relatório?
tabela 1 : ITENS (entradas,tipoentrada,itementrada)
tabela 2 : lancamentos (data,item, qnt,valor)
um dblookupcombobox pega os valores de itementrada(tabela 1) e coloca em item (tabela 2).
ex.: lancei 5 itenentrada na tabela 2
preciso exibir estes 5 itens da tabela 2 e mais os 15 restantes da tabela 1
pegando os valores dos 5 itens e nenhum valor para os demais.
é possível isso?
senão, de que outra forma fazer?
já tentei master/detail mas dá erro com dblookupcombobox.
preciso de ajuda...
obrigado.
Douglas.
Gostei + 0
31/12/2003
Douglas Bitencourt
por Adenilton Rodrigues
http://lib.seven.com.br/ampliar.asp?codcat=&codartigo=270
http://lib.seven.com.br/ampliar.asp?codcat=&codartigo=751
Gostei + 0
03/01/2004
Douglas Bitencourt
with ADOQuery do begin Close; SQL.Clear; SQL.Add(´SELECT I.TABELA1,..., L.TABELA2,...,´); SQL.Add(´FROM TABELA2 as L´); SQL.Add(´LEFT JOIN TABELA1 as I ON I.CAMPO = L.CAMPO´); Open; end;
Comentário de Adenilton Rodrigues...
Ainda tem uma questão pendente, com relação a limitar a consulta a um intervalo de datas específico ou uma data específica, pois se usar a cláusula WHERE para condicionar a consulta por uma data, o resultado é somente os itens que tenham uma data referente à cláusula where e o objetivo é ´todos os itens lançados e NÃO lançados no período´ indicado na cláusula where.
Os testes continuam e assim que tiver a resposta posto aki no forum.
sds
Douglas.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)