none
Acumular valor a cada linha no relatório RRS feed

  • Pergunta

  • Olá

    Gostaria da ajuda de vocês com uma expressão que tenho que criar para um campo de uma relatório

    Tenho um campo que vai acumulando um valor de debito, seria mais ou menos assim:

     

    Considerando que o limite do cliente é 200 reais e o que ultrapassa este limite chamo de Excesso

    tenho que demonstrar a cada documento debitado o valor de excesso apos o débito do documento

     

    CLIENTE                               DOCUMENTO               VALOR               EXCESSO

    01                                          A                                            300                        100

    01                                          B                                            200                        300

    02                                          A                                            400                        200

     

    Posso ter mais de um cliente.

     

    Tentei de varias formas fazer isso, sem conseguir sucesso.

     

    Alguem tem alguma ideia ou ja fez algo parecido?

     

    vlws pela atenção...

     

    abs...

    quinta-feira, 8 de outubro de 2009 19:43

Respostas

  • Biffi,

    Muito cuidado ao utilizar variaveis globais para armazenar valores de calculos. Em determinadas situacoes a engine de processamento pode reiniciar as variaveis globais (por exemplo, entre trocas de pagina) de modo que seus calculos ficaram incorretos.

    Eua credito que voce pode criar uma expressao para fazer este calculo. Para mostrar o valor do cliente, basta colocar
    Imagino que voce tenha dois grupos de linha, um para cliente, e um para documento. Neste caso, para mostrar o valor, voce utilizara:
    =Sum(Fields!Valor.Value,"NomeDoEscopoDoDocumento")

    Para mostrar o valor que aquele cliente passou do excesso, basta usar a expressao runningvalue:
    =RunningValue(Fields!Valor.Value, Sum, "NomeDoEscopoDoCliente") - (Limite do Cliente)

    A primeira ira mostrar a soma linha a linha, para cada cliente x documento. A segunda expressao vai mostrar em quanto esta o calculo da soma dos documentos para aquele cliente, tambem linha a linha, voce so deve entao subtrair do limite do cliente, 200.

    Att
    Boreki

    http://www.boreki.eng.br
    terça-feira, 13 de outubro de 2009 18:05

Todas as Respostas

  • Biffi,

    Esta expression, consiste basicamente em verificar se o valor limite do cliente for maior que o permitido deverá mostrar esta diferença no Excesso.

    Nesse caso acredito que você deverá adicionar um novo textbox no seu relatório e definir esta expression fazendo o cálculo de diferença entre o limite permitido e valor gasto repassando este valor para o textbox.

    Isso deverá ser cálculado a cada linha processada.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    sexta-feira, 9 de outubro de 2009 00:48
  • Tentei fazer a expression desta forma, o problema é que tenho que acumular o valor do excesso para os dois lançamentos do cliente 01, ou seja, tenho que resgatar o valor do excesso da linha anterior, pois no primeiro lancamento do documento o A o cliente ficou com excesso de 100 e logo apos foi realizado outro lançamento de 200, mudando o excesso para 300.

    Tentei criar uma funcao no Code para setar uma variavel global no relatorio, mas ela so faz isso na em duas linhas se tiver uma terceira ela se perde no calculo, o valor passar a ser o valor inicial e não acumula.

    terça-feira, 13 de outubro de 2009 11:20
  • Biffi,

    Então você terá que verificar se o código do cliente mudou, para zerar o valor acumulado, caso contrário continua funcionando!!!!
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    terça-feira, 13 de outubro de 2009 13:44
  • Estou utilizando este codigo na aba Code do meu relatorio:

    Public Total As Decimal

    Public Function TotalSetar(ByVal pTotal As Decimal) As Decimal
            Total = pTotal   
           Return Total   
    End Function

    Public Sub TotalSubtrair(ByVal pValor As Decimal)
            Total = Total - pValor       
    End Sub

    Dai eu criei a seguinte expression

    =IIf(RowNumber("lstDetalhe") < 2,
    TotalSetar(Fields!VLR_LIMITE.Value),
    TotalSubtrair(Fields!VLR_DOCUMENTO.Value))


    Verifico se é a primeira linha de lançamento para aquele cliente (esta agrupado por cliente entao a cada mudança de cliente este numero volta para um), se for a primeira linha seto para ela o valor do limite para aquele cliente, nas demais linhas vou fazendo a subtração do valor do documento. Acontece o seguinte:

    CLIENTE                               DOCUMENTO               VALOR               EXCESSO
    01                                          A                                            300                        100
    01                                          B                                            200                        200
    02                                          A                                            400                        200

    o valor do excesso na linha dois tinha de ser 300, mas  o valor considera que o valor do limite ainda é 200, sera que tem algo de errado com minhas funcoes
    eu testei elas um projeto vb.net e ta tudo certo.

    se alguem tambem tiver um outra ideia, fico agradecido,
    estou migrando de Crystal reports para Reporting services e estou tendo estas dificuldades ai.

    vlws abraçõs...

    terça-feira, 13 de outubro de 2009 17:06
  • Biffi,

    Muito cuidado ao utilizar variaveis globais para armazenar valores de calculos. Em determinadas situacoes a engine de processamento pode reiniciar as variaveis globais (por exemplo, entre trocas de pagina) de modo que seus calculos ficaram incorretos.

    Eua credito que voce pode criar uma expressao para fazer este calculo. Para mostrar o valor do cliente, basta colocar
    Imagino que voce tenha dois grupos de linha, um para cliente, e um para documento. Neste caso, para mostrar o valor, voce utilizara:
    =Sum(Fields!Valor.Value,"NomeDoEscopoDoDocumento")

    Para mostrar o valor que aquele cliente passou do excesso, basta usar a expressao runningvalue:
    =RunningValue(Fields!Valor.Value, Sum, "NomeDoEscopoDoCliente") - (Limite do Cliente)

    A primeira ira mostrar a soma linha a linha, para cada cliente x documento. A segunda expressao vai mostrar em quanto esta o calculo da soma dos documentos para aquele cliente, tambem linha a linha, voce so deve entao subtrair do limite do cliente, 200.

    Att
    Boreki

    http://www.boreki.eng.br
    terça-feira, 13 de outubro de 2009 18:05
  • Conseguir fazer utilizando RunningValue, como estou iniciando não sabia que existia essa funcao.
    Insiri a expression no relatorio e validei com usuario e esta correta.

    Muito obrigado pela atenção de vocês.

    abs
    terça-feira, 13 de outubro de 2009 18:44