Valter Freire de Carvalho Posted January 20, 2022 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 Report Posted January 20, 2022 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 Quote
luisgustavogomes Posted January 23, 2022 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 Report Posted January 23, 2022 @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: Cross Segmentos - Backoffice RM - BI - Passagem de parâmetros em consultas SQL – Central de Atendimento TOTVS Cross Segmentos - Backoffice RM - BI - Passagem parâmetro no RM Reports – Central de Atendimento TOTVS Cross Segmentos - Backoffice RM - BI - Passagem de parâmetro através de campo da base – Central de Atendimento TOTVS Espero ter ajudado... Abraços. 1 Quote
Valter Freire de Carvalho Posted January 26, 2022 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 Author Report Posted January 26, 2022 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: Cross Segmentos - Backoffice RM - BI - Passagem de parâmetros em consultas SQL – Central de Atendimento TOTVS Cross Segmentos - Backoffice RM - BI - Passagem parâmetro no RM Reports – Central de Atendimento TOTVS Cross Segmentos - Backoffice RM - BI - Passagem de parâmetro através de campo da base – Central de Atendimento TOTVS 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 1 Quote
luisgustavogomes Posted January 26, 2022 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 Report Posted January 26, 2022 Blz! Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.