[firebase-br] Gostaria da opinião de vocês sobre esta SP
Andrei Luís
compuvale.software em gmail.com
Seg Nov 7 22:11:11 -03 2005
Boa noite a todos,
Estou engatinhando no mundo das SPs e gostaria da opnião dos colegas
sobre a SP ae abaixo.
O objetivo é o seguinte: esta SP será disparada junto ao Select de
produtos, sendo que a mesma retornará o custo do produto. Tenho duas
situações no cad de produtos, que é diferenciado pelo campo montado:
se for 'F' (false) é produto "simples" se for 'T' (true) é produto
montado. Ex.: um HD seria 'F', já um computador completo seria 'T'.
Quando o produto é montado, ele tem em uma outra tabela (romaneios)
uma lista de produtos que ele contém. Aí eu montei o monstrinho ae
abaixo, que acaba fazendo uma chamada recursiva a ela mesma...
E quanto a essa questão de chamada recursiva? Hoje os produtos que
estão cadastrados (dados reais) requerem no máximo três chamadas
recursivas. Li quer o limite do FB seriam de 1000 chamadas. Isto está
correto ou terei algum problema? Até agora os testes que fiz estão OK.
Eis a dita cuja:
CREATE PROCEDURE CALC_CUSTO_PRODUTOS (
WPRODUTO_ID INTEGER,
WMONTADO CHAR(1),
WFORNECEDOR_ID INTEGER)
RETURNS (WCUSTO NUMERIC(9,2))
AS
DECLARE VARIABLE WICMS NUMERIC(9,2);
DECLARE VARIABLE WPRODUTO_ID2 INTEGER;
DECLARE VARIABLE WCUSTOPARCIAL NUMERIC(9,2);
begin
wCusto=0;
if (wMontado='F') then /* Se **** NÃO **** FOR UM PRODUTO MONTADO */
begin
select icms from agenda where
agenda.registro_id=:wFornecedor_id into :wICMS;
select (valor_compra *
(1-(:wICMS/100)))+(valor_Compra*(IPI/100)) from produtos
where registro_id=:wproduto_id into wcusto;
end
if (wMontado='T') then /* Se **** FOR **** UM PRODUTO MONTADO */
begin
for Select produto_id, (qtde * (Select wCusto
from Calc_Custo_Produtos(romaneios.produto_id,
(Select montado
from produtos where produtos.registro_id=romaneios.produto_id),
(Select
fornecedor_id from produtos where
produtos.registro_id=romaneios.produto_id)))) as custo
from romaneios where montagem_id=:wproduto_id
into :wproduto_id2, :wcustoparcial
do
wcusto=:wcusto+:wcustoparcial;
end
suspend;
end
--
[]s
Andrei
W2K + D4 Pro + FB 1.5.2 + IBO 4.5B
Mais detalhes sobre a lista de discussão lista