 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
AntonioJose Novato

Registrado: Quinta-Feira, 17 de Agosto de 2006 Mensagens: 24
|
Enviada: Sex Jan 24, 2014 11:48 am Assunto: stored procedure firebird que retorne saldos várias contas |
|
|
Estou tentando criar uma stored procedure firebird que retorne saldos das contas do banco de dados.
fiz da seguinte maneira. Mas não calcula os saldos de cada conta. Somente saldo geral como se não tivesse outra conta.
Queria que quando a conta fosse diferente o saldo começasse do zero novamente e assim todas as vezes que a conta mudasse de nome.
segue o codigo que estou tentando:
CREATE PROCEDURE LIVRO_CAIXA2
returns (
idcaixa integer,
datacaixa date,
historico varchar(70),
conta varchar(1 ,
entrada decimal(15,2),
saida decimal(15,2),
saldo decimal(15,2),
controle varchar(10))
as
declare variable saldoatual decimal(15,2);
begin
saldoatual = 0;
for select c.conte, c.codc, c.datalanc, c.historico, c.credito, c.debito, c.dc
from caixa c order by C.conte, C.datalanc
into
:conta,
:idcaixa,
:datacaixa,
:historico,
:entrada,
:saida,
:controle
do
begin
saldo = saldoatual + :entrada - :saida;
saldoatual = :saldo;
suspend;
end
end |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Jan 24, 2014 2:05 pm Assunto: |
|
|
Boa tarde,
Qual banco de dados (e versão) você está utilizando? Firebird?
Existe uma tabela de contas no seu banco de dados?
Editado pela última vez por imex em Ter Mar 21, 2023 4:48 pm, num total de 1 vez |
|
Voltar ao Topo |
|
 |
AntonioJose Novato

Registrado: Quinta-Feira, 17 de Agosto de 2006 Mensagens: 24
|
Enviada: Sex Jan 24, 2014 2:32 pm Assunto: |
|
|
Estou usando firebird 2.1
tabela caixa:
CREATE TABLE CAIXA (
CODC INTEGER,
CREDITO NUMERIC(15,2),
DEBITO NUMERIC(15,2),
DATALANC DATE,
HISTORICO VARCHAR(55),
DC VARCHAR(1),
CONTE VARCHAR(15)
); |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Jan 24, 2014 3:27 pm Assunto: |
|
|
Experimente dessa forma:
Código: | as
declare variable saldoatual decimal(15,2);
declare variable contaant varchar(19);
begin
saldoatual = 0;
contaant = '';
for select c.conte, c.codc, c.datalanc, c.historico, c.credito, c.debito, c.dc
from caixa c order by C.conte, C.datalanc
into
:conta,
:idcaixa,
:datacaixa,
:historico,
:entrada,
:saida,
:controle
do
begin
if (conta <> contaant) then
begin
contaant = conta;
saldoatual = 0;
end
saldo = saldoatual + :entrada - :saida;
saldoatual = :saldo;
suspend;
end
end |
Espero que ajude. |
|
Voltar ao Topo |
|
 |
AntonioJose Novato

Registrado: Quinta-Feira, 17 de Agosto de 2006 Mensagens: 24
|
Enviada: Sex Jan 24, 2014 3:52 pm Assunto: |
|
|
imex escreveu: | Experimente dessa forma:
Código: | as
declare variable saldoatual decimal(15,2);
declare variable contaant varchar(19);
begin
saldoatual = 0;
contaant = '';
for select c.conte, c.codc, c.datalanc, c.historico, c.credito, c.debito, c.dc
from caixa c order by C.conte, C.datalanc
into
:conta,
:idcaixa,
:datacaixa,
:historico,
:entrada,
:saida,
:controle
do
begin
if (conta <> contaant) then
begin
contaant = conta;
saldoatual = 0;
end
saldo = saldoatual + :entrada - :saida;
saldoatual = :saldo;
suspend;
end
end |
Espero que ajude. |
Amigo..
Exatamente isso Obrigado. Ficou do jeito que eu queria;
Eu aproveitei e criei também o saldo anterior para facilitar quando for emitir um relatorio. Quem interesar, ficou assim:
CREATE PROCEDURE LIVRO_CAIXA2
returns (
idcaixa integer,
datacaixa date,
historico varchar(70),
conta varchar(1 ,
entrada decimal(15,2),
saida decimal(15,2),
saldoa decimal(15,2),
saldo decimal(15,2),
controle varchar(10))
as
declare variable saldoanterior decimal(15,2);
declare variable contaant varchar(1 ;
declare variable saldoatual decimal(15,2);
begin
saldoatual = 0;
contaant = '';
SALDOANTERIOR = 0;
for select c.conte, c.codc, c.datalanc, c.historico, c.credito, c.debito, c.dc
from caixa c order by C.conte, C.datalanc
into
:conta,
:idcaixa,
:datacaixa,
:historico,
:entrada,
:saida,
:controle
do
begin
if (conta <> contaant) then
begin
contaant = conta;
saldoatual = 0;
SALDOANTERIOR = 0;
end
saldo = saldoatual + :entrada - :saida;
saldoatual = :saldo;
saldoa = SALDOATUAL - :entrada + :saida;
suspend;
end
end |
|
Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Qua Set 13, 2017 11:41 am Assunto: |
|
|
Tenho um caso semelhante, porém preciso filtrar essa procedure pelo nome da conta.
ex:
caixa interno
banco do brasil
etc..
Como poderia ajustar essa procedure para buscar essa informação? |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|