APROVEITAR

Fórum Cálculos ao salvar no banco e dúvida com Report Builder #467339

19/01/2014

0

Boa noite pessoal tudo bem? Espero que sim :D

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

Marlon Minotti

Responder

Posts

19/01/2014

Joel Rodrigues

Olá, qual banco você utiliza? Seria uma ideia talvez fazer isso usando triggers direto no banco.
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.
Responder

Gostei + 0

21/01/2014

Marlon Minotti

Um campo que indica se é entrada ou saída eu tenho, são os valores Débito ou Crédito que estão na tabela plano_conta

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.
Responder

Gostei + 0

21/01/2014

Joel Rodrigues

Eu achei esse código aqui, pra SQL Server, talvez lhe ajude:

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
Responder

Gostei + 0

21/01/2014

Marlon Minotti

Eu uso MySQL, desculpa não ter falado
Responder

Gostei + 0

22/01/2014

Joel Rodrigues

Veja este artigo e, com base no exemplo acima, você poderá adaptar: Stored Procedures no MySQL.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar