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

(Resolvido)Procedure para calcular valores de fechamento


robinhocne

Pergunta

Pessoal estou criando uma procedure para calcular alguns valores de fechamento de caixa, só estou fazendo testes para depois analisar se vai ficar melhor assim, fiz uma aqui, mas o resultado não retorna correto;

essa é a procedure:

SET TERM ^;

CREATE PROCEDURE P_VDA_FECHACAIXA_VAL (
    pdata date)
returns (
    vl_vista numeric(15,2),
    vl_prazo numeric(15,2))
as
declare variable vl_valor_aux numeric(15,2);
declare variable tp_pgto_aux varchar(15);
begin
    vl_valor_aux   = 0;
    VL_PRAZO       = 0;
    VL_VISTA       = 0;
    tp_pgto_aux    = '';

    for select ValParcela,FormasDePg
        from Compromissos where DtVenda >= :pData
        and  Fechado = 'N'
        into :vl_valor_aux, :tp_pgto_aux
    do
        Begin
            if (:tp_pgto_aux = 'Á VISTA') then
              begin
                VL_VISTA = VL_VISTA + :vl_valor_aux;
              end
              else
            if (:tp_pgto_aux = 'PARCELA') then
              begin
                VL_PRAZO = VL_PRAZO + :vl_valor_aux;
              end
            suspend;
        end
end^

SET TERM; ^

GRANT SELECT ON COMPROMISSOS TO PROCEDURE P_VDA_FECHACAIXA_VAL;

GRANT EXECUTE ON PROCEDURE P_VDA_FECHACAIXA_VAL TO SYSDBA;

Nela eu verifico na tabela compromissos se a FormasdePg é "Á VISTA" ou "PARCELA" para me retornar o resultado de ambas, porém retorna assim:

VL_PRAZO VL_VISTA

0,00 56,88

19,15 56,88

38,30 56,88

o valor correto é

VL_PRAZO VL_VISTA

38,30 56,88

no valor a prazo eu tenho 2 registros

1 PARCELA de 19,15

2 PARCELA de 19,15

e a vista

Á VISTA de 56,88

tem como sair em coluna igual assim:

VL_PRAZO VL_VISTA

38,30 56,88

uma ajuda

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

2 respostass a esta questão

Posts Recomendados

  • 0

Olá Robinhocne

ele está retornando vários valores até chegar no valor da soma em função do "suspend"

o banco interpreta o suspend como saida de dados, cada volta do seu for select ele vai dar um suspend

e gerar uma saida de dados...

pra resolver o problema da sua procedure, basta alterar o local do suspend...

insira ele logo após o end que encerra o for select.

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,2k
    • Posts
      651,8k
×
×
  • Criar Novo...