Eder Postado Fevereiro 26, 2007 Denunciar Share Postado Fevereiro 26, 2007 Ola..pessoal..Fiz um relatorio aparentemente simples no quickreport.....está relacionado na query 2 tabelas...(masterDetalhes)Na banda sumary coloquei um qrexp = SUM(query1.KM)pra somar a km do vendedor percorreu....então o relatorio fica com o seguinte layout:primeiro coloca o dialogo abaixo nome do vendedor...ao lado a data e o km...logo abaixo lista as visitas que efetuou ao cliente naquele dia acima.no final existe a banda sumary que tem um qrexpre que totaliza o KM do periodo....o problema é queo KM conta o KM * o nr de registros inseridos.....exemplo: se o camarada fez 10 km e efetuou 3 visitas ele conta km=30 Algguem poderia me dizer porque acontece isto??segue codigo abaixo que gera o relatorio:procedure TFormR11CVisita.XiButton1Click(Sender: TObject);var Txt:String;beginIf DateTimePicker2.Date < DateTimePicker1.Date ThenbeginShowMessage('Intervalo de datas Inválido, a data Inicial é maior que a data Final!');DateTimePicker2.Date := DateTimePicker1.Date;exit;end;IF DbVendedor.Text = 'TODOS' THENBeginTXT := 'Select * from VISITA, IT_VISITA where '+'(Visita.codigo = It_visita.CodVisita) and '+'(Visita.data between :datai and :dataf) order '+'by Visita.Vendedor, Visita.data';endelseBeginTXT := 'Select * from VISITA, IT_VISITA where '+'(Visita.codigo = It_visita.CodVisita) and '+'(Visita.Vendedor = ' + QuotedStr(DbVendedor.text)+ ') and '+'(Visita.data between :datai and :dataf) order '+'by Visita.Vendedor, Visita.data';End;FormR1CVisita.Query1.Close;FormR1CVisita.Query1.SQL.Text := Txt;FormR1CVisita.Query1.ParamByName('datai').AsDate := DateTimePicker1.Date;FormR1CVisita.Query1.ParamByName('dataf').AsDate := DateTimePicker2.Date;FormR1CVisita.Query1.Open;//If FormR1CVisita.Query1.IsEmpty ThenbeginShowMessage('Nenhum Registro Encontrado!');exit;end;FormR1CVisita.quickrep1.preview;END;Grato Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Fevereiro 26, 2007 Denunciar Share Postado Fevereiro 26, 2007 Olá Eder,No caso, cada visita seria um registro???o que está acontecendo, é que sua select esta repetindo o campo KM pra cada registro de visita, tipo:vendedor1----visita1----10vendedor1----visita2----10vendedor1----visita3----10E talvez a solução seria dividir essa select em duas Queryes.abraços. Progr'amador. B) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Fevereiro 27, 2007 Autor Denunciar Share Postado Fevereiro 27, 2007 E ai...Programador..beleza?CarinhaNo caso, cada visita seria um registro???Resposta: não....eu lanço primeiro o vendedor, data e o kme abaixo atraves de uma tabela masterdetalhes eu lanço as visitas:exemplo:============================VENDEDOR: ZE DATA: 25/02/2007 KM: 210 ============================VISITA-ITEM_VISITA-CLIENTE - PRODUTO-------------------------------------------------000001 0001 LOJA DO ZE FEIJÃO000001 0002 BAZAR MA ARROZ000001 0003 BAR DO K CERVEJAai você diz em: E talvez a solução seria dividir essa select em duas Queryes.Como fazer isto?Poderias da uma ajudinha...não fiz com duas queries???Mas não tem jeito com apenas uma query?? parece tão simplinho o relatorio!!!muito Grato..t+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Fevereiro 27, 2007 Denunciar Share Postado Fevereiro 27, 2007 No caso, cada visita seria um registro???Resposta: não....eu lanço primeiro ovendedor, data e o kme abaixo atraves de uma tabela masterdetalhes eu lanço as visitas:exemplo:============================VENDEDOR: ZE DATA: 25/02/2007 KM: 210 ============================VISITA-ITEM_VISITA-CLIENTE - PRODUTO-------------------------------------------------000001 0001 LOJA DO ZE FEIJÃO000001 0002 BAZAR MA ARROZ000001 0003 BAR DO K CERVEJAOlá Eder,Era isso que eu tava falando, diga uma coisa: em que tabela fica esses campos? seria KM em tabela VISITA e as visitas na tabela IT_VISITA?Sua select é essa: Select * from VISITA, IT_VISITA where ...Se for, sua select está resultando assim:VENDEDOR DATA KM VISITA ITEM_VISITA CLIENTE PRODUTO ZE 25/02/2007 210 000001 0001 LOJA DO ZE FEIJÃO ZE 25/02/2007 210 000001 0002 BAZAR MA ARROZ ZE 25/02/2007 210 000001 0003 BAR DO K- CERVEJAabraços Progr'amador. B) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Fevereiro 27, 2007 Autor Denunciar Share Postado Fevereiro 27, 2007 Sim...é exatamente como você colocou.....por isto ele pega o km x o nr de registros....Mas..Programador....você teria alguma idéia pra resolver este probleminha?? Grato Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Fevereiro 27, 2007 Denunciar Share Postado Fevereiro 27, 2007 Sim...é exatamente como você colocou.....por isto ele pega o km x o nr de registros....Mas..Programador....você teria alguma idéia pra resolver este probleminha?? GratoOlá Eder,Como eu já havia dito, a solução é usar duas Querys uma pra tabela VISITA e outra pra tabela IT_VISITAQualquer dúvida, posta aí!abraços Progr'amador.B) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Fevereiro 27, 2007 Autor Denunciar Share Postado Fevereiro 27, 2007 Como eu já havia dito, a solução é usar duas Querys uma pra tabela VISITA e outra pra tabela IT_VISITAQualquer dúvida, posta aí!Ok..isto entendi...porem eu gostaria se você puder é claro...que você me desse uma dica, um exemplo de como trabalhar com duas queries no mesmo relatorio...EU NUNCA FIZ ISTO..nem imagino...pois sei que o quickrep1 é igual a apenas uma QUERY....então não sei como resolver..Poderias me ajudar??Abraços..e muito Grato :unsure: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Fevereiro 27, 2007 Denunciar Share Postado Fevereiro 27, 2007 ..., um exemplo de como trabalhar com duas queries no mesmo relatorio...EU NUNCA FIZ ISTO..nem imagino...pois sei que o quickrep1 é igual a apenas uma QUERY....então não sei como resolver..Sem querer interferir, mas só para ir adiantando, você poderia utilizar o mesmo conceito do item 2 neste postAbraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Fevereiro 28, 2007 Autor Denunciar Share Postado Fevereiro 28, 2007 Micheusbeleza??Obrigado em responder..Carinha....tentei...tentei e não consigui fazer funcionar...acredito que é por causa do meu layout do quick ou algo parecido...codigo de impressão....sei lá.Particularmente não gosto de trabalhar com Table no quick.....não sei mexer muito bem com este componente no quick...gosto da query...acho mais facil e pratica...pra mim que sou fã de delphi..porem não sou programador(conhecedor). apenas faço algumas aplicações aqui na empresa...para resolver problemas com falta de informações....bom....................Não teria uma maneira de fazer este processo mais simples com query???Veja bem....agora eu tenho um leyout prontinho....do quick...ligado a uma query=quickrep1e num outro form anterior a este eu processo o relatorio atraves de um botão de IMPRIMIR...neste botão tenho o seguindo codigo:IF DbVendedor.Text = 'TODOS' THENBeginTXT := 'Select * from VISITA, IT_VISITA where '+'(Visita.codigo = It_visita.CodVisita) and '+'(Visita.data between :datai and :dataf) order '+'by Visita.Vendedor, Visita.data';endelseBeginTXT := 'Select * from VISITA, IT_VISITA where '+'(Visita.codigo = It_visita.CodVisita) and '+'(Visita.Vendedor = ' + QuotedStr(DbVendedor.text)+ ') and '+'(Visita.data between :datai and :dataf) order '+'by Visita.Vendedor, Visita.data';End;FormR1CVisita.Query1.Close;FormR1CVisita.Query1.SQL.Text := Txt;FormR1CVisita.Query1.ParamByName('datai').AsDate := DateTimePicker1.Date;FormR1CVisita.Query1.ParamByName('dataf').AsDate := DateTimePicker2.Date;FormR1CVisita.Query1.Open;//If FormR1CVisita.Query1.IsEmpty ThenbeginShowMessage('Nenhum Registro Encontrado!');exit;end;FormR1CVisita.quickrep1.preview;END;Eu costumo trabalhar com o codigo direto no botão...é claro que devido a complexidade do relatorio as vezes tenho que fazer algumas modificações...acredito que este do tópico ..também tenho que mudar algo....Tens alguma idéia pra aproveitar o meu raciocinio.....pra não ter que começar do zero o relatorio já que só falta este detalhe da KM sair duplicando??Agora se não tiver ai.......hehehe...ai to ferrado....B0m É isto ai....amigão...um abraço e muito grato mais uma vez.... :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Fevereiro 28, 2007 Denunciar Share Postado Fevereiro 28, 2007 Não teria uma maneira de fazer este processo mais simples com query???Olá Eder,Em Tutoriais & Dicas, tem um exemplo bem simples usando DUAS Queryes (Link abaixo), siga passa a passo usando as suas tabelas que vai da certo, observe todos os detalhes sem pressa. Procure fazer do zero (Um novo relatorio), e não esqueça de fazer um backup antes. ;) Criando Um Relatório no QuickReport Passo a Passoabraços Progr'amador.B) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Março 1, 2007 Autor Denunciar Share Postado Março 1, 2007 Programador...amigão..não está fácil...tou tentando....dentro do seu exemplo fiz e deu certo...mas no meu caso ...não está dando......mas tudo bem....deixa pra lá.....Valeu a tentativa....obrigado a você e o Michel...Talvez outro dia dou mais uma olhada.....hoje já tou com a cuca cheia...agora...não me conforme com o seguinte ...tenho o relatorio prontinho....certinho.....ele relaciona por dia o que o vendedor visitou de clientes.....um relatorio bonitinho,,,mas só por causa do km....duplicar....bom deixa pra lá........tenho que descansar um pouco ...senão vou pirar....rsrsrs;t+;;abraços;. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Março 2, 2007 Denunciar Share Postado Março 2, 2007 Programador...amigão..não está fácil...tou tentando....dentro do seu exemplo fiz e deu certo...mas no meu caso ...não está dando......mas tudo bem....deixa pra lá.....Valeu a tentativa....obrigado a você e o Michel...Talvez outro dia dou mais uma olhada.....hoje já tou com a cuca cheia...agora...não me conforme com o seguinte ...tenho o relatorio prontinho....certinho.....ele relaciona por dia o que o vendedor visitou de clientes.....um relatorio bonitinho,,,mas só por causa do km....duplicar....bom deixa pra lá........tenho que descansar um pouco ...senão vou pirar....rsrsrs;t+;;abraços;.Não!!!, não desista! Vamos fazer o seguinte:Use o mesmo relatorio que você tava usando, (faça um Backup antes)Vamos muda um pouco a estrutura dele.Adicione outra Query, vou chamar as Queryes de QryVisita e QryItVisita e um Data Source (DataSource1) ligado à QryVisita.Na opção DataSet do QuickRep1 coloque a query QryViSita.E nas Querys coloque (no Object Inspector):------------------------------------------------------QryViSita: SQL: Select * from VISITA where vendedor like :vendedor anddata between :datai and :dataforder by Vendedor, dataParams: vendedor : ftStringdatai : ftDatedataf : ftDate------------------------------------------------------QryItVisita: SQL: Select * from VISITA where CodVisita = :codigoParams: codigo : ftIntegerDataSource : DataSource1------------------------------------------------------Substitua os DataSet dos seus QRDBText de acordo com as suas Queryse o codigo a baixo:var vendedor : string; begin if DbVendedor.Text = 'TODOS' then vendedor := '%' else vendedor := DbVendedor.Text; with FormR1CVisita do begin QryVisita.Close; QryVisita.ParamByName('datai').AsDate := DateTimePicker1.Date; QryVisita.ParamByName('dataf').AsDate := DateTimePicker2.Date; QryVisita.Open; QryItVisita.Close; QryItVisita.Open; if QryVisita.RecordCount > 0 then QuickRep1.Preview else begin ShowMessage('Nenhum Registro Encontrado!'); exit; end; end; ou se preferir montar as querys em tempo de execução: var txt1, txt2, vendedor : string; begin if DbVendedor.Text = 'TODOS' then vendedor := '%' else vendedor := DbVendedor.Text; txt1 := 'Select * from VISITA ' + 'where vendedor like '+QuotedStr(vendedor)+' and ' + ' data between :datai and :dataf' + 'order by Vendedor, data'; txt2 := 'Select * from VISITA ' + 'where CodVisita = :cod'; with FormR1CVisita do begin QryVisita.Close; QryVisita.SQL.Clear; QryVisita.SQL.Add(txt1); QryVisita.ParamByName('datai').AsDate := DateTimePicker1.Date; QryVisita.ParamByName('dataf').AsDate := DateTimePicker2.Date; QryVisita.Open; QryItVisita.Close; QryItVisita.SQL.Clear; QryItVisita.SQL.Add(txt2); QryItVisita.ParamByName('cod').AsInteger := QryVisita.FieldByName('codigo').AsInteger; QryItVisita.Open; if QryVisita.RecordCount > 0 then QuickRep1.Preview else begin ShowMessage('Nenhum Registro Encontrado!'); exit; end; end;quaisquer dúvidas em um dos pontos, pode perguntar mesmo!abraços Progr'amador.B)abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Março 2, 2007 Autor Denunciar Share Postado Março 2, 2007 Beleza...Amigão...sua reposta me deixou animado......então fiz o exemplo porem aqui você diz que:QryItVisita: SQL: QUOTESelect * from VISITA where CodVisita = :codigoResposta: aqui não seria: a tabela ITVISITA ???Então coloquei esta ITVISITA e usei o codigo no botão:procedure TFormR11CVisita.XiButton1Click(Sender: TObject);var vendedor : string;begin if DbVendedor.Text = 'TODOS' then vendedor := '%' else vendedor := DbVendedor.Text; with FormR1CVisita do begin QryVisita.Close; QryVisita.ParamByName('datai').AsDate := DateTimePicker1.Date; QryVisita.ParamByName('dataf').AsDate := DateTimePicker2.Date; QryVisita.Open; QryItVisita.Close; QryItVisita.Open; if QryVisita.RecordCount > 0 then QuickRep1.Preview else begin ShowMessage('Nenhum Registro Encontrado!'); exit; end; end;END;ai testei o relatorio e ele me informou que NÃO EXISTE REGISTRO..mas existeAI TESTEI o outro codigo em tempo de execução:também mudei este codigo achei que tava errado né? txt2 := 'Select * from VISITA ' + 'where CodVisita = :cod';referencia a tabela ITVISITAai deu erro na hora de clicka no botão:qryvisita parameto dataf não encontrado, mas está la....Olhei o resto e parece que está tudo certinho...repassei todos os seus passos e também esta ok... :unsure: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Março 2, 2007 Denunciar Share Postado Março 2, 2007 Resposta: aqui não seria: a tabela ITVISITA ???Isso mesmo, foi erro meu.ai testei o relatorio e ele me informou que NÃO EXISTE REGISTRO..mas existejá ocorreu comigo (não sei se era bug) um fato desse, de ter registro e o RecordCount esta com valor -1 :huh: Então faz da forma você tinha feito, usando a função IsEmpty:If Query1.IsEmpty Then begin ShowMessage('Nenhum Registro Encontrado!'); exit; end; quickrep1.preview;Quanto ao erro: qryvisita parameto dataf não encontrado deve esta faltando algum atributo aí!Tenta ai a primeira opção.abraços Progr'amador.B) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Março 3, 2007 Autor Denunciar Share Postado Março 3, 2007 Carinha...beleza???Mudei como havia me dito e dei umas 3 olhadas gerais...passo a passo em todos os itens...e não achei nada de diferente......mas agora a mensagem dizendo que não existe não aparece mais ....em contrapartida...o relatorio sai vazio.....sem dados..MAS TEM DADOS nas tabelas...codigo:procedure TFormR11CVisita.XiButton1Click(Sender: TObject);var vendedor : string;begin if DbVendedor.Text = 'TODOS' then vendedor := '%' else vendedor := DbVendedor.Text; with FormR1CVisita do begin QryVisita.Close; QryVisita.ParamByName('datai').AsDate := DateTimePicker1.Date; QryVisita.ParamByName('dataf').AsDate := DateTimePicker2.Date; QryVisita.Open; QryItVisita.Close; QryItVisita.Open; If QryVisita.IsEmpty Then QuickRep1.Preview else begin ShowMessage('Nenhum Registro Encontrado!'); exit;end;end;END;Estranho Né?Acontece coisas em programação...que não da pra entender!!Mudei até o layout do quickrep...pois era diferente do seu....fiz igual ao seu...mas não sai os dados....olhei os qrtexts emfim já nem sei mais o que olhar... :( Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Março 3, 2007 Denunciar Share Postado Março 3, 2007 ...mas agora a mensagem dizendo que não existe não aparece mais ....em contrapartida...o relatorio sai vazio.....sem dados..... If QryVisita.IsEmpty Then QuickRep1.Preview else begin ShowMessage('Nenhum Registro Encontrado!'); exit; end; ... Estranho Né? Acontece coisas em programação...que não da pra entender!!Não é estranho não. você fez o contrário do que o Progr'amador sugeriu. Tem que ser assim:... If NOT QryVisita.IsEmpty Then QuickRep1.Preview else begin ShowMessage('Nenhum Registro Encontrado!'); exit; end; ...Observe o Not Empty - visualiza se não estiver vazio.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Março 5, 2007 Autor Denunciar Share Postado Março 5, 2007 Ops...Michel...Troquei as bolas aqui...na verdade colei incorretamente....você Tem razão.....Porem o relatorio não funca mesmo....ele me diz que NÃO EXISTE REGISTRO porem existe.......codigo completinho:procedure TFormR11CVisita.XiButton1Click(Sender: TObject);var vendedor : string;begin if DbVendedor.Text = 'TODOS' then vendedor := '%' else vendedor := DbVendedor.Text; with FormR1CVisita do begin QryVisita.Close; QryVisita.ParamByName('datai').AsDate := DateTimePicker1.Date; QryVisita.ParamByName('dataf').AsDate := DateTimePicker2.Date; QryVisita.Open; QryItVisita.Close; QryItVisita.Open; If NOT QryVisita.IsEmpty Then QuickRep1.Preview else begin ShowMessage('Nenhum Registro Encontrado!'); exit; end;end;End;Não sei mais o que pensar..... :( Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Março 5, 2007 Autor Denunciar Share Postado Março 5, 2007 ola...segue abaixo pra ajudar a estrutura das tabelas...Tabela: VISITA.DBcodigodatafilialvendedorkmTabela> ITVISITA.DBCodItemCodVisita (relacionamento)TipoVisitaClientesetc...........................Bom é isto ai colegas...se tiverem mais alguma ideia..por favor manda ai....vou tentando por aqui também.....muito grato a todos....t+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Março 5, 2007 Denunciar Share Postado Março 5, 2007 ...mas agora a mensagem dizendo que não existe não aparece mais ....em contrapartida...o relatorio sai vazio.....sem dados..Olá Eder,Voce fez isso:Na opção DataSet do QuickRep1 coloque a query QryViSita.abraços Progr'amador.B) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Março 5, 2007 Autor Denunciar Share Postado Março 5, 2007 opa......beleza??Na opção DataSet do QuickRep1 coloque a query QryViSita.Com certeza.Amigão..só não entendi o seguinte.....aonde esta o relacionamento...entre a a tabela visita e itvisita?na QryItVisita NOS parametros?? é isto?? Select * from ITVISITA where CodVisita = :codigoSerá que eu não poderia te mandar via email as tabelas e parte do aplicativo pra você dar uma olhadinha?? porque não sei mas aonde mexer..Bom..é isto ai...valeu..e otima semana de trampo..t+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Progr'amador Postado Março 5, 2007 Denunciar Share Postado Março 5, 2007 Amigão..só não entendi o seguinte.....aonde esta o relacionamento...entre a a tabela visita e itvisita?na QryItVisita NOS parametros?? é isto?? Select * from ITVISITA where CodVisita = :codigoOlá Eder,você colocou na opção DataSource da QryItVisita o DataSource1 que esta ligado a QryVisita???é isso que fará o relacionamento.Será que eu não poderia te mandar via email as tabelas e parte do aplicativo pra você dar uma olhadinha?? porque não sei mas aonde mexer..Pode mandar.elienai@tj.ro.gov.brObs. Esse e-mail tem bloqueios para certos arquivos, então se você mandar zipado (.ZIP), tem que renomear mudando o tipo de arquivo para txt por exemplo, tipo Projeto.zip para Projeto.txt, aí quando eu for abrir aqui eu renomeio para ZIP dinovo.Entendeu??? ;) Bom..é isto ai...valeu..e otima semana de trampo..t+ Ok, Valeu! tudo de bom pra você tambem :D abraços Progr'amador.B) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Março 5, 2007 Autor Denunciar Share Postado Março 5, 2007 você colocou na opção DataSource da QryItVisita o DataSource1 que esta ligado a QryVisita???é isso que fará o relacionamento.Resposta: eu já emaginava erá só pra ter certeza...eu tinha feitoObs. Esse e-mail tem bloqueios para certos arquivos, então se você mandar zipado (.ZIP), tem que renomear mudando o tipo de arquivo para txt por exemplo, tipo Projeto.zip para Projeto.txt, aí quando eu for abrir aqui eu renomeio para ZIP dinovo.Resposta: ok fiz como você me instruiumuito Grato :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Eder
Ola..pessoal..
Fiz um relatorio aparentemente simples no quickreport.....está relacionado na query 2 tabelas...(masterDetalhes)
Na banda sumary coloquei um
pra somar a km do vendedor percorreu....então o relatorio fica com o seguinte layout:
primeiro coloca o dia
logo abaixo nome do vendedor...ao lado a data e o km...
logo abaixo lista as visitas que efetuou ao cliente naquele dia acima.
no final existe a banda sumary que tem um qrexpre que totaliza o KM do periodo....o problema é queo KM conta o KM * o nr de registros inseridos.....
exemplo: se o camarada fez 10 km e efetuou 3 visitas ele conta km=30
Algguem poderia me dizer porque acontece isto??
segue codigo abaixo que gera o relatorio:
Grato
Link para o comentário
Compartilhar em outros sites
21 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.