none
Somando positivos RRS feed

  • Pergunta

  • Olá, e mais uma vez eu aqui com dúvidas!! -_-'

    Vamos lá...

    No meu relatório, há 4 colunas: SALDO ABERTURA, ENTRADA, SAIDA, SALDO FECHAMENTO.

    Ambas as colunas SALDO ABERTURA e SALDO FECHAMENTO estão preenchidas.

    E ambas as colunas ENTRADA e SAIDA, estão com um IIF, que na ENTRADA mostra a diferença entre as colunas
    SALDO ABERTURA e SALDO FECHAMENTO, mas somente os positivos, os negativos estão como "0,00" e vice-versa na coluna SAIDA.

    Gostaria de fazer um SUM de ambas as colunas
    ENTRADA e SAIDA, mas ao tentar somar a coluna ele soma os positivos e negativos, pois todos os valores estão lá, escondidos ou não.

    Como faço na expression, para que ele some apenas os valores positivos ou somente os negativos?

    Obrigado!
    segunda-feira, 14 de julho de 2008 20:58

Respostas

  • Agradeço a ajuda de todos, mas acabei resolvendo meu problema sem precisar dessa parte de programação. Fiz dois novos Datasets, um para positivos e um para negativos:

    Positivos:

    select sum(amountcur-amountmst) as Posi from bankaccounttrans where (amountcur-amountmst) > 0

    Negativos:

    select sum(amountcur-amountmst) as Negt from bankaccounttrans where (amountcur-amountmst) < 0

    Na linha Body, eu pus a expressão:

    Positivos:

    =IIF(Fields!saldo.Value>0,Fields!saldo.Value,"0,00")

    Negativos:

    =IIF(Fields!saldo.Value<0,Fields!saldo.Value,"0,00")

    Assim mostrando apenas os positvos da coluna ENTRADA e negativos da coluna SAIDA.

    No Footer do group da coluna ENTRADA ficou:

    =Sum(Fields!Posi.Value, "Spec13_Positivos")

    E na coluna SAIDA:

    =Sum(Fields!Negt.Value, "Spec13_Positivos")

    Desse modo mostrando o que eu queria exibir, e somando apenas os positivos dum lado e negativos doutro!!
    quarta-feira, 16 de julho de 2008 14:45

Todas as Respostas

  • Opa!,

     

    Respondi um post parecido

    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3589910&SiteID=21

     

    Neste caso será necessário implementar uma função "personalizada" no Report.

     

    Onde implentar:

    No menu Report, selecione a opção Reporting Properties, aba Code

     

    Exemplo:

    Code Snippet

     

       Public  Shared Function ValorPositivo(ByVal sngValor As Single) As Single

            If sngValor > 0 Then
                 ValorCampo = sngValor

            Else
                  ValorCampo = 0
            End If

        End Function

     

       Public  Shared Function ValorNegativo(ByVal sngValor As Single) As Single

            If sngValor < 0 Then
                 ValorCampo = sngValor

            Else
                  ValorCampo = 0
            End If

        End Function

     

     

    Como usar:

    Adicione um TextBox ao relatório, clique no item com o botão da direita e selecione a opção expression.

    Code Snippet
    =Sum(Code.ValorCampo(Fields!Entrada.Value))

     

     

     

    terça-feira, 15 de julho de 2008 02:32
  • Bom dia Laercio,

    Não sabia que eu podia adicionar linhas de programação ao RS, isso é tão bom!!

    Utilizando seu exemplo acima e modificando a parte "ValorCampo" por "Fields!saldo.Value" (que é o calculo da diferença entre as tabelas de Saldo Abertura com a Saldo Fechamento), ele mostra este erro:

    "An error occurred during local report processing.
    The definition of the report '/Spec13' is invalid.
    There is an error on line 3 of custom code: [BC30469] Referência a um membro não compartilhado requer referência de objeto."

    Sei que ainda tenho que modificar algo...

    "Public Shared Function ValorPositivo(ByVal sngValor As Single) As Single

            If sngValor > 0 Then
                 Fields!saldo.Value = sngValor
            Else
                  Fields!saldo.Value = 0
            End If

    End Function"

    Outras dúvidas:

    1ª) no campo onde eu estava colocando o IIF para mostrar apenas os positivos ou apenas os negativos, eu deixo em branco ou ponho outra expressão?

    2ª) ao invés de colocar um textbox com a expression da SUM, posso colocar a mesma num campo do group?

    Obrigado!
    terça-feira, 15 de julho de 2008 13:24
  • Lodetti,

     

    Você não pode fazer referencia direta ao campo do código, você deve usar como no exemplo do Laércio, passe os valores que você precisa como argumento da função, e faça a funcão retornar o que você quer mostrar no relatório.

     

    Aqui vai uma outra maneira de você fazer uma somatório somente dos valores positivos, você só precisa criar uma expressão usando um iif dentro de um sum:

     

    Code Snippet

    =Sum(cdbl(iif(Fields!campo.Value >0,Fields!campo.Value , 0)))

     

     

    O que você está dizendo é que se o campo for mair do que zero, voce vai acumular o valor do campo, senão vai acumular zero. Voce precisa usar o cbdl para indicar ao rs que a expressao sempre vai retornar um double.

     

    Espero que isso te ajude

     

    Att

    Boreki

     

    terça-feira, 15 de julho de 2008 18:55
  • Agradeço a ajuda de todos, mas acabei resolvendo meu problema sem precisar dessa parte de programação. Fiz dois novos Datasets, um para positivos e um para negativos:

    Positivos:

    select sum(amountcur-amountmst) as Posi from bankaccounttrans where (amountcur-amountmst) > 0

    Negativos:

    select sum(amountcur-amountmst) as Negt from bankaccounttrans where (amountcur-amountmst) < 0

    Na linha Body, eu pus a expressão:

    Positivos:

    =IIF(Fields!saldo.Value>0,Fields!saldo.Value,"0,00")

    Negativos:

    =IIF(Fields!saldo.Value<0,Fields!saldo.Value,"0,00")

    Assim mostrando apenas os positvos da coluna ENTRADA e negativos da coluna SAIDA.

    No Footer do group da coluna ENTRADA ficou:

    =Sum(Fields!Posi.Value, "Spec13_Positivos")

    E na coluna SAIDA:

    =Sum(Fields!Negt.Value, "Spec13_Positivos")

    Desse modo mostrando o que eu queria exibir, e somando apenas os positivos dum lado e negativos doutro!!
    quarta-feira, 16 de julho de 2008 14:45