[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