Extrato Bancario Direto no SQL (MySQL)

size=14pt[/size]

Bom Pessoal decidi colocar algo interessante para quem precisar…

Basicamente e um extrato Bancário, etc. direto em SQL sem usar aplicação alguma…

Criamos uma Tabela para o Exemplo

create TABLE demo_extracto
(id int(11) PRIMARY key AUTO_INCREMENT,
obs varchar(30),
entra decimal(18,2) not null default 0,
sai decimal(18,2) not null default 0,
debito_credito TINYINT not null default 0 COMMENT '1 para debito(Sai) 0 para credito(Entra)');

Adicionamos alguns dados para testar

INSERT INTO `demo_extracto` (`obs`, `entra`, `debito_credito`) VALUES ('Entro Dinheiro', '1200', '0');
INSERT INTO `demo_extracto` (`obs`, `entra`, `debito_credito`) VALUES ('Entro mais Dinheiro', '4500', '0');
INSERT INTO `demo_extracto` (`obs`, `entra`, `sai`, `debito_credito`) VALUES ('Sai Dinheiro', '0', '2800', '1');
INSERT INTO `demo_extracto` (`obs`, `entra`, `debito_credito`) VALUES ('Entro mais', '1230', '0');
INSERT INTO `demo_extracto` (`obs`, `entra`, `sai`, `debito_credito`) VALUES ('Saiu', '0', '150', '1');
INSERT INTO `demo_extracto` (`obs`, `entra`, `sai`, `debito_credito`) VALUES ('Saiu mais', '0', '1235', '1');

Criamos uma Função para auxiliar na visualização do formato numérico dentro do SQL b[/b]

DELIMITER $$ DROP FUNCTION IF EXISTS f_numero_format$$ /*A função recebe 2 parâmetros o Valor a ser convertido y a quantidade de casas decimais*/ CREATE FUNCTION `f_numero_format`(numero decimal(18,2), decimals int(1)) RETURNS varchar(20) CHARSET utf8 NO SQL BEGIN declare vs_retorno varchar(20); set vs_retorno = REPLACE( REPLACE (REPLACE (FORMAT (numero, decimals), ".", "@"), ",", "."), "@", ","); return vs_retorno; END$$ DELIMITER ;

Y por Ultimo o SQL que faz a magica

[code]SELECT id, obs, f_numero_format(entra,2) as credito, f_numero_format(sai,2) as debito, f_numero_format(saldo, 2) as saldo
FROM (
SELECT
id,
obs,
entra,
sai,
@debito_credito := debito_credito AS tipo,
@saldo := IF(@debito_credito = 0, @saldo + entra, @saldo - sai) AS saldo
FROM demo_extracto, (SELECT @debito_credito := 0, @saldo := 0) as vars
ORDER BY id
) AS extrato

union all

SELECT 0, ‘Saldo Final’, 0, 0, f_numero_format(@saldo, 2);[/code]

Espero que seja de ajuda para alguém :slight_smile:


resultado_sql_extrato_willian.png

Legal heim, pra que onRecord, kkkk
Muito boa função…

Eu também pego o saldo assim.

Só que uso uma PROCEDURE no MYSQL, ai no filtro da listagem chamo ela com CALL e passo o caixa para ele gerar o saldo,
mas gero o saldo na própria tabela de lançamentos em campos que ficam escondidos que só mostro na listagem do caixa.

Usar o próprio MySQL para fazer essas coisas é muito mas rápido, eficiente e indicado do que manipular por código PHP.
http://rotinadigital.net/os-dez-principais-erros-mysql-cometidos-por-desenvolvedores-php/

Excelente William. Obrigado por compartilhar.

Excelente Willian muito bom mesmo… Parabéns.
Obrigado por Compartilhar.

muito bom, willian !

Obrigado !

Willian,

Parabéns, vou utilizar.

Obrigado por compartilhar

Ilton

legal!

Olá

Como fazer um filtro entre datas usando essa consulta SQL…?

Basta adicionar um WHERE na SQL

[code]SELECT id, obs, f_numero_format(entra,2) as credito, f_numero_format(sai,2) as debito, f_numero_format(saldo, 2) as saldo
FROM (
SELECT
id,
obs,
entra,
sai,
@debito_credito := debito_credito AS tipo,
@saldo := IF(@debito_credito = 0, @saldo + entra, @saldo - sai) AS saldo
FROM demo_extracto, (SELECT @debito_credito := 0, @saldo := 0) as vars
WHERE colunaData BETWEEN ‘01-01-2016’ and ‘31-01-2016’ /Obviamente neste exemplo não tenho data, basta adicionar a coluna e testar/
ORDER BY id
) AS extrato

union all

SELECT 0, ‘Saldo Final’, 0, 0, f_numero_format(@saldo, 2);[/code]

Ao realizar a pesquisa, o resultado e vazio… Não gera nada.

Essas dicas aqui para MySQL/MariaDB também é legal para gerar extratos:
http://www.rafaeltheodoro.com.br/mysql/somar-subqueries-mysql/

Em SQLite não existe variáveis temporárias ai tempos que criar uma tabela tmp e usar como variável, e vários updates.

Não sei se e nesse tópico mas to com uma duvida, como faço o seguinte eu tenho uma tabela tarefas que um usuário e responsável dela queria fazer uma interação de que quando sair dessa tabela vai para outra mas me informe o motivo porque saiu so isso se tiver como e claro.

não tem nada a ver com o TOPICO, crie um novo

Olá Pessoal,

Estava precisando exatamente um extrato bancário desses no SC. Teria como exemplificar como ficaria esse extrato com as aplicações FORM e GRID no SC?

Esse tópico está prejudicado devido ao tempo (6 anos) inclusive alguns nem mais usam SC.

2 Curtidas