SQL qtde <= estoque
Tenho o seguinte código
iif(sim(qtde)>=estoque,min(data coleta),")
Resumindo: por exemplo tenho duas datas, e uma nula
No estoque eu tenho 1 por exemplo
Na data 27/07 exemplo tenho 1 qtde
Na data 28/07 exemplo tenho 1 qtde
Na nula tenho 2
Mas no código preciso pegar a data que não atende ao estoque . Por exemplo o dia 27 tem qtde 1 e o estoque é 1 então atende a essa data, já o 28 não atende então preciso pegar essa data e caso atendesse a data 28 precisaria pegar a data nula, mas o código que eu fiz não tá funcionando , ele está pegando sempre a menor data
iif(sim(qtde)>=estoque,min(data coleta),")
Resumindo: por exemplo tenho duas datas, e uma nula
No estoque eu tenho 1 por exemplo
Na data 27/07 exemplo tenho 1 qtde
Na data 28/07 exemplo tenho 1 qtde
Na nula tenho 2
Mas no código preciso pegar a data que não atende ao estoque . Por exemplo o dia 27 tem qtde 1 e o estoque é 1 então atende a essa data, já o 28 não atende então preciso pegar essa data e caso atendesse a data 28 precisaria pegar a data nula, mas o código que eu fiz não tá funcionando , ele está pegando sempre a menor data
Bruno
Curtidas 0
Melhor post
Emerson Nascimento
29/07/2020
o que a instrução abaixo te retorna?
select t.Item ,min(t.Coleta) Coleta from ( select pe.Item ,coalesce(v.data_coleta, '01/01/1900') as Coleta ,coalesce(va.estoque, v1.estoque, 0) - ( select coalesce(sum(xpe.qtde), 0) from dbo.PedidosEmpenhados xpe with (nolock) inner join dbo.Pedidos xp with (nolock) on xp.empresa = xpe.empresa and xp.numero = xpe.numero inner join dbo.Itens xi with (nolock) on xi.item = xpe.item left join dbo.RomaneioPedidos xrp with (nolock) on xrp.idPedido = xp.id left join dbo.RomaneioPedidosHeader xv with (nolock) on xv.numero = xrp.numero left join dbo.vEstoqueMoveisRealConsolidadoBase xva with (nolock) on xva.referencia = xpe.Item left join dbo.vEstoqueMoveisReal xv1 with (nolock) on xv1.Referencia = xpe.Item and xv1.empresa = 15 where (xpe.qtde > xpe.coletada) and (xpe.Item = pe.Item) and (coalesce(xv.data_coleta, '01/01/1900') <= coalesce(v.data_coleta, '01/01/1900')) ) Saldo from dbo.PedidosEmpenhados pe with (nolock) inner join dbo.Pedidos p with (nolock) on p.empresa = pe.empresa and p.numero = pe.numero inner join dbo.Itens i with (nolock) on i.item = pe.item left join dbo.RomaneioPedidos rp with (nolock) on rp.idPedido = p.id left join dbo.RomaneioPedidosHeader v with (nolock) on v.numero = rp.numero left join dbo.vEstoqueMoveisRealConsolidadoBase va with (nolock) on va.referencia = pe.Item left join dbo.vEstoqueMoveisReal v1 with (nolock) on v1.Referencia = pe.Item and v1.empresa = 15 where (pe.qtde > pe.coletada) group by pe.item ,coalesce(v.data_coleta, '01/01/1900') ,va.Estoque ,v1.Estoque ) t where t.Saldo < 0 and t.Item = 'UZ522-TR' group by t.Item
GOSTEI 1
Mais Respostas
Bruno
24/07/2020
Tenho o seguinte código
iif(sim(qtde)>=estoque,min(data coleta),")
Resumindo: por exemplo tenho duas datas, e uma nula
No estoque eu tenho 1 por exemplo
Na data 27/07 exemplo tenho 1 qtde
Na data 28/07 exemplo tenho 1 qtde
Na nula tenho 2
Mas no código preciso pegar a data que não atende ao estoque . Por exemplo o dia 27 tem qtde 1 e o estoque é 1 então atende a essa data, já o 28 não atende então preciso pegar essa data e caso atendesse a data 28 precisaria pegar a data nula, mas o código que eu fiz não tá funcionando , ele está pegando sempre a menor data
iif(sim(qtde)>=estoque,min(data coleta),")
Resumindo: por exemplo tenho duas datas, e uma nula
No estoque eu tenho 1 por exemplo
Na data 27/07 exemplo tenho 1 qtde
Na data 28/07 exemplo tenho 1 qtde
Na nula tenho 2
Mas no código preciso pegar a data que não atende ao estoque . Por exemplo o dia 27 tem qtde 1 e o estoque é 1 então atende a essa data, já o 28 não atende então preciso pegar essa data e caso atendesse a data 28 precisaria pegar a data nula, mas o código que eu fiz não tá funcionando , ele está pegando sempre a menor data
Alguém por favor??????
GOSTEI 0
Bruno
24/07/2020
Tenho o seguinte código
iif(sim(qtde)>=estoque,min(data coleta),")
Resumindo: por exemplo tenho duas datas, e uma nula
No estoque eu tenho 1 por exemplo
Na data 27/07 exemplo tenho 1 qtde
Na data 28/07 exemplo tenho 1 qtde
Na nula tenho 2
Mas no código preciso pegar a data que não atende ao estoque . Por exemplo o dia 27 tem qtde 1 e o estoque é 1 então atende a essa data, já o 28 não atende então preciso pegar essa data e caso atendesse a data 28 precisaria pegar a data nula, mas o código que eu fiz não tá funcionando , ele está pegando sempre a menor data
iif(sim(qtde)>=estoque,min(data coleta),")
Resumindo: por exemplo tenho duas datas, e uma nula
No estoque eu tenho 1 por exemplo
Na data 27/07 exemplo tenho 1 qtde
Na data 28/07 exemplo tenho 1 qtde
Na nula tenho 2
Mas no código preciso pegar a data que não atende ao estoque . Por exemplo o dia 27 tem qtde 1 e o estoque é 1 então atende a essa data, já o 28 não atende então preciso pegar essa data e caso atendesse a data 28 precisaria pegar a data nula, mas o código que eu fiz não tá funcionando , ele está pegando sempre a menor data
Alguém por favor??????
Alguem??
GOSTEI 0
Emerson Nascimento
24/07/2020
eu não entendi a tua necessidade.
se dia 27 e dia 28 têm estoque 1, porque dia 27 atende e dia 28 não?
se dia 27 e dia 28 têm estoque 1, porque dia 27 atende e dia 28 não?
GOSTEI 0
Bruno
24/07/2020
eu não entendi a tua necessidade.
se dia 27 e dia 28 têm estoque 1, porque dia 27 atende e dia 28 não?
se dia 27 e dia 28 têm estoque 1, porque dia 27 atende e dia 28 não?
Tenho 1 cx no estoque.
Dia 27 preciso de 1 cx então zerou o estoque.
Dia 28 preciso de 1 cx então não tenho mais no estoque, então deve aparecer essa data.
Só que se exemplo eu tivesse 2 cx no estoque , eu atenderia dia 27 e 28, então deveria aparecer nula a data.
GOSTEI 0
Emerson Nascimento
24/07/2020
tá... então nos ajude a te ajudar.
de onde você obtém o estoque = 2?
de onde vêm essas datas e quantidades?
publique a estrutura das tabelas envolvidas e também a instrução que você fez.
de onde você obtém o estoque = 2?
de onde vêm essas datas e quantidades?
publique a estrutura das tabelas envolvidas e também a instrução que você fez.
GOSTEI 0
Bruno
24/07/2020
tá... então nos ajude a te ajudar.
de onde você obtém o estoque = 2?
de onde vêm essas datas e quantidades?
publique a estrutura das tabelas envolvidas e também a instrução que você fez.
de onde você obtém o estoque = 2?
de onde vêm essas datas e quantidades?
publique a estrutura das tabelas envolvidas e também a instrução que você fez.
Item data_coleta estoque_total qtde
Ab. 27/07. 1. 1
Ab. 28/08. 1 0
Ab. Null. 1. 0
Iff(sum(qtde)>=estoque_total,min(data_coleta),")
Esse foi o iff que fiz mas não deu
Preciso que apareça a data do dia 28, que é a menor data onde irá faltar no estoque.
Porém 'se' tivesse 2 no estoque deveria aparecer nulo.
GOSTEI 0
Emerson Nascimento
24/07/2020
publique a estrutura das tabelas envolvidas e também a instrução que você fez.
GOSTEI 0
Bruno
24/07/2020
publique a estrutura das tabelas envolvidas e também a instrução que você fez.
alter procedure [dbo].[Consultas - OpItens - Prioridades de produção/carregamento_3] @Marca varchar(50)
,@Item varchar(15)
as
begin
set nocount on
if OBJECT_ID('tempdb..#tempEstoqueMoveisRealConsolidado') is not null
drop table #tempEstoqueMoveisRealConsolidado;
create table #tempEstoqueMoveisRealConsolidado (
referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisRealConsolidado
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisRealConsolidadoBase v with (nolock)
if OBJECT_ID('tempdb..#tempEstoqueMoveisReal') is not null
drop table #tempEstoqueMoveisReal;
create table #tempEstoqueMoveisReal (
Referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisReal
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisReal v with (nolock)
where empresa = 15;
if OBJECT_ID('tempdb..#tempRomaneiosPedidos') is not null
drop table #tempRomaneiosPedidos;
select pe.Item
,IIF(sum(pe.qtde) >= coalesce(va.estoque, v1.estoque, 0), min(v.data_coleta), '') as Coleta
into #tempRomaneiosPedidos2
from dbo.PedidosEmpenhados pe
inner join dbo.Pedidos p on pe.empresa = p.empresa
and pe.numero = p.numero
inner join dbo.Itens i on pe.item = i.item
left join dbo.RomaneioPedidos rp on rp.idPedido = p.id
left join dbo.RomaneioPedidosHeader v on v.numero = rp.numero
left join #tempEstoqueMoveisRealConsolidado va on va.referencia = pe.Item
left join #tempEstoqueMoveisReal v1 on v1.Referencia = pe.Item
where (pe.qtde > pe.coletada)
group by pe.item
,va.Estoque
,v1.Estoque
select distinct pe.Item
,v2.Coleta
into #tempRomaneiosPedidos
from dbo.PedidosEmpenhados pe
inner join dbo.Pedidos p on pe.empresa = p.empresa
and pe.numero = p.numero
inner join dbo.PedidosTotais pt on pt.empresa = p.empresa
and pt.numero = p.numero
inner join dbo.Itens i on pe.item = i.item
left join dbo.RomaneioPedidos rp on rp.idPedido = p.id
left join dbo.RomaneioPedidosHeader v on v.numero = rp.numero
left join #tempEstoqueMoveisRealConsolidado va on va.referencia = pe.Item
left join #tempEstoqueMoveisReal v1 on v1.Referencia = pe.Item
inner join #tempRomaneiosPedidos2 v2 on v2.Item = pe.Item
left join dbo.Pedidos_Agendamento pa on pa.Empresa = p.Empresa
and pa.Numero = p.Numero
where (pe.qtde > pe.coletada)
group by pe.Item,v2.Coleta
select distinct opi.Item
,coalesce(v.Estoque, v1.estoque, 0) as Estoque
,coalesce(v.Empenho, v1.empenho, 0) as Empenho
,coalesce(v.Estoque, v1.estoque, 0) - coalesce(v.Empenho, v1.empenho, 0) as Saldo
,nullif(isNull(x.Coleta, '01/01/1900'), '01/01/1900')
from dbo.OPItens opi
inner join dbo.OProd op on opi.Empresa = op.Empresa
and opi.Numero = op.Numero
left join #tempEstoqueMoveisRealConsolidado v on v.referencia = opi.Item
left join #tempEstoqueMoveisReal v1 on v1.Referencia = opi.Item
left join #tempRomaneiosPedidos x on x.Item = opi.Item
left join dbo.ItensVendaMediaSugestaoPorDia m on m.Item = opi.Item
where v.Marca = @Marca
and opi.Quantidade > opi.Coletada
and v.Empenho > v.Estoque
and (
isnull(@Item, '') = ''
or opi.Item = @Item
)
order by opi.Item
end
/*
param Marca, Marca, Exec(select Id, Descricao from dbo.marcas where Ativo = 1)
param Item, Item, String
*/
GOSTEI 0
Emerson Nascimento
24/07/2020
certo. você pode publicar alguns registros retornados pela stored procedure?
porque estou 'estranhando' aquele distinct na última instrução.
porque estou 'estranhando' aquele distinct na última instrução.
GOSTEI 0
Bruno
24/07/2020
certo. você pode publicar alguns registros retornados pela stored procedure?
porque estou 'estranhando' aquele distinct na última instrução.
porque estou 'estranhando' aquele distinct na última instrução.
UZ100-TR
4
10
-6
UZ100-TR 4 10 -6 2020-07-28 00:00:00.000
UZ101-VEM 5 8 -3 2020-07-28 00:00:00.000
UZ101-VM 22 29 -7 2020-07-28 00:00:00.000
UZ113-ROS 0 1 -1 2020-07-28 00:00:00.000
UZ114-ROS 2 5 -3 2020-07-28 00:00:00.000
UZ134-VEM 9 22 -13 2020-07-28 00:00:00.000
UZ134-VM 0 65 -65 2020-07-28 00:00:00.000
UZ147-TR 32 39 -7 2020-07-29 00:00:00.000
UZ172-VM 1 2 -1 2020-07-29 00:00:00.000
UZ182-ROS 5 6 -1 2020-07-28 00:00:00.000
UZ187-AMC 7 11 -4 2020-07-28 00:00:00.000
UZ1880-ROS 0 1 -1 2020-07-28 00:00:00.000
UZ1880-VM 0 101 -101 2020-07-28 00:00:00.000
UZ1881-VEM 0 1 -1 2020-07-28 00:00:00.000
UZ1882-BR 0 4 -4 2020-07-28 00:00:00.000
UZ201-VM 32 36 -4 2020-07-28 00:00:00.000
UZ227-ROS 8 26 -18 2020-07-28 00:00:00.000
UZ230-VM 3 34 -31 2020-07-28 00:00:00.000
UZ237-ROS 2 4 -2 2020-07-28 00:00:00.000
UZ237-VM 0 2 -2 2020-07-29 00:00:00.000
UZ243-BR 23 26 -3 2020-07-28 00:00:00.000
UZ243-VEM 19 53 -34 2020-07-28 00:00:00.000
UZ244-BR 1 33 -32 2020-07-29 00:00:00.000
UZ244-PR 0 37 -37 2020-07-29 00:00:00.000
UZ244-ROS 9 33 -24 2020-07-28 00:00:00.000
UZ244-VM 0 73 -73 2020-07-29 00:00:00.000
UZ255-VM 34 44 -10 2020-07-28 00:00:00.000
UZ284-BR 0 8 -8 2020-07-28 00:00:00.000
UZ284-ROS 0 13 -13 2020-07-28 00:00:00.000
UZ285-COR 5 14 -9 2020-07-28 00:00:00.000
UZ285-ROS 0 10 -10 2020-07-29 00:00:00.000
UZ285-VEM 0 10 -10 2020-07-29 00:00:00.000
UZ285-VM 0 24 -24 2020-07-28 00:00:00.000
UZ286-COR 0 10 -10 2020-07-28 00:00:00.000
UZ286-VM 19 21 -2 2020-07-28 00:00:00.000
UZ287-VEM 19 21 -2 2020-07-28 00:00:00.000
UZ294-COR 1 6 -5 2020-07-28 00:00:00.000
UZ295-VM 37 97 -60 2020-07-28 00:00:00.000
UZ298-VEM 0 1 -1 NULL
UZ298-VM 0 4 -4 2020-07-28 00:00:00.000
UZ306-VEM 0 2 -2 2020-07-28 00:00:00.000
UZ314-ROS 12 13 -1 2020-07-28 00:00:00.000
UZ322-AMC 19 33 -14 2020-07-28 00:00:00.000
UZ325-AMC 0 2 -2 2020-07-28 00:00:00.000
UZ332-PR 10 15 -5 2020-07-28 00:00:00.000
UZ332-ROS 22 37 -15 2020-07-28 00:00:00.000
UZ332-VEM 13 26 -13 2020-07-28 00:00:00.000
UZ335-COR 11 12 -1 2020-07-28 00:00:00.000
UZ335-VEM 61 63 -2 2020-07-28 00:00:00.000
UZ335-VM 87 100 -13 2020-07-28 00:00:00.000
UZ361-BR 0 2 -2 2020-07-28 00:00:00.000
UZ370-COR 0 1 -1 2020-07-28 00:00:00.000
UZ372-M2 9 19 -10 NULL
UZ373-M1 6 7 -1 2020-07-28 00:00:00.000
UZ373-M2 15 23 -8 2020-07-28 00:00:00.000
UZ382-TR 212 236 -24 2020-07-28 00:00:00.000
UZ383-BR 49 84 -35 2020-07-28 00:00:00.000
UZ383-ROS 15 42 -27 2020-07-28 00:00:00.000
UZ394-BR 39 47 -8 2020-07-28 00:00:00.000
UZ394-PR 41 61 -20 2020-07-28 00:00:00.000
UZ394-ROS 31 67 -36 2020-07-28 00:00:00.000
UZ394-VM 15 62 -47 2020-07-28 00:00:00.000
UZ4003-11 54 122 -68 2020-07-28 00:00:00.000
UZ4003-13 5 9 -4 2020-07-29 00:00:00.000
UZ522-TR 77 125 -48 2020-07-28 00:00:00.000
UZ524-PR 31 57 -26 2020-07-29 00:00:00.000
UZ524-TR 34 64 -30 2020-07-28 00:00:00.000
UZ524-VM 13 50 -37 2020-07-28 00:00:00.000
UZ530-BRMT 40 50 -10 2020-07-28 00:00:00.000
UZ530-PRDR 0 13 -13 2020-07-28 00:00:00.000
UZ530-ROSE 10 12 -2 2020-07-28 00:00:00.000
UZ532-PRDR 4 5 -1 2020-07-28 00:00:00.000
UZ661-ROS 22 24 -2 2020-07-29 00:00:00.000
UZ661-TR 0 1 -1 NULL
UZ8007-11 42 65 -23 2020-07-28 00:00:00.000
GOSTEI 0
Emerson Nascimento
24/07/2020
Bruno, eu não vi um caso que se aplique ao que você apresentou como problema.
se eu entendi esses registros retornados, cada registro traz um código, logo basta avaliar a coluna 'saldo' e, se ela for negativa, pegar a data apresentada.
quando você apresentou o problema eu achei que veria algo assim:
então o resultado final seria algo assim:
você pode apontar, na lista de registros que você passou, como deveria ser o resultado final?
se eu entendi esses registros retornados, cada registro traz um código, logo basta avaliar a coluna 'saldo' e, se ela for negativa, pegar a data apresentada.
quando você apresentou o problema eu achei que veria algo assim:
item estoque empenho saldo data UZ100 4 10 -6 2020-07-22 00:00:00.000 UZ101 8 5 3 2020-07-27 00:00:00.000 UZ101 3 29 -26 2020-07-28 00:00:00.000 UZ113 0 1 -1 2020-07-25 00:00:00.000
então o resultado final seria algo assim:
item saldo data UZ100 -6 2020-07-22 UZ101 -26 2020-07-28 UZ113 -1 2020-07-25
você pode apontar, na lista de registros que você passou, como deveria ser o resultado final?
GOSTEI 0
Bruno
24/07/2020
Bruno, eu não vi um caso que se aplique ao que você apresentou como problema.
se eu entendi esses registros retornados, cada registro traz um código, logo basta avaliar a coluna 'saldo' e, se ela for negativa, pegar a data apresentada.
quando você apresentou o problema eu achei que veria algo assim:
então o resultado final seria algo assim:
você pode apontar, na lista de registros que você passou, como deveria ser o resultado final?
se eu entendi esses registros retornados, cada registro traz um código, logo basta avaliar a coluna 'saldo' e, se ela for negativa, pegar a data apresentada.
quando você apresentou o problema eu achei que veria algo assim:
item estoque empenho saldo data UZ100 4 10 -6 2020-07-22 00:00:00.000 UZ101 8 5 3 2020-07-27 00:00:00.000 UZ101 3 29 -26 2020-07-28 00:00:00.000 UZ113 0 1 -1 2020-07-25 00:00:00.000
então o resultado final seria algo assim:
item saldo data UZ100 -6 2020-07-22 UZ101 -26 2020-07-28 UZ113 -1 2020-07-25
você pode apontar, na lista de registros que você passou, como deveria ser o resultado final?
por exemplo UZ294-COR 1 6 -5 2020-07-28 00:00:00.000 tem estoque 1 e a data 28/07 tem qtde 1 então deve aparecer 29/07 que é o que vai faltar
GOSTEI 0
Bruno
24/07/2020
Bruno, eu não vi um caso que se aplique ao que você apresentou como problema.
se eu entendi esses registros retornados, cada registro traz um código, logo basta avaliar a coluna 'saldo' e, se ela for negativa, pegar a data apresentada.
quando você apresentou o problema eu achei que veria algo assim:
então o resultado final seria algo assim:
você pode apontar, na lista de registros que você passou, como deveria ser o resultado final?
se eu entendi esses registros retornados, cada registro traz um código, logo basta avaliar a coluna 'saldo' e, se ela for negativa, pegar a data apresentada.
quando você apresentou o problema eu achei que veria algo assim:
item estoque empenho saldo data UZ100 4 10 -6 2020-07-22 00:00:00.000 UZ101 8 5 3 2020-07-27 00:00:00.000 UZ101 3 29 -26 2020-07-28 00:00:00.000 UZ113 0 1 -1 2020-07-25 00:00:00.000
então o resultado final seria algo assim:
item saldo data UZ100 -6 2020-07-22 UZ101 -26 2020-07-28 UZ113 -1 2020-07-25
você pode apontar, na lista de registros que você passou, como deveria ser o resultado final?
por exemplo UZ294-COR 1 6 -5 2020-07-28 00:00:00.000 tem estoque 1 e a data 28/07 tem qtde 1 então deve aparecer 29/07 que é o que vai faltar
?
GOSTEI 0
Bruno
24/07/2020
Bruno, eu não vi um caso que se aplique ao que você apresentou como problema.
se eu entendi esses registros retornados, cada registro traz um código, logo basta avaliar a coluna 'saldo' e, se ela for negativa, pegar a data apresentada.
quando você apresentou o problema eu achei que veria algo assim:
então o resultado final seria algo assim:
você pode apontar, na lista de registros que você passou, como deveria ser o resultado final?
se eu entendi esses registros retornados, cada registro traz um código, logo basta avaliar a coluna 'saldo' e, se ela for negativa, pegar a data apresentada.
quando você apresentou o problema eu achei que veria algo assim:
item estoque empenho saldo data UZ100 4 10 -6 2020-07-22 00:00:00.000 UZ101 8 5 3 2020-07-27 00:00:00.000 UZ101 3 29 -26 2020-07-28 00:00:00.000 UZ113 0 1 -1 2020-07-25 00:00:00.000
então o resultado final seria algo assim:
item saldo data UZ100 -6 2020-07-22 UZ101 -26 2020-07-28 UZ113 -1 2020-07-25
você pode apontar, na lista de registros que você passou, como deveria ser o resultado final?
por exemplo UZ294-COR 1 6 -5 2020-07-28 00:00:00.000 tem estoque 1 e a data 28/07 tem qtde 1 então deve aparecer 29/07 que é o que vai faltar
?
ajuda pf?
GOSTEI 0
Emerson Nascimento
24/07/2020
vi que na stored procedure você cria algumas tabelas temporárias para ter dados de uma única tabela. desnecessário e só gasta tempo e processamento.
apesar de ser bem difícil fazer esse tipo de ajuste sem os dados, refiz a stored procedure. veja se te ajuda:
apesar de ser bem difícil fazer esse tipo de ajuste sem os dados, refiz a stored procedure. veja se te ajuda:
alter procedure [dbo].[Consultas - OpItens - Prioridades de produção/carregamento_3] @Marca varchar(50) ,@Item varchar(15) as begin set nocount on if OBJECT_ID('tempdb..#tempRomaneiosPedidos') is not null drop table #tempRomaneiosPedidos; select t.Item, min(t.Coleta) Coleta into #tempRomaneiosPedidos from (select pe.Item, coalesce(v.data_coleta,'01/01/1900') as Coleta, coalesce(va.estoque, v1.estoque, 0) - ( select coalesce(sum(xpe.qtde),0) from dbo.PedidosEmpenhados xpe inner join dbo.Pedidos xp on xpe.empresa = xp.empresa and xpe.numero = xp.numero inner join dbo.Itens xi on xpe.item = xi.item left join dbo.RomaneioPedidos xrp on xrp.idPedido = xp.id left join dbo.RomaneioPedidosHeader xv on xv.numero = xrp.numero left join dbo.vEstoqueMoveisRealConsolidadoBase xva with (nolock) on xva.referencia = xpe.Item left join dbo.vEstoqueMoveisReal xv1 with (nolock) on xv1.Referencia = xpe.Item and xv1.empresa = 15 where (xpe.qtde > xpe.coletada) and (xpe.Item = pe.Item) and (coalesce(xv.data_coleta,'') <= coalesce(v.data_coleta,'')) ) saldo from dbo.PedidosEmpenhados pe inner join dbo.Pedidos p on pe.empresa = p.empresa and pe.numero = p.numero inner join dbo.Itens i on pe.item = i.item left join dbo.RomaneioPedidos rp on rp.idPedido = p.id left join dbo.RomaneioPedidosHeader v on v.numero = rp.numero left join dbo.vEstoqueMoveisRealConsolidadoBase va with (nolock) on va.referencia = pe.Item left join dbo.vEstoqueMoveisReal v1 with (nolock) on v1.Referencia = pe.Item and v1.empresa = 15 where (pe.qtde > pe.coletada) group by pe.item ,coalesce(v.data_coleta,'01/01/1900') ,va.Estoque ,v1.Estoque) t where t.saldo < 0 group by t.Item select opi.Item ,coalesce(v.Estoque, v1.estoque, 0) as Estoque ,coalesce(v.Empenho, v1.empenho, 0) as Empenho ,coalesce(v.Estoque, v1.estoque, 0) - coalesce(v.Empenho, v1.empenho, 0) as Saldo ,x.Coleta from dbo.OPItens opi inner join dbo.OProd op on opi.Empresa = op.Empresa and opi.Numero = op.Numero left join dbo.vEstoqueMoveisRealConsolidadoBase v with (nolock) on v.referencia = opi.Item left join dbo.vEstoqueMoveisReal v1 with (nolock) on v1.Referencia = opi.Item and v1.empresa = 15 left join #tempRomaneiosPedidos x on x.Item = opi.Item left join dbo.ItensVendaMediaSugestaoPorDia m on m.Item = opi.Item where v.Marca = @Marca and opi.Quantidade > opi.Coletada and v.Empenho > v.Estoque and ( isnull(@Item, '') = '' or opi.Item = @Item ) order by opi.Item, x.Coleta end
GOSTEI 0
Bruno
24/07/2020
alter procedure [dbo].[Consultas - OpItens - Prioridades de produção/carregamento_3] @Marca varchar(50)
,@Item varchar(15)
as
begin
set nocount on
if OBJECT_ID('tempdb..#tempEstoqueMoveisRealConsolidado') is not null
drop table #tempEstoqueMoveisRealConsolidado;
create table #tempEstoqueMoveisRealConsolidado (
referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisRealConsolidado
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisRealConsolidadoBase v with (nolock)
if OBJECT_ID('tempdb..#tempEstoqueMoveisReal') is not null
drop table #tempEstoqueMoveisReal;
create table #tempEstoqueMoveisReal (
Referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisReal
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisReal v with (nolock)
where empresa = 15;
if OBJECT_ID('tempdb..#tempRomaneiosPedidos') is not null
drop table #tempRomaneiosPedidos;
select t.Item
,min(t.Coleta) Coleta
into #tempRomaneiosPedidos
from (
select pe.Item
,coalesce(v.data_coleta, '01/01/1900') as Coleta
,coalesce(va.estoque, v1.estoque, 0) - (
select coalesce(sum(xpe.qtde), 0)
from dbo.PedidosEmpenhados xpe
inner join dbo.Pedidos xp on xpe.empresa = xp.empresa
and xpe.numero = xp.numero
inner join dbo.Itens xi on xpe.item = xi.item
left join dbo.RomaneioPedidos xrp on xrp.idPedido = xp.id
left join dbo.RomaneioPedidosHeader xv on xv.numero = xrp.numero
left join #tempEstoqueMoveisRealConsolidado xva with (nolock) on xva.referencia = xpe.Item
left join #tempEstoqueMoveisReal xv1 with (nolock) on xv1.Referencia = xpe.Item
where (xpe.qtde > xpe.coletada)
and (xpe.Item = pe.Item)
and (coalesce(xv.data_coleta, '') <= coalesce(v.data_coleta, ''))
) saldo
from dbo.PedidosEmpenhados pe
inner join dbo.Pedidos p on pe.empresa = p.empresa
and pe.numero = p.numero
inner join dbo.Itens i on pe.item = i.item
left join dbo.RomaneioPedidos rp on rp.idPedido = p.id
left join dbo.RomaneioPedidosHeader v on v.numero = rp.numero
left join dbo.vEstoqueMoveisRealConsolidadoBase va with (nolock) on va.referencia = pe.Item
left join dbo.vEstoqueMoveisReal v1 with (nolock) on v1.Referencia = pe.Item
and v1.empresa = 15
where (pe.qtde > pe.coletada)
group by pe.item
,coalesce(v.data_coleta, '01/01/1900')
,va.Estoque
,v1.Estoque
) t
where t.saldo < 0
group by t.Item
select distinct opi.Item
,coalesce(v.Estoque, v1.estoque, 0) as Estoque
,coalesce(v.Empenho, v1.empenho, 0) as Empenho
,coalesce(v.Estoque, v1.estoque, 0) - coalesce(v.Empenho, v1.empenho, 0) as Saldo
,nullif(isnull(x.Coleta,'01/01/1900'),'01/01/1900') as [Coleta Romaneio]
from dbo.OPItens opi
inner join dbo.OProd op on opi.Empresa = op.Empresa
and opi.Numero = op.Numero
left join #tempEstoqueMoveisRealConsolidado v with (nolock) on v.referencia = opi.Item
left join #tempEstoqueMoveisReal v1 with (nolock) on v1.Referencia = opi.Item
left join #tempRomaneiosPedidos x on x.Item = opi.Item
left join dbo.ItensVendaMediaSugestaoPorDia m on m.Item = opi.Item
where v.Marca = @Marca
and opi.Quantidade > opi.Coletada
and v.Empenho > v.Estoque
and (
isnull(@Item, '') = ''
or opi.Item = @Item
)
order by opi.Item
end
/*
param Marca, Marca, Exec(select Id, Descricao from dbo.marcas where Ativo = 1)
param Item, Item, String
*/ Esse comentário com '/*' deixa, pois eles são parâmetros para os usuários consultarem
Fiz modificações no código. Tive que colocar Distinct e voltar com as temporárias, pois dava tempo excedido,
mas mesmo assim teve itens que não retornaram as datas certas ou as datas que deveriam retornarem nulas.
,@Item varchar(15)
as
begin
set nocount on
if OBJECT_ID('tempdb..#tempEstoqueMoveisRealConsolidado') is not null
drop table #tempEstoqueMoveisRealConsolidado;
create table #tempEstoqueMoveisRealConsolidado (
referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisRealConsolidado
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisRealConsolidadoBase v with (nolock)
if OBJECT_ID('tempdb..#tempEstoqueMoveisReal') is not null
drop table #tempEstoqueMoveisReal;
create table #tempEstoqueMoveisReal (
Referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisReal
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisReal v with (nolock)
where empresa = 15;
if OBJECT_ID('tempdb..#tempRomaneiosPedidos') is not null
drop table #tempRomaneiosPedidos;
select t.Item
,min(t.Coleta) Coleta
into #tempRomaneiosPedidos
from (
select pe.Item
,coalesce(v.data_coleta, '01/01/1900') as Coleta
,coalesce(va.estoque, v1.estoque, 0) - (
select coalesce(sum(xpe.qtde), 0)
from dbo.PedidosEmpenhados xpe
inner join dbo.Pedidos xp on xpe.empresa = xp.empresa
and xpe.numero = xp.numero
inner join dbo.Itens xi on xpe.item = xi.item
left join dbo.RomaneioPedidos xrp on xrp.idPedido = xp.id
left join dbo.RomaneioPedidosHeader xv on xv.numero = xrp.numero
left join #tempEstoqueMoveisRealConsolidado xva with (nolock) on xva.referencia = xpe.Item
left join #tempEstoqueMoveisReal xv1 with (nolock) on xv1.Referencia = xpe.Item
where (xpe.qtde > xpe.coletada)
and (xpe.Item = pe.Item)
and (coalesce(xv.data_coleta, '') <= coalesce(v.data_coleta, ''))
) saldo
from dbo.PedidosEmpenhados pe
inner join dbo.Pedidos p on pe.empresa = p.empresa
and pe.numero = p.numero
inner join dbo.Itens i on pe.item = i.item
left join dbo.RomaneioPedidos rp on rp.idPedido = p.id
left join dbo.RomaneioPedidosHeader v on v.numero = rp.numero
left join dbo.vEstoqueMoveisRealConsolidadoBase va with (nolock) on va.referencia = pe.Item
left join dbo.vEstoqueMoveisReal v1 with (nolock) on v1.Referencia = pe.Item
and v1.empresa = 15
where (pe.qtde > pe.coletada)
group by pe.item
,coalesce(v.data_coleta, '01/01/1900')
,va.Estoque
,v1.Estoque
) t
where t.saldo < 0
group by t.Item
select distinct opi.Item
,coalesce(v.Estoque, v1.estoque, 0) as Estoque
,coalesce(v.Empenho, v1.empenho, 0) as Empenho
,coalesce(v.Estoque, v1.estoque, 0) - coalesce(v.Empenho, v1.empenho, 0) as Saldo
,nullif(isnull(x.Coleta,'01/01/1900'),'01/01/1900') as [Coleta Romaneio]
from dbo.OPItens opi
inner join dbo.OProd op on opi.Empresa = op.Empresa
and opi.Numero = op.Numero
left join #tempEstoqueMoveisRealConsolidado v with (nolock) on v.referencia = opi.Item
left join #tempEstoqueMoveisReal v1 with (nolock) on v1.Referencia = opi.Item
left join #tempRomaneiosPedidos x on x.Item = opi.Item
left join dbo.ItensVendaMediaSugestaoPorDia m on m.Item = opi.Item
where v.Marca = @Marca
and opi.Quantidade > opi.Coletada
and v.Empenho > v.Estoque
and (
isnull(@Item, '') = ''
or opi.Item = @Item
)
order by opi.Item
end
/*
param Marca, Marca, Exec(select Id, Descricao from dbo.marcas where Ativo = 1)
param Item, Item, String
*/ Esse comentário com '/*' deixa, pois eles são parâmetros para os usuários consultarem
Fiz modificações no código. Tive que colocar Distinct e voltar com as temporárias, pois dava tempo excedido,
mas mesmo assim teve itens que não retornaram as datas certas ou as datas que deveriam retornarem nulas.
GOSTEI 0
Bruno
24/07/2020
[quotealter procedure [dbo].[Consultas - OpItens - Prioridades de produção/carregamento_3] @Marca varchar(50)
,@Item varchar(15)
as
begin
set nocount on
if OBJECT_ID('tempdb..#tempEstoqueMoveisRealConsolidado') is not null
drop table #tempEstoqueMoveisRealConsolidado;
create table #tempEstoqueMoveisRealConsolidado (
referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisRealConsolidado
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisRealConsolidadoBase v with (nolock)
if OBJECT_ID('tempdb..#tempEstoqueMoveisReal') is not null
drop table #tempEstoqueMoveisReal;
create table #tempEstoqueMoveisReal (
Referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisReal
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisReal v with (nolock)
where empresa = 15;
if OBJECT_ID('tempdb..#tempRomaneiosPedidos') is not null
drop table #tempRomaneiosPedidos;
select t.Item
,min(t.Coleta) Coleta
into #tempRomaneiosPedidos
from (
select pe.Item
,coalesce(v.data_coleta, '01/01/1900') as Coleta
,coalesce(va.estoque, v1.estoque, 0) - (
select coalesce(sum(xpe.qtde), 0)
from dbo.PedidosEmpenhados xpe
inner join dbo.Pedidos xp on xpe.empresa = xp.empresa
and xpe.numero = xp.numero
inner join dbo.Itens xi on xpe.item = xi.item
left join dbo.RomaneioPedidos xrp on xrp.idPedido = xp.id
left join dbo.RomaneioPedidosHeader xv on xv.numero = xrp.numero
left join #tempEstoqueMoveisRealConsolidado xva with (nolock) on xva.referencia = xpe.Item
left join #tempEstoqueMoveisReal xv1 with (nolock) on xv1.Referencia = xpe.Item
where (xpe.qtde > xpe.coletada)
and (xpe.Item = pe.Item)
and (coalesce(xv.data_coleta, '') <= coalesce(v.data_coleta, ''))
) saldo
from dbo.PedidosEmpenhados pe
inner join dbo.Pedidos p on pe.empresa = p.empresa
and pe.numero = p.numero
inner join dbo.Itens i on pe.item = i.item
left join dbo.RomaneioPedidos rp on rp.idPedido = p.id
left join dbo.RomaneioPedidosHeader v on v.numero = rp.numero
left join dbo.vEstoqueMoveisRealConsolidadoBase va with (nolock) on va.referencia = pe.Item
left join dbo.vEstoqueMoveisReal v1 with (nolock) on v1.Referencia = pe.Item
and v1.empresa = 15
where (pe.qtde > pe.coletada)
group by pe.item
,coalesce(v.data_coleta, '01/01/1900')
,va.Estoque
,v1.Estoque
) t
where t.saldo < 0
group by t.Item
select distinct opi.Item
,coalesce(v.Estoque, v1.estoque, 0) as Estoque
,coalesce(v.Empenho, v1.empenho, 0) as Empenho
,coalesce(v.Estoque, v1.estoque, 0) - coalesce(v.Empenho, v1.empenho, 0) as Saldo
,nullif(isnull(x.Coleta,'01/01/1900'),'01/01/1900') as [Coleta Romaneio]
from dbo.OPItens opi
inner join dbo.OProd op on opi.Empresa = op.Empresa
and opi.Numero = op.Numero
left join #tempEstoqueMoveisRealConsolidado v with (nolock) on v.referencia = opi.Item
left join #tempEstoqueMoveisReal v1 with (nolock) on v1.Referencia = opi.Item
left join #tempRomaneiosPedidos x on x.Item = opi.Item
left join dbo.ItensVendaMediaSugestaoPorDia m on m.Item = opi.Item
where v.Marca = @Marca
and opi.Quantidade > opi.Coletada
and v.Empenho > v.Estoque
and (
isnull(@Item, '') = ''
or opi.Item = @Item
)
order by opi.Item
end
/*
param Marca, Marca, Exec(select Id, Descricao from dbo.marcas where Ativo = 1)
param Item, Item, String
*/ Esse comentário com '/*' deixa, pois eles são parâmetros para os usuários consultarem
Fiz modificações no código. Tive que colocar Distinct e voltar com as temporárias, pois dava tempo excedido,
mas mesmo assim teve itens que não retornaram as datas certas ou as datas que deveriam retornarem nulas.
,@Item varchar(15)
as
begin
set nocount on
if OBJECT_ID('tempdb..#tempEstoqueMoveisRealConsolidado') is not null
drop table #tempEstoqueMoveisRealConsolidado;
create table #tempEstoqueMoveisRealConsolidado (
referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisRealConsolidado
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisRealConsolidadoBase v with (nolock)
if OBJECT_ID('tempdb..#tempEstoqueMoveisReal') is not null
drop table #tempEstoqueMoveisReal;
create table #tempEstoqueMoveisReal (
Referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisReal
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisReal v with (nolock)
where empresa = 15;
if OBJECT_ID('tempdb..#tempRomaneiosPedidos') is not null
drop table #tempRomaneiosPedidos;
select t.Item
,min(t.Coleta) Coleta
into #tempRomaneiosPedidos
from (
select pe.Item
,coalesce(v.data_coleta, '01/01/1900') as Coleta
,coalesce(va.estoque, v1.estoque, 0) - (
select coalesce(sum(xpe.qtde), 0)
from dbo.PedidosEmpenhados xpe
inner join dbo.Pedidos xp on xpe.empresa = xp.empresa
and xpe.numero = xp.numero
inner join dbo.Itens xi on xpe.item = xi.item
left join dbo.RomaneioPedidos xrp on xrp.idPedido = xp.id
left join dbo.RomaneioPedidosHeader xv on xv.numero = xrp.numero
left join #tempEstoqueMoveisRealConsolidado xva with (nolock) on xva.referencia = xpe.Item
left join #tempEstoqueMoveisReal xv1 with (nolock) on xv1.Referencia = xpe.Item
where (xpe.qtde > xpe.coletada)
and (xpe.Item = pe.Item)
and (coalesce(xv.data_coleta, '') <= coalesce(v.data_coleta, ''))
) saldo
from dbo.PedidosEmpenhados pe
inner join dbo.Pedidos p on pe.empresa = p.empresa
and pe.numero = p.numero
inner join dbo.Itens i on pe.item = i.item
left join dbo.RomaneioPedidos rp on rp.idPedido = p.id
left join dbo.RomaneioPedidosHeader v on v.numero = rp.numero
left join dbo.vEstoqueMoveisRealConsolidadoBase va with (nolock) on va.referencia = pe.Item
left join dbo.vEstoqueMoveisReal v1 with (nolock) on v1.Referencia = pe.Item
and v1.empresa = 15
where (pe.qtde > pe.coletada)
group by pe.item
,coalesce(v.data_coleta, '01/01/1900')
,va.Estoque
,v1.Estoque
) t
where t.saldo < 0
group by t.Item
select distinct opi.Item
,coalesce(v.Estoque, v1.estoque, 0) as Estoque
,coalesce(v.Empenho, v1.empenho, 0) as Empenho
,coalesce(v.Estoque, v1.estoque, 0) - coalesce(v.Empenho, v1.empenho, 0) as Saldo
,nullif(isnull(x.Coleta,'01/01/1900'),'01/01/1900') as [Coleta Romaneio]
from dbo.OPItens opi
inner join dbo.OProd op on opi.Empresa = op.Empresa
and opi.Numero = op.Numero
left join #tempEstoqueMoveisRealConsolidado v with (nolock) on v.referencia = opi.Item
left join #tempEstoqueMoveisReal v1 with (nolock) on v1.Referencia = opi.Item
left join #tempRomaneiosPedidos x on x.Item = opi.Item
left join dbo.ItensVendaMediaSugestaoPorDia m on m.Item = opi.Item
where v.Marca = @Marca
and opi.Quantidade > opi.Coletada
and v.Empenho > v.Estoque
and (
isnull(@Item, '') = ''
or opi.Item = @Item
)
order by opi.Item
end
/*
param Marca, Marca, Exec(select Id, Descricao from dbo.marcas where Ativo = 1)
param Item, Item, String
*/ Esse comentário com '/*' deixa, pois eles são parâmetros para os usuários consultarem
Fiz modificações no código. Tive que colocar Distinct e voltar com as temporárias, pois dava tempo excedido,
mas mesmo assim teve itens que não retornaram as datas certas ou as datas que deveriam retornarem nulas.
GOSTEI 0
Bruno
24/07/2020
vi que na stored procedure você cria algumas tabelas temporárias para ter dados de uma única tabela. desnecessário e só gasta tempo e processamento.
apesar de ser bem difícil fazer esse tipo de ajuste sem os dados, refiz a stored procedure. veja se te ajuda:
apesar de ser bem difícil fazer esse tipo de ajuste sem os dados, refiz a stored procedure. veja se te ajuda:
alter procedure [dbo].[Consultas - OpItens - Prioridades de produção/carregamento_3] @Marca varchar(50) ,@Item varchar(15) as begin set nocount on if OBJECT_ID('tempdb..#tempRomaneiosPedidos') is not null drop table #tempRomaneiosPedidos; select t.Item, min(t.Coleta) Coleta into #tempRomaneiosPedidos from (select pe.Item, coalesce(v.data_coleta,'01/01/1900') as Coleta, coalesce(va.estoque, v1.estoque, 0) - ( select coalesce(sum(xpe.qtde),0) from dbo.PedidosEmpenhados xpe inner join dbo.Pedidos xp on xpe.empresa = xp.empresa and xpe.numero = xp.numero inner join dbo.Itens xi on xpe.item = xi.item left join dbo.RomaneioPedidos xrp on xrp.idPedido = xp.id left join dbo.RomaneioPedidosHeader xv on xv.numero = xrp.numero left join dbo.vEstoqueMoveisRealConsolidadoBase xva with (nolock) on xva.referencia = xpe.Item left join dbo.vEstoqueMoveisReal xv1 with (nolock) on xv1.Referencia = xpe.Item and xv1.empresa = 15 where (xpe.qtde > xpe.coletada) and (xpe.Item = pe.Item) and (coalesce(xv.data_coleta,'') <= coalesce(v.data_coleta,'')) ) saldo from dbo.PedidosEmpenhados pe inner join dbo.Pedidos p on pe.empresa = p.empresa and pe.numero = p.numero inner join dbo.Itens i on pe.item = i.item left join dbo.RomaneioPedidos rp on rp.idPedido = p.id left join dbo.RomaneioPedidosHeader v on v.numero = rp.numero left join dbo.vEstoqueMoveisRealConsolidadoBase va with (nolock) on va.referencia = pe.Item left join dbo.vEstoqueMoveisReal v1 with (nolock) on v1.Referencia = pe.Item and v1.empresa = 15 where (pe.qtde > pe.coletada) group by pe.item ,coalesce(v.data_coleta,'01/01/1900') ,va.Estoque ,v1.Estoque) t where t.saldo < 0 group by t.Item select opi.Item ,coalesce(v.Estoque, v1.estoque, 0) as Estoque ,coalesce(v.Empenho, v1.empenho, 0) as Empenho ,coalesce(v.Estoque, v1.estoque, 0) - coalesce(v.Empenho, v1.empenho, 0) as Saldo ,x.Coleta from dbo.OPItens opi inner join dbo.OProd op on opi.Empresa = op.Empresa and opi.Numero = op.Numero left join dbo.vEstoqueMoveisRealConsolidadoBase v with (nolock) on v.referencia = opi.Item left join dbo.vEstoqueMoveisReal v1 with (nolock) on v1.Referencia = opi.Item and v1.empresa = 15 left join #tempRomaneiosPedidos x on x.Item = opi.Item left join dbo.ItensVendaMediaSugestaoPorDia m on m.Item = opi.Item where v.Marca = @Marca and opi.Quantidade > opi.Coletada and v.Empenho > v.Estoque and ( isnull(@Item, '') = '' or opi.Item = @Item ) order by opi.Item, x.Coleta end
alter procedure [dbo].[Consultas - OpItens - Prioridades de produção/carregamento_3] @Marca varchar(50)
,@Item varchar(15)
as
begin
set nocount on
if OBJECT_ID('tempdb..#tempEstoqueMoveisRealConsolidado') is not null
drop table #tempEstoqueMoveisRealConsolidado;
create table #tempEstoqueMoveisRealConsolidado (
referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisRealConsolidado
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisRealConsolidadoBase v with (nolock)
if OBJECT_ID('tempdb..#tempEstoqueMoveisReal') is not null
drop table #tempEstoqueMoveisReal;
create table #tempEstoqueMoveisReal (
Referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisReal
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisReal v with (nolock)
where empresa = 15;
if OBJECT_ID('tempdb..#tempRomaneiosPedidos') is not null
drop table #tempRomaneiosPedidos;
select t.Item
,min(t.Coleta) Coleta
into #tempRomaneiosPedidos
from (
select pe.Item
,coalesce(v.data_coleta, '01/01/1900') as Coleta
,coalesce(va.estoque, v1.estoque, 0) - (
select coalesce(sum(xpe.qtde), 0)
from dbo.PedidosEmpenhados xpe
inner join dbo.Pedidos xp on xpe.empresa = xp.empresa
and xpe.numero = xp.numero
inner join dbo.Itens xi on xpe.item = xi.item
left join dbo.RomaneioPedidos xrp on xrp.idPedido = xp.id
left join dbo.RomaneioPedidosHeader xv on xv.numero = xrp.numero
left join #tempEstoqueMoveisRealConsolidado xva with (nolock) on xva.referencia = xpe.Item
left join #tempEstoqueMoveisReal xv1 with (nolock) on xv1.Referencia = xpe.Item
where (xpe.qtde > xpe.coletada)
and (xpe.Item = pe.Item)
and (coalesce(xv.data_coleta, '') <= coalesce(v.data_coleta, ''))
) saldo
from dbo.PedidosEmpenhados pe
inner join dbo.Pedidos p on pe.empresa = p.empresa
and pe.numero = p.numero
inner join dbo.Itens i on pe.item = i.item
left join dbo.RomaneioPedidos rp on rp.idPedido = p.id
left join dbo.RomaneioPedidosHeader v on v.numero = rp.numero
left join dbo.vEstoqueMoveisRealConsolidadoBase va with (nolock) on va.referencia = pe.Item
left join dbo.vEstoqueMoveisReal v1 with (nolock) on v1.Referencia = pe.Item
and v1.empresa = 15
where (pe.qtde > pe.coletada)
group by pe.item
,coalesce(v.data_coleta, '01/01/1900')
,va.Estoque
,v1.Estoque
) t
where t.saldo < 0
group by t.Item
select distinct opi.Item
,coalesce(v.Estoque, v1.estoque, 0) as Estoque
,coalesce(v.Empenho, v1.empenho, 0) as Empenho
,coalesce(v.Estoque, v1.estoque, 0) - coalesce(v.Empenho, v1.empenho, 0) as Saldo
,nullif(isnull(x.Coleta,'01/01/1900'),'01/01/1900') as [Coleta Romaneio]
from dbo.OPItens opi
inner join dbo.OProd op on opi.Empresa = op.Empresa
and opi.Numero = op.Numero
left join #tempEstoqueMoveisRealConsolidado v with (nolock) on v.referencia = opi.Item
left join #tempEstoqueMoveisReal v1 with (nolock) on v1.Referencia = opi.Item
left join #tempRomaneiosPedidos x on x.Item = opi.Item
left join dbo.ItensVendaMediaSugestaoPorDia m on m.Item = opi.Item
where v.Marca = @Marca
and opi.Quantidade > opi.Coletada
and v.Empenho > v.Estoque
and (
isnull(@Item, '') = ''
or opi.Item = @Item
)
order by opi.Item
end
/*
param Marca, Marca, Exec(select Id, Descricao from dbo.marcas where Ativo = 1)
param Item, Item, String
*/ Esse comentário com '/*' deixa, pois eles são parâmetros para os usuários consultarem
Fiz modificações no código. Tive que colocar Distinct e voltar com as temporárias, pois dava tempo excedido,
mas mesmo assim teve itens que não retornaram as datas certas ou as datas que deveriam retornarem nulas.
GOSTEI 0
Emerson Nascimento
24/07/2020
Então, Bruno, sem os dados pra fazer os testes fica quase impossível ajudar.
Desculpe.
Desculpe.
GOSTEI 0
Bruno
24/07/2020
Então, Bruno, sem os dados pra fazer os testes fica quase impossível ajudar.
Desculpe.
Desculpe.
Item Estoque Data_Coleta
UZ522-TR 3 Null Isso está me retornando
Essa é a tabela de romaneios do item UZ522-TR
Item Quantidade Data_Coleta
UZ522-TR 8 Null
UZ522-TR 3 Null
UZ522-TR 10 29/07/2020
UZ522-TR 5 29/07/2020
UZ522-TR 15 29/07/2020
UZ522-TR 5 29/07/2020
UZ522-TR 10 30/07/2020
UZ522-TR 10 30/07/2020
UZ522-TR 3 30/07/2020
Deveria trazer a data do dia 29/07/2020, pois é a primeira data que está faltando,
pois estoque (3) - Quantidade(35) = -32 então está faltando nessa data.
GOSTEI 0
Bruno
24/07/2020
Então, Bruno, sem os dados pra fazer os testes fica quase impossível ajudar.
Desculpe.
Desculpe.
Item Estoque Data_Coleta
UZ522-TR 3 Null Isso está me retornando
Essa é a tabela de romaneios do item UZ522-TR
Item Quantidade Data_Coleta
UZ522-TR 8 Null
UZ522-TR 3 Null
UZ522-TR 10 29/07/2020
UZ522-TR 5 29/07/2020
UZ522-TR 15 29/07/2020
UZ522-TR 5 29/07/2020
UZ522-TR 10 30/07/2020
UZ522-TR 10 30/07/2020
UZ522-TR 3 30/07/2020
Deveria trazer a data do dia 29/07/2020, pois é a primeira data que está faltando,
pois estoque (3) - Quantidade(35) = -32 então está faltando nessa data.
Emerson tenta de novo por favor tentei de todas as formas mas não consegui resolver pf
GOSTEI 0
Bruno
24/07/2020
Hoje pela manhã consegui fazer mas obrigado!
ALTER PROCEDURE [dbo].[Consultas - OpItens - Prioridades de produção/carregamento] @Marca varchar(50)
,@Item varchar(15)
as
begin
set nocount on
if OBJECT_ID('tempdb..#tempEstoqueMoveisRealConsolidado') is not null
drop table #tempEstoqueMoveisRealConsolidado;
create table #tempEstoqueMoveisRealConsolidado (
referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisRealConsolidado
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisRealConsolidadoBase v with (nolock)
if OBJECT_ID('tempdb..#tempEstoqueMoveisReal') is not null
drop table #tempEstoqueMoveisReal;
create table #tempEstoqueMoveisReal (
Referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisReal
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisReal v with (nolock)
where empresa = 15;
if OBJECT_ID('tempdb..#tempRomaneiosPedidos') is not null
drop table #tempRomaneiosPedidos;
select t.Item
,min(t.Coleta) Coleta
into #tempRomaneiosPedidos
from (
select pe.Item
,coalesce(v.data_coleta, '01/01/1900') as Coleta
,coalesce(va.estoque, v1.estoque, 0) - (
select coalesce(sum(xpe.qtde), 0)
from dbo.PedidosEmpenhados xpe
inner join dbo.Pedidos xp on xpe.empresa = xp.empresa
and xpe.numero = xp.numero
inner join dbo.Itens xi on xpe.item = xi.item
left join dbo.RomaneioPedidos xrp on xrp.idPedido = xp.id
left join dbo.RomaneioPedidosHeader xv on xv.numero = xrp.numero
left join #tempEstoqueMoveisRealConsolidado xva with (nolock) on xva.referencia = xpe.Item
left join #tempEstoqueMoveisReal xv1 with (nolock) on xv1.Referencia = xpe.Item
where (xpe.qtde > xpe.coletada)
and (xpe.Item = pe.Item)
and (coalesce(xv.data_coleta, xv.data_coleta) <= coalesce(v.data_coleta, v.data_coleta))
) saldo
from dbo.PedidosEmpenhados pe
inner join dbo.Pedidos p on pe.empresa = p.empresa
and pe.numero = p.numero
inner join dbo.Itens i on pe.item = i.item
left join dbo.RomaneioPedidos rp on rp.idPedido = p.id
left join dbo.RomaneioPedidosHeader v on v.numero = rp.numero
left join #tempEstoqueMoveisRealConsolidado va with (nolock) on va.referencia = pe.Item
left join #tempEstoqueMoveisReal v1 with (nolock) on v1.Referencia = pe.Item
where (pe.qtde > pe.coletada)
group by pe.item,v.Data_Coleta
,coalesce(v.data_coleta, '01/01/1900')
,va.Estoque
,v1.Estoque
) t
where t.saldo < 0
group by t.Item
select distinct opi.Item
,coalesce(v.Estoque, v1.estoque, 0) as Estoque
,coalesce(v.Empenho, v1.empenho, 0) as Empenho
,coalesce(v.Estoque, v1.estoque, 0) - coalesce(v.Empenho, v1.empenho, 0) as Saldo
,nullif(isnull(x.Coleta,'01/01/1900'),'01/01/1900') as [Coleta Romaneio]
from dbo.OPItens opi
inner join dbo.OProd op on opi.Empresa = op.Empresa
and opi.Numero = op.Numero
left join #tempEstoqueMoveisRealConsolidado v with (nolock) on v.referencia = opi.Item
left join #tempEstoqueMoveisReal v1 with (nolock) on v1.Referencia = opi.Item
left join #tempRomaneiosPedidos x on x.Item = opi.Item
left join dbo.ItensVendaMediaSugestaoPorDia m on m.Item = opi.Item
where v.Marca = @Marca
and opi.Quantidade > opi.Coletada
and v.Empenho > v.Estoque
and (
isnull(@Item, '') = ''
or opi.Item = @Item
)
order by opi.Item
end
/*
param Marca, Marca, Exec(select Id, Descricao from dbo.marcas where Ativo = 1)
param Item, Item, String
*/
ALTER PROCEDURE [dbo].[Consultas - OpItens - Prioridades de produção/carregamento] @Marca varchar(50)
,@Item varchar(15)
as
begin
set nocount on
if OBJECT_ID('tempdb..#tempEstoqueMoveisRealConsolidado') is not null
drop table #tempEstoqueMoveisRealConsolidado;
create table #tempEstoqueMoveisRealConsolidado (
referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisRealConsolidado
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisRealConsolidadoBase v with (nolock)
if OBJECT_ID('tempdb..#tempEstoqueMoveisReal') is not null
drop table #tempEstoqueMoveisReal;
create table #tempEstoqueMoveisReal (
Referencia varchar(15) primary key
,Estoque int
,Empenho int
,Producao int
,Marca varchar(50)
);
insert into #tempEstoqueMoveisReal
select v.Referencia
,v.Estoque
,v.Empenho
,v.Producao
,v.Marca
from dbo.vEstoqueMoveisReal v with (nolock)
where empresa = 15;
if OBJECT_ID('tempdb..#tempRomaneiosPedidos') is not null
drop table #tempRomaneiosPedidos;
select t.Item
,min(t.Coleta) Coleta
into #tempRomaneiosPedidos
from (
select pe.Item
,coalesce(v.data_coleta, '01/01/1900') as Coleta
,coalesce(va.estoque, v1.estoque, 0) - (
select coalesce(sum(xpe.qtde), 0)
from dbo.PedidosEmpenhados xpe
inner join dbo.Pedidos xp on xpe.empresa = xp.empresa
and xpe.numero = xp.numero
inner join dbo.Itens xi on xpe.item = xi.item
left join dbo.RomaneioPedidos xrp on xrp.idPedido = xp.id
left join dbo.RomaneioPedidosHeader xv on xv.numero = xrp.numero
left join #tempEstoqueMoveisRealConsolidado xva with (nolock) on xva.referencia = xpe.Item
left join #tempEstoqueMoveisReal xv1 with (nolock) on xv1.Referencia = xpe.Item
where (xpe.qtde > xpe.coletada)
and (xpe.Item = pe.Item)
and (coalesce(xv.data_coleta, xv.data_coleta) <= coalesce(v.data_coleta, v.data_coleta))
) saldo
from dbo.PedidosEmpenhados pe
inner join dbo.Pedidos p on pe.empresa = p.empresa
and pe.numero = p.numero
inner join dbo.Itens i on pe.item = i.item
left join dbo.RomaneioPedidos rp on rp.idPedido = p.id
left join dbo.RomaneioPedidosHeader v on v.numero = rp.numero
left join #tempEstoqueMoveisRealConsolidado va with (nolock) on va.referencia = pe.Item
left join #tempEstoqueMoveisReal v1 with (nolock) on v1.Referencia = pe.Item
where (pe.qtde > pe.coletada)
group by pe.item,v.Data_Coleta
,coalesce(v.data_coleta, '01/01/1900')
,va.Estoque
,v1.Estoque
) t
where t.saldo < 0
group by t.Item
select distinct opi.Item
,coalesce(v.Estoque, v1.estoque, 0) as Estoque
,coalesce(v.Empenho, v1.empenho, 0) as Empenho
,coalesce(v.Estoque, v1.estoque, 0) - coalesce(v.Empenho, v1.empenho, 0) as Saldo
,nullif(isnull(x.Coleta,'01/01/1900'),'01/01/1900') as [Coleta Romaneio]
from dbo.OPItens opi
inner join dbo.OProd op on opi.Empresa = op.Empresa
and opi.Numero = op.Numero
left join #tempEstoqueMoveisRealConsolidado v with (nolock) on v.referencia = opi.Item
left join #tempEstoqueMoveisReal v1 with (nolock) on v1.Referencia = opi.Item
left join #tempRomaneiosPedidos x on x.Item = opi.Item
left join dbo.ItensVendaMediaSugestaoPorDia m on m.Item = opi.Item
where v.Marca = @Marca
and opi.Quantidade > opi.Coletada
and v.Empenho > v.Estoque
and (
isnull(@Item, '') = ''
or opi.Item = @Item
)
order by opi.Item
end
/*
param Marca, Marca, Exec(select Id, Descricao from dbo.marcas where Ativo = 1)
param Item, Item, String
*/
GOSTEI 0