Totalizador Customizado

      Nenhum comentário em Totalizador Customizado

Para implementar totalizadores em relatórios é uma tarefa muito simples, mas, em algumas situações, é necessário implementar uma customização mais avançada.
Vamos supor que por algum motivo é necessário integrar 2 datasets diferentes num mesmo relatório.
Esta pode ser uma situação comum.

Se for para apresentar dados em um unico “Tablix” (cada único tablix possui apenas um único dataset apontado) e for necessário recuperar em “detalhes” um registro de um outro dataset, voce pode facilmente utilizar a função lookup.
A função lookup, é bastante simples e tem como objetivo recuperar apenas 1 único resultado.

A sintaxe da função lookup é basicamente:

=Lookup(Fields!SaleProdId.Value, Fields!ProductID.Value,  Fields!Name.Value, “Product”)

Onde:
– “Fields!SaleProdId.Value” é o campo do Dataset principal, que voce usa como referencia para pesquisa.
– “Fields!ProductID.Value” é o campo do Segundo Dataset, que voce usa para pesquisar.
– “Fields!Name.Value” é o campo do Segundo Dataset, que voce vai recuperar para mostrar no relatório.
– “Product” é o nome do Segundo Dataset, que não faz parte do “Tablix”.

Lembre-se: Com o Lookup, voce recupera um unico valor, portanto o campo de pesquisa deve ser único.

Dica: Se For o campo de pesquisa não for “único”, voce pode “concatenar” com o simbolo “+”, usando mais de um campo.

Voltando pro caso do “Totalizador customizado”.
Supondo que voce tenha que implementar um totalizador, recuperando um conjunto de valores de um segundo dataset.

Neste caso, voce pode utilizar um código customizado em seu relatório que acumula valores recuperados de um Lookupset.
O lookupset tem a função semelhante ao lookup, a diferença é que o lookupset recupera mais de um valor.

Atenção: o retorno do lookupset é um ARRAY de valores, portanto não adianta usar a função SUM para agregar resultados retornados do lookupset!

Implemente o seguinte código no seu relatório:
(Em Report -> Report Properties -> Code)

Function TotalItens(ByVal items As Object()) As Double
   Dim total as double
   total = 0
   If items Is Nothing Then
      Return total
   End If
 
   For Each item As Object In items
      total = total + item
   Next
  
   Return total
End Function

No campo do tablix que deseja fazer o “totalizador customizado”, acrescente a “expression” (fx):

=Code.TotalItens(LookupSet(Fields!Category.Value, Fields!Category.Value,  Fields!UnitPrice.Value, “ProductValues”))

A função “TotalItens” acumula todos os valores de preços unitários, somando um a um, desde que a categoria do primeiro dataset seja igual a do segundo dataset.
Neste caso, o segundo dataset tem vários valores de preços unitários, ele não retorna um unico valor.

Assim como no caso do Lookup, no LookupSet voce pode também utilizar a concatenação de dois campos ou mais se for necessário.
Tudo dependende do caso, da situação.

Pense também que esta técnica pode ser utilizada em outras situações, como por exemplo em cálculos que utilizem percentuais, por exemplo.

Resumindo, acredito que a dica aqui pode ser útil um dia.

Grande abraço e até a próxima.

Deixe uma resposta