PROBLEMA COM CONSULTA NO FLEXGRID

AQUILESBRUM 25/10/2010 08:17:41
#355796
Olá pessoal, estou com um problema: Tenho uma rotina de cálculo de vendas que lê os dados em um flexgrid e faz o cálculo de vários tipos de venda diferente. O que esta acontecendo é que o resultado que estou obtendo das vendas, esta errado. Estou achando que pode ser o tipo de formatação nas variáveis que estou usando mas já tentei várias coisas e nada. Agradeço se alguém tiver alguma idéia.

Segue o código:

  Public Sub CalculaVenda()

Dim iLinhas, i As Integer
Dim dVendaPrazo, dVendaVista, dVendaRestricao, dValor, dVendaTotal As Double

[ô] iLinhas = MSFlexGrid.Rows

For i = 1 To MSFlexGrid.Rows - 1
If MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) = [Ô]1[Ô] Then [ô]Venda a Prazo
dVendaPrazo = Val(dVendaPrazo) + Val(MSFlexGrid.TextMatrix(i, 6))
End If

If MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) = [Ô]2[Ô] Then [ô]Venda a Vista
dVendaVista = Val(dVendaVista) + Val(MSFlexGrid.TextMatrix(i, 6))
End If

If MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) = [Ô]9[Ô] Then [ô]Venda a prazo com Restrição
dVendaRestricao = Val(dVendaRestricao) + Val(MSFlexGrid.TextMatrix(i, 6))
End If

dValor = (MSFlexGrid.TextMatrix(i, 6))

dVendaTotal = Val(dVendaTotal) + Val(dValor)
Next i

If dVendaPrazo = [Ô][Ô] Then
lblVendaPrazo.Caption = [Ô]R$ 0,00[Ô]
Else
lblVendaPrazo = Format$(dVendaPrazo, [Ô]currency[Ô])
End If

If dVendaRestricao = [Ô][Ô] Then
lblVendaRestricao.Caption = [Ô]R$ 0,00[Ô]
Else
lblVendaRestricao = Format$(dVendaRestricao, [Ô]currency[Ô])
End If

If dVendaVista = [Ô][Ô] Then
lblVendaVista.Caption = [Ô]R$ 0,00[Ô]
Else
lblVendaVista = Format$(dVendaVista, [Ô]currency[Ô])
End If

lblVendaTotal = Format$(dVendaTotal, [Ô]currency[Ô])

End Sub
MARCELO.TREZE 25/10/2010 09:05:25
#355798
Resposta escolhida
troque os VAL por CDbl, e funcionará
AQUILESBRUM 26/10/2010 08:47:42
#355909
Obrigado pela atenção Marcelo ! Troquei o val pelo CDbl como você sugeriu, mas agora depois do CDbl os valores são formatados sem as casas decimais. Falta mais alguma coisa na formatação?

  For i = 1 To MSFlexGrid.Rows - 1
If (MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) <> [Ô][Ô]) And (MSFlexGrid.TextMatrix(i, 6) <> [Ô][Ô]) Then
If MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) = 1 Then [ô]Venda a Prazo
dVendaPrazo = CDbl(lblVendaPrazo) + CDbl(MSFlexGrid.TextMatrix(i, 6))
End If

If MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) = 2 Then [ô]Venda a Vista
dVendaVista = CDbl(dVendaVista) + CDbl(MSFlexGrid.TextMatrix(i, 6))
End If

If MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) = 9 Then [ô]Venda a prazo com Restrição
dVendaRestricao = CDbl(dVendaRestricao) + CDbl(MSFlexGrid.TextMatrix(i, 6))
End If

dVendaTotal = CDbl(dVendaTotal) + CDbl(MSFlexGrid.TextMatrix(i, 6))

End If
Next i
ANDPAG 26/10/2010 13:17:57
#355953
ola boa tarde, cara tenta usar ao inves de cdbl(variavel) usa ccur(variavel) outra coisa, nao tem muita ligação com o que estava perguntando mas observei que vc cria as
variaveis seguido de (,) -->

Dim dVendaPrazo, dVendaVista, dVendaRestricao, dValor, dVendaTotal As Double
nesse caso apenas a ultima que esta assumindo o tipo double as outras assumem o tipo variant, que acaba reduzindo a performance do sistema, crie elas assim:

Dim dVendaPrazo as double, dVendaVista as double, dVendaRestricao as double, dValor as double, dVendaTotal As Double
ai fica melhor pra trabalhar...

abs...
MSMJUDAS 26/10/2010 13:20:54
#355954
Utilize assim:

dVendaTotal = CCur(dVendaTotal) + CCur(MSFlexGrid.TextMatrix(i, 6))

lblVendaTotal.Caption = FormatNumber(dVendaTotal, 2)
MARCELO.TREZE 26/10/2010 13:35:54
#355958
não acredito que seja o CDbl o problema pois o mesmo não exclui as virgulas.

ex:

Private Sub Command1_Click()
Dim ValorA As String, valorB As String
ValorA = [Ô]1,37[Ô]
valorB = [Ô]3,8[Ô]
MsgBox CDbl(ValorA) + CDbl(valorB)
End Sub


o que pode estar acontecendo é isto que o colega ANDPAG comentou, suas variaveis não declaradas devem estar assumindo um valor inteiro.

mude as declarações para

Dim dVendaPrazo As Double, dVendaVista As Double, dVendaRestricao As Double, dValor As Double, dVendaTotal As Double




AQUILESBRUM 26/10/2010 14:57:32
#355965
Pessoal segui as dicas dos colegas ANDPAG e MSMJUDAS. Depois das mudanças ficou assim:



  Public Sub CalculaVenda()

Dim iLinhas, i As Integer
Dim dVendaPrazo As Double, dVendaVista As Double, dVendaRestricao As Double, dValor As Double, dVendaTotal As Double

iLinhas = MSFlexGrid.Rows

lblVendaPrazo = 0

For i = 1 To MSFlexGrid.Rows - 1
If (MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) <> [Ô][Ô]) And (MSFlexGrid.TextMatrix(i, 6) <> [Ô][Ô]) Then
If MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) = 1 Then [ô]Venda a Prazo
dVendaPrazo = CCur(dVendaPrazo) + CCur(MSFlexGrid.TextMatrix(i, 6))
End If

If MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) = 2 Then [ô]Venda a Vista
dVendaVista = CCur(dVendaVista) + CCur(MSFlexGrid.TextMatrix(i, 6))
End If

If MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) = 9 Then [ô]Venda a prazo com Restrição
dVendaRestricao = CCur(dVendaRestricao) + CCur(MSFlexGrid.TextMatrix(i, 6))
End If
End If
Next i

If dVendaPrazo = 0 Then
lblVendaPrazo.Caption = [Ô]R$ 0,00[Ô]
Else
lblVendaPrazo.Caption = Format(dVendaPrazo, [Ô]currency[Ô])
End If

If dVendaRestricao = 0 Then
lblVendaRestricao.Caption = [Ô]R$ 0,00[Ô]
Else
lblVendaRestricao.Caption = Format(dVendaRestricao, [Ô]currency[Ô])
End If

If dVendaVista = 0 Then
lblVendaVista.Caption = [Ô]R$ 0,00[Ô]
Else
lblVendaVista.Caption = Format(dVendaVista, [Ô]currency[Ô])
End If

dVendaTotal = CCur(dVendaPrazo) + CCur(dVendaRestricao) + CCur(dVendaVista)

lblVendaTotal.Caption = Format(dVendaTotal, [Ô]currency[Ô])

End Sub


Em um teste que fiz, estou obtendo 1200,00 e deveria ser 12,00. Acho que agora é só mexer nas casas decimais.
MARCELO.TREZE 26/10/2010 18:29:28
#355980
faz o seguinte poste os valores de algumas células do flexgrid
MARCELO.TREZE 26/10/2010 18:50:42
#355981
ah detalhe, veja bem

toda vez que o conteúdo da coluna 8 for igual 1 será efetuado a soma a dVendaPrazo

Citação:

If MSFlexGrid.TextMatrix(MSFlexGrid.Rows - i, 8) = 1 Then [ô]Venda a Prazo
dVendaPrazo = CCur(dVendaPrazo) + CCur(MSFlexGrid.TextMatrix(i, 6))
End If



ou seja

supondo que dVendaPrazo iniciar em zero e existirem os seguinte campos no flexgrid

coluna 1 | coluna 2 ...Coluna 6 | coluna 7 | Coluna 8
[txt-color=#e80000]3,4 | | 1[/txt-color]
5,7 | | 2
[txt-color=#e80000]8,6 | | 1[/txt-color]
[txt-color=#e80000]15,3 | | 1[/txt-color]

ou seja será efetuado a seguinte soma: dVendaPrazo = 3,4 + 8,6 + 15,3

dvendapraz = 27,3

veja se é isso mesmo que deseja




AQUILESBRUM 27/10/2010 08:21:47
#356005
é isso mesmo Marcelo. Na verdade o que acontece é o seguinte:
- Eu busco em uma tabela [Ô]VENDAS[Ô] registros que são filtrados dependendo do critério escolhido pelo usuário;
- Através de um SELECT os dados são listados no Grid;
- Depois faço uma nova consulta dentro do Grid para saber as totalizações;
- O tipo de venda é identificada por: Venda Vista (1), Venda a Prazo (2) e Venda a Prazo com Restrição (9);
- No final somo todas as vendas para saber o total das vendas;

Os problemas:
- O que estava acontecendo, é que o cálculo estava errado;
- Depois das mudanças feitas, esta certo, mas não esta dividindo as casas decimais. Exemplo (O que deveria ser 12,00 esta aparecendo 12000);
- Uma coisa que ainda não comentei para não complicar, é que não estou conseguindo ler a primeira linha do grid:

Segue uma tela do grid para exemplificar melhor:
MARCELO.TREZE 27/10/2010 10:39:44
#356017

Tenta esta modificação

Public Sub CalculaVenda()

Dim dVendaPrazo As Double, dVendaVista As Double, dVendaRestricao As Double, dValor As Double, dVendaTotal As Double

lblVendaPrazo = 0
With MSFlexgrid
For i = 1 To .Rows - 1
If (.TextMatrix(i, 8) <> [Ô][Ô]) And (.TextMatrix(i, 6) <> [Ô][Ô]) Then

If .TextMatrix(i, 8) = [Ô]1[Ô] Then [ô]Venda a Prazo
dVendaPrazo = dVendaPrazo + CDbl(.TextMatrix(i, 6))
End If

If .TextMatrix(i, 8) = [Ô]2[Ô] Then [ô]Venda a Vista
dVendaVista = dVendaVista + CDbl(.TextMatrix(i, 6))
End If

If .TextMatrix(i, 8) = [Ô]9[Ô] Then [ô]Venda a prazo com Restrição
dVendaRestricao = dVendaRestricao + CDbl(.TextMatrix(i, 6))
End If
End If
Next i
End With
If dVendaPrazo = 0 Then
lblVendaPrazo.Caption = [Ô]R$ 0,00[Ô]
Else
lblVendaPrazo.Caption = Format(dVendaPrazo, [Ô]currency[Ô])
End If

If dVendaRestricao = 0 Then
lblVendaRestricao.Caption = [Ô]R$ 0,00[Ô]
Else
lblVendaRestricao.Caption = Format(dVendaRestricao, [Ô]currency[Ô])
End If

If dVendaVista = 0 Then
lblVendaVista.Caption = [Ô]R$ 0,00[Ô]
Else
lblVendaVista.Caption = Format(dVendaVista, [Ô]currency[Ô])
End If

dVendaTotal = dVendaPrazo + dVendaRestricao + dVendaVista

lblVendaTotal.Caption = Format(dVendaTotal, [Ô]currency[Ô])

End Sub



Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas