Ir para conteúdo
  • Cadastre-se

dev botao

Problema com o FortesReport - Informações Duplicadas


Ver Solução Respondido por Mauricio Elias,
  • Este tópico foi criado há 1412 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

Olá Tudo Bem!

 

Bom estou com um problema na geração do relatório usando o FortesReport, os itens de cada pedido estão ficando duplicados, como na imagem em anexo.

Desde já Agradeço a Atenção e peço desculpa pelo texto longo é que preciso explicar o contexto do relatório e situação.

Esse relatório é para mostrar todos os pedidos de cada cliente, nesse exemplo da imagem selecionei só um cliente, mas posso tirar o relatório de um determinado período e assim trazer pedido de vários clientes ordenado de forma alfabética, assim mostra todos pedidos exemplo da Aline, depois todos do Beltrano e assim sucessivamente.

Cada item de cada pedido é uma peça fabricada e pronta dito isso, em cada pedido é pra exibir só as peças que estão prontas para o embarque. Pra garantir isso eu seleciono cada item produzido de cada pedido em uma memory data. Essa parte está correta pois trás só as peças prontas de cada pedido dentro dessa memory data. Os campos dos itens(trldbtext) estão ligados nessa memory data, mas ao gerar o relatório aparece os mesmos itens pra todos os pedidos.

Pra tentar solucionar, na banda do tipo detail dos itens no evento BeforePrint, estou tentando usar a propriedade filter da memorydata dessa forma:

MDitens.Filter:='pedpedido='+inttostr(mdrel.FieldByName('pedpedido').asinteger)+' and '+'pedano='+mdrel.FieldByName('pedano').AsString;

 MDitens.Filtered:=True;

tento filtrar os itens de cada pedido, usando na comparação o numero do pedido da memorydata que tem todos os pedidos selecionados desse relatório(mdrel), e cujo o datasource do rlreport está ligado ao Datasource que está ligado a essa mdrel.

Mas infelizmente como na imagem em anexo mostra não da certo.

Tenho um relatório parecido com esse mas a diferença é que nele mostra todas a peças independente de mostrar só as peças prontas, nesse relatório que a mesma estrutura a unica coisa que muda é que ao invés de eu usar um memorydata com os itens(peças) de cada pedido, eu uso um IBtable, e nesse ligo com tabela de itens do pedido, e fazendo essa mesma filtragem no evento beforrprint mas usando o ibtable o relatório e exibido de forma correta, mostrando os itens de cada pedido.

Infelizmente no caso do relatório como o problema, não posso usar o ibtable pois as infos mostrados são da tabela de itens do pedido, mas como tem que exibir só as prontas e eu gerencio cada o estado de produção de cada peça em outra tabela, então preciso fazer um select e selecionar quais peças são de cada pedido e coloco o resultado na memorydata que não sei porque não funciona o evento filter da mesma.

Tentei usar o clientDataset mas o resultado foi o mesmo, usando o filter do cds. Não uso muito o cds mas vi em fórum tentei usar ele.

 

Alguma sugestão com relação a essa parte do filter?

Vou tentar mostra como está a estrutura do relatório:

 

A estrutura do relatório é a seguinte:

Banda1((btTitle)) - cabeçalho do relatório

RLGroup - cujo o campo Datafield está setado com o campo primarykey do cadastro de cliente, pra poder separar por cliente todos os pedidos dele.

   rlband(dtdetail) - dentro desse Group tenho um band to tipo detail com os dados do pedido

   RLSubDetail - esse subdetail tem o seu datasource ligado ao datasource dos itens filtrados na memorydata dos itens

        RLBand(bttitle) - dentro do subdetail tenho uma banda do titulo onde coloco os nomes de cada campo dos itens

        Rlband(btDetail) - dentro so subdetail vem a banda detail que cada campo está ligado a memory dos itens selecionados(é no evento beforeprint dessa banda que estou tentando usar o filter mas sem sucesso)

RLBand(btSummary) - essa banda vem logo depois do rlgroup(fora dele) e exibi os totalizadores geral de todos os pedidos do relatorio.

RLSubDetail - esse subdetail vem depois da summary e nele tenho um totalizador por tipo de documento como mostrado na imagem o datasource dele está ligado a memorydata mdtpdoc 

      dentro dele tenho:

      RLBand(btTitle) - com o nome dos tipos de documento

      Rlband(btDetail) - com os campos dos tipos de documento ligados ao seu respectivo memorydata de tipo de documentos com os seu valores somado de cada tipo

RLBand(btFooter) - por a última banda rodapé na qual mostro o numero da pagina(usanso um rlsysteminfo)

 

Bom essa é a estrutura, gostaria de saber se tem alguma outra forma de fazer esse relatório? Ou alguma forma que consiga exibir os itens corretos de cada pedido?

Usando outro componente de ligação com os dados? 

 

Desde já Meu Muito Obrigado pela Atenção e Ajuda!

Desculpa postar um texto tão longo.

 

Obrigado!

imagem_relatorio_carga.jpg

  • Consultores
Postado

Bom dia Maurício.

Em 11/12/2020 at 12:03, Mauricio Elias disse:

Bom essa é a estrutura, gostaria de saber se tem alguma outra forma de fazer esse relatório? Ou alguma forma que consiga exibir os itens corretos de cada pedido?

Usando outro componente de ligação com os dados? 

É possível que o problema seja o sql em si e não a estrutura. Chegou a verificar se o resultado do select gera dois registros?

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • 2 semanas depois ...
  • Membros Pro
Postado
Em 17/12/2020 at 09:36, EMBarbosa disse:

Bom dia Maurício.

É possível que o problema seja o sql em si e não a estrutura. Chegou a verificar se o resultado do select gera dois registros?

Boa Tarde EMBarbosa 

Antes de Tudo Obrigado por me responder e desculpa a demora em te responder.

Sim verifiquei o resultado do sql sim e ele traz 4 registros(no caso desse exemplo da imagem), sendo 3 registros no caso itens pertencentes ao pedido 27975 e 1 ao pedido 27973.

Então o correto seria exibir só 1 registro no pedido 27973 e os outros 3 no pedido 27975 mas não exibi dessa forma.

Já tentei outras formas mas nenhuma da certo. Estou vendo se consigo fazer com outro gerador de relatórios(report builder) pois com o fortes não sei mais o que fazer e como tentar.

Por Favor como você montaria a estrutura em fortes pra exibir todos os pedidos em ordem de cliente, exemplo cliente 1 mostra todos os pedidos e seu(s) respectivos itens ( esses itens só os que estão prontos pra serem transportados, tenho uma tabela de produção na qual sei quando cada produto está pronto), cliente 2 todos os pedidos com seu itens  ?

Desde já Muito Obrigado pela Ajuda e Atenção!

Desejo um Feliz e Prospero Ano Novo para todos! Deus Abençoe á Todos!

  • Consultores
Postado
22 horas atrás, Mauricio Elias disse:

Por Favor como você montaria a estrutura em fortes pra exibir todos os pedidos em ordem de cliente, exemplo cliente 1 mostra todos os pedidos e seu(s) respectivos itens ( esses itens só os que estão prontos pra serem transportados, tenho uma tabela de produção na qual sei quando cada produto está pronto), cliente 2 todos os pedidos com seu itens  ?

Desde já Muito Obrigado pela Ajuda e Atenção!

É difícil falar assim. Precisaria ter seu ambiente. Se quiser montar um exemplo pequeno só com esse relatório e essas tabelas eu posso tentar olhar.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • 2 semanas depois ...
  • Membros Pro
  • Solution
Postado

Olá EMBarbosa Tudo Bem Feliz Ano Novo!

Em 30/12/2020 at 17:08, EMBarbosa disse:

É difícil falar assim. Precisaria ter seu ambiente. Se quiser montar um exemplo pequeno só com esse relatório e essas tabelas eu posso tentar olhar.

Obrigado por Responder!

Consegui resolver o problema.

Antes no meu relatório eu usava, o ibtable pra exibir as informações dos itens, e nele usava as propriedades filter e filtred, onde no filter tem regra que filtrava os itens de cada pedido desde que o campo filtred estive true. Pois bem como o componente memorydata também tem essas mesmas propriedades, eu através do sql selecionei só itens que eram pra ser exibidos(no ibtable exibia todos os itens do pedido), então tentei usar as mesmas propriedades de maneira igual, mas a diferença que só exibiria os itens selecionados antes pelo meu sl e se encontravam nessa memorydata, mas o problema é não estava filtrando como descrevi no primeiro post. Depois de muito pesquisar descobri que a propriedade filter da memorydata não foi implementada por isso não era executada.

Então descobri a existência do evento onfilterrecord que tem na memorydata, clientdataset e até na ibtable.

Nesse evento fiz o filtro dessa maneira exemplo:

procedure TFcrRELCARGA.MDitensFilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
     accept:=(MDitens.FieldByName('pedpedido').asinteger = mdrelaux.FieldByName('pedpedido').asinteger) and (MDitens.FieldByName('pedano').AsString = mdrelaux.FieldByName('pedano').AsString);
end; 

o detalhe pra executar esse evento a propriedade Filtered da memorydata tem que estar true.

Então a solução foi a seguinte no evento beforeprint da banddetail onde imprimi os itens do pedido eu faço assim:

MDitens.Filtered:=True;

Dessa forma antes de imprimir os itens de cada pedido eu ativo o filtro que está no evento onfilterrecord da memorydata dessa forma o filtro é executado com isso mostrando apenas os itens corretos de cadas item.

Muito Obrigado EMBarbosa e a Todos que pelo menos visualizaram meu post coma dúvida.

Problema Resolvido!

Obrigado! 

  • Curtir 1
  • Consultores
Postado
Em 13/01/2021 at 12:06, Mauricio Elias disse:

Muito Obrigado EMBarbosa e a Todos que pelo menos visualizaram meu post coma dúvida.

Problema Resolvido!

Obrigado! 

Que bom que resolveu.

Bom trabalho por aí!

 

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Este tópico foi criado há 1412 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.