o que vcs acham dessa procedure? é o mais indicado a fazer?

Firebird

29/03/2005

CREATE PROCEDURE SPGERA_NF(
ICOD_REMESSA INTEGER)
RETURNS (
COD_IEP INTEGER,
CODIGO VARCHAR(10),
DESCRICAO VARCHAR(65),
UNIDADE VARCHAR(2),
QTDE NUMERIC(6,3),
NOVA_QTDE NUMERIC(6,3),
VALOR NUMERIC(6,6),
NOVO_VR_UNIT NUMERIC(6,6),
TOTAL_ITEM NUMERIC(15,2))
AS
DECLARE VARIABLE VCOD_IEP INTEGER;
DECLARE VARIABLE VCODIGO VARCHAR(10);
DECLARE VARIABLE VDESCRICAO VARCHAR(65);
DECLARE VARIABLE VUNIDADE VARCHAR(2);
DECLARE VARIABLE VQTDE NUMERIC(6,3);
DECLARE VARIABLE VNOVA_QTDE NUMERIC(6,3);
DECLARE VARIABLE VVALOR NUMERIC(6,6);
DECLARE VARIABLE VNOVO_VR_UNIT NUMERIC(6,6);
DECLARE VARIABLE VTOTAL_ITEM NUMERIC(15,2);
DECLARE VARIABLE VSIGLA VARCHAR(2);
BEGIN
FOR SELECT FIRST 1 I.SIGLA
FROM ITENS_REM_AGR R, ITENS_EP I
WHERE I.COD_IEP=R.COD_IEP AND
R.COD_REMESSA = :ICOD_REMESSA
INTO :VSIGLA DO
BEGIN
IF (VSIGLA = ´BE´) THEN
BEGIN
FOR SELECT DISTINCT I.COD_IEP,
(I.SIGLA||I.CODIGO||I.REVISAO) AS CODIGO,
I.DESCRICAO,
I.UNIDADE,
SUM(R.QTDE) AS QTDE,
SUM(R.FATOR*R.QTDE) AS NOVA_QTDE,
SUM((R.QTDE*R.VL_LIQ)/(R.QTDE)) AS VALOR,
SUM(TOTAL_ITEM) / SUM(R.QTDE*FATOR) AS NOVO_VR_UNIT,
SUM(TOTAL_ITEM) AS TOTAL_ITEM
FROM ITENS_REM_AGR_PB R, ITENS_EP I
WHERE I.COD_IEP=R.COD_IEP AND
R.COD_REMESSA = :ICOD_REMESSA
GROUP BY I.COD_IEP, I.SIGLA, I.CODIGO, I.REVISAO, I.DESCRICAO, I.UNIDADE
INTO :VCOD_IEP, :VCODIGO, :VDESCRICAO, :VUNIDADE, :VQTDE, :VNOVA_QTDE,
:VVALOR, :VNOVO_VR_UNIT, :VTOTAL_ITEM DO
BEGIN
COD_IEP = VCOD_IEP;
CODIGO = VCODIGO;
DESCRICAO = VDESCRICAO;
UNIDADE = VUNIDADE;
QTDE = VQTDE;
NOVA_QTDE = VNOVA_QTDE;
VALOR = VVALOR;
NOVO_VR_UNIT = VNOVO_VR_UNIT;
TOTAL_ITEM = VTOTAL_ITEM;
SUSPEND;
END
END
ELSE
BEGIN
FOR SELECT DISTINCT I.COD_IEP,
(I.SIGLA||I.CODIGO||I.REVISAO) AS CODIGO,
I.DESCRICAO,
I.UNIDADE,
SUM(R.QTDE) AS QTDE,
SUM(R.FATOR*R.QTDE) AS NOVA_QTDE,
SUM((R.QTDE*R.VL_LIQ)/(R.QTDE)) AS VALOR,
SUM(TOTAL_ITEM) / SUM(R.QTDE*FATOR) AS NOVO_VR_UNIT,
SUM(TOTAL_ITEM) AS TOTAL_ITEM
FROM ITENS_REM_AGR R, ITENS_EP I
WHERE I.COD_IEP=R.COD_IEP AND
R.COD_REMESSA = :ICOD_REMESSA
GROUP BY I.COD_IEP, I.SIGLA, I.CODIGO, I.REVISAO, I.DESCRICAO, I.UNIDADE
INTO :VCOD_IEP, :VCODIGO, :VDESCRICAO, :VUNIDADE, :VQTDE, :VNOVA_QTDE,
:VVALOR, :VNOVO_VR_UNIT, :VTOTAL_ITEM DO
BEGIN
COD_IEP = VCOD_IEP;
CODIGO = VCODIGO;
DESCRICAO = VDESCRICAO;
UNIDADE = VUNIDADE;
QTDE = VQTDE;
NOVA_QTDE = VNOVA_QTDE;
VALOR = VVALOR;
NOVO_VR_UNIT = VNOVO_VR_UNIT;
TOTAL_ITEM = VTOTAL_ITEM;
SUSPEND;
END
END
END
END

Até mais...


Douglascrp

Douglascrp

Curtidas 0

Respostas

Faelcavalcanti

Faelcavalcanti

29/03/2005

Cara. A procedure tá bem trabalhada, mas tipow depende do seu uso, contato que ela lhe satisfaça, tudo bem. Quanto a Stored Procedures, são muito boas em relação ao tempo de execução, e à posição maior a uma aplicação do tipo client/server, ou seja, sempre serão executadas no servidor, quanto a isso show!!! Mas no aspecto, complicou a vida do DBA, quando é feito a mesma implementação em outro banco. :shock: E aí como é que fica. No meu ponto de vista, é que em aplicações pequenas é dever da aplicação mandar no banco de dados, lógico que depende do caso, não iremos comparar aqui com o Banco do Brasil, e-Bay, Submarino, etc. Mas parabéns!!!! Ah outra coisa implemente sempre o controle de transações na sua procedure!!!!


GOSTEI 0
Douglascrp

Douglascrp

29/03/2005

deixa eu te explicar a idéia da procedure.

no banco de dados aqui da empresa, a gente tem um cadastro de famílias de itens de estoque, e uma das famílias, no caso o ´BE´, que aparece no teste dentro da procedure, se refere aos itens que são beneficiados, ou seja, quando a empresa compra um item, ele não dá entrada no estoque diretamente, ele antes de mais nada, envia essa mercadoria para outra empresa, que beneficia essa matéria-prima e devolve o item já beneficiado, e na nota fiscal vem descriminado como beneficiamento, e o valor na nota refere-se somente ao valor do beneficiamento, e não o da matéria-prima, então quando vou dar entrada no estoque dos itens devolvidos, eu vejo se é dessa família ´BE´, e se for eu faço o cálculo para descobrir o valor da matéria-prima utilizada em cada beneficiamento mais o valor do próprio beneficiamento, formando então um item da família ´PB´, referente a Produtos Beneficiados, e é nesse item que dou entrada no estoque.

espero ter conseguido explicar...

ah, e valeu pelo toque das transações.


GOSTEI 0
Douglascrp

Douglascrp

29/03/2005

deixa eu te explicar a idéia da procedure.

no banco de dados aqui da empresa, a gente tem um cadastro de famílias de itens de estoque, e uma das famílias, no caso o ´BE´, que aparece no teste dentro da procedure, se refere aos itens que são beneficiados, ou seja, quando a empresa compra um item, ele não dá entrada no estoque diretamente, ele antes de mais nada, envia essa mercadoria para outra empresa, que beneficia essa matéria-prima e devolve o item já beneficiado, e na nota fiscal vem descriminado como beneficiamento, e o valor na nota refere-se somente ao valor do beneficiamento, e não o da matéria-prima, então quando vou dar entrada no estoque dos itens devolvidos, eu vejo se é dessa família ´BE´, e se for eu faço o cálculo para descobrir o valor da matéria-prima utilizada em cada beneficiamento mais o valor do próprio beneficiamento, formando então um item da família ´PB´, referente a Produtos Beneficiados, e é nesse item que dou entrada no estoque.

espero ter conseguido explicar...

ah, e valeu pelo toque das transações.


GOSTEI 0
Douglascrp

Douglascrp

29/03/2005

deixa eu te explicar a idéia da procedure.

no banco de dados aqui da empresa, a gente tem um cadastro de famílias de itens de estoque, e uma das famílias, no caso o ´BE´, que aparece no teste dentro da procedure, se refere aos itens que são beneficiados, ou seja, quando a empresa compra um item, ele não dá entrada no estoque diretamente, ele antes de mais nada, envia essa mercadoria para outra empresa, que beneficia essa matéria-prima e devolve o item já beneficiado, e na nota fiscal vem descriminado como beneficiamento, e o valor na nota refere-se somente ao valor do beneficiamento, e não o da matéria-prima, então quando vou dar entrada no estoque dos itens devolvidos, eu vejo se é dessa família ´BE´, e se for eu faço o cálculo para descobrir o valor da matéria-prima utilizada em cada beneficiamento mais o valor do próprio beneficiamento, formando então um item da família ´PB´, referente a Produtos Beneficiados, e é nesse item que dou entrada no estoque.

espero ter conseguido explicar...

ah, e valeu pelo toque das transações.


GOSTEI 0
POSTAR