Ir para conteúdo

Subrelatorio com tabela customizadas


Valter Freire de Carvalho

Posts Recomendados


  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  4
  • Conteúdo/Dia:  0.00
  • Reputação:   1
  • Pontos/Conquistas:  42
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Ola a todos 

estou fazendo um relatório que deve trazer listando uma a muma as verbas por funcionario, por periodo

Query do detalhe1

SELECT 
pfunc.codcoligada,
pfunc.NOME, 
PFUNC.CHAPA
FROM .pfunc         
INNER JOIN               
(     SELECT    DISTINCT 
    CODCOLIGADA, 
    chapa
    FROM        PFFINANC
    WHERE  
              PFFINANC.CODCOLIGADA = :COLIGADA
       AND (PFFINANC.ANOCOMP * 12 + PFFINANC.mescomp) >= (:ano * 12) + :mes - 6     
       AND (PFFINANC.ANOCOMP * 12 + PFFINANC.mescomp) <= (:ano * 12) + :mes   
       AND PFFINANC.CODEVENTO IN ('0501', '0620', '0700',  '0712', '3078')
) verbas  ON verbas.CODCOLIGADA = pfunc.CODCOLIGADA AND  verbas.chapa = pfunc.CHAPA 
WHERE PFUNC.CODSITUACAO <> 'D' 
ORDER BY 
PFUNC.CODCOLIGADA,
PFUNC.CHAPA

 

essa é a query  do subrelatório "sem ligação"

     SELECT    DISTINCT
        PFFINANC.CODCOLIGADA,
        PFFINANC.CHAPA,
        PFFINANC.CODEVENTO 
    FROM    PFFINANC
    WHERE  
              PFFINANC.CODCOLIGADA = :COLIGADA
       AND (PFFINANC.ANOCOMP * 12 + PFFINANC.mescomp) >= (:ano * 12) + :mes - 6     
       AND (PFFINANC.ANOCOMP * 12 + PFFINANC.mescomp) <= (:ano * 12) + :mes   
       AND PFFINANC.CODEVENTO IN ('0501', '0620', '0700',  '0712', '3078')
    ORDER BY 
        PFFINANC.CODCOLIGADA,
        PFFINANC.CHAPA,
        PFFINANC.CODEVENTO 

eu incluí um sub relatório  "sem ligação com a query ,  mas  o sistema não habilida o campo "caminho" para eu fazer a ligação dos dados das duas.

Quando mando imprimir, para cada item do detalhe da principal é exibido todas as linhas do sub relatório. 

Alguém pode tem uma opinião do quê está errado ??

Valeus

 

 

 

 

 

 

 

 

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  470
  • Conteúdo/Dia:  0.21
  • Reputação:   132
  • Pontos/Conquistas:  3.143
  • Conteúdo Resolvido:  0
  • Dias Ganho:  63
  • Status:  Offline
  • Idade:  35
  • Dispositivo:  Android

@Valter Freire de Carvalho, boa noite!

 

Como está criando um relatório via SQL e queres gerar uma query em um detalhe e outra query no sub-detalhe, terás que passar paramentos para a segunda query... pensa na execução do relatório... neste seu caso ele vai executar a primeira query e quando entrar no sub-detalhe e vai efetuar TUDO da segunda query... e assim por diante... essa é a lógica, porém neste seu exemplo...você pode criar somente uma QUERY e utilizar as quebras do próprio gerador... neste caso terás que criar uma tabela com todos os dados, por que depois o gerador vai quebrar, podes fazer uma analogia ao recurso de tabela dinâmica do Excel ("Comportamento são parecidos").

Logo criando uma tabela podes ter uma falsa impressão que ficará mais lento, porém, não vai, pois iras somente executar uma query, ou seja, vai só uma vez ao banco de dados, diferente do caso de duas query, pois a primeira ira executar somente uma vez, mas a segunda vai executar muitas vezes, conforme o número de registros da primeira query.

Falando em query, a sua tem um problema de performance, pois está utilizando funções no WHERE... isso é ruim para o banco, pois neste seu caso a query tem que trazer todos os dados (FULL SCAN) e depois utilizar seus filtros, diferente do que você indicasse para ele o que buscar... não sei se utiliza o SQLServer, se sim, podes verificar esse link  SQL Server - Dicas de Performance Tuning: Qual a diferença entre Seek Predicate e Predicate? - Dirceu Resende e sobre isso que estou lhe falando.

Bom, desculpe ter me alongado um pouco, mas caso precise de ajuda com o relatório, só decida o método que irás utilizar e/ou uma ajuda no desenvolvimento da query é só falar. Caso queiras efetuar  podes utilizar esses links:

Espero ter ajudado...

Abraços.

 

  • Like 1
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  4
  • Conteúdo/Dia:  0.00
  • Reputação:   1
  • Pontos/Conquistas:  42
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Em 22/01/2022 at 22:32, luisgustavogomes disse:

, boa noite!

 

Como está criando um relatório via SQL e queres gerar uma query em um detalhe e outra query no sub-detalhe, terás que passar paramentos para a segunda query... pensa na execução do relatório... neste seu caso ele vai executar a primeira query e quando entrar no sub-detalhe e vai efetuar TUDO da segunda query... e assim por diante... essa é a lógica, porém neste seu exemplo...você pode criar somente uma QUERY e utilizar as quebras do próprio gerador... neste caso terás que criar uma tabela com todos os dados, por que depois o gerador vai quebrar, podes fazer uma analogia ao recurso de tabela dinâmica do Excel ("Comportamento são parecidos").

Logo criando uma tabela podes ter uma falsa impressão que ficará mais lento, porém, não vai, pois iras somente executar uma query, ou seja, vai só uma vez ao banco de dados, diferente do caso de duas query, pois a primeira ira executar somente uma vez, mas a segunda vai executar muitas vezes, conforme o número de registros da primeira query.

Falando em query, a sua tem um problema de performance, pois está utilizando funções no WHERE... isso é ruim para o banco, pois neste seu caso a query tem que trazer todos os dados (FULL SCAN) e depois utilizar seus filtros, diferente do que você indicasse para ele o que buscar... não sei se utiliza o SQLServer, se sim, podes verificar esse link  SQL Server - Dicas de Performance Tuning: Qual a diferença entre Seek Predicate e Predicate? - Dirceu Resende e sobre isso que estou lhe falando.

Bom, desculpe ter me alongado um pouco, mas caso precise de ajuda com o relatório, só decida o método que irás utilizar e/ou uma ajuda no desenvolvimento da query é só falar. Caso queiras efetuar  podes utilizar esses links:

Espero ter ajudado...

Abraços.

 

 

Cara, obrigado pelo retorno, eu acabei sacando , como passar os parâmetros para o subrelatório,  eles têm que estar no detalhe que é o parent do subdetalhe, e não tinha sacado também que a onsulta deve ser feita para cada registro do detalhe pai, e não via nada documentado para detalhes que isavam uma sentença sql ao invés de uma tabela.

Mas agora que saquei esse  detalhe,  ficou fácil. TMJ

 

  • Like 1
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  470
  • Conteúdo/Dia:  0.21
  • Reputação:   132
  • Pontos/Conquistas:  3.143
  • Conteúdo Resolvido:  0
  • Dias Ganho:  63
  • Status:  Offline
  • Idade:  35
  • Dispositivo:  Android

Blz!

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.