Jump to content
Fórum Script Brasil
  • 0

(Resolvido)Procedure para calcular valores de fechamento


robinhocne

Question

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

Edited by robinhocne
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...