[firebase-br] calcular inventário

Marcio Alves de Almeida net.marcio em gmail.com
Qua Ago 22 17:55:02 -03 2012


Show de bola.... bem pensado e vai me ajudar muito
valeu Mauricio pela fineza e tempo consumido.

2012/8/21 MAURICIO COSTA <maximmumsistemas em gmail.com>:
> Caros amigos! Um dos colegas solicitou como gerar inventário, prometi que
> iria fazer um exemplo e postar. Acho que era isso que ele precisava. Este
> pequeno exemplo deve servir para ele e vários que estão iniciando com o
> firebird.
> Estou enviando um script com a criação do bando de dados, das tabelas,
> procedures e Triggers. Como também as integridades das tabelas.
> Na abertura do seu aplicativo você roda a procedure e no decorrer do dia as
> triggers que estão nas tabelas intes_compra e itens_venda se encarregam de
> preecher os dados das tabela inventário.
>
> SET SQL DIALECT 3;
>
> SET NAMES WIN1252;
>
> SET CLIENTLIB 'fbclient.dll';
>
> CREATE DATABASE 'C:\DADOS\ESTOQUE.FDB'
> USER 'SYSDBA' PASSWORD 'masterkey'
> PAGE_SIZE 8192
> DEFAULT CHARACTER SET WIN1252 COLLATION WIN_PTBR;
>
>
> CREATE PROCEDURE PRC_GERA_INVENTARIO
> AS
> BEGIN
>   EXIT;
> END
>
>
> CREATE TABLE INVENTARIO_DIA (
>     DATA_INVENTARIO  DATE NOT NULL,
>     IDPRODUTO        INTEGER NOT NULL,
>     QTDE_COMPRA      NUMERIC(18,3),
>     QTDE_VENDA       NUMERIC(18,3),
>     QTDE_ESTOQUE     NUMERIC(18,3)
> );
>
> CREATE TABLE ITENS_COMPRA (
>     IDCODIGO     INTEGER NOT NULL,
>     IDPRODUTO    INTEGER NOT NULL,
>     QTDE_COMPRA  NUMERIC(18,3),
>     DATA_COMPRA  DATE
> );
>
> CREATE TABLE ITENS_VENDA (
>     IDCODIGO    INTEGER NOT NULL,
>     IDPRODUTO   INTEGER NOT NULL,
>     QTDE_VENDA  NUMERIC(18,3),
>     DATA_VENDA  DATE
> );
>
> CREATE TABLE PRODUTOS (
>     IDCODIGO         INTEGER NOT NULL,
>     DESCRICAO        VARCHAR(20),
>     QTDE_ESTOQUE     NUMERIC(18,3),
>     DATA_INVENTARIO  DATE
> )
>
> ALTER TABLE INVENTARIO_DIA ADD CONSTRAINT PK_INVENTARIO_DIA PRIMARY KEY
> (DATA_INVENTARIO, IDPRODUTO);
> ALTER TABLE ITENS_COMPRA ADD CONSTRAINT PK_ITENS_COMPRA PRIMARY KEY
> (IDCODIGO, IDPRODUTO);
> ALTER TABLE ITENS_VENDA ADD CONSTRAINT PK_ITENS_VENDA PRIMARY KEY
> (IDCODIGO, IDPRODUTO);
> ALTER TABLE PRODUTOS ADD CONSTRAINT PK_PRODUTOS PRIMARY KEY (IDCODIGO);
>
> ALTER TABLE INVENTARIO_DIA ADD CONSTRAINT FK_INVENTARIO_DIA_1 FOREIGN KEY
> (IDPRODUTO) REFERENCES PRODUTOS (IDCODIGO) ON DELETE CASCADE ON UPDATE
> CASCADE;
> ALTER TABLE ITENS_COMPRA ADD CONSTRAINT FK_ITENS_COMPRA_1 FOREIGN KEY
> (IDPRODUTO) REFERENCES PRODUTOS (IDCODIGO) ON DELETE CASCADE ON UPDATE
> CASCADE;
> ALTER TABLE ITENS_VENDA ADD CONSTRAINT FK_ITENS_VENDA_1 FOREIGN KEY
> (IDPRODUTO) REFERENCES PRODUTOS (IDCODIGO) ON DELETE CASCADE ON UPDATE
> CASCADE;
>
>
> /* Trigger: ITENS_COMPRA_AI0 */
> CREATE TRIGGER ITENS_COMPRA_AI0 FOR ITENS_COMPRA
> ACTIVE AFTER INSERT POSITION 0
> AS
> begin
>   if (new.idproduto > 0) then
>   begin
>     update inventario_dia set qtde_compra = qtde_compra + new.qtde_compra
>     where idproduto = new.idproduto
>     and data_inventario = new.data_compra;
>   end
> end
>
> /* Trigger: ITENS_VENDA_AI0 */
> CREATE TRIGGER ITENS_VENDA_AI0 FOR ITENS_VENDA
> ACTIVE AFTER INSERT POSITION 0
> AS
> begin
>   if (new.idproduto > 0) then
>   begin
>     update inventario_dia set qtde_compra = qtde_compra + new.qtde_venda
>     where idproduto = new.idproduto
>     and data_inventario = new.data_venda;
>   end
> end
>
>
> ALTER PROCEDURE PRC_GERA_INVENTARIO
> AS
> declare variable VESTOQUE numeric(18,3);
> declare variable VPRODUTO integer;
> begin
>   for
>     select idcodigo, qtde_estoque from produtos
>     into :vproduto, :vestoque
>   do
>   if (vproduto > 0) then
>   begin
>     if (vestoque is null) then
>       vestoque = 0.00;
>     insert into inventario_dia(idproduto, data_inventario, qtde_estoque,
> qtde_compra, qtde_venda) values (:vproduto, current_date, :vestoque, 0.000,
> 0.000);
>     update produtos set data_inventario = current_date
>     where idcodigo = :vproduto;
>   end
> end
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa




Mais detalhes sobre a lista de discussão lista