FAZER CALCULOS COM DADOS EXIBIDOS NO GRID

WEBIER 19/10/2010 21:16:21
#355498
possuo o seguinte codigo

[ô]buscar os dados
Private Sub Command1_Click()
Call ABRIR_BD_SEM_DATA1
SQL = [Ô]SELECT T0.Data, T0.Saldo, (Select Sum(Valor) From CAIXA_SALDO_RETIRADA Where Data = T0.Data) as Soma_Retirada FROM CAIXA_DIA as T0 ORDER BY DATA desc[Ô]
Set RS = BD.OpenRecordset(SQL)

FormatarGrid_Lancamentos2
End Sub


[ô]para preencher o grid
Private Sub FormatarGrid_Lancamentos2()
Dim x As Integer
Dim f As Integer
Dim m_Saldo As Currency
Dim m_SaldoAnterior As Currency

With Grid
.Clear
.Cols = 7
.Rows = 2

.ColWidth(0) = 0
.ColWidth(1) = 400
.ColWidth(2) = 950
.ColWidth(3) = 1350
.ColWidth(4) = 1350
.ColWidth(5) = 1350
.ColWidth(6) = 1400

.TextMatrix(0, 1) = [Ô]CÓD[Ô]
.TextMatrix(0, 2) = [Ô]DATA[Ô]
.TextMatrix(0, 3) = [Ô]SALDO ANT.[Ô]
.TextMatrix(0, 4) = [Ô]ENTRADA[Ô]
.TextMatrix(0, 5) = [Ô]RETIRADA[Ô]
.TextMatrix(0, 6) = [Ô]SALDO ATUAL[Ô]

Do Until RS.EOF

Grid.Redraw = False
m_Saldo = 0
m_SaldoAnterior = 0

[ô]If Not IsNull(RS!CODIGO) Then .TextMatrix(.Rows - 1, 1) = RS!CODIGO
If Not IsNull(RS!Data) Then .TextMatrix(.Rows - 1, 2) = Format(RS!Data, [Ô]dd/mm/yy[Ô])
If Not IsNull(RS!SALDO) Then .TextMatrix(.Rows - 1, 4) = Format(RS!SALDO, [Ô]##,##0.00[Ô])
If Not IsNull(RS!Soma_Retirada) Then .TextMatrix(.Rows - 1, 5) = Format(RS!Soma_Retirada, [Ô]##,##0.00[Ô])

m_Saldo = m_Saldo + IIf(IsNull(m_SaldoAnterior), 0, m_SaldoAnterior) + IIf(IsNull(RS!SALDO), 0, RS!SALDO) - IIf(IsNull(RS!Soma_Retirada), 0, RS!Soma_Retirada)
.TextMatrix(.Rows - 1, 6) = Format(m_Saldo, [Ô]##,##0.00[Ô])

m_SaldoAnterior = m_Saldo + IIf(IsNull(m_Saldo), 0, m_Saldo)
.TextMatrix(.Rows - 1, 3) = Format(m_SaldoAnterior, [Ô]##,##0.00[Ô])


RS.MoveNext
.Rows = .Rows + 1

Loop
.Rows = .Rows - 1

Grid.Redraw = True
End With
End Sub


to pra ficar doido com esse m_Saldo e SaldoAnterior ai de cima

que quero na verdade é mostrar assim no grid:

[Ô]DATA[Ô] | [Ô]SALDO ANT.[Ô] | [Ô]ENTRADA[Ô] | [Ô]RETIRADA[Ô] | [Ô]SALDO ATUAL[Ô] |
---------------------------------------------------------------------------------------
01/10 | 0,00 | 15,00 | 0,00 | 15,00 |
02/10 | 15,00 | 5,00 | 0,00 | 20,00 |
03/10 | 20,00 | 21,00 | 6,50 | 34,50 |
04/10 | 34,50 | 10,00 | 0,00 | 44,50 |
---------------------------------------------------------------------------------------

na coluna SALDO ANT ele mostra o resultado do ultimo SALDO_ATUAL
na coluna SALDO ATUAL ele mostrar a soma de SALDO ANT + ENTRADA - RETIRADA

como falo isso pessoal ?

MARCELO.TREZE 20/10/2010 09:14:36
#355516
Resposta escolhida
faz o seguinte, primeiro não deixe o flexgrid vazio, depois como vc preenche o saldo anterior, isto já dveria estar na grid

tipo

[ô].TextMatrix(.Rows - 1, 1) = RS!CODIGO
.TextMatrix(.Rows - 1, 2) = IIf(IsNull(RS!Data) = True, [Ô][Ô], Format(RS!Data, [Ô]dd/mm/yy[Ô]))
.TextMatrix(.Rows - 1, 3) = Saldo_Anterior [txt-color=#007100][ô]aqui não sei de onde busca o saldo anterior[/txt-color]
.TextMatrix(.Rows - 1, 4) = Format(IIf(IsNull(RS!SALDO) = True, 0 ,RS!SALDO), [Ô]##,##0.00[Ô])
.TextMatrix(.Rows - 1, 5) = Format(IIf(IsNull(RS!Soma_Retirada) = true, 0 , RS!Soma_retirada), [Ô]##,##0.00[Ô])
[txt-color=#007100][ô]abaixo é feito o calculo desta maneira[/txt-color]
.TextMatrix(.Rows - 1, 6) = CDbl(.TextMatrix(.Rows - 1, 3)) + CDbl(.TextMatrix(.Rows - , 4)) - CDbl(.TextMatrix(.Rows - 1, 5))


bom com a dica acima bastando c informar de onde vem o saldo anterior e já preencher o grid, vc terá o calculo correto por linha



WEBIER 20/10/2010 09:29:47
#355519
Usando assim:
Dim Saldo_Anterior As Currency
Saldo_Anterior = 0

[ô].TextMatrix(.Rows - 1, 1) = RS!CODIGO
.TextMatrix(.Rows - 1, 2) = IIf(IsNull(RS!Data) = True, [Ô][Ô], Format(RS!Data, [Ô]dd/mm/yy[Ô]))
.TextMatrix(.Rows - 1, 3) = Saldo_Anterior [ô]aqui não sei de onde busca o saldo anterior
.TextMatrix(.Rows - 1, 4) = Format(IIf(IsNull(RS!SALDO) = True, 0, RS!SALDO), [Ô]##,##0.00[Ô])
.TextMatrix(.Rows - 1, 5) = Format(IIf(IsNull(RS!Soma_retirada) = True, 0, RS!Soma_retirada), [Ô]##,##0.00[Ô])
[ô]abaixo é feito o calculo desta maneira
.TextMatrix(.Rows - 1, 6) = CDbl(.TextMatrix(.Rows - 1, 3)) + CDbl(.TextMatrix(.Rows - 1, 4)) - CDbl(.TextMatrix(.Rows - 1, 5))


faltou o calculo da SALDO_ANTERIOR...

conforme esse exemplo:
[Ô]DATA[Ô] | [Ô]SALDO ANT.[Ô] | [Ô]ENTRADA[Ô] | [Ô]RETIRADA[Ô] | [Ô]SALDO ATUAL[Ô] |
---------------------------------------------------------------------------------------
01/10 | 0,00 | 15,00 | 0,00 | 15,00 |
02/10 | 15,00 | 5,00 | 0,00 | 20,00 |
03/10 | 20,00 | 21,00 | 6,50 | 34,50 |
04/10 | 34,50 | 10,00 | 0,00 | 44,50 |
---------------------------------------------------------------------------------------

o SALDO_ANTERIOR é o SALDO_ATUAL da ultima linha do flexgrid, ou seja, no exemplo acima o SALDO_ANTERIOR começou com 0,00 depois na segunda linha ele foi para 15,00, esses 15,00 veio do SALDO_ATUAL da primeira linha, na terceira linha o SALDO_ANTERIO foi para 20,00 porque ele pegou o SALDO ATUAL da segunda linha, ou seja, o SALDO ANTERIO é sempre o SALDO ATUAL da linha anterior
MARCELO.TREZE 20/10/2010 10:17:35
#355520
sim agora entendi

então

Dim Saldo_Anterior As Currency

If .Rows < = 2 Then
Saldo_anterior = Format(0,[Ô]##,##0.00[Ô])
ElseIf .Rows > 2 Then
Saldo_anterior = Format(.TextMatrix(.Rows - 2, 5),[Ô]##,##0.00[Ô])
End If

[ô].TextMatrix(.Rows - 1, 1) = RS!CODIGO
.TextMatrix(.Rows - 1, 2) = IIf(IsNull(RS!Data) = True, [Ô][Ô], Format(RS!Data, [Ô]dd/mm/yy[Ô]))
.TextMatrix(.Rows - 1, 3) = Saldo_Anterior
.TextMatrix(.Rows - 1, 4) = Format(IIf(IsNull(RS!SALDO) = True, 0, RS!SALDO), [Ô]##,##0.00[Ô])
.TextMatrix(.Rows - 1, 5) = Format(IIf(IsNull(RS!Soma_retirada) = True, 0, RS!Soma_retirada), [Ô]##,##0.00[Ô])
.TextMatrix(.Rows - 1, 6) = CDbl(.TextMatrix(.Rows - 1, 3)) + CDbl(.TextMatrix(.Rows - 1, 4)) - CDbl(.TextMatrix(.Rows - 1, 5))


Tente com a modificação acima
Tópico encerrado , respostas não são mais permitidas