none
Não mostrar subrelatorio que não tenha dados RRS feed

  • Pergunta

  •  

    Boa tarde, 

    Não consegui fazer com que subrelatórios que não apresentem dados no retorno da consulta não sejam mostrados.

    Achei um campo dentro da configuração do relatório que faz com que o relatório não apareça, mas a secção onde esta o subrelatório ainda aparece e fica um espaço em branco entre um subrelatório e outro.

     

    Tem como fazer ate com que esta secção desapareça??

     

    Obrigado

    terça-feira, 23 de setembro de 2008 17:58

Respostas

  • Opa!,

     

    vamos tentar assim:

     

    Junior,

     

                No relatório principal (lista de países), eu tenho a lista de países no item “Section (Details a)”, adiciono um novo item ao relatório “Section (Details b)”, e adicione um sub-relatório para exibir os respectivos moradores.

     

                Problema: Como exibir apenas os países com moradores cadastrados? Ou seja, o sub-relatório (de moradores) somente será visualizado caso exista pelo 1 morador cadastro para o pais corrente.

     

                Neste caso, preciso criar um identificador no relatório principal para fazer um supress no item onde está localizado o sub-relatório “Section (Details b)” e por isso que eu criei uma coluna no SQL principal chamado SumCustomers, que contem o total de moradores por pais.

     

    Com isso eu tenho um ID para criar o supress no sub-relatório (a partir do relatório principal).

     

    No relatório principal, clico com o botão da direita na “Section (Details b)”, ou seja , no item do sub-relatório, seleciono a opção “section expert”, clico no botão X-2 (ao lado do checkbox Supress (No Drill-Down), e adiciono a seguinte fórmula:

     

    {Country.SumCustomers }=0

     

    Caso o valor do campo pais seja igual a 0, não exibir a seção no relatório.

     

    Era essa a dúvida?

               

     

     

    quarta-feira, 24 de setembro de 2008 14:26
    Moderador

Todas as Respostas

  • Junior,

     

    Qual é o relatório que vc está utilizando? Crystal Reports ou ReportViewer?

     

     

    Valeu!

    terça-feira, 23 de setembro de 2008 20:12
    Moderador
  • Crystal.

     

    terça-feira, 23 de setembro de 2008 20:31
  • Junior,

     

    Um exemplo de como resolver esse problema no SQL ou no "supress" do Crystal Reports.

     

    Neste exemplo, vou "criar" um relatório de paises e seus respectivos moradores (com dados de endereço, telefone (neste caso usando um sub-report).


    Layout do relatório:

     

        Brazil 
                   José E Saraiva, city 001, ... 
                   Michael L. Rothkugel, city 001, ...
                   Pablo  Rovira Diez, city 001, ...

        EUA      
                   Scott M. Rodgers, city 001, ...
                   Raymond  Sam, city 001, ...


    Minha estrutura (tabelas):

    tabela: Country
                    CountryID
                    CountryName


    tabela: Customer
                    CustomerID
                    CustomerName
                    EmailAddress
                    City
                    StateProvinceName
                    PostalCode
                    CountryID


    Problema: Preciso exibir APENAS os paises com moradores cadastrados (como resolver no próprio SQL):

    Code Snippet

     

    select c.CountryID,
           c.CountryName,
           tCustomers.SumCustomers
     from Country c inner join (select tc.CountryID, count(tcr.CustomerID) as SumCustomers
              from country tc
           left join customer tcr on tc.CountryID = tcr.CountryID
           group by tc.CountryID ) tCustomers on c.CountryID = tCustomers.CountryID
     where SumCustomers >0

     

     

    um SQL mais simples (mais como o mesmo resultado)

     

    Code Snippet

    select CountryID,

           CountryName,

           SumCustomers

    from (

    select c.CountryID,

           c.CountryName,

           (select count(tcr.CustomerID)

            from customer tcr

            where tcr.CountryID = c.CountryID) as SumCustomers

    from Country c ) as tmp

    where tmp.SumCustomers >0

     

     

    resultado:

     

    CountryID CountryName     SumCustomers
    AU        Australia       3591
    CA        Canada          1571
    DE        Germany         1780
    FR        France          1810
    GB        United Kingdom  1913
    US        United States   7843


    Esse SQL eu vou utilizar para fazer a construção do relatório principal (ou seja, criei um campo "SumCustomers", para identificar se existem dados para o país a ser impresso) . Além disso, com menos dados, o relatório será exibido bem mais rápido.

     

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    quarta-feira, 24 de setembro de 2008 12:56
    Moderador
  • E ai Laercio, blz??

     

    Fiquei na duvida:

    Como sua solução irá influenciar nos detalhes do relatório principal?? Ou seja não ha dados para serem exibidos no subrelatório, mas somente a sql desativa a area de detalhes onde esta o subrelatório sem dados??

     

     

    Obrigado

     

    quarta-feira, 24 de setembro de 2008 13:14
  • Opa!,

     

    vamos tentar assim:

     

    Junior,

     

                No relatório principal (lista de países), eu tenho a lista de países no item “Section (Details a)”, adiciono um novo item ao relatório “Section (Details b)”, e adicione um sub-relatório para exibir os respectivos moradores.

     

                Problema: Como exibir apenas os países com moradores cadastrados? Ou seja, o sub-relatório (de moradores) somente será visualizado caso exista pelo 1 morador cadastro para o pais corrente.

     

                Neste caso, preciso criar um identificador no relatório principal para fazer um supress no item onde está localizado o sub-relatório “Section (Details b)” e por isso que eu criei uma coluna no SQL principal chamado SumCustomers, que contem o total de moradores por pais.

     

    Com isso eu tenho um ID para criar o supress no sub-relatório (a partir do relatório principal).

     

    No relatório principal, clico com o botão da direita na “Section (Details b)”, ou seja , no item do sub-relatório, seleciono a opção “section expert”, clico no botão X-2 (ao lado do checkbox Supress (No Drill-Down), e adiciono a seguinte fórmula:

     

    {Country.SumCustomers }=0

     

    Caso o valor do campo pais seja igual a 0, não exibir a seção no relatório.

     

    Era essa a dúvida?

               

     

     

    quarta-feira, 24 de setembro de 2008 14:26
    Moderador
  •  

    Agora entendi, era isso mesmo.
    Vou fazer o teste aqui agora a tarde e te falo

     

    Obrigado

    quarta-feira, 24 de setembro de 2008 14:52
  • Blz Junior,

     

    Depois não deixe de postar um feedback da solução.

     

    Valeu!

     

    quarta-feira, 24 de setembro de 2008 14:56
    Moderador
  • Ta dando um erro na hora de gravar a formula.  Diz q a formula ta errada no seu caso {Country.SumCustomers }=0

    Country é o Datatable???

     

    Este campo SumCustomers ele tem de ficar no DataTable do relatório principal???

     

    quarta-feira, 24 de setembro de 2008 18:56
  • Funcionou, vlw por mais essa ajuda

     

    quinta-feira, 25 de setembro de 2008 15:35
  • Junior,

     

    Valeu! É muito gratificante pode ajudar a comunidade MSDN!

     

    No final de semana eu vou terminar o 3 vídeo (e vou colocar esse exemplo) uma vez que essa parte de sub-relatório não é facil de resolver.

     

    Assim que eu terminar e o mesmo for aprovado eu mando um e-mail para vc.

     

    E precisando é só postar!

     

     

     

     

    quinta-feira, 25 de setembro de 2008 16:40
    Moderador
  •  

    E ai laercio, deixa eu aproveitar pra te perguntar:

    Sabe de algum provedor que hospede com Crystal?? So achei um que fala que hospeda mas na verdade é Reportviwer

     

    Obrigado

    quinta-feira, 25 de setembro de 2008 17:45