Ir para conteúdo
Fórum Script Brasil
  • 0

Stored Procedure Livro Caixa


renanbg

Pergunta

Amigos, estou tentando montar uma pequena procedure que me traga os dados de uma tabela chamada movimentacao.

No formulario, vou selecionar o nome do banco e o periodo

A estrutura da tabela é:

CODIGO
COD_BANCO //nome banco. ex BB, bradesco, itau
DATA
LANCAMENTO 
TIPO //SE É CREDITO OU DEBITO.
VALOR

Achei essa procedure, mas não consegui entender como adaptar para pesquisar na minha tabela. Ao que entendi, essa SP seleciona os dados de duas tabelas e eu preciso de apenas 1

CREATE PROCEDURE SALDO_CONTA ( 
    conta varchar(15), 
    datainicial date) 
returns ( 
    data date, 
    contamovimentada varchar(15), 
    saldoanterior numeric(15,2), 
    credito numeric(15,2), 
    debito numeric(15,2), 
    saldoatual numeric(15,2)) 
as 
declare variable valorcredito numeric(15,2); 
declare variable valordebito numeric(15,2); 
declare variable datafinal date; 
begin 
  data = datainicial; 
  contamovimentada = conta; 
  -- datafinal será sempre a data atual do sistema -- 
  datafinal = current_date; 

  -- ************************************************************** 
  -- estas linhas estão fora do while para que sejam           -- * 
  -- executadas apenas 1 vez, aumentando a performance.        -- * 
  -- depois apenas faço a soma dos valores obtidos dia a dia   -- * 
  -- para sempre obter o saldo anterior correto                -- * 
  -- ************************************************************** 
  select coalesce(sum(valor),0)                                -- * 
  from credito                                                 -- * 
  where conta_c = :conta and data < :data into :valorcredito;  -- * 
                                                               -- * 
  select coalesce(sum(valor),0)                                -- * 
  from debito                                                  -- * 
  where conta_d = :conta and data < :data into :valordebito;   -- * 
                                                               -- * 
  -- obtenho o saldo anterior subtraindo o débito do crédito   -- * 
  saldoanterior = valorcredito - valordebito;                  -- * 
  -- ************************************************************** 

  -- verifico o movimento dia a dia, até o dia anterior à data atual 
  while (data <datafinal> 0) or (debito > 0))  then 
      suspend; 

    data = data + 1; 
    saldoanterior = saldoanterior + (credito - debito); 
  end 

  -- somo os créditos da data atual 
  select coalesce(sum(valor),0) 
  from credito 
  where conta_c = :conta and data = :data into :credito; 

  -- somo os débitos da data atual 
  select coalesce(sum(valor),0) 
  from debito 
  where conta_d = :conta and data = :data into :debito; 

  saldoatual = saldoanterior + (credito - debito); 

  -- exibe o registro com o saldo do dia atual 
  suspend; 
end

O resultado da procedure acima, seria algo assim

data       |conta     |saldo anterior |    debito |    credito |    saldo atual 
31/01/06    6                    0,00         0,00        60,00           60,00 
28/02/06    6                   60,00         0,00        30,00           90,00 
31/03/06    6                   90,00        40,00         0,00           50,00 
30/04/06    6                   50,00        60,00         0,00          -10,00 
19/01/07    6                  -10,00         0,00         0,00          -10,00

Alguma sugestão?

Editado por renanbg
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Jhonas, tudo bem?

Vou ter num formulario um combobox com o nome dos bancos, dois datetimepicker para dataini e datafim e um button para pesquisar.

O resultado sairá num dbgrid.

Não é necessário que tenha uma coluna com o saldo anterior calculado a cada linha. Ele poderia ser mostrado apenas na primeira linha.

Segue um espelho da minha tabela

Semtitulo.png

Link para o comentário
Compartilhar em outros sites

  • 0

voce tem algumas opções

1 - trabalhar com campos calculados e somente mostrar no dbgrid esses campos  ( sem salvar )

2 - ou pode incluir esses campos na tabela e efetuar os calculos ( e salvar ) ... fica até mais facil para controle

3 - mostrar os valores finais de saldo anterior, debitos, creditos e saldo atual em Edits no Form apenas como referencia ao periodo selecionado  pela select

obs: os datetimepicker podem ser substituidos pelo componente DateEdit1 da Library RxLib ( mais bonito visualmente )

o que voce prefere ?

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • 0

O campo calculado não serve neste caso, pois preciso pegar o historico de lançamentos.

Imagina que a tabela tem dados de 2001 até 2017 e você vai selecionar apenas um dia em 2015? Terei que pegar todos valores desde o inicio para ir calculando o saldo anterior e o atual.

Por isso pensei na stored procedure.

 

Link para o comentário
Compartilhar em outros sites

  • 0

use campo calculado e salve o resultado ... dessa maneira quando voce selecionar um conjunto de dados ( apenas 1 dia de determinado mes e ano ou um período ) voce só tera que pesquisar por esse período ou data.

alem de agilizar a pesquisa ( rede ) trazendo poucos dados, o resultado sempre estara correto.

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...