[ONLY EXPERT] LIVRO CAIXA - SALDOS

WEBIER 23/01/2010 13:20:15
#332692
Estou fazendo um livro caixa.

A ideia é a seguinte:

Tenho 3 forma de entrar dinheiro no caixa e 1 forma de sair dinheiro.

usei o comando UNION para unir as 4 tabelas.

a ideia seria essa:

HORA | DESCRIÇÃO | ENTRADA | SAIDA | SALDO |
08:00 | Joao | 100,00 | 0,00 | 100,00 |
08:10 | Maria | 80,00 | 0,00 | 180,00 |
08:25 | Sabao em pó | 0,00 | 2,00 | 178,00 |
08:30 | Pedro | 30,00 | 0,00 | 208,00 |
09:00 | Açucar | 0,00 | 9,00 | 199,00 |

Resumindo:
Todas as entradas ficarão na coluna 3
Todas as Saidas ficarão na coluna 4
é o Saldo ficará na coluna 5 (saldo = saldo anterior - saida)

[txt-color=#e80000]Conseguir Unir as 4 tabelas no flexgrid
Conseguir colocar as entradas na coluna 3
Conseguir colocar as saidas na coluna 4[/txt-color]

agora fiquei prezo na parte de calcular o saldo anterior e dar o novo saldo... ou seja:

o Saldo começa em 0 e a medida que for entrando dinheiro ele vai crescendo e a medida q vai saindo ele vai diminuindo, conforme exemplo que dei acima:

Achei melhor anexa o projeto ao topico ai...

Cadastrei algumas entradas e saidas para ficar mais facil.


TECLA 23/01/2010 19:36:50
#332708
Poste a descrição da ESTRUTURA das tabelas no tópico.
WEBIER 23/01/2010 19:55:22
#332714
código para unir as tabelas:
Call ABRIR_BD_SEM_DATA1
SQL = [Ô]SELECT PARCELAS.Hora AS HORA_PARC, Cliente.NOME AS CAMPO01, PARCELAS.VALOR_FINAL AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, PARCELAS.PAGAMENTO, PEDIDOS.Cod_Pedido, PEDIDOS.COD_CLIENTE, Cliente.CODIGO FROM CLIENTE INNER JOIN (PARCELAS INNER JOIN PEDIDOS ON PARCELAS.COD_PEDIDO = PEDIDOS.COD_PEDIDO) ON CLIENTE.CODIGO = PEDIDOS.COD_CLIENTE WHERE PARCELAS.PAGAMENTO = #[Ô] & Format(mskData, [Ô]mm/dd/yy[Ô]) & [Ô]# ORDER BY HORA[Ô] & _
[Ô] UNION [Ô] & _
[Ô]SELECT PARCELAS.Hora AS HORA_PARC, Cliente.NOME AS CAMPO01, PARCELAS.VALOR_FINAL AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, PARCELAS.PAGAMENTO, OS.Cod_OS, OS.COD_CLIENTE, Cliente.CODIGO FROM CLIENTE INNER JOIN (PARCELAS INNER JOIN OS ON PARCELAS.COD_OS = OS.COD_OS) ON CLIENTE.CODIGO = OS.COD_CLIENTE WHERE PARCELAS.PAGAMENTO = #[Ô] & Format(mskData, [Ô]mm/dd/yy[Ô]) & [Ô]#[Ô] & _
[Ô] UNION [Ô] & _
[Ô]SELECT HORA AS HORA_PARC, DESCRICAO AS CAMPO01, VALOR AS CAMPO02, [ô]0[ô] AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, COD_HAVER, SETOR, DATA, CODIGO FROM CAIXA_ENTRADA WHERE DATA = #[Ô] & Format(mskData, [Ô]mm/dd/yy[Ô]) & [Ô]#[Ô] & _
[Ô] UNION [Ô] & _
[Ô]SELECT CAIXA_SAIDA.HORA AS HORA_PARC, CAIXA_SAIDA.DESCRICAO AS CAMPO01, [ô]0[ô] AS CAMPO02, CAIXA_SAIDA.VALOR AS CAMPO03, (CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04, COD_HAVER, SETOR, DATA, CODIGO FROM CAIXA_SAIDA WHERE DATA = #[Ô] & Format(mskData, [Ô]mm/dd/yy[Ô]) & [Ô]#[Ô]
Set Rs = BD.OpenRecordset(SQL)

FormatarGridEntrada


Código para montar o grid:
Private Sub FormatarGridEntrada()
With GridEntrada

.Clear
.Cols = 6
.Rows = 2

.ColWidth(0) = 0
.ColWidth(1) = 650
.ColWidth(2) = 3100
.ColWidth(3) = 1150
.ColWidth(4) = 1150
.ColWidth(5) = 1150

.TextMatrix(0, 1) = [Ô]HORA[Ô]
.TextMatrix(0, 2) = [Ô]DESCRIÇÃO[Ô]
.TextMatrix(0, 3) = [Ô]ENTRADA[Ô]
.TextMatrix(0, 4) = [Ô]SAÍDA[Ô]
.TextMatrix(0, 5) = [Ô]SALDO[Ô]

[ô]colocar os cabeçalho em negrito
Dim X As Integer
For X = 0 To .Cols - 1
.Col = X
.Row = 0
.CellFontBold = True
Next X

[ô]centralizar o titulo
Dim f As Integer
For f = 0 To .Cols - 1
.Row = 0
.Col = f
.CellAlignment = flexAlignCenterCenter
Next f

Do Until Rs.EOF

[ô]mudar a cor da coluna
Dim i As Integer
For i = 1 To .Rows - 1
.Row = i
.Col = 5: .CellBackColor = &HC0FFFF
Next


.Redraw = False

[ô]ALINHAMENTO
.ColAlignment(2) = 1

.Redraw = True

If Not IsNull(Rs!HORA_PARC) Then .TextMatrix(.Rows - 1, 1) = Format(Rs!HORA_PARC, [Ô]hh:mm[Ô])
If Not IsNull(Rs!CAMPO01) Then .TextMatrix(.Rows - 1, 2) = Rs!CAMPO01
If Not IsNull(Rs!CAMPO02) Then .TextMatrix(.Rows - 1, 3) = Format(Rs!CAMPO02, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!CAMPO03) Then .TextMatrix(.Rows - 1, 4) = Format(Rs!CAMPO03, [Ô]##,##0.00[Ô])
If Not IsNull(Rs!CAMPO04) Then .TextMatrix(.Rows - 1, 5) = Format(Rs!CAMPO04, [Ô]##,##0.00[Ô])
Rs.MoveNext
.Rows = .Rows + 1

Loop

.Rows = .Rows - 1

End With
End Sub


Obs:
Fiz uma tentativa de SUBTRAIR o CAMPO02 com o CAMPO03 na propria sql
(CCUR(CAMPO02)-CCUR(CAMPO03)) AS CAMPO04

mas não é o que quero!
Eh como descrevi acima!
WEBIER 25/01/2010 11:31:38
#332780
alguem?
PH1959 25/01/2010 11:49:56
#332783
vc pode fazer o seguinte....
1 usar uma tabela com estrutura diferente criando um campo adicional (onde vc vai informar se é débito ou credito) OU
pode usar esta sua tabela mesmo usando valores negativos para os débitos e totalizar o saldo com um sql
WEBIER 25/01/2010 11:57:23
#332786
mas pra isso teria q criar um campo a mais... adicionar dados nesse campo.... contar essas informação para usar-lo em calculo....

ou seja, uma volta enorme para um simples preenchimento de grid!

Mais alguem?
PH1959 25/01/2010 12:03:49
#332788
kra vc não entendeu....
eu disse.... vc tem DUAS opções....
uma é criar um campo extra.... SE vc se utilizar desta, vc não precisa chamar este campo extra para o seu grid... ele só é utilizado para vc saber se está somando ou subtraindo!

A segunda opção é usar valores NEGATIVOS para os débitos....
SE vc optar por utilizá-la, para ter o saldo basta fazer um sql Select Sum

ps. te adicionei ao MSN se quiser trocar umas idéias
RODRIGOMARCHESE 26/01/2010 08:58:46
#332833
Eu sugiro que você faça isso em uma stored procedure. Desta forma o cálculo do campo saldo já seria retornado populado e o desempenho seria mais eficiênte.
ASHKATCHUP 26/01/2010 09:20:29
#332835
Eu sugiro que você calcule o saldo no próprio grid.
Primeiro você preenche ele e depois faz um laço de repetição varrendo as linhas e calculando.
WEBIER 27/01/2010 10:40:53
#332934
é justamente o que o ASHKATCHUP disse!

O problema eh q não sei como fazer esse loop no grid!
WEBIER 28/01/2010 17:11:54
#333055
alguem sabe fazer isso que o ASHKATCHUP sugeriu?
Página 1 de 2 [20 registro(s)]
Tópico encerrado , respostas não são mais permitidas