parcelas do carnê
oi, pessoal...
nesta miha SP abaixo, eu estou gerando umas parcelas de um determinado carne, só quando inclemento um novo :PERIODO (proxima data de vencimento) não consigo fazer com que as datas fiquem com periodos de 30 dias.... por exemplo um carne em 12 pagamentos com aprimeira para dia ( 01/04/2007 ) fica assim:
01/05/2007
31/05/2007
30/06/2007
30/07/2007
29/08/2007
28/09/2007
28/10/2007
27/11/2007
27/12/2007
26/01/2007
25/02/2007
26/03/2007
eu tambem precisaria de uma outra forma para fixar por data de vencimento e não por periodo, por exemplo vencimento todo dia 30 de cada mês...
Erivando
nesta miha SP abaixo, eu estou gerando umas parcelas de um determinado carne, só quando inclemento um novo :PERIODO (proxima data de vencimento) não consigo fazer com que as datas fiquem com periodos de 30 dias.... por exemplo um carne em 12 pagamentos com aprimeira para dia ( 01/04/2007 ) fica assim:
01/05/2007
31/05/2007
30/06/2007
30/07/2007
29/08/2007
28/09/2007
28/10/2007
27/11/2007
27/12/2007
26/01/2007
25/02/2007
26/03/2007
eu tambem precisaria de uma outra forma para fixar por data de vencimento e não por periodo, por exemplo vencimento todo dia 30 de cada mês...
CREATE PROCEDURE PROC_INS_CONTAS_RECEBER (
cont_venda integer,
num_parcelas integer,
dias_primeira integer,
periodo integer,
data_vencimento date,
cod_cliente integer,
aprazo numeric(18,2))
as
declare variable i integer;
declare variable data_vencto date;
declare variable valor_parcela numeric(18,2);
begin
/* gerar parcelas */
i = 0;
data_vencto = :data_vencimento + :DIAS_PRIMEIRA;
valor_parcela = :APRAZO / :NUM_PARCELAS;
while (i < :NUM_PARCELAS) do
begin
insert into contas_receber
(CF_cod, CR_data_doc, CR_data_vencto, CR_valor_doc, cr_controle_venda)
values
(:COD_CLIENTE, current_date, :DATA_VENCTO, :VALOR_PARCELA, :CONT_VENDA);
i = :i + 1;
data_vencto = data_vencto + :PERIODO;
end
END
Erivando
Erivando
Curtidas 0
Respostas
Dmenin
03/04/2007
claro..os meses nao tem todos 30 dias :D
pege o mes com um ´extract month´ ae some 1...nem q vc tenha q concatenar strings..ah, e cuidado que 12 +1 = 01 e aumenta um ano, não 13 :D
pege o mes com um ´extract month´ ae some 1...nem q vc tenha q concatenar strings..ah, e cuidado que 12 +1 = 01 e aumenta um ano, não 13 :D
GOSTEI 0
Erivando
03/04/2007
claro..os meses nao tem todos 30 dias :D
pege o mes com um ´extract month´ ae some 1...nem q vc tenha q concatenar strings..ah, e cuidado que 12 +1 = 01 e aumenta um ano, não 13 :D
o fato é que em uma Sp dentro do banco de dados pode ´extract month´ ????
GOSTEI 0
Erivando
03/04/2007
só pra corrigir fica é assim
01/05/2007
31/05/2007
30/06/2007
30/07/2007
29/08/2007
28/09/2007
28/10/2007
27/11/2007
27/12/2007
26/01/2008
25/02/2008
26/03/2008
01/05/2007
31/05/2007
30/06/2007
30/07/2007
29/08/2007
28/09/2007
28/10/2007
27/11/2007
27/12/2007
26/01/2008
25/02/2008
26/03/2008
GOSTEI 0
Dmenin
03/04/2007
claro que pode...só q vc deve usar num select
GOSTEI 0
Erivando
03/04/2007
claro que pode...só q vc deve usar num select
vc teria um exemplo de como fazer isot?
GOSTEI 0
Rodolpho123
03/04/2007
Cara,
Meu exemplo não é bem um [b:7ea9dda350]extract[/b:7ea9dda350], mais mostra o que vc pode fazer dentro de uma procedure. Dá uma olhada no filtro e veja o trabalho com datas:
Este método é para selecionar a galera inadimplente por um período de [i:7ea9dda350]n[/i:7ea9dda350] meses em atraso...
Meu exemplo não é bem um [b:7ea9dda350]extract[/b:7ea9dda350], mais mostra o que vc pode fazer dentro de uma procedure. Dá uma olhada no filtro e veja o trabalho com datas:
for select m.idassociado from mensatraso m inner join associados a on (a.idassociado = m.idassociado) inner join controlmensorg c on (a.idorgao = c.idorgao) where cast(´01.´ || m.mes || ´.´ || m.ano as date) >= cast(:DATAINIBLOQ as date) group by m.idassociado having count(m.idassociado) >= :MESESCONTROLE into :IDASSOCIADOMENS do begin
Este método é para selecionar a galera inadimplente por um período de [i:7ea9dda350]n[/i:7ea9dda350] meses em atraso...
GOSTEI 0
Sremulador
03/04/2007
Amigo, analise o código abaixo, ele apenas não só gera as parcelas mas tem outras implementações que fiz, mas o propósito e o mesmo.
CREATE PROCEDURE "GERARPARCELA" ( "PCCL" INTEGER, "PCPL" INTEGER, "PCFC" INTEGER, "PCDV" DATE, "PCFB" INTEGER ) AS DECLARE VARIABLE I INTEGER; DECLARE VARIABLE D INTEGER; DECLARE VARIABLE M INTEGER; DECLARE VARIABLE A INTEGER; DECLARE VARIABLE C VARCHAR(10); DECLARE VARIABLE S DATE; DECLARE VARIABLE R DECIMAL(18, 4); DECLARE VARIABLE P DECIMAL(18, 4); DECLARE VARIABLE O DECIMAL(18, 4); DECLARE VARIABLE T DECIMAL(18, 4); DECLARE VARIABLE U INTEGER; DECLARE VARIABLE N INTEGER; DECLARE VARIABLE W INTEGER; DECLARE VARIABLE TR DATE; DECLARE VARIABLE CF INTEGER; DECLARE VARIABLE CC INTEGER; DECLARE VARIABLE DA INTEGER; BEGIN SELECT MAX(PCDV) FROM PARCELAS WHERE PCCL=:PCCL INTO :TR; if (PCDV <= TR) then BEGIN EXCEPTION A001; EXIT; END I=0; --Passa os parametros do plano SELECT PLVP, PLVI, PLIS, PLNP, PLPF FROM PLANOS WHERE PLCD=:PCPL INTO P, O, U, N, CF; SELECT FCCO FROM FUNCIONARIOS WHERE FCCD=:PCFC INTO R; T= (R / 100) * P; --SEPARA OS DIAS MESES E ANO S =PCDV; D = CAST (EXTRACT (DAY FROM (:PCDV)) AS INTEGER); M = CAST (EXTRACT (MONTH FROM (:PCDV)) AS INTEGER); A = CAST (EXTRACT (YEAR FROM (:PCDV)) AS INTEGER); I = 1; W = 0; --Vefifica se a parela e a 1º e se e uma inscrição if ((U=1) AND (:TR IS NULL)) then begin N=N+1; W=1; end DA=D; WHILE (I <= N) DO BEGIN INSERT INTO PARCELAS (PCCL, PCPL, PCDV, PCFC, PCRP, PCVL, PCVI, PCTP, PCFT, PCFB) VALUES (:PCCL, :PCPL, :S, :PCFC, :T, :P - :T, :O, :W, 0, :PCFB); if (CF=0) then M = M + 1; ELSE A = A + 1; I = I + 1; IF (M=13) THEN BEGIN M=1; A= A + 1; END IF ((D > 28) AND (M=2)) THEN D=28; C = CAST (M AS VARCHAR(2)) ||´/´|| CAST (D AS VARCHAR(2)) ||´/´|| CAST (A AS VARCHAR(4)); S = CAST (C AS DATE); W = 0; D = DA; END SUSPEND;
GOSTEI 0