none
Problema Crystal RRS feed

  • Pergunta

  • Bom dia,

    Estou com problema na hora de fazer um campo que seria a somatoria de 4 colunas.
    Quando todas as colunas tem valores a somatoria é feita normalmente. Mas quando eu alguma dessas colunas não tem valor, ou seja na query esse valor vem null ele não faz a somatoria.

    Alguem sabe como faço pra na hora de fazer o calculo da somatorio ele saber se o valor  que está vindo da coluna  é vazio ou null e jogar valor zero pra ele???

    já fiz usando lenght, verificando se está vazio, mas nada deu certo...

    Meu codigo é mais ou menos esse.


    Dim entrada as Double
    Dim troca as Double
    Dim outros as Double
    Dim venda as Double

    if {ArrecadacaoDiaria.Entrada} = null then
       entrada = 0
    else
        entrada = {ArrecadacaoDiaria.Entrada}
    end if

    if ToText ({ArrecadacaoDiaria.Troca})= "" Then
       troca = 0
    else
        troca = {ArrecadacaoDiaria.Troca}
    end if

    if ToText ({ArrecadacaoDiaria.ValorVenda})= "" Then
       venda = 0
    else
        venda = {ArrecadacaoDiaria.ValorVenda}
    end if

    if ToText ({ArrecadacaoDiaria.ValorOutro})= "" Then
       outros = 0
    else
        outros = {ArrecadacaoDiaria.ValorOutro}
    end if

    formula = entrada + troca + venda + outros


    Obrigado
    sexta-feira, 12 de setembro de 2008 14:12

Respostas

  • Alan,

     

    É possível sim. Será necessário criar uma função para "concatenar" os registros.

     

    Code Snippet

    CREATE FUNCTION dbo.fnConcatenaObservacao (@codigoCliente INT)

    RETURNS VARCHAR (1000)

    AS

    BEGIN

    DECLARE @Observacao VARCHAR(1000)

    SELECT @Observacao = ''

    -- ### Concatena observacao ###

    SELECT @Observacao = @Observacao + Observacao + ' - ' from Movimentodeestoque

    WHERE not observacao = ''

    AND codigoCliente = @codigoCliente

    -- ### Remove caractéres desenecessários ###

    SELECT @Observacao = LEFT (@Observacao, LEN (@Observacao) - 2)

    RETURN @Observacao

    END

    GO

     

     

    Code Snippet

    -- ### Consulta usando a função ###

    SELECT C.nome, dbo.fnConcatenaObservacao (C.codigoCliente)

    FROM dbo.Clientes C

     

     

    Alan, gostaria de pedir apenas que não deixe de marcar os posts dos membros do Fórum MSDN caso a resposta tenha ajudado a resolver a sua dúvida. O seu feedback é importante para melhorar a qualidade do Fórum MSDN Brasil.

     

     

    Obrigado.

     

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    segunda-feira, 15 de setembro de 2008 13:54
    Moderador

Todas as Respostas

  • Ninguem sabe a solução desse problema?? Não funciona aqui de maneira alguma..

    E uma outra pergunta..


    Eu tenho uma query  assim. Select observao from Usuario where not observao = ' '
    O resultado vem assim.
    1 - Teste
    2 - Teste 2
    3-  Teste 3

    E eu queria concatenar essas linhas em uma so...mais ou menos assim.
    1 - Teste / Teste 2 / Teste 3.

    Alguem tem ideia de como fazer isso??


    Obrigado
    sexta-feira, 12 de setembro de 2008 18:57
  • Alan,

     

    A fórmula com tratamento para valores nulo fica assim:

     

    Code Snippet

    local numbervar total;
    total :=0;

    if not Isnull({ArrecadacaoDiaria.Entrada}) then
        total := total + {ArrecadacaoDiaria.Entrada};

    if not Isnull({ArrecadacaoDiaria.Troca}) then
        total := total + {ArrecadacaoDiaria.Troca};

    if not Isnull({ArrecadacaoDiaria.ValorVenda}) then
        total := total + {ArrecadacaoDiaria.ValorVenda};

    if not Isnull({ArrecadacaoDiaria.ValorOutro}) then
        total := total + {ArrecadacaoDiaria.ValorOutro};

    if not Isnull({ArrecadacaoDiaria.ValorOutro}) then
        total := total + {ArrecadacaoDiaria.ValorOutro};
        cstr(total);

     

     

    Mais uma dica:

     

    1 - Webcasts (Vídeos) com diversos exemplos de como construir relatórios de forma profissional com os componentes Crystal Reports e ReportViewer.
     

    Link para download
    http://forums.microsoft.com/MSDN-BR/ShowPost.aspx?PostID=3271109&SiteID=21&mode=1

    ou

    http://www.msdnbrasil.com.br/mediacenter/default.aspx
    e digitar ReportView no campo Localizar conteúdo:

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    sexta-feira, 12 de setembro de 2008 21:39
    Moderador
  • Alan,

     

    Qual é o banco de dados ? Posta o SQL inteiro que eu monto a Query para vc.

     

     

    Valeu.

     

    sexta-feira, 12 de setembro de 2008 21:40
    Moderador
  • Muito obrigado Laercio. O problema do null deu certo aqui.

    E sobre a query é simples, é a seguinte query.

    Code Snippet

    select observacao from Movimentodeestoque where not observacao = ''


    Ai eu quero que mostre o resultado tudo em uma linha so. Porque hoje mostra 

    1 - teste 1
    2- teste 2
    3- teste 3

    Queria uma resposta do tipo 

    1 - teste 1, teste 2, teste 3.

    Não sei se isso é possivel. E o banco é sql server  2005

    Obrigado
    segunda-feira, 15 de setembro de 2008 11:37
  • Alan,

     

    É possível sim. Será necessário criar uma função para "concatenar" os registros.

     

    Code Snippet

    CREATE FUNCTION dbo.fnConcatenaObservacao (@codigoCliente INT)

    RETURNS VARCHAR (1000)

    AS

    BEGIN

    DECLARE @Observacao VARCHAR(1000)

    SELECT @Observacao = ''

    -- ### Concatena observacao ###

    SELECT @Observacao = @Observacao + Observacao + ' - ' from Movimentodeestoque

    WHERE not observacao = ''

    AND codigoCliente = @codigoCliente

    -- ### Remove caractéres desenecessários ###

    SELECT @Observacao = LEFT (@Observacao, LEN (@Observacao) - 2)

    RETURN @Observacao

    END

    GO

     

     

    Code Snippet

    -- ### Consulta usando a função ###

    SELECT C.nome, dbo.fnConcatenaObservacao (C.codigoCliente)

    FROM dbo.Clientes C

     

     

    Alan, gostaria de pedir apenas que não deixe de marcar os posts dos membros do Fórum MSDN caso a resposta tenha ajudado a resolver a sua dúvida. O seu feedback é importante para melhorar a qualidade do Fórum MSDN Brasil.

     

     

    Obrigado.

     

     

     

    Ajude a melhorar o nosso Fórum!
    Não esqueça de marca a mensagem como "útil", caso tenha ajudado.

    segunda-feira, 15 de setembro de 2008 13:54
    Moderador