none
Como montar um relatorio dessa maneira? RRS feed

  • Pergunta

  • Estou querendo elaborar um relatório da seguinte maneira:

    a tabela A é a tabela dos titulares e a tabela B é a tabela dos dependentes

    Eu queria fazer o seguinte:

    Titular
    Dependentes
    Dependentes
    Dependentes

    Ou seja, uma coisa do tipo:

    Nome                Matricula                 Idade                Sexo                Entrada
    Renan                    01                        22                     M                 11/11/2001
        Elaine                01                        21                     F                  11/11/2001
        Fábio                 01                        16                     M                 11/11/2001
        Lana                  01                        19                     F                  11/11/2001
    Bruno                    02                        22                     M                 12/12/2002
        Laura                02                         19                     F                  12/12/2002
        Vitor                  02                        10                     M                 12/12/2002
        Matheus            02                        18                     M                  12/12/2002

    Onde Elaine, Fabio e Lana são dependentes de Renan e Laura, Vitor e Matheus são dependentes de Bruno
    segunda-feira, 17 de dezembro de 2007 13:23

Respostas

  • O que o Sérgio esta mostrando não é o seu relatório e sim a consulta que você deveria montar para ter seu trabalho facilidado.

     

    Com uma consulta como aquela você pode pegar o campo 'NomeTit' e colocar como um novo agrupamento na sua tabela. O relatório não vai repetir o nome do titular, ele vai colocar o nome do titular em detalhe (podendo ter outra formatação inclusive). Acho que o problema talvez seja os detalhes do segurado. No seu caso você pode fazer da seguinte maneira:

     

    Na sua tabela voce vai ter:

    =Fields!Nome.Value    =Fields!Matricula.Value    ... etc

     

    Como a Matricula vai se repetir, ela pode ser usada como agrupamento na tabela (Clica com botão direito 'Inser group').

    Em 'Group on' adiciona a expressão: "=Fields!Matricula.Value"

     

    O seu resultado agora vai ser algo assim (Uma linha em branco a cada variação da matricula):

    Nome                Matricula                 Idade                Sexo                Entrada

    Renan                    01                        22                     M                 11/11/2001
    Elaine                01                        21                     F                  11/11/2001
    Fábio                 01                        16                     M                 11/11/2001
    Lana                  01                        19                     F                  11/11/2001

     

    Bruno                    02                        22                     M                 12/12/2002
    Laura                02                         19                     F                  12/12/2002
    Vitor                  02                        10                     M                 12/12/2002
    Matheus            02                        18                     M                  12/12/2002

     

     

    Na linha do agrupamento, ao invez de colocar =Fields!Nome.Value, Coloca '=First(Fields!Nome.Value), como o escopo é a Matricula, ele vai mostrar nessa linha o primeiro nome associado a matricula. Faz o mesmo com os outros campos =First(Fields!Idade.Value) etc...

     

    A sua tabela agora é assim

    Group:    =First(Fields!Nome.Value)    =first(Fields!Matricula.Value)    ... etc

    Detail:    =Fields!Nome.Value    =Fields!Matricula.Value    ... etc

     

    E o resultado deve ser algo como:

     

    Nome                Matricula                 Idade                Sexo                Entrada

    Renan                    01                        22                     M                 11/11/2001
    Renan                    01                        22                     M                 11/11/2001
    Elaine                01                        21                     F                  11/11/2001
    Fábio                 01                        16                     M                 11/11/2001
    Lana                  01                        19                     F                  11/11/2001

    Bruno                    02                        22                     M                 12/12/2002
    Bruno                    02                        22                     M                 12/12/2002
    Laura                02                         19                     F                  12/12/2002
    Vitor                  02                        10                     M                 12/12/2002
    Matheus            02                        18                     M                  12/12/2002

     

     

    Agora você só precisa esconder a primeira repetição dos detalhes, então na sua linha de detalhes adiciona uma expressão como essa no campo 'hidden':

     

    =not(Fields!Name.value<>First(Fields!Name.Value))

     

    Obviamente o Nome não é a melhor opção para fazer essa comparação porque se você tiver dependente e titular com o mesmo primeiro nome ele vai esconder DUAS linhas, ao invez de somente a primeira, mas acredito que vc tenha o ID das linhas que é unico, use o id na comparação. (=not(Fields!ID.value<>First(Fields!ID.Value))

     

    Pronto. O resultado deve ser esse que você está querendo, e agora você pode formatar o agrupamento da maneira que achar melhor.

     

    Abraço

    Boreki

     

     

     

    segunda-feira, 17 de dezembro de 2007 17:49

Todas as Respostas

  • Aparentemente é só você fazer um inner join normal.

     

    O recorset vai ficar algo como

    NomeTit  NomeDep MatTit MatDep

    Renan     Elaine      01       02

    Renan     Fabio       01       03

    Renan     Lana        01       04

     

    No rep services vc coloca como linha de detalhe nome do dependente e cria um agrupamento por Titular.

     

    Para pegar matricula etc vc pode usar ao inves de SUM(Matricula) use First(Matricula)

     

    Existem outros jeitos de fazer isso. Este é uma maneira

    segunda-feira, 17 de dezembro de 2007 13:39
  • Não é assim, desse jeito eu sei fazer hehe =D

    O meu problema é que preciso fazer Exatamente como descrevi acima...

    Ou seja

    Linha com detalhes do segurado
    Linhas com detalhes dos dependentes do segurado da linha de cima
    Linha com detalhes do segurado
    Linhas com detalhes dos dependentes do segurado da linha de cima
    Linha com detalhes do segurado
    Linhas com detalhes dos dependentes do segurado da linha de cima
    Linha com detalhes do segurado
    Linhas com detalhes dos dependentes do segurado da linha de cima


    E assim por diante... veja seu exemplo e compare com o meu, está diferente, o titular aparece em todas as linhas sendo que ele deveria aparecer só na primeira linha, além do mais do seu jeito não seria possível mostrar as informações do titular isoladamente, essas informações apareceriam em todas as linhas (gastando espaço do relatório e tinta da impressora do cliente [coisa que ele presa muito, pois os relatórios são gigantescos e tenho que estudar muito a melhor forma de faze-los]).
    segunda-feira, 17 de dezembro de 2007 14:03
  • O que o Sérgio esta mostrando não é o seu relatório e sim a consulta que você deveria montar para ter seu trabalho facilidado.

     

    Com uma consulta como aquela você pode pegar o campo 'NomeTit' e colocar como um novo agrupamento na sua tabela. O relatório não vai repetir o nome do titular, ele vai colocar o nome do titular em detalhe (podendo ter outra formatação inclusive). Acho que o problema talvez seja os detalhes do segurado. No seu caso você pode fazer da seguinte maneira:

     

    Na sua tabela voce vai ter:

    =Fields!Nome.Value    =Fields!Matricula.Value    ... etc

     

    Como a Matricula vai se repetir, ela pode ser usada como agrupamento na tabela (Clica com botão direito 'Inser group').

    Em 'Group on' adiciona a expressão: "=Fields!Matricula.Value"

     

    O seu resultado agora vai ser algo assim (Uma linha em branco a cada variação da matricula):

    Nome                Matricula                 Idade                Sexo                Entrada

    Renan                    01                        22                     M                 11/11/2001
    Elaine                01                        21                     F                  11/11/2001
    Fábio                 01                        16                     M                 11/11/2001
    Lana                  01                        19                     F                  11/11/2001

     

    Bruno                    02                        22                     M                 12/12/2002
    Laura                02                         19                     F                  12/12/2002
    Vitor                  02                        10                     M                 12/12/2002
    Matheus            02                        18                     M                  12/12/2002

     

     

    Na linha do agrupamento, ao invez de colocar =Fields!Nome.Value, Coloca '=First(Fields!Nome.Value), como o escopo é a Matricula, ele vai mostrar nessa linha o primeiro nome associado a matricula. Faz o mesmo com os outros campos =First(Fields!Idade.Value) etc...

     

    A sua tabela agora é assim

    Group:    =First(Fields!Nome.Value)    =first(Fields!Matricula.Value)    ... etc

    Detail:    =Fields!Nome.Value    =Fields!Matricula.Value    ... etc

     

    E o resultado deve ser algo como:

     

    Nome                Matricula                 Idade                Sexo                Entrada

    Renan                    01                        22                     M                 11/11/2001
    Renan                    01                        22                     M                 11/11/2001
    Elaine                01                        21                     F                  11/11/2001
    Fábio                 01                        16                     M                 11/11/2001
    Lana                  01                        19                     F                  11/11/2001

    Bruno                    02                        22                     M                 12/12/2002
    Bruno                    02                        22                     M                 12/12/2002
    Laura                02                         19                     F                  12/12/2002
    Vitor                  02                        10                     M                 12/12/2002
    Matheus            02                        18                     M                  12/12/2002

     

     

    Agora você só precisa esconder a primeira repetição dos detalhes, então na sua linha de detalhes adiciona uma expressão como essa no campo 'hidden':

     

    =not(Fields!Name.value<>First(Fields!Name.Value))

     

    Obviamente o Nome não é a melhor opção para fazer essa comparação porque se você tiver dependente e titular com o mesmo primeiro nome ele vai esconder DUAS linhas, ao invez de somente a primeira, mas acredito que vc tenha o ID das linhas que é unico, use o id na comparação. (=not(Fields!ID.value<>First(Fields!ID.Value))

     

    Pronto. O resultado deve ser esse que você está querendo, e agora você pode formatar o agrupamento da maneira que achar melhor.

     

    Abraço

    Boreki

     

     

     

    segunda-feira, 17 de dezembro de 2007 17:49
  • Vlw mesmo, nem sei como agradecer, deu tudo certinho aqui e consegui fazer oq eu queria.

    Vlw mesmo.
    terça-feira, 18 de dezembro de 2007 16:03