FAZER CALCULOS COM DADOS EXIBIDOS NO GRID
possuo o seguinte codigo
[ô]buscar os dados
[ô]para preencher o grid
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 ?
[ô]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 ?
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
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
Usando assim:
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
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
sim agora entendi
então
Tente com a modificação acima
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