Pergunta

Estou tentando escrever um Crystal Report que tenha totais agrupados de forma diferente do relatório principal.A única maneira que consegui fazer isso até agora foi usar um sub-relatório para os totais, mas isso significa ter que acessar a fonte de dados novamente para recuperar os mesmos dados, o que parece um absurdo.Aqui está um exemplo simplificado:

       date   name   earnings   source          location
-----------------------------------------------------------
12-AUG-2008   Tom      $50.00   washing cars    uptown
12-AUG-2008   Dick    $100.00   washing cars    downtown     { main report }
12-AUG-2008   Harry    $75.00   mowing lawns    around town

                    total earnings for washing cars: $150.00 { subreport }
                    total earnings for mowing lawns:  $75.00

       date   name   earnings   source          location
-----------------------------------------------------------
13-AUG-2008   John     $95.00   dog walking     downtown
13-AUG-2008   Jane    $105.00   washing cars    around town  { main report }
13-AUG-2008   Dave     $65.00   mowing lawns    around town

                    total earnings for dog walking:   $95.00
                    total earnings for washing cars: $105.00 { subreport }
                    total earnings for mowing lawns:  $65.00

Neste exemplo, o relatório principal está agrupado por 'data', mas os totais são agrupados adicionalmente por 'fonte'.Procurei exemplos de uso de totais corridos, mas eles realmente não fazem o que preciso.Não existe alguma maneira de armazenar o conjunto de resultados e fazer com que o relatório principal e o sub-relatório façam referência aos mesmos dados?

Foi útil?

Solução

Hum...por mais bom que seja chamar o processo armazenado do relatório e ter tudo contido em um único local, no entanto, descobrimos (como você) que você eventualmente atingiu um ponto em que não consegue fazer com que o cristal faça o que deseja, mesmo que o os dados estão ali.

Acabamos introduzindo uma camada de negócios que fica abaixo do relatório e, em vez de “extrair” dados do relatório, “empurramos” os conjuntos de dados para ela e vinculamos os dados ao relatório.A vantagem é que você pode manipular os dados no código em conjuntos de dados ou objetos antes que cheguem ao relatório e, em seguida, simplesmente vincular os dados ao relatório.

Este artigo tem uma boa introdução sobre como configurar o envio de dados para os relatórios.Entendo que suas restrições de tempo/negócios podem não permitir que você faça isso, mas se for possível, eu recomendo fortemente, pois isso significa que podemos remover toda a "codificação" de nossos relatórios e colocá-la em código gerenciado, que é sempre uma coisa boa.

Outras dicas

A única maneira que consigo pensar em fazer isso sem uma segunda análise dos dados seria criando algumas fórmulas para fazer totais acumulados por grupo.O problema que presumo que você esteja enfrentando com os totais correntes existentes é que eles se destinam a seguir cada um dos grupos que estão totalizando.Como você parece querer que os subtotais sigam todos os dados 'brutos', isso não funcionará.

Se você criar suas próprias fórmulas para cada grupo que simplesmente soma o total das linhas correspondentes ao grupo, poderá colocá-las no final do relatório.A desvantagem desta abordagem é que os subtotais resultantes não serão dinâmicos em relação aos grupos.Em outras palavras, se você tivesse uma nova 'fonte', ela não apareceria nos subtotais até que você a adicionasse ou se você não tivesse dados de 'passear com o cachorro', ainda teria um subtotal para ela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top