Jump to content
Seja Membro VIP - Remova Banners de Propagandas, Tenha Liberado Qualquer Download, Além de Acessos em Áreas Exclusivas!! ×

Recommended Posts


  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  4
  • Content Per Day:  0.00
  • Reputation:   1
  • Achievement Points:  42
  • Solved Content:  0
  • Days Won:  0
  • Status:  Offline

Posted

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

 

 

 

 

 

 

 

 


  • Topic Count:  5
  • Topics Per Day:  0.00
  • Content Count:  518
  • Content Per Day:  0.19
  • Reputation:   164
  • Achievement Points:  3,451
  • Solved Content:  0
  • Days Won:  71
  • Status:  Offline
  • Age:  36
  • Device:  Android

Posted

@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

  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  4
  • Content Per Day:  0.00
  • Reputation:   1
  • Achievement Points:  42
  • Solved Content:  0
  • Days Won:  0
  • Status:  Offline

Posted
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

  • Topic Count:  5
  • Topics Per Day:  0.00
  • Content Count:  518
  • Content Per Day:  0.19
  • Reputation:   164
  • Achievement Points:  3,451
  • Solved Content:  0
  • Days Won:  71
  • Status:  Offline
  • Age:  36
  • Device:  Android

Posted

Blz!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.