Ir para conteúdo
Fórum Script Brasil
  • 0

Colunas com soma por mês, tem como?


BStar

Pergunta

Boa tarde pessoal, tudo bem?

Bom... Vamos ao meu probleminha:

Como é que eu tenho que fazer para trazer valores somente quando o mês é igual ao que eu quero?

Tipo...

janeiro fevereiro    março     abril    maio    junho    julho    agosto
soma x    soma y    soma z     soma x  soma v   soma x   soma f   soma d
eu fiz algo do tipo: (crystal syntax)
Month ({Comando.DATA_LANCAMENTO}) = 01 <<< me traria os valores de janeiro

Month ({Comando.DATA_LANCAMENTO}) = 06 <<< me traria os valores de junho

O problema é que eu tenho várias linhas com a mesma data e ele, mesmo colocando "Sum" no Running Total Fields, não está somando, ele me trás somente o primeiro valor do mês e pronto, o restante dos dias desse mês ele ignora :(

Eu preciso que ele some todos os valores que estão dentro de um mês (ex: de 01/01/2009 a 01/31/2009) independente dos outros campos serem de valores diferentes... Tipo, várias pessoas e eu quero somar o quanto todas elas (total geral) tiveram de desconto em cada mês

Como faço para resolver isso?

O meu muito obrigado por enquanto

Editado por BStar
Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

bstar, acho q você consegue fazer isso com o crosstab.

ou então, você podia fazer um grupo pro ano e ai você faria esses seus running total fields e na opcao Evaluate, você punha em Use a Formula e e punha essa formula q você passou ai e na opcao Reset, você punha em On change of group e selecionava o agrupamento anual (isso porque imagino q você teja querendo dividir por mes e por ano, mas se você quiser somar todos os anos juntos, então nem precisaria selecionar a opcao Reset).

Link para o comentário
Compartilhar em outros sites

  • 0

Legal Kuroi.. Eu criei os Running total fields com os meses certinho...

Ele esta me trazendo exatamente o que eu quero... O problema agora é que, AGORA eu tenho que mostrar os últimos 3 meses...

Tipo, se eu vou visualizar esse relatório na data de hoje, eu queria que ele me mostrasse, a partir de hoje, 3 meses atrás:

Como estamos em AGOSTO, ele me mostraria Agosto, Julho e Junho... Exatamente nessa ordem...

Quando fosse-mos para o mês de Setembro, ele me mostraria Setembro, Agosto e Julho e assim por diante...

O que complica agora, é que tem que ser dinâmico por mês...

É como se fosse um Select GetDate [data_atual] -1 para mostrar o mês atual e o mê anterior...

Tem como fazer? E mais, você tem algum link que ensina a mexer com o CrossTab? Eu nunca fiz isso e nem tenho idéia de como começar... Se você tiver algum material pra me indicar, ficaria muito grato!

Abraço e mais uma vez obrigado.

Editado por BStar
Link para o comentário
Compartilhar em outros sites

  • 0

Sei que no Oracle, existe uma função para me retornar a data corrente...

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
--------
07/08/09

Aí eu jogaria (e formatava) esse resultado em um campo e usava ele como parâmetro tipo SYSDATE - 1 o que me resultaria em 07/07/09

No Crystal, como estou usando .mdb, eu não sei como é que eu teria que fazer a instrução SQL :(

Editado por BStar
Link para o comentário
Compartilhar em outros sites

  • 0

Então... Resolvi (parcialmente) fazendo uma gambiarra (eu não acho que seja pois usei o que o Crystal me oferece :D) nos campos Running Total Fields...

Month ({Comando.DATA}) = Month (CurrentDate) - 1 and Year ({Comando.DATA}) = Year (CurrentDate)

Onde o - 1 faz papel de count para o mês (Month ) na minha formula... Dessa forma, nos outros campos eu substituo o 1 por 2, 3, 5...

Ahhh Crystal Syntax ok?

Abs e muito obrigado a todos por enquanto

Editado por BStar
Link para o comentário
Compartilhar em outros sites

  • 0

Agora me deparei com outro problema:

Quando nessa formula acima, eu trago os meses do anos sequente quando o meu campo data for igual ao ano corrente...

Mas como que vou fazer, quando o mês for 01 e o ano for 2010 e eu tiver que trazer os meses antes disso?

Do jeito que está, não vai me retornar nada pois eu estou dizendo que o ano tem que ser igual ao ano corrente e não ao ano anterior também :(

Alguém tem alguma idéia?

Abs!

Link para o comentário
Compartilhar em outros sites

  • 0
BStar, tenta usar a funcao DateDiff(), tipo assim, no Selection Formula:

DateDiff("m", {Comando.DATA}, CurrentDate) <= 3

Então Kuroi, eu não entendi direito o que essa formula faz...

Pra esse relatório, eu não uso parâmetro algum, o usuário simplesmente clica num link e é gerado esse relatório automaticamente a partir da data atual contanto os meses anteriores a esse (atual) ... O problema é que quando for janeiro de 2010 por exemplo, eu quero que ele me traga a soma dos valores de jan 2010, dez 2009 e nov 2009.

Como é que eu faço isso sem que ele some (+) janeiro de 2010 com janeiro de 2009 uma vez que estou só comparando os meses e pedindo para trazer quando o mês for = X e o ano = ano atual?

O que me preocupa é na virada do ano... como posso fazer? porque no mês de Dezembro, eu tenho que fazer mês de Janeiro (1) - 1 que da zero e não 12 (mês de dezembro que eu preciso) :(

Como é que eu posso usar essa sua formula no próprio crystal?

Mais uma vez Obrigado por me ajudar nessa bucha!

Abs!

Editado por BStar
Link para o comentário
Compartilhar em outros sites

  • 0

bstar, no relatorio todo você so quer q aparecam os tres ultimos meses??

se for isso, então, você devia fazer o relatorio normalmente, e simplesmente filtrar pelos tres ultimos meses.

pra isso, ponha aquela formula q eu passei no selection formula (menu Report -> Edit Selection Formula -> Record)

Link para o comentário
Compartilhar em outros sites

  • 0

Isso... mas de uma forma dinâmica... Tipo, eu tenho 4 campos, atualmente eles são dinâmicos do tipo runnig total fields...

cada campo tem a seguinte formula:

campo mês atual

[code]Month ({Comando.DATA_LANCAMENTO}) = Month (CurrentDate) and Year ({Comando.DATA_LANCAMENTO}) = Year (CurrentDate)
campo mês atual - (menos) 1 (um mês)
Month ({Comando.DATA_LANCAMENTO}) = Month (CurrentDate) - 1 and Year ({Comando.DATA_LANCAMENTO}) = Year (CurrentDate)
campo mês atual - (menos) 2 (dois meses)
Month ({Comando.DATA_LANCAMENTO}) = Month (CurrentDate) - 2 and Year ({Comando.DATA_LANCAMENTO}) = Year (CurrentDate)
campo mês atual - (menos) 3 (três meses)
Month ({Comando.DATA_LANCAMENTO}) = Month (CurrentDate) - 3 and Year ({Comando.DATA_LANCAMENTO}) = Year (CurrentDate)

Os campo são da direita para esquerda, o mês corrente está no campo da direita e os anteriores estão a partir desse para a esquerda...

Dessa forma, funciona como você pode ver no print:

imagemozh.jpg

Mas quando eu adianto o relógio do pc para janeiro de 2010, já era, ele só traz o mês de janeiro e não traz mais o de dezembro e novembro por conta do ano :(...

Como resolver?

Vou tentar isso que você falou...

O meu muito obrigado por enquanto!

Editado por BStar
Link para o comentário
Compartilhar em outros sites

  • 0

nesse caso, use a funcao DateAdd(). exemplo:

campo mês atual - (menos) 1 (um mês)

Month ({Comando.DATA_LANCAMENTO}) = Month(DateAdd("m", -1, CurrentDate)) and Year ({Comando.DATA_LANCAMENTO}) = Year (DateAdd("m", -1, CurrentDate))

e assim por diante (troque -1 por -2, -3, etc).

Link para o comentário
Compartilhar em outros sites

  • 0

Opa kuroy, beleza?

Estou testando aqui e, aparentemente funcionou agora :D

Só queria que, se possível e quando você tiver um tempinho, me explicasse o que essa função faz.

Eu fiquei confuso porque eu tinha achado que no lugar que você colocou "m" era para ir um "M" (maiusculo) por conta do mês... Pra eu, "m" trarias os minutos somente...

Abs e assim que eu terminar de verificar direitinho, vou postar o resultado ok?

Obrigado mais uma vez...

Editado por BStar
Link para o comentário
Compartilhar em outros sites

  • 0

bstar, acho q tanto faz maiusculo e minusculo, "m" é pra mes e "n" é pra minuto, pode testar. pelo menos é assim no crystal 8.5 e no visual basic tb.

e o codigo q eu te passei tem q funcionar sim, olha la, são dois DateAdds, você tem q alterar a soma nos dois.

de qualquer modo, aqui esta anexo um .rpt q faz exatamente isso q você precisa, usando exatamente esse codigo q passei, e aqui funcionou certinho, alterando pra janeiro de 2010, de uma olhada ai (crystal versao 8.5):

bstar.rar

Link para o comentário
Compartilhar em outros sites

  • 0
bstar, acho q tanto faz maiusculo e minusculo, "m" é pra mes e "n" é pra minuto, pode testar. pelo menos é assim no crystal 8.5 e no visual basic tb.

e o codigo q eu te passei tem q funcionar sim, olha la, são dois DateAdds, você tem q alterar a soma nos dois.

de qualquer modo, aqui esta anexo um .rpt q faz exatamente isso q você precisa, usando exatamente esse codigo q passei, e aqui funcionou certinho, alterando pra janeiro de 2010, de uma olhada ai (crystal versao 8.5):

bstar.rar

Então Kuroi, depois de testes e mais testes, cheguei a conclusão de que funcionou perfeitamente desse jeito que você fez :D

No primeiro campo estava funcionando mas no segundo não... Depois eu fiz como você falou, "setei" o o valor do ano igual ao do mês e funcionou!

Eu baixei esse exemplo que você disponibilizou mas vou executar em casa pois o Crystal daqui é o 2008...

Depois que eu formatar direitinho, vou postar um Print da "Obra Prima" :D

Mais uma vez o meu muito obrigado pela ajuda e por ter disponibilizado o seu tempo para resolver esse problema!

Abs!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...