Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Faccruz

[Resolvido] Quero colocar essa expressão no QRExpr

Recommended Posts

Boa tarde... Como faço pra colocar essa expressão num componente QRExpr do Quick?

begin	  if ((qryPesquisaTIPODOC.AsString = 'V') and		  (qryPesquisaTROCA.AsString <> 'S')) then		TotVendas := TotVendas + qryPesquisaTOTALVENDAS.AsFloat;	  if (qryPesquisaTIPODOC.AsString = 'D') and		 (qryPesquisaTROCA.AsString = 'S') then		TotDev := TotDev + qryPesquisaTOTALVENDAS.AsFloat;	  if ((qryPesquisaTIPODOC.AsString = 'V') and		  (qryPesquisaTROCA.AsString = 'S')) then		   TotTroca := TotTroca + qryPesquisaTOTAL_BRUTO.AsFloat;	  qryPesquisa.Next;	end;	Total := TotVendas - TotDev + TotTroca;	value := FloatToStrF(Total, ffnumber, 18,2);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq não colocar no OnCalcField ? Não seria mais simples ?

Pensei nessa possibilidade, mas surgiu a duvida... esse relatório é de vendas por vendedor. Posso tirar individual ou geral (todos vend.) e é agrupado pelo vendedor... Se eu escolho individual, sai correto... mas caso eu escolha o geral, ele sairá apenas com as vendas do grupo? ou Geral?Acho que consegui descrever o problema... http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em ambos deveria de sair certo, visto que é quebrado por vendedor, somente no caso do geral iria sair toda a listagem uma única vez... E no caso aquele código não tem como colocar no Expression, visto que você tem comandos como .Next

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em ambos deveria de sair certo, visto que é quebrado por vendedor, somente no caso do geral iria sair toda a listagem uma única vez... E no caso aquele código não tem como colocar no Expression, visto que você tem comandos como .Next

Certo... Criei um campo calculado, e no onCalcFields, coloquei o código (igual ao 1º post). Mas no momento que vou chamar o relatório dá Access Violation... onde será que eu errei?

 

Segue o código

procedure TFRelVendaVend.qryPesquisaCalcFields(DataSet: TDataSet);var  TotDev1, TotVendas1, TotTroca1 : Extended;begin  Total1 := 0; TotDev1 := 0; TotVendas1 := 0; TotTroca1 := 0;  qryPesquisa.First;  while not qryPesquisa.Eof do	begin	  if ((qryPesquisaTIPODOC.AsString = 'V') and		  (qryPesquisaTROCA.AsString <> 'S')) then		TotVendas1 := TotVendas1 + qryPesquisaTOTALVENDAS.AsFloat;	  if (qryPesquisaTIPODOC.AsString = 'D') and		 (qryPesquisaTROCA.AsString = 'S') then		TotDev1 := TotDev1 + qryPesquisaTOTALVENDAS.AsFloat;	  if ((qryPesquisaTIPODOC.AsString = 'V') and		  (qryPesquisaTROCA.AsString = 'S')) then		   TotTroca1 := TotTroca1 + qryPesquisaTOTAL_BRUTO.AsFloat;	  qryPesquisa.Next;	end;	Total1 := TotVendas1 - TotDev1 + TotTroca1;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for sempre esse fonte, não tem necessidade de colocar no OnCalcField, visto que nunca vai mudar os valores... provavelmente a query que você esta dando o while é a mesma que esta sendo usada no relatório... e no caso você nao esta atribuindo a nada esse seu código, sendo que não faz nada...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for sempre esse fonte, não tem necessidade de colocar no OnCalcField, visto que nunca vai mudar os valores... provavelmente a query que você esta dando o while é a mesma que esta sendo usada no relatório... e no caso você nao esta atribuindo a nada esse seu código, sendo que não faz nada...

Certo... então onde eu poderia colocar? Coloquei no OnPrint de uma QrLabel... mas caiu nakele problema... qndo gero o relatório individual, faz certo, porém se gero o Geral, ele não faz por vendedor...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas da forma que você esta trabalhando sempre vai pegar os valores totais mesmo, não seie exatamente o que pretende fazer, mas se quiser somente o valor total, pode fazer na tela que chama o relatório mesmo, antes de dar o Preview, ou se é somente para mostrar o valor no final do relatório, poderia usar o componante Summary, que ele mesmo irá fazer isto...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas da forma que você esta trabalhando sempre vai pegar os valores totais mesmo, não seie exatamente o que pretende fazer, mas se quiser somente o valor total, pode fazer na tela que chama o relatório mesmo, antes de dar o Preview, ou se é somente para mostrar o valor no final do relatório, poderia usar o componante Summary, que ele mesmo irá fazer isto...

Está certo se eu colocar assim no QRExpr?
SUM(IF((qryPesquisa.TipoDoc='V' and qryPesquisa.TROCA<>'S'), qryPesquisa.TotalVendas,  qryPesquisa.TotalVendas*(-1)))
resumindo... quero que ele some todas as vendas (TipoDoc = V) que não forem Troca (Troca <> S)Coloquei desse jeito... mas ele não traz valor algum...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só se for problema com os espaços que haviam antes do SUM e do 0 no final...

 

IF(qryPesquisa.TipoDoc='V' and qryPesquisa.TROCA<>'S' ,SUM(qryPesquisa.TotalVendas),0)

Mas a lógica do comando esta certa...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só se for problema com os espaços que haviam antes do SUM e do 0 no final...

IF(qryPesquisa.TipoDoc='V' and qryPesquisa.TROCA<>'S' ,SUM(qryPesquisa.TotalVendas),0)
Mas a lógica do comando esta certa...
Consegui acertar esse erro... mas ele está somando tudo... inclusive a devolução....
IF((qryPesquisa.TipoDoc='V') and (qryPesquisa.TROCA<>'S') ,SUM(qryPesquisa.TotalVendas),0)

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso não seria problema com o campo TotalVendas ? Este valor é carregado com qual valor ?

A qryPesquisa é montada da seguinte forma

qryPesquisa.SQL.Text := ' SELECT A.COD_PEDIDO NDocumento,					' +						  '		"V" TipoDoc,								' +						  '		A.COD_VEND,								 ' +						  '		A.DATA_PEDIDO Data1,						' +						  '		A.TOTAL_PEDIDO TotalVendas,				 ' +						  '		A.TROCAMERCADORIA Troca,					' +						  '		A.Total_Bruto,							  ' +						  '		CASE COALESCE(A.CANCELADA,"N")			  ' +						  '		   WHEN "S" THEN A.MOTIVOCANCEL			 ' +						  '		   WHEN "N" THEN AA.NOME_VEND			   ' +						  '		END NOME_VEND							   ' +						  ' FROM CADPEDIDO A								   ' +						  ' LEFT JOIN CADVENDEDOR AA ON						' +						  '   A.COD_VEND = AA.COD_VEND						 ' +						  ' WHERE 1 = 1										';  if DMDados.TCadConfigTipoRelVend.Value = 'N' then	 qryPesquisa.SQL.Add( ' AND COALESCE(A.CANCELADA,"N") = "N"  ' );  if (dDataIni <> 0) and (dDataFim <> 0) then	 qryPesquisa.SQL.Add( ' AND A.DATA_PEDIDO BETWEEN :PARDATAINI AND :PARDATAFIM ' );  if sCodVend <> '' then	 qryPesquisa.SQL.Add( ' AND A.COD_VEND = ' + QuotedStr(sCodVend) );  qryPesquisa.SQL.Add( ' UNION											  ' +					   ' SELECT B.COD_PEDIDO NDocumento,					' +					   '		"D" TipoDoc,								' +					   '		B.COD_VEND,								 ' +					   '		B.DATA_PEDIDO Data1,						' +					   '		B.TOTAL_LIQUIDO TotalVendas,				' +					   '		B.TROCAMERCADORIA Troca,					' +					   '		B.Total_Bruto,							  ' +					   '		BB.NOME_VEND								' +					   ' FROM CADDEVOLUCAO B								' +					   ' LEFT JOIN CADVENDEDOR BB ON						' +					   '   B.COD_VEND = BB.COD_VEND						 ' +					   ' WHERE 1 = 1										' );  if (dDataIni <> 0) and (dDataFim <> 0) then  begin	 qryPesquisa.SQL.Add( '  AND B.DATA_PEDIDO BETWEEN :PARDATAINI AND :PARDATAFIM ' );	 qryPesquisa.ParamByName('PARDATAINI').AsDateTime := dDataIni;	 qryPesquisa.ParamByName('PARDATAFIM').AsDateTime := dDataFim;  end;  if sCodVend <> '' then	 qryPesquisa.SQL.Add( ' AND B.COD_VEND = ' + QuotedStr(sCodVend) );  qryPesquisa.SQL.Add( ' ORDER BY 3 ' );  qryPesquisa.Open;
O que estou querendo é o seguinte... que some tudo o que for venda (TipoDoc='V') sem Devolução (Troca <>'S'), e depois subtraia as devoluções, no momento ele está somando tudo, não importando se é venda ou devolução. Vou postar uma imagem do relatório.

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso aquele IF do expression você somente esta colocando no Expression de agrupamento, certo ? No caso somente iria precisa nele...

Sim só no agrupamento...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pra constar Faccruz:você percebeu que a diferença entre o total que o sistema calculou e o total que deveria calcular é igual ao valor da primeira venda da graciane?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pra constar Faccruz:você percebeu que a diferença entre o total que o sistema calculou e o total que deveria calcular é igual ao valor da primeira venda da graciane?

Sim, eu percebi isso... é aí que está... no QRExpr, não consigo diferenciar as Devoluções das Vendas, tentei de várias formas, como pode constar nos posts anteriores

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pra constar Faccruz:você percebeu que a diferença entre o total que o sistema calculou e o total que deveria calcular é igual ao valor da primeira venda da graciane?

Sim, eu percebi isso... é aí que está... no QRExpr, não consigo diferenciar as Devoluções das Vendas, tentei de várias formas, como pode constar nos posts anteriores
está certo essa expressão?
SUM(IF(qryPesquisa.TIPODOC='V',qryPesquisa.TOTALVENDAS,0))
ele está trazendo valor zerado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.