[firebase-br] RES: Loop na SP

Rafael Voltani rafael.volts em turbocode.com.br
Qui Jul 5 17:51:52 -03 2012


Boa tarde Carlos...

Agora que me dei conta de que meu Outlook estava fechado... :D

No meu caso eh um pouco mais complicado... 
Mas jah deu uma ideia de como resolver...

Muito obrigado pela atenção...

Rafael Voltani
Firebird 2.5
Delphi 2010

-----Mensagem original-----
De: lista-bounces em firebase.com.br
[mailto:lista-bounces em firebase.com.br] Em nome de Carlos - GMail
Enviada em: quarta-feira, 4 de julho de 2012 19:15
Para: lista em firebase.com.br
Assunto: Re: [firebase-br] Loop na SP

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

______________________________________________
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