Fórum Erro na SP #46309
26/08/2004
0
COMO FICARIA A SINTAXE CORRETA DESTA SP?
CREATE PROCEDURE PROC_ESTOQUEDIARIO
RETURNS (
PRODUTO INTEGER,
NOME VARCHAR(35),
NOME2 VARCHAR(35),
NOME3 VARCHAR(35),
SALDO NUMERIC(12,4),
PRODUCAO NUMERIC(12,4),
VENDAS NUMERIC(12,4),
SAIDAS NUMERIC(12,4))
AS
begin
FOR /* VERIFICA OS PRODUTOS COM MOVIMENTACAO DIARIA */
Select PRODUTOS.ID_PRODUTO, PRODUTOS.NOME, PRODUTOS.NOME2, PRODUTOS.NOME3, PRODUTOS.SALDO
From Itens_Ped Inner Join Pedidos On Itens_Ped.pedido = Pedidos.id_pedido
Inner JOIN Produtos On Produtos.Id_Produto = Itens_Ped.Produto
Where Pedidos.Emissao = CURRENT_DATE
and Pedidos.tipo not in(2,6)
GROUP By PRODUTOS.ID_PRODUTO, PRODUTOS.NOME, PRODUTOS.NOME2, PRODUTOS.NOME3, PRODUTOS.SALDO
UNION ALL
Select PRODUTOS.ID_PRODUTO, PRODUTOS.NOME, PRODUTOS.NOME2, PRODUTOS.NOME3, PRODUTOS.SALDO
From (Itens_PedFaturar Inner Join Ped_Faturar on Ped_Faturar.pedido = Itens_PedFaturar.pedido
and Ped_Faturar.numero = itens_pedfaturar.numero)
Inner Join Produtos On Produtos.Id_Produto = Itens_PedFaturar.Produto
Where Ped_Faturar.Emissao = CURRENT_DATE
GROUP By PRODUTOS.ID_PRODUTO, PRODUTOS.NOME, PRODUTOS.NOME2, PRODUTOS.NOME3, PRODUTOS.SALDO
INTO :PRODUTO, :NOME, :NOME2, :NOME3, :SALDO
DO
BEGIN
/* QUANTIDADE DE PRODUTOS DIGITADOS */
FOR
Select sUM(Itens_Ped.QUANTIDADE)
From Itens_Ped
Inner Join Pedidos On Itens_Ped.pedido = Pedidos.id_pedido
WHERE (PEDIDOS.situacao = 0 and PEDIDOS.controle =1) or (PEDIDOS.situacao < 2 and Pedidos.Controle = 0)
AND Pedidos.Emissao = CURRENT_DATE
and Pedidos.tipo not in(2,6)
GROUP BY ITENS_PED.PRODUTO
HAVING ITENS_PED.PRODUTO = :PRODUTO
UNION ALL
Select Sum(Itens_PedFaturar.QUANTIDADE)
From (Itens_PedFaturar Inner Join Ped_Faturar on Ped_Faturar.pedido = Itens_PedFaturar.pedido
and Ped_Faturar.numero = itens_pedfaturar.numero)
WHERE (Ped_Faturar.SITUACAO = 0 AND Ped_faturar.controle=1) or (Ped_Faturar.SITUACAO < 2 and Ped_Faturar.Controle = 0)
AND Ped_Faturar.Emissao = CURRENT_DATE
GROUP BY ITENS_PEDFATURAR.PRODUTO
HAVING ITENS_PEDFATURAR.PRODUTO = :PRODUTO
INTO :VENDAS
DO
/* QUANTIDADE DE PRODUTOS COM NOTAS EMITIDAS*/
FOR
Select sUM(Itens_Ped.QUANTIDADE)
From Itens_Ped
Inner Join Pedidos On Itens_Ped.pedido = Pedidos.id_pedido
WHERE (PEDIDOS.situacao = 1 and PEDIDOS.controle = 1) or (PEDIDOS.situacao > 1 and Pedidos.Controle = 0)
AND Pedidos.Emissao = CURRENT_DATE
and Pedidos.tipo not in(2,6)
GROUP BY ITENS_PED.PRODUTO
HAVING ITENS_PED.PRODUTO = :PRODUTO
UNION ALL
Select Sum(Itens_PedFaturar.QUANTIDADE)
From (Itens_PedFaturar Inner Join Ped_Faturar on Ped_Faturar.pedido = Itens_PedFaturar.pedido
and Ped_Faturar.numero = itens_pedfaturar.numero)
WHERE (Ped_Faturar.SITUACAO = 1 AND Ped_faturar.controle=1) or (Ped_Faturar.SITUACAO > 1 and Ped_Faturar.Controle = 0)
AND Ped_Faturar.Emissao = CURRENT_DATE
GROUP BY ITENS_PEDFATURAR.PRODUTO
HAVING ITENS_PEDFATURAR.PRODUTO = :PRODUTO
INTO :SAIDAS
DO
END
*/
SUSPEND;
end
Bruno_solucao
Curtir tópico
+ 0Posts
26/08/2004
Afarias
T+
Gostei + 0
26/08/2004
Bruno_solucao
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 80, char 5.
END.
Gostei + 0
26/08/2004
Bruno_solucao
Gostei + 0
26/08/2004
Afarias
T+
Gostei + 0
26/08/2004
Bruno_solucao
Gostei + 0
26/08/2004
Afarias
T+
Gostei + 0
26/08/2004
Bruno_solucao
Gostei + 0
26/08/2004
Afarias
Gostei + 0
26/08/2004
Bruno_solucao
A PROCEDURE ESTA ME RETORNANDO REALMENTE TODOS OS PRODUTOS QUE TIVERAM MOVIMENTACAO DIARIA, MAS SO ESTA ME RETORNANDO O VALOR DOS PEDIDOS DIGITADOS.
OU SEJA SE TEVE NOTAS IMPRESSAS OU PRODUCAO, ESTA RETORNANDO 0. PQ COLOQUEI PARA RETORNAR 0 SENAO FICA NULL
JA TESTEI OS SELECT PELO SQL EDITOR E FUNCIONA LEGAL, MAS DEVE ESTA ACONTECENDO ALGUM DESVIO QUE NAO PASSA NESTES OUTROS FOR
COMO QUE EU POSSO VERIFICAR (TEM ALGUMA ESPECIE DE DEBUG PELO IBEXPERT) OU COMO FAZER PARA ARRUMAR ESTA SP..
OBRIGADAO
CREATE PROCEDURE PROC_ESTOQUEDIARIO
RETURNS (
PRODUTO INTEGER,
NOME VARCHAR(35),
NOME2 VARCHAR(35),
NOME3 VARCHAR(35),
SALDO NUMERIC(12,4),
PRODUCAO NUMERIC(12,4),
VENDAS NUMERIC(12,4),
SAIDAS NUMERIC(12,4))
AS
begin
FOR /* VERIFICA OS PRODUTOS COM MOVIMENTACAO DIARIA */
Select PRODUTOS.ID_PRODUTO, PRODUTOS.NOME, PRODUTOS.NOME2, PRODUTOS.NOME3, PRODUTOS.SALDO
From Itens_Ped Inner Join Pedidos On Itens_Ped.pedido = Pedidos.id_pedido
Inner JOIN Produtos On Produtos.Id_Produto = Itens_Ped.Produto
Where Pedidos.Emissao = CURRENT_DATE
and Pedidos.tipo not in(2,6)
GROUP By PRODUTOS.ID_PRODUTO, PRODUTOS.NOME, PRODUTOS.NOME2, PRODUTOS.NOME3, PRODUTOS.SALDO
UNION ALL
Select PRODUTOS.ID_PRODUTO, PRODUTOS.NOME, PRODUTOS.NOME2, PRODUTOS.NOME3, PRODUTOS.SALDO
From (Itens_PedFaturar Inner Join Ped_Faturar on Ped_Faturar.pedido = Itens_PedFaturar.pedido
and Ped_Faturar.numero = itens_pedfaturar.numero)
Inner Join Produtos On Produtos.Id_Produto = Itens_PedFaturar.Produto
Where Ped_Faturar.Emissao = CURRENT_DATE
GROUP By PRODUTOS.ID_PRODUTO, PRODUTOS.NOME, PRODUTOS.NOME2, PRODUTOS.NOME3, PRODUTOS.SALDO
ORDER BY 1
INTO :PRODUTO, :NOME, :NOME2, :NOME3, :SALDO
DO
BEGIN
SAIDAS = 0;
VENDAS = 0;
PRODUCAO = 0;
/* QUANTIDADE DE PRODUTOS DIGITADOS */
FOR
Select sUM(Itens_Ped.QUANTIDADE)
From Itens_Ped
Inner Join Pedidos On Itens_Ped.pedido = Pedidos.id_pedido
WHERE (PEDIDOS.situacao = 0 and PEDIDOS.controle =1) or (PEDIDOS.situacao < 2 and Pedidos.Controle = 0)
AND Pedidos.Emissao = CURRENT_DATE
and Pedidos.tipo not in(2,6)
GROUP BY ITENS_PED.PRODUTO
HAVING ITENS_PED.PRODUTO = :PRODUTO
UNION ALL
Select Sum(Itens_PedFaturar.QUANTIDADE)
From (Itens_PedFaturar Inner Join Ped_Faturar on Ped_Faturar.pedido = Itens_PedFaturar.pedido
and Ped_Faturar.numero = itens_pedfaturar.numero)
WHERE (Ped_Faturar.SITUACAO = 0 AND Ped_faturar.controle=1) or (Ped_Faturar.SITUACAO < 2 and Ped_Faturar.Controle = 0)
AND Ped_Faturar.Emissao = CURRENT_DATE
GROUP BY ITENS_PEDFATURAR.PRODUTO
HAVING ITENS_PEDFATURAR.PRODUTO = :PRODUTO
INTO :VENDAS
DO
/* QUANTIDADE DE PRODUTOS COM NOTAS EMITIDAS */
FOR
Select sUM(Itens_Ped.QUANTIDADE)
From Itens_Ped
Inner Join Pedidos On Itens_Ped.pedido = Pedidos.id_pedido
WHERE (PEDIDOS.situacao = 1 and PEDIDOS.controle = 1) or (PEDIDOS.situacao > 1 and Pedidos.Controle = 0)
AND Pedidos.Emissao = CURRENT_DATE
and Pedidos.tipo not in(2,6)
GROUP BY ITENS_PED.PRODUTO
HAVING ITENS_PED.PRODUTO = :PRODUTO
UNION ALL
Select Sum(Itens_PedFaturar.QUANTIDADE)
From (Itens_PedFaturar Inner Join Ped_Faturar on Ped_Faturar.pedido = Itens_PedFaturar.pedido
and Ped_Faturar.numero = itens_pedfaturar.numero)
WHERE (Ped_Faturar.SITUACAO = 1 AND Ped_faturar.controle=1) or (Ped_Faturar.SITUACAO > 1 and Ped_Faturar.Controle = 0)
AND Ped_Faturar.Emissao = CURRENT_DATE
GROUP BY ITENS_PEDFATURAR.PRODUTO
HAVING ITENS_PEDFATURAR.PRODUTO = :PRODUTO
INTO :SAIDAS
DO
/*PRODUCAO DIARIA POR PRODUTO */
FOR
Select PRODUCAO.QUANTIDADE FROM PRODUCAO
WHERE PRODUCAO.PRODUTO = :PRODUTO
AND PRODUCAO.DATA = CURRENT_DATE
INTO :PRODUCAO
DO
BEGIN END
SUSPEND;
END
end
Gostei + 0
26/08/2004
Emerson Nascimento
set term ^ ;
Create Procedure Proc_EstoqueDiario
Returns (
    Produto Integer,
    Nome Varchar(35),
    Nome2 Varchar(35),
    Nome3 Varchar(35),
    Saldo Numeric(12,4),
    Producao Numeric(12,4),
    Vendas Numeric(12,4),
    Saidas Numeric(12,4)
) as
begin
    for select distinct Produtos.ID_Produto, Produtos.Nome, Produtos.Nome2, Produtos.Nome3, Produtos.Saldo,
                   Sum(Itens_Ped.Quantidade) Vendas
            From Produtos
            left join Pedidos
                   on (Pedidos.Emissao = Current_Date and not (Pedidos.Tipo in (2,6)))
            left join Ped_Faturar
                   on (Ped_Faturar.Emissao = Current_Date)
            left join Itens_Ped
                   on (Itens_Ped.Pedido=Pedidos.ID_Pedido and Itens_Ped.Produto=Produtos.ID_Produto)
            left join Itens_PedFaturar
                   on (Itens_PedFaturar.Pedido=Ped_Faturar.ID_Pedido and Itens_PedFaturar.Numero=Ped_Faturar.Numero
                           and Itens_PedFaturar.Produto=Produtos.ID_Produto)
    into :Produto, :Nome, :Nome2, :Nome3, :Saldo
    do
    begin
        /* Quantidade de produtos digitados */
        Vendas = (Select Sum(Itens_Ped.Quantidade)
                            From Itens_Ped
                            inner join Pedidos on (Pedidos.ID_Pedido=Itens_Ped.Pedido and
                                                                           Pedidos.Emissao=Current_Date and
                                                                           not (Pedidos.Tipo in (2,6)) and
                                                                            ((Pedidos.Situacao=0 and Pedidos.Controle=1) or
                                                                               (Pedidos.Situacao<2 and Pedidos.Controle=0))
                                                                        )
                            where Itens_Ped.Produto = :Produto) +
                           (Select Sum(Itens_PedFaturar.Quantidade)
                            From Itens_PedFaturar
                            inner join Ped_Faturar on (Ped_Faturar.Pedido=Itens_PedFaturar.Pedido and
                                                                                   Ped_Faturar.Emissao=Current_Date and
                                                                                   Ped_Faturar.Numero=Itens_PedFaturar.Numero and
                                                                                    ((Ped_Faturar.Situacao = 0 and Ped_faturar.controle=1) or
                                                                                       (Ped_Faturar.Situacao < 2 and Ped_Faturar.Controle=0))
                                                                                )
                            where Itens_PedFaturar.Produto = :Produto);
        /* Quantidade de produtos com notas emitidas */
        Saidas = (Select Sum(Itens_Ped.Quantidade)
                            From Itens_Ped
                            inner join Pedidos on (Pedidos.ID_Pedido=Itens_Ped.Pedido and Pedidos.Emissao=Current_Date
                                                                           and not (Pedidos.Tipo in (2,6)) and
                                                                            ((Pedidos.Situacao=1 and Pedidos.Controle=1) or
                                                                               (Pedidos.Situacao>1 and Pedidos.Controle=0))
                                                                        )
                            where Itens_Ped.Produto = :Produto) +
                           
                           (Select Sum(Itens_PedFaturar.Quantidade)
                            From Itens_PedFaturar
                            inner join Ped_Faturar on (Ped_Faturar.Pedido=Itens_PedFaturar.Pedido and
                                                                                   Ped_Faturar.Emissao=Current_Date and
                                                                                   Ped_Faturar.Numero=Itens_PedFaturar.Numero and
                                                                                    ((Ped_Faturar.Situacao=1 and Ped_faturar.controle=1) or
                                                                                       (Ped_Faturar.Situacao>1 and Ped_Faturar.Controle=0))
                                                                                )
                            where Itens_PedFaturar.Produto = :Produto);
        /* producao diaria do produto */
        producao = (Select Sum(Quantidade)
                                from Producao
                                where Produto = :Produto and Data = Current_Date);
        suspend;
    end
end ^
set term ; ^
Gostei + 0
27/08/2004
Emerson Nascimento
talvez uma maneira que funcione seja essa:
for select distinct Produtos.ID_Produto, Produtos.Nome, Produtos.Nome2, Produtos.Nome3, Produtos.Saldo
        from Produtos
        left join Pedidos
                on (Pedidos.Emissao = Current_Date and not (Pedidos.Tipo in (2,6)))
        left join Ped_Faturar
                on (Ped_Faturar.Emissao = Current_Date)
        left join Itens_Ped
                on (Itens_Ped.Pedido=Pedidos.ID_Pedido and Itens_Ped.Produto=Produtos.ID_Produto)
        left join Itens_PedFaturar
                on (Itens_PedFaturar.Pedido=Ped_Faturar.ID_Pedido and Itens_PedFaturar.Numero=Ped_Faturar.Numero
                        and Itens_PedFaturar.Produto=Produtos.ID_Produto)
        where (not (Itens_Ped.Quantidade is null) and (Itens_Ped.Quantidade > 0))
            or (not (Itens_PedFaturar.Quantidade is null) and (Itens_PedFaturar.Quantidade > 0))
into :Produto, :Nome, :Nome2, :Nome3, :Saldo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)