Faccruz 0 Denunciar post Postado Dezembro 6, 2006 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
marcio.theis 3 Denunciar post Postado Dezembro 6, 2006 Pq não colocar no OnCalcField ? Não seria mais simples ? Compartilhar este post Link para o post Compartilhar em outros sites
Faccruz 0 Denunciar post Postado Dezembro 6, 2006 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
marcio.theis 3 Denunciar post Postado Dezembro 6, 2006 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
Faccruz 0 Denunciar post Postado Dezembro 6, 2006 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
marcio.theis 3 Denunciar post Postado Dezembro 6, 2006 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
Faccruz 0 Denunciar post Postado Dezembro 6, 2006 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
marcio.theis 3 Denunciar post Postado Dezembro 6, 2006 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
Faccruz 0 Denunciar post Postado Dezembro 6, 2006 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
marcio.theis 3 Denunciar post Postado Dezembro 6, 2006 Tente assim: IF(qryPesquisa.TipoDoc='V' and qryPesquisa.TROCA<>'S' , SUM(qryPesquisa.TotalVendas), 0) Compartilhar este post Link para o post Compartilhar em outros sites
Faccruz 0 Denunciar post Postado Dezembro 6, 2006 Tente assim: IF(qryPesquisa.TipoDoc='V' and qryPesquisa.TROCA<>'S' , SUM(qryPesquisa.TotalVendas), 0) ERROR : Wrong Arguments For IF Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Dezembro 6, 2006 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
Faccruz 0 Denunciar post Postado Dezembro 6, 2006 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
marcio.theis 3 Denunciar post Postado Dezembro 6, 2006 No caso não seria problema com o campo TotalVendas ? Este valor é carregado com qual valor ? Compartilhar este post Link para o post Compartilhar em outros sites
Faccruz 0 Denunciar post Postado Dezembro 6, 2006 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. Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Dezembro 6, 2006 No caso aquele IF do expression você somente esta colocando no Expression de agrupamento, certo ? No caso somente iria precisa nele... Compartilhar este post Link para o post Compartilhar em outros sites
Faccruz 0 Denunciar post Postado Dezembro 6, 2006 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
bdexterholland 0 Denunciar post Postado Dezembro 6, 2006 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
Faccruz 0 Denunciar post Postado Dezembro 7, 2006 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
Faccruz 0 Denunciar post Postado Dezembro 7, 2006 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 anterioresestá 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