Fórum Cálculos ao salvar no banco e dúvida com Report Builder #467339
19/01/2014
0
Estou com a seguinte questão, estou aqui com um formulário que faz o controle simples de um caixa. Data - Histórico e Valor.
Só que é daí vem a questão, quando eu for gerar relatório eu preciso saber qual saldo eu tinha antes da inserção de um registro e qual saldo eu tenho depois da inserção de um registro, ou seja:
ID Data Histórico Valor Operação Saldo
1 16/01/2014 Recebimento 200,00 Crédito 100,00
2 16/01/2014 Recebimento 250,00 Crédito 350,00
3 16/01/2014 Recebimento 500,00 Crédito 850,00
4 16/01/2014 Pagamento 600,00 Débito 250,00
E se acaso o Débito for maior que o crédito ficaria assim baseado na informação acima:
4 16/01/2014 Pagamento 1000,00 Débito -150,00
Eu consigo fazer isso somente tendo no meu banco as colunas: ID, Data, Historico, Valor? Ou eu teria que fazer alguma coisa para o banco armazenar em algum lugar que quando a operação fosse crédito ele acrescentaria e quando fosse débito ele retiraria? Ou simplesmente com eu conseguiria trabalhar os dados informados pelo banco com base nas minhas colunas com condições?
A duvida sobre meu relatório era mais ou menos isso assim, eu conseguiria mostrar no relatório essas condições com base nas colunas que tenho?
Uso Delphi 2010 e Report Builder
Obrigado
Marlon Minotti
Curtir tópico
+ 0Posts
19/01/2014
Joel Rodrigues
Duas formas comuns de fazer esse tipo de controle é da seguinte forma:
1) usar esses mesmos campos e salvar valores positivos para entradas, e negativos para saídas. Assim, bastaria sempre somar ao total, pois a soma de um negativo é equivalente a uma subtração.
2) criar outra coluna para identificar se o movimento é entrada ou saída.
Um recurso que talvez deixasse esse processo ainda mais simples seria usar um stored procedure que recebesse a data, o valor (positivo ou negativo, ou ainda a coluna indicando o tipo de movimento) e a descrição. Esse procedure calcularia o saldo restante e retornaria esse saldo como um valor positivo ou negativo, indicando se você ficou com crédito ou débito no caixa. EU faria assim.
Abraço.
Gostei + 0
21/01/2014
Marlon Minotti
Só que com um porém, na minha tabela "lancamento" eu tenho as colunas "historico, data, valor e plano_conta_ID". Essa tabela plano de conta é um meio que utilizo para identificar o tipo de entrada ou saída que tenho, por exemplo: A minha descrição do plano de contas é "Recebimento de Parcela" com o tipo de operação "Crédito", então quando eu selecionar o plano de conta no lancamento eu ja vou saber qual operação que ele pertence, se é entrada (crédito) ou saída (débito).
Como eu faria essa stored procedure? Não entendi muito bem como eu criaria ela. Eu já fiz procedures só que no PostgreSQL. Se puder ajudar obrigado.
Gostei + 0
21/01/2014
Joel Rodrigues
CREATE PROCEDURE usp_REGISTRAR_LANCAMENTO_CAIXA @VALOR DECIMAL, @HISTORICO VARCHAR(MAX), @DATA DATETIME AS BEGIN DECLARE -- VARIÁVEL PARA ARMAZENAR O SALDO DO DIA @SALDO DECIMAL, @TOTAL_LANCAMENTOS DECIMAL, @FUNDO_CAIXA DECIMAL -- INSERE O LANÇAMENTO NA TABELA INSERT INTO LANCAMENTOS (VALOR, HISTORICO, DATA) VALUES (@VALOR, @HISTORICO, @DATA) -- RETORNA O TOTAL DE LANÇAMENTOS (CRÉDITOS E DÉBITOS, SOMANDO POSITIVOS E NEGATIVOS) SELECT @TOTAL_LANCAMENTOS = SUM(VALOR) FROM LANCAMENTO WHERE DATA = @DATA -- RETORNA O FUNDO DE CAIXA DO INÍCIO DO DIA -- NESSA TABELA, TEM-SE O VALOR DE ABERTURA DO CAIXA, O VALOR DE FECHAMENTO E A DATA, UM REGISTRO POR DIA SELECT @FUNDO_CAIXA = VALOR_ABERTURA FROM CAIXA WHERE DATA = @DATA -- SOMA TUDO PARA VER QUANTO TEM EM CAIXA SET @SALDO = @TOTAL_LANCAMENTOS + @FUNDO_CAIXA -- RETORNA UM SELECT COM UMA COLUNA CHAMADA SALDO SELECT @SALDO AS SALDO END GO
Gostei + 0
21/01/2014
Marlon Minotti
Gostei + 0
22/01/2014
Joel Rodrigues
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)