[firebase-br] duvida com select
omar l m rosa
omar em conesul.inf.br
Ter Jun 5 12:37:53 -03 2007
HI!
é meio copmplicado, mas a idéia é a seguinte
A tabela TB_Cond_PAGTO conté as condições de pagamento.
diasN é o numero de dias para o vencimento (se -1 =
apresentação, se 0 = a vista, etc)
percN é o percentual para calculo do valor da parcela sobre o
valor total.
ex 3x = 33% + 33% + 34%, ou 10% + 40 % + 50% etc...
percN = 0 vai pro contas-correntes
f_debugger são funções para salvar os valores durante a execução em um
arquivo texto...
Bai!
omar
CREATE TABLE TB_COND_PAGTO (
PK_TB_COND_PAGTO INTEGER NOT NULL,
DESCRICAO VARCHAR(50) COLLATE WIN_PTBR,
PERC1 NUMERIC(2,0),
PERC2 NUMERIC(2,0),
PERC3 NUMERIC(2,0),
....
DIAS1 NUMERIC(2,0),
DIAS2 NUMERIC(2,0),
DIAS3 NUMERIC(2,0),
...
);
CREATE PROCEDURE P_INCLUI_DUPLICATAS (
pk_pedidos integer)
as
declare variable pk_tb_cond_pagto integer;
declare variable dias1 numeric(2,0);
declare variable perc numeric(2,0);
declare variable ret integer;
declare variable soma decimal(15,2);
declare variable total decimal(15,2);
declare variable valor decimal(15,2);
declare variable dias numeric(2,0);
declare variable texto varchar(200);
declare variable nparc integer;
declare variable venc date;
declare variable data date;
declare variable perc1 numeric(2,0);
begin
ret = F_SETDEBUGGEROUTPUT ('c:\temp\gera_duplicatas.log');
nparc = 13;
soma = 0;
select pk_tb_cond_pagto, total, data
from pedidos
where pk_pedidos = :pk_pedidos
into :pk_tb_cond_pagto, :total, :data;
if (dias1 = 0 and perc1 = 100) then /* a vista */
exit;
if (pk_tb_cond_pagto is null) then
pk_tb_cond_pagto = 0;
select dias1, perc1
from tb_cond_pagto
where pk_tb_cond_pagto = :pk_tb_cond_pagto
into :dias1, :perc1;
if (dias1 = -1 and perc1 = 100) then /* apresentacao */
begin
insert into ct_receber
( data, documento,
pk_pedidos, pk_pessoas, pk_saidas,
pk_tb_ccustos, pk_tb_tipo_cta, valor, vencimento)
select cast('NOW' as timestamp), cast(p.pk_pedidos as varchar(10)) ||
' Apres.',
p.pk_pedidos, p.pk_pessoas, p.pk_saidas,
1, 4, :total, cast('NOW' as date)
from pedidos p
where p.pk_pedidos = :pk_pedidos;
end
else
if (dias1 = 0 and perc1 = 0) then /* faturamento c/corrente */
begin
insert into ct_correntes
( data, documento,
pk_pedidos, pk_pessoas, pk_usuarios,
pk_tb_lanc_cc, valor)
select :data, 'Pedido ' || cast(p.pk_pedidos as varchar(10)),
p.pk_pedidos, p.pk_pessoas, pk_usuarios,
1, :total
from pedidos p
where p.pk_pedidos = :pk_pedidos;
end
else
while (nparc > 1) do
begin
ret = F_DEBUG ('cond pagto =' || cast(:pk_tb_cond_pagto as
varchar(10)) );
ret = F_DEBUG ('total =' || cast(:total as varchar(10)) );
nparc = nparc - 1;
texto = 'select dias' || cast(nparc as varchar(3)) ||
', perc' || cast(nparc as varchar(3)) ||
' from tb_cond_pagto where pk_tb_cond_pagto = ' ||
cast (:pk_tb_cond_pagto as varchar(10));
execute statement texto
into :dias, :perc;
ret = F_DEBUG ('nparc =' || cast(:nparc as varchar(10)) );
ret = F_DEBUG ('dias =' || cast(:dias as varchar(10)) );
ret = F_DEBUG ('perc =' || cast(:perc as varchar(10)) );
if (perc > 0) then
begin
if (nparc = 1) then
begin
valor = total - soma;
end
else
begin
valor = round(total * perc / 100);
soma = soma + valor;
end
venc = data + dias;
ret = F_DEBUG ('valor =' || cast(:valor as varchar(10)) );
ret = F_DEBUG ('soma =' || cast(:soma as varchar(10)) );
insert into ct_receber
( data, documento,
pk_pedidos, pk_pessoas, pk_saidas,
pk_tb_ccustos, pk_tb_tipo_cta, valor, vencimento)
select cast('NOW' as timestamp), cast(p.pk_pedidos as
varchar(10)) ||
'/' || cast(:nparc as
varchar(3)),
p.pk_pedidos, p.pk_pessoas, p.pk_saidas,
1, 4, :valor, :venc
from pedidos p
where p.pk_pedidos = :pk_pedidos;
end
end
ret = F_CLOSEDEBUGGEROUTPUT();
end
----- Original Message -----
From: "Zottis" <zottissistemas em brturbo.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, June 05, 2007 12:03 PM
Subject: Re: [firebase-br] duvida com select
Olá Turma, alguém teria um exemplo de SP para gerar parcelas de uma venda,
hoje é o meu aplicativo que faz isso, mas estou tendo problemas, estou
querendo gerar via SP , mas tem o Problema de Arredondamento, então se
alguém tem um exemplo, ajudaria muito
Obrigado
Zottis
PS Uso FB 2.0, MDO e Delphi 7
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
__________ Informação do NOD32 IMON 2309 (20070605) __________
Esta mensagem foi verificada pelo NOD32 sistema antivírus
http://www.eset.com.br
Mais detalhes sobre a lista de discussão lista