Fórum parcelas do carnê #58118

03/04/2007

0

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...

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

Erivando

Responder

Posts

03/04/2007

Dmenin

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


Responder

Gostei + 0

03/04/2007

Erivando

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´ ????


Responder

Gostei + 0

03/04/2007

Erivando

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


Responder

Gostei + 0

04/04/2007

Dmenin

claro que pode...só q vc deve usar num select


Responder

Gostei + 0

04/04/2007

Erivando

claro que pode...só q vc deve usar num select


vc teria um exemplo de como fazer isot?


Responder

Gostei + 0

08/04/2007

Rodolpho123

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:
      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...


Responder

Gostei + 0

08/04/2007

Sremulador

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;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar