Levantamento de Estoque

Firebird

07/04/2006

A instrução SQL abaixo me traz os produtos cujo saldo de estoque (P.ATUAL) seja positivo na [b:bb48834fe1]data atual[/b:bb48834fe1]:

SELECT P.CODIGO, P.DESCRICAO, P.ATUAL,
SUM(ME.QUANTIDADE*(CASE WHEN ME.OPERACAO = ´E´ THEN 1 END)) AS ENTRADAS,
SUM(ME.QUANTIDADE*(CASE WHEN ME.OPERACAO = ´S´ THEN 1 END)) AS SAIDAS
FROM PRODUTOS P
LEFT JOIN MOVIESTOQUE ME ON (ME.PRODUTO = P.CODIGO AND ME.DATA >:VDataPosicao AND P.ATUAL > 0)
GROUP BY
P.CODIGO, P.DESCRICAO, P.ATUAL

Pergunto: como eu poderia fazer para que fossem listados apenas os produtos cujo estoque (P.ATUAL) seja maior que zero em [b:bb48834fe1]VDataPosicao[/b:bb48834fe1]?

Obrigado


Valdirdill

Valdirdill

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

07/04/2006

tente com essa SP:
CREATE PROCEDURE SP_KARDEX (
    DATAPOSICAO DATE,
    REFERENCIAENTRADA VARCHAR(40))
RETURNS (
    REFERENCIA VARCHAR(40),
    DESCRICAO VARCHAR(40),
    UNIDADE VARCHAR(3),
    MARCA VARCHAR(30),
    DATA DATE,
    SALDOANTERIOR NUMERIC(18,2),
    ENTRADAS NUMERIC(18,2),
    SAIDAS NUMERIC(18,2),
    SALDOATUAL NUMERIC(18,2))
AS
begin 
  data = dataposicao;

  -- se não for passada uma referência de produto, 
  -- traz todos os produtos 
  if (referenciaentrada is null) then referenciaentrada = ´¬´;

  -- seleciona os produtos 
  for select 
        referencia, descricao, unidade, marca, atual 
      from 
        produtos
      where 
        referencia like :referenciaentrada 
  into :referencia, :descricao, :unidade, :marca, :saldoatual do 
  begin 
    -- soma as entradas e saídas do produto no período ANTERIOR à data informada 
    select 
      sum(case when operacao = ´E´ then coalesce(QUANTIDADE,0) else 0 end),
      sum(case when operacao = ´S´ then coalesce(QUANTIDADE,0) else 0 end) 
    from 
      MoviEstoque 
    where 
      produto = :referencia 
      and data <=  :dataposicao 
    into :entradas, :saidas; 

    saldoanterior = entradas - saidas;

    if (saldoanterior > 0) then
    begin
      -- soma as entradas e saídas do produto no período POSTERIOR ao informado 
      select 
        sum(case when operacao = ´E´ then coalesce(QUANTIDADE,0) else 0 end), 
        sum(case when operacao = ´S´ then coalesce(QUANTIDADE,0) else 0 end) 
      from 
        MoviEstoque 
      where 
        produto = :referencia 
        and data > :dataposicao 
      into :entradas, :saidas; 

      suspend;
    end
  end 
end



GOSTEI 0
Valdirdill

Valdirdill

07/04/2006

tente com essa SP:
CREATE PROCEDURE SP_KARDEX (
    DATAPOSICAO DATE,
    REFERENCIAENTRADA VARCHAR(40))
RETURNS (
    REFERENCIA VARCHAR(40),
    DESCRICAO VARCHAR(40),
    UNIDADE VARCHAR(3),
    MARCA VARCHAR(30),
    DATA DATE,
    SALDOANTERIOR NUMERIC(18,2),
    ENTRADAS NUMERIC(18,2),
    SAIDAS NUMERIC(18,2),
    SALDOATUAL NUMERIC(18,2))
AS
begin 
  data = dataposicao;

  -- se não for passada uma referência de produto, 
  -- traz todos os produtos 
  if (referenciaentrada is null) then referenciaentrada = ´¬´;

  -- seleciona os produtos 
  for select 
        referencia, descricao, unidade, marca, atual 
      from 
        produtos
      where 
        referencia like :referenciaentrada 
  into :referencia, :descricao, :unidade, :marca, :saldoatual do 
  begin 
    -- soma as entradas e saídas do produto no período ANTERIOR à data informada 
    select 
      sum(case when operacao = ´E´ then coalesce(QUANTIDADE,0) else 0 end),
      sum(case when operacao = ´S´ then coalesce(QUANTIDADE,0) else 0 end) 
    from 
      MoviEstoque 
    where 
      produto = :referencia 
      and data <=  :dataposicao 
    into :entradas, :saidas; 

    saldoanterior = entradas - saidas;

    if (saldoanterior > 0) then
    begin
      -- soma as entradas e saídas do produto no período POSTERIOR ao informado 
      select 
        sum(case when operacao = ´E´ then coalesce(QUANTIDADE,0) else 0 end), 
        sum(case when operacao = ´S´ then coalesce(QUANTIDADE,0) else 0 end) 
      from 
        MoviEstoque 
      where 
        produto = :referencia 
        and data > :dataposicao 
      into :entradas, :saidas; 

      suspend;
    end
  end 
end


Na hora de criar a procedure dá o erro ´token unknow - lini 29, char 8 ?.´
A linha 29 é:´into :referencia, :descricao, :unidade, :marca, :saldoatual do´

Utilizo o IBExper para criar a SP.

O que pode ser esse erro?

Obrigado.


GOSTEI 0
POSTAR