Stored Procedure
Pessoal estou com um pequeno problema, tenho um sistema de controle bancario e contas a pagar e receber. No lancamentos de contas a receber quando vou efetuar a baixa do lancamento tenho uma SP que executa esta baixa, porem, meu cliente quer que a baixa possa ser feita nao so pelo valor total, mas podendo ser baixado parcialmente. Acontece que na minha SP quando faz baixa indepedente se for total ou parcial, ja marca o registro como baixado. Vou colocar a SP e se puderem me ajudar esse problema ficarei grato.
Fico no aguardo.
Att
CREATE PROCEDURE SP_CTARECEBER_MOVTO (
nfilial integer,
ncodigo integer,
ncliente varchar(30),
acao char(1),
chk_caixa char(1),
chk_banco char(1))
returns (
valorpago double precision)
as
begin
/* ----------------------------------------------------------------------- */
/* BAIXAR */
If (ACAO=B) then
Begin
/* BAIXAR DOCUMENTO */
UPDATE cta_receber SET
/* Quitado=[S]sim */
cta_receber.quitado = S,
/* Saldo restante */
cta_receber.saldo_restante = (cta_receber.valor - cta_receber.valor_pago),
cta_receber.valor_pago = coalesce(cta_receber.valor_pago,0) +
coalesce(cta_receber.acrescimo,0) +
coalesce(cta_receber.despesas,0) -
coalesce(cta_receber.desconto,0)
WHERE
cta_receber.FILIAL=:nFILIAL
AND
cta_receber.CODIGO=:nCODIGO
AND
cta_receber.CLIENTE=:nCLIENTE;
/* verificar se no parametro do sistema está definido que toda baixa
contas a receber deve lançar no caixa */
/*select CAIXA_CTARECEBER from parametros
where
filial=:nfilial
into :CHK_CAIXA;*/
if (CHK_CAIXA=S) then
Begin
insert into ctrl_caixa (codigo, filial, documento, departamento,
PLN_CONTA_CLASSE,
pln_conta, dc, data, historico,
vlr_credito, vlr_debito, FORMA_PAGTO, efetivado)
values (
(select max(codigo)+1 from ctrl_caixa where filial=:nfilial),
:nfilial,
CTR-||(select CODIGO from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE),
(select CODIGO from departamentos where filial=:nfilial),
(select P_CONTA_CTARECEBER0 from parametros where filial=:nfilial),
(select P_CONTA_CTARECEBER from parametros where filial=:nfilial),
CREDITO,
(select DATA_PAGTO from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE),
TITULO BAIXADO ||(select historico from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE),
(select valor_pago from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE),
0,
(select fpagto from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE),
N
);
end -- If (CHK_CAIXA=S) Then (...)
/* verificar se no parametro do sistema está definido que toda baixa
contas a receber deve lançar no movimento bancário */
/*select CAIXA_BANCO from parametros
where
filial=:nfilial
into :CHK_BANCO;*/
if (CHK_BANCO=S) then
Begin
insert into CTRL_BANCARIO (codigo,
filial,
documento,
CTA_CORRENTE,
DEPARTAMENTO,
PLN_CONTA_CLASSE,
PLN_CONTA,
DC,
DATA,
HISTORICO,
VLR_CREDITO,
VLR_DEBITO)
values (
(select max(codigo)+1 from ctrl_bancario where filial=:nfilial),
:nfilial,
CTR-||(select CODIGO from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE),
(select conta_c from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE),
(select codigo from departamentos where filial=:nfilial),
(select P_CONTA_CTARECEBER0 from parametros where filial=:nfilial),
(select P_CONTA_CTARECEBER from parametros where filial=:nfilial),
CREDITO,
(select DATA_PAGTO from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE),
TITULO BAIXADO ||(select historico from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE),
(select valor_pago from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE),
0
);
end -- If (CHK_BANCO=S) Then (...)
end -- If ACAO=BAIXAR) Then (...)
/* ------------------------------------------------------------------ */
/* ESTORNAR */
If (ACAO=E) then
Begin
/* BAIXAR DOCUMENTO */
UPDATE cta_receber SET
/* Quitado=[S]sim */
cta_receber.quitado = N,
cta_receber.data_pagto = NULL,
cta_receber.valor_pago = 0,
cta_receber.saldo_restante = 0,
cta_receber.desconto = 0,
cta_receber.acrescimo = 0,
cta_receber.despesas = 0,
cta_receber.historico = NULL,
cta_receber.conta_c = NULL
WHERE
cta_receber.FILIAL=:nfilial
AND
cta_receber.CODIGO=:nCODIGO
AND
cta_receber.CLIENTE=:nCLIENTE;
/* EXCLUIR LANÇAMENTO DO SALDO CAIXA */
DELETE FROM ctrl_caixa_saldo
WHERE
FILIAL=:nFILIAL
AND
CODIGO=(select CODIGO from ctrl_caixa where filial=:nfilial and
DOCUMENTO=CTR-||(select CODIGO from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE));
/* EXCLUIR LANÇAMENTO DO CONTROLE DE CAIXA */
DELETE FROM ctrl_caixa
WHERE
FILIAL=:nFILIAL
AND
DOCUMENTO=CTR-||(select CODIGO from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE);
/* EXCLUIR LANÇAMENTO DO SALDO BANCARIO */
DELETE FROM ctrl_bancario_saldo
WHERE
FILIAL=:nFILIAL
AND
CODIGO=(select CODIGO from ctrl_bancario where filial=:nfilial and
DOCUMENTO=CTR-||(select CODIGO from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE));
/* EXCLUIR LANÇAMENTO DO CONTROLE BANCARIO */
DELETE FROM ctrl_bancario
WHERE
FILIAL=:nFILIAL
AND
DOCUMENTO=CTR-||(select CODIGO from cta_receber where filial=:nfilial and codigo=:nCODIGO and CLIENTE=:nCLIENTE);
End -- If ACAO=ESTORNAR) Then (...)
Fico no aguardo.
Att
Iramar Junior
Curtidas 0
Respostas
Joel Rodrigues
22/05/2012
Cara, confesso que não li teu código, mas com base no questão que você levantou, eu sugiro o seguinte: ter opções de marcação na tabela das contas que são baixadas, ou seja, ter um campo que permita não só valores para BAIXADO ou NÃO BAXIADO, mas também valores parciais como: B=Baixado; N=Não baixado; P=Parcialmente baixado;
Bom, não sei se é esse o problema, mas essa é minha opinião sobre sua colocação.
Boa sorte.
Bom, não sei se é esse o problema, mas essa é minha opinião sobre sua colocação.
Boa sorte.
GOSTEI 0
Iramar Junior
22/05/2012
Ja tenho um campo que seta para S=Quitado N=Nao quitado
Cara, confesso que não li teu código, mas com base no questão que você levantou, eu sugiro o seguinte: ter opções de marcação na tabela das contas que são baixadas, ou seja, ter um campo que permita não só valores para BAIXADO ou NÃO BAXIADO, mas também valores parciais como: B=Baixado; N=Não baixado; P=Parcialmente baixado;
Bom, não sei se é esse o problema, mas essa é minha opinião sobre sua colocação.
Boa sorte.
Bom, não sei se é esse o problema, mas essa é minha opinião sobre sua colocação.
Boa sorte.
GOSTEI 0
William
22/05/2012
Na realidade se já existe esse campo, então vc só acrescenta mais uma condição P = Parcialmente Quitado, como o colega Joel já explicou.
GOSTEI 0
Emerson Nascimento
22/05/2012
você precisa também guardar o saldo do titulo e/ou gerar uma movimentação bancária com o valor pago (data, motivo, banco, etc).
assim, ao efetuar uma nova baixa, o sistema já poderia sugerir como valor a baixar o saldo atual do título.
assim, ao efetuar uma nova baixa, o sistema já poderia sugerir como valor a baixar o saldo atual do título.
GOSTEI 0