[firebase-br] calcular inventário

MAURICIO COSTA maximmumsistemas em gmail.com
Qui Ago 23 19:27:49 -03 2012


Beleza galera estamos no mundo para compartilhar nossos conhecimentos.
Abraços...

Em 22 de agosto de 2012 18:23, Toninho Eleotério <toninhoeleoterio em gmail.com
> escreveu:

> Que isso hein maurício, parabéns pela ajuda ao colega, pessoas como você
> fazem um mundo bem melhor. Depois te abencoe
> Em 22/08/2012 17:55, "Marcio Alves de Almeida" <net.marcio em gmail.com>
> escreveu:
>
> > 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
> >
> > ______________________________________________
> > 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
> >
> ______________________________________________
> 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