[firebase-br] Loop na SP

Carlos - GMail krlosgilson em gmail.com
Qua Jul 4 19:15:02 -03 2012


Caro TurboCode, utilizo esta procedure que creio eu que seria 
basicamente o vc está precisando, só fazer uns ajustes:

CREATE OR ALTER PROCEDURE SP_ESTOQUE_DIARIO (
     idata date)
returns (
     oproduto_id integer,
     oproduto_nome varchar(70),
     osaldo_ant integer,
     oentradas integer,
     osaidas integer,
     osaldo_atual integer)
as
declare variable v_qtde integer;
declare variable v_data date;
begin
   /* Retorna o estoque diario dos produtos */
   for select -- faz o loop na tabela de produtos
     P.ID,
     P.DESCRICAO
   from PRODUTOS P
   into :oproduto_id, :oproduto_nome -- armeza os resultados do loop nos 
outputs
   do begin
     select count(ID) from ESTOQUE where (id_produto = :oproduto_id) and 
data =:v_data into :v_qtde; -- Como esta SP é de um Estoque Diário aqui 
tenho outra tabela chamada "ESTOQUE" que gravas as qtdes do estoque dos 
produtos diariamente, caso queira consultar o estoque de determinada data
     if (v_qtde = 1) then -- Se existir o estoque daquele produto e 
data, retorna os valores
         select SALDO_ANTERIOR, ENTRADAS, SAIDAS, SALDO_ATUAL from 
ESTOQUE where (id_produto =:oproduto_id) and data =:v_data into 
:osaldo_ant, :oentradas, :osaidas, :osaldo_atual;
     else begin -- Senão verifica o último estoque daquele determinado 
produto
         select count(ID) from ESTOQUE where (id_produto = :oproduto_id) 
and data <:v_data into :v_qtde;
         if (v_qtde >= 1) then
             select SALDO_ATUAL from ESTOQUE where (id_produto = 
:oproduto_id) and data = (select max(DATA) from ESTOQUE where 
(id_produto = :oproduto_id) and data <:v_data) into :osaldo_ant;
         else
           osaldo_ant = 0;
         oentradas = 0;
         osaidas = 0;
     end
     osaldo_atual = :osaldo_ant + :oentradas - :osaidas;
  suspend;
  end
end


Em 04/07/2012 12:00, lista-request em firebase.com.br escreveu:
> Boa tarde...
>
> Estou desenvolvendo um controle de estoque em que através de um
> calculo...
> Na tela de saldo atual...
> mostra qtde do saldo atual...
> esse custo médio e o total (qtde*custo_medio).
>
> Só que, quando o usuario altera algum movimento do produto...
> deve-se calcular o custo médio a partir daquela data ate a data atual
> de toda a movimentacao dakele produto...
>
> pensei em montar uma SP para fazer isso... mas não sei como montar o
> loop...
>
> espero ter sido claro para entenderem
>
> Att,
>
> Rafael Voltani
> Firebird 2.5
> Delphi 2010




Mais detalhes sobre a lista de discussão lista