Sql- pegar data nula do pedido
Tenho data de previsão de conclusão nos itens. Exemplo:
UZ134-VM DataPrevisao 27/08/2020
UZ230-VM DataPrevisao 28/08/2020
UZ234-VM DataPrevisao NULL
No pedido eu tenho esses itens. Como um item do pedido tem data null preciso pegar a data null, porém se todos itens tivessem data eu deveria pegar a maior dataprevisao.
A tabela que possui a DataPrevisao é a tabela opitens.
E preciso mostrar essa data ligando com a itensped, provavelmente numa temporária para depois ligar com outras tabelas para exibir a data de previsão por pedido. A data nula ou a maior se não tiver nula.
UZ134-VM DataPrevisao 27/08/2020
UZ230-VM DataPrevisao 28/08/2020
UZ234-VM DataPrevisao NULL
No pedido eu tenho esses itens. Como um item do pedido tem data null preciso pegar a data null, porém se todos itens tivessem data eu deveria pegar a maior dataprevisao.
A tabela que possui a DataPrevisao é a tabela opitens.
E preciso mostrar essa data ligando com a itensped, provavelmente numa temporária para depois ligar com outras tabelas para exibir a data de previsão por pedido. A data nula ou a maior se não tiver nula.
Bruno
Curtidas 0
Respostas
Emerson Nascimento
24/08/2020
tente algo assim:
select it.pedido, max(case when opi2.pedido is null then opi.dataprevisao else null end) dataprevisao from itensped it left join opitens opi on (opi.pedido = it.pedido) and not (opi.dataprevisao is null) -- aqui lista registros com data de previsão left join opitens opi2 on (opi2.pedido = it.pedido) and (opi2.dataprevisao is null) -- aqui lista registros sem data de previsão [where ] group by it.pedido
GOSTEI 0
Bruno
24/08/2020
select it.Numero
,max (case
when it.Numero is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
from itensped it
left join opitens opi on opi.item = it.Item and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
where it.Numero in (2787617,2787388)
group by it.Numero
fiz assim mas traz sempre null e um desse numeros de pedido deveria trazer a maior data. O número do pedido está apenas na itensped.
Segue todo o código:
select it.Numero
,max(case
when opi2.id is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
,it.Empresa
into #tempOpitens
from itensped it
left join opitens opi on opi.item = it.Item
and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item
and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
--where it.Numero in (2787617, 2787388)
group by it.Numero,it.Empresa;
with TempPedidosEmpenhados
as (
select distinct empresa
,numero
from dbo.pedidosempenhados
group by empresa
,numero
)
select tp.Volumes
,tp.VolumesAcessorios as VolAcessorios
,case
when pf.idPedido is null
then ''Bloqueado''
else ''Liberado''
end LibFinan
,tp.VolumesZero
,tp.TVolumes
,tp.TVolumesColetados
,tp.TVolumesAtendidos
,p.Data_Liberacao as Data
,p.Ordem_Compra
,c.Razao_Social
,e.Estado as UF
,substring(e.cidade, 1, 15) as Cidade
,t1.Fantasia as Transp
,case p.Tipo_Frete
when 1
then ''FOB''
when 2
then ''CIF''
when 3
then ''CORT''
when 4
then ''CIFSP''
else ''INDEF''
end as Frete
,p.Observacao_1 as OBS1
,p.Observacao_2 as OBS2
,p.Observacao_3 as OBS3
,convert(bit, case
when (vd.idPedido is not null)
then 1
else 0
end) as PossuiVidro
,p.Marca
,p.Transportadora
,pp.Descricao as TipoPedido
,t.Empresa
,t.Numero
,convert(bit, case
when ca.Codigo_Cliente is null
then 0
else 1
end) as InfAgenda
,p.Data_Base as PedidoData_Base
,c.Codigo_Cliente as Cliente
,p.bObs1
,p.bObs2
,p.bObs3
,convert(bit, iif((ObsRomaneio & Power(2, 1 - 1)) > 0, 1, 0)) as bObsRomaneio1
,convert(bit, iif((ObsRomaneio & Power(2, 2 - 1)) > 0, 1, 0)) as bObsRomaneio2
,convert(bit, iif((ObsRomaneio & Power(2, 3 - 1)) > 0, 1, 0)) as bObsRomaneio3
,op.PrevisaoConclusao
into #tempCandidatos
from dbo.PedidosCandidatos t
inner join dbo.pedidos p on p.empresa = t.empresa
and p.numero = t.numero
left join dbo.Clientes_Agendamento ca on ca.codigo_cliente = p.cliente
inner join dbo.TiposPedido pp on pp.Codigo = p.Tipo_Pedido --14/09/15 leonice
inner join dbo.pedidosTotais tp on tp.empresa = t.empresa
and tp.numero = t.numero
inner join dbo.Transp t1 on t1.codigo_transp = p.transportadora
inner join dbo.clientes c on c.codigo_cliente = p.cliente
inner join dbo.Endereco e on e.cliente = p.cliente
and e.sequencia = p.endereco_entrega
inner join #tempOpitens op on op.numero = t.numero
and op.empresa = t.empresa
left join dbo.PedidosLiberaFaturamento pf on pf.idPedido = p.id
left join dbo.vPedidosVidrosMyHome vd on vd.idPedido = p.id
left join TempPedidosEmpenhados pd on pd.empresa = t.empresa
and pd.numero = t.numero
-- adicionar Kasa K à regra para trazer pedidos não programados aqui...
where (
(pd.empresa is null)
or (
(p.marca in (6, 9))
and (p.Data_Programacao is null)
)
)
select distinct t.PrevisaoConclusao
,pc.*
,t.Volumes
,t.VolAcessorios
,t.LibFinan
,t.VolumesZero
,t.TVolumes
,t.TVolumesColetados
,t.TVolumesAtendidos
,t.Data
,t.Ordem_Compra
,pc.Faturamento as Data_Base
,t.Razao_Social
,t.UF
,t.Cidade
,t.Transp
,t.Frete
,t.OBS1
,t.OBS2
,t.OBS3
,t.PossuiVidro
,t.TipoPedido
,t.Marca
,pa.Agendado
,t.InfAgenda as Agendamento
,pr.Atendido as Estruturas
,'''' as Lotes
,PedidoData_Base
,t.Cliente
,1 as AdicionaEmRomaneio
,t.Transportadora
,t.bObs1
,t.bObs2
,t.bObs3
,t.bObsRomaneio1
,t.bObsRomaneio2
,t.bObsRomaneio3
from dbo.PedidosCandidatos pc
left join dbo.PrgMetalAtendidos pr on pr.empresa = pc.empresa
and pr.numero = pc.numero
inner join dbo.itensped ip on ip.empresa = pc.empresa
and ip.numero = pc.numero
--inner join dbo.vitenscompostos ic on ic.referencia = ip.item
inner join dbo.vMovel m1 on m1.referencia = ip.item
inner join #tempCandidatos t on t.empresa = pc.empresa
and t.numero = pc.numero
left join [dbo].[Pedidos_Agendamento] pa on pa.empresa = pc.empresa
and pa.numero = pc.numero
-- where (pc.numero = 2258069) or not (suser_sname() = ''KAPPESBERG\\\\juliano'')
where pc.Numero in (2787617, 2787388)
order by pc.Prioridade desc
,pc.Faturamento;
drop table #tempopitens
drop table #tempCandidatos
,max (case
when it.Numero is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
from itensped it
left join opitens opi on opi.item = it.Item and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
where it.Numero in (2787617,2787388)
group by it.Numero
fiz assim mas traz sempre null e um desse numeros de pedido deveria trazer a maior data. O número do pedido está apenas na itensped.
Segue todo o código:
select it.Numero
,max(case
when opi2.id is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
,it.Empresa
into #tempOpitens
from itensped it
left join opitens opi on opi.item = it.Item
and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item
and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
--where it.Numero in (2787617, 2787388)
group by it.Numero,it.Empresa;
with TempPedidosEmpenhados
as (
select distinct empresa
,numero
from dbo.pedidosempenhados
group by empresa
,numero
)
select tp.Volumes
,tp.VolumesAcessorios as VolAcessorios
,case
when pf.idPedido is null
then ''Bloqueado''
else ''Liberado''
end LibFinan
,tp.VolumesZero
,tp.TVolumes
,tp.TVolumesColetados
,tp.TVolumesAtendidos
,p.Data_Liberacao as Data
,p.Ordem_Compra
,c.Razao_Social
,e.Estado as UF
,substring(e.cidade, 1, 15) as Cidade
,t1.Fantasia as Transp
,case p.Tipo_Frete
when 1
then ''FOB''
when 2
then ''CIF''
when 3
then ''CORT''
when 4
then ''CIFSP''
else ''INDEF''
end as Frete
,p.Observacao_1 as OBS1
,p.Observacao_2 as OBS2
,p.Observacao_3 as OBS3
,convert(bit, case
when (vd.idPedido is not null)
then 1
else 0
end) as PossuiVidro
,p.Marca
,p.Transportadora
,pp.Descricao as TipoPedido
,t.Empresa
,t.Numero
,convert(bit, case
when ca.Codigo_Cliente is null
then 0
else 1
end) as InfAgenda
,p.Data_Base as PedidoData_Base
,c.Codigo_Cliente as Cliente
,p.bObs1
,p.bObs2
,p.bObs3
,convert(bit, iif((ObsRomaneio & Power(2, 1 - 1)) > 0, 1, 0)) as bObsRomaneio1
,convert(bit, iif((ObsRomaneio & Power(2, 2 - 1)) > 0, 1, 0)) as bObsRomaneio2
,convert(bit, iif((ObsRomaneio & Power(2, 3 - 1)) > 0, 1, 0)) as bObsRomaneio3
,op.PrevisaoConclusao
into #tempCandidatos
from dbo.PedidosCandidatos t
inner join dbo.pedidos p on p.empresa = t.empresa
and p.numero = t.numero
left join dbo.Clientes_Agendamento ca on ca.codigo_cliente = p.cliente
inner join dbo.TiposPedido pp on pp.Codigo = p.Tipo_Pedido --14/09/15 leonice
inner join dbo.pedidosTotais tp on tp.empresa = t.empresa
and tp.numero = t.numero
inner join dbo.Transp t1 on t1.codigo_transp = p.transportadora
inner join dbo.clientes c on c.codigo_cliente = p.cliente
inner join dbo.Endereco e on e.cliente = p.cliente
and e.sequencia = p.endereco_entrega
inner join #tempOpitens op on op.numero = t.numero
and op.empresa = t.empresa
left join dbo.PedidosLiberaFaturamento pf on pf.idPedido = p.id
left join dbo.vPedidosVidrosMyHome vd on vd.idPedido = p.id
left join TempPedidosEmpenhados pd on pd.empresa = t.empresa
and pd.numero = t.numero
-- adicionar Kasa K à regra para trazer pedidos não programados aqui...
where (
(pd.empresa is null)
or (
(p.marca in (6, 9))
and (p.Data_Programacao is null)
)
)
select distinct t.PrevisaoConclusao
,pc.*
,t.Volumes
,t.VolAcessorios
,t.LibFinan
,t.VolumesZero
,t.TVolumes
,t.TVolumesColetados
,t.TVolumesAtendidos
,t.Data
,t.Ordem_Compra
,pc.Faturamento as Data_Base
,t.Razao_Social
,t.UF
,t.Cidade
,t.Transp
,t.Frete
,t.OBS1
,t.OBS2
,t.OBS3
,t.PossuiVidro
,t.TipoPedido
,t.Marca
,pa.Agendado
,t.InfAgenda as Agendamento
,pr.Atendido as Estruturas
,'''' as Lotes
,PedidoData_Base
,t.Cliente
,1 as AdicionaEmRomaneio
,t.Transportadora
,t.bObs1
,t.bObs2
,t.bObs3
,t.bObsRomaneio1
,t.bObsRomaneio2
,t.bObsRomaneio3
from dbo.PedidosCandidatos pc
left join dbo.PrgMetalAtendidos pr on pr.empresa = pc.empresa
and pr.numero = pc.numero
inner join dbo.itensped ip on ip.empresa = pc.empresa
and ip.numero = pc.numero
--inner join dbo.vitenscompostos ic on ic.referencia = ip.item
inner join dbo.vMovel m1 on m1.referencia = ip.item
inner join #tempCandidatos t on t.empresa = pc.empresa
and t.numero = pc.numero
left join [dbo].[Pedidos_Agendamento] pa on pa.empresa = pc.empresa
and pa.numero = pc.numero
-- where (pc.numero = 2258069) or not (suser_sname() = ''KAPPESBERG\\\\juliano'')
where pc.Numero in (2787617, 2787388)
order by pc.Prioridade desc
,pc.Faturamento;
drop table #tempopitens
drop table #tempCandidatos
GOSTEI 0
Bruno
24/08/2020
Problema que na opitens tem itens que ficam salvos antigos daí tem data nula não sei o que fazer
GOSTEI 0
Emerson Nascimento
24/08/2020
reveja essa query:o retorno obitido é o esperado?
select it.Empresa ,it.Numero ,max(case when opi2.id is null then opi.PrevisaoConclusao else null end) as PrevisaoConclusao into #tempOpitens -- retire para testar a query from itensped it left join opitens opi on opi.item = it.Item and opi.numero = it.numero -- não seria necessário filtrar o pedido ???? and opi.Empresa = it.Empresa and not opi.PrevisaoConclusao is null left join opitens opi2 on opi2.Item = it.Item and opi2.numero = it.numero -- não seria necessário filtrar o pedido ???? and opi2.Empresa = it.Empresa -- aqui deveria ter colocado opi2; estava opi and opi2.PrevisaoConclusao is null --where it.Numero in (2787617, 2787388) group by it.Numero,it.Empresa
GOSTEI 0
Emerson Nascimento
24/08/2020
corrigindo:
*obtido
*obtido
GOSTEI 0
Bruno
24/08/2020
Problema que na opitens da sequencia do código tem itens que ficam salvos antigos daí tem data nula não sei o que fazer.
Esse código não funciona, pois não traz a data. A data traz nula, pois tem itens antigos no meio e as referências sempre são atualizadas para serem produzidas.
Não posso ligar o número da opitens, pois não tem numero do pedido, apenas a itensped tem numero do pedido.
Esse código não funciona, pois não traz a data. A data traz nula, pois tem itens antigos no meio e as referências sempre são atualizadas para serem produzidas.
Não posso ligar o número da opitens, pois não tem numero do pedido, apenas a itensped tem numero do pedido.
GOSTEI 0
Bruno
24/08/2020
Alguém consegue ajudar?
GOSTEI 0
Imex
24/08/2020
Bom dia,
Bruno, segue uma sugestão para testes:
Espero que ajude
Bruno, segue uma sugestão para testes:
select it.Numero, case when count(*) = count(opi.PrevisaoConclusao) then max(opi.PrevisaoConclusao) end as PrevisaoConclusao from itensped it left join opitens opi on opi.item = it.Item and opi.Empresa = it.Empresa where it.Numero in (2787617, 2787388) group by it.Numero
Espero que ajude
GOSTEI 0
Bruno
24/08/2020
Ainda não deu certo, traz nulo, mas obrigado por tentar ajudar. Esse chamado está parado não consigo resolver.O código completo segue abaixo
select it.Numero
,max (case
when it.Numero is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
from itensped it
left join opitens opi on opi.item = it.Item and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
where it.Numero in (2787617,2787388)
group by it.Numero
fiz assim mas traz sempre null e um desse numeros de pedido deveria trazer a maior data. O número do pedido está apenas na itensped.
Segue todo o código:
select it.Numero
,max(case
when opi2.id is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
,it.Empresa
into #tempOpitens
from itensped it
left join opitens opi on opi.item = it.Item
and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item
and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
--where it.Numero in (2787617, 2787388)
group by it.Numero,it.Empresa;
with TempPedidosEmpenhados
as (
select distinct empresa
,numero
from dbo.pedidosempenhados
group by empresa
,numero
)
select tp.Volumes
,tp.VolumesAcessorios as VolAcessorios
,case
when pf.idPedido is null
then ''Bloqueado''
else ''Liberado''
end LibFinan
,tp.VolumesZero
,tp.TVolumes
,tp.TVolumesColetados
,tp.TVolumesAtendidos
,p.Data_Liberacao as Data
,p.Ordem_Compra
,c.Razao_Social
,e.Estado as UF
,substring(e.cidade, 1, 15) as Cidade
,t1.Fantasia as Transp
,case p.Tipo_Frete
when 1
then ''FOB''
when 2
then ''CIF''
when 3
then ''CORT''
when 4
then ''CIFSP''
else ''INDEF''
end as Frete
,p.Observacao_1 as OBS1
,p.Observacao_2 as OBS2
,p.Observacao_3 as OBS3
,convert(bit, case
when (vd.idPedido is not null)
then 1
else 0
end) as PossuiVidro
,p.Marca
,p.Transportadora
,pp.Descricao as TipoPedido
,t.Empresa
,t.Numero
,convert(bit, case
when ca.Codigo_Cliente is null
then 0
else 1
end) as InfAgenda
,p.Data_Base as PedidoData_Base
,c.Codigo_Cliente as Cliente
,p.bObs1
,p.bObs2
,p.bObs3
,convert(bit, iif((ObsRomaneio & Power(2, 1 - 1)) > 0, 1, 0)) as bObsRomaneio1
,convert(bit, iif((ObsRomaneio & Power(2, 2 - 1)) > 0, 1, 0)) as bObsRomaneio2
,convert(bit, iif((ObsRomaneio & Power(2, 3 - 1)) > 0, 1, 0)) as bObsRomaneio3
,op.PrevisaoConclusao
into #tempCandidatos
from dbo.PedidosCandidatos t
inner join dbo.pedidos p on p.empresa = t.empresa
and p.numero = t.numero
left join dbo.Clientes_Agendamento ca on ca.codigo_cliente = p.cliente
inner join dbo.TiposPedido pp on pp.Codigo = p.Tipo_Pedido --14/09/15 leonice
inner join dbo.pedidosTotais tp on tp.empresa = t.empresa
and tp.numero = t.numero
inner join dbo.Transp t1 on t1.codigo_transp = p.transportadora
inner join dbo.clientes c on c.codigo_cliente = p.cliente
inner join dbo.Endereco e on e.cliente = p.cliente
and e.sequencia = p.endereco_entrega
inner join #tempOpitens op on op.numero = t.numero
and op.empresa = t.empresa
left join dbo.PedidosLiberaFaturamento pf on pf.idPedido = p.id
left join dbo.vPedidosVidrosMyHome vd on vd.idPedido = p.id
left join TempPedidosEmpenhados pd on pd.empresa = t.empresa
and pd.numero = t.numero
-- adicionar Kasa K à regra para trazer pedidos não programados aqui...
where (
(pd.empresa is null)
or (
(p.marca in (6, 9))
and (p.Data_Programacao is null)
)
)
select distinct t.PrevisaoConclusao
,pc.*
,t.Volumes
,t.VolAcessorios
,t.LibFinan
,t.VolumesZero
,t.TVolumes
,t.TVolumesColetados
,t.TVolumesAtendidos
,t.Data
,t.Ordem_Compra
,pc.Faturamento as Data_Base
,t.Razao_Social
,t.UF
,t.Cidade
,t.Transp
,t.Frete
,t.OBS1
,t.OBS2
,t.OBS3
,t.PossuiVidro
,t.TipoPedido
,t.Marca
,pa.Agendado
,t.InfAgenda as Agendamento
,pr.Atendido as Estruturas
,'''' as Lotes
,PedidoData_Base
,t.Cliente
,1 as AdicionaEmRomaneio
,t.Transportadora
,t.bObs1
,t.bObs2
,t.bObs3
,t.bObsRomaneio1
,t.bObsRomaneio2
,t.bObsRomaneio3
from dbo.PedidosCandidatos pc
left join dbo.PrgMetalAtendidos pr on pr.empresa = pc.empresa
and pr.numero = pc.numero
inner join dbo.itensped ip on ip.empresa = pc.empresa
and ip.numero = pc.numero
--inner join dbo.vitenscompostos ic on ic.referencia = ip.item
inner join dbo.vMovel m1 on m1.referencia = ip.item
inner join #tempCandidatos t on t.empresa = pc.empresa
and t.numero = pc.numero
left join [dbo].[Pedidos_Agendamento] pa on pa.empresa = pc.empresa
and pa.numero = pc.numero
-- where (pc.numero = 2258069) or not (suser_sname() = ''KAPPESBERG\\\\\\\\juliano'')
where pc.Numero in (2787617, 2787388)
order by pc.Prioridade desc
,pc.Faturamento;
drop table #tempopitens
drop table #tempCandidatos
select it.Numero
,max (case
when it.Numero is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
from itensped it
left join opitens opi on opi.item = it.Item and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
where it.Numero in (2787617,2787388)
group by it.Numero
fiz assim mas traz sempre null e um desse numeros de pedido deveria trazer a maior data. O número do pedido está apenas na itensped.
Segue todo o código:
select it.Numero
,max(case
when opi2.id is null
then opi.PrevisaoConclusao
else null
end) as PrevisaoConclusao
,it.Empresa
into #tempOpitens
from itensped it
left join opitens opi on opi.item = it.Item
and opi.Empresa = it.Empresa
and not opi.PrevisaoConclusao is null
left join opitens opi2 on opi2.Item = it.Item
and opi.Empresa = it.Empresa
and opi2.PrevisaoConclusao is null
--where it.Numero in (2787617, 2787388)
group by it.Numero,it.Empresa;
with TempPedidosEmpenhados
as (
select distinct empresa
,numero
from dbo.pedidosempenhados
group by empresa
,numero
)
select tp.Volumes
,tp.VolumesAcessorios as VolAcessorios
,case
when pf.idPedido is null
then ''Bloqueado''
else ''Liberado''
end LibFinan
,tp.VolumesZero
,tp.TVolumes
,tp.TVolumesColetados
,tp.TVolumesAtendidos
,p.Data_Liberacao as Data
,p.Ordem_Compra
,c.Razao_Social
,e.Estado as UF
,substring(e.cidade, 1, 15) as Cidade
,t1.Fantasia as Transp
,case p.Tipo_Frete
when 1
then ''FOB''
when 2
then ''CIF''
when 3
then ''CORT''
when 4
then ''CIFSP''
else ''INDEF''
end as Frete
,p.Observacao_1 as OBS1
,p.Observacao_2 as OBS2
,p.Observacao_3 as OBS3
,convert(bit, case
when (vd.idPedido is not null)
then 1
else 0
end) as PossuiVidro
,p.Marca
,p.Transportadora
,pp.Descricao as TipoPedido
,t.Empresa
,t.Numero
,convert(bit, case
when ca.Codigo_Cliente is null
then 0
else 1
end) as InfAgenda
,p.Data_Base as PedidoData_Base
,c.Codigo_Cliente as Cliente
,p.bObs1
,p.bObs2
,p.bObs3
,convert(bit, iif((ObsRomaneio & Power(2, 1 - 1)) > 0, 1, 0)) as bObsRomaneio1
,convert(bit, iif((ObsRomaneio & Power(2, 2 - 1)) > 0, 1, 0)) as bObsRomaneio2
,convert(bit, iif((ObsRomaneio & Power(2, 3 - 1)) > 0, 1, 0)) as bObsRomaneio3
,op.PrevisaoConclusao
into #tempCandidatos
from dbo.PedidosCandidatos t
inner join dbo.pedidos p on p.empresa = t.empresa
and p.numero = t.numero
left join dbo.Clientes_Agendamento ca on ca.codigo_cliente = p.cliente
inner join dbo.TiposPedido pp on pp.Codigo = p.Tipo_Pedido --14/09/15 leonice
inner join dbo.pedidosTotais tp on tp.empresa = t.empresa
and tp.numero = t.numero
inner join dbo.Transp t1 on t1.codigo_transp = p.transportadora
inner join dbo.clientes c on c.codigo_cliente = p.cliente
inner join dbo.Endereco e on e.cliente = p.cliente
and e.sequencia = p.endereco_entrega
inner join #tempOpitens op on op.numero = t.numero
and op.empresa = t.empresa
left join dbo.PedidosLiberaFaturamento pf on pf.idPedido = p.id
left join dbo.vPedidosVidrosMyHome vd on vd.idPedido = p.id
left join TempPedidosEmpenhados pd on pd.empresa = t.empresa
and pd.numero = t.numero
-- adicionar Kasa K à regra para trazer pedidos não programados aqui...
where (
(pd.empresa is null)
or (
(p.marca in (6, 9))
and (p.Data_Programacao is null)
)
)
select distinct t.PrevisaoConclusao
,pc.*
,t.Volumes
,t.VolAcessorios
,t.LibFinan
,t.VolumesZero
,t.TVolumes
,t.TVolumesColetados
,t.TVolumesAtendidos
,t.Data
,t.Ordem_Compra
,pc.Faturamento as Data_Base
,t.Razao_Social
,t.UF
,t.Cidade
,t.Transp
,t.Frete
,t.OBS1
,t.OBS2
,t.OBS3
,t.PossuiVidro
,t.TipoPedido
,t.Marca
,pa.Agendado
,t.InfAgenda as Agendamento
,pr.Atendido as Estruturas
,'''' as Lotes
,PedidoData_Base
,t.Cliente
,1 as AdicionaEmRomaneio
,t.Transportadora
,t.bObs1
,t.bObs2
,t.bObs3
,t.bObsRomaneio1
,t.bObsRomaneio2
,t.bObsRomaneio3
from dbo.PedidosCandidatos pc
left join dbo.PrgMetalAtendidos pr on pr.empresa = pc.empresa
and pr.numero = pc.numero
inner join dbo.itensped ip on ip.empresa = pc.empresa
and ip.numero = pc.numero
--inner join dbo.vitenscompostos ic on ic.referencia = ip.item
inner join dbo.vMovel m1 on m1.referencia = ip.item
inner join #tempCandidatos t on t.empresa = pc.empresa
and t.numero = pc.numero
left join [dbo].[Pedidos_Agendamento] pa on pa.empresa = pc.empresa
and pa.numero = pc.numero
-- where (pc.numero = 2258069) or not (suser_sname() = ''KAPPESBERG\\\\\\\\juliano'')
where pc.Numero in (2787617, 2787388)
order by pc.Prioridade desc
,pc.Faturamento;
drop table #tempopitens
drop table #tempCandidatos
GOSTEI 0
Imex
24/08/2020
Você pode postar um exemplo com uma amostra de dados (2 casos, um com null na PrevisaoConclusao e um sem null, somente colunas relevantes) das tabelas ItensPed e OpItens, e o respectivo resultado esperado?
GOSTEI 0
Bruno
24/08/2020
Itensped serve para ligar a opitens, para depois ligar com as outras tabelas,pois nela tem o número do pedido para ligar com outras tabelas e o item para ligar com a opitens.
Exemplo 1:
A PrevisaoConclusao da última programação é null para o item UZ200-VM, antes tem as últimas datas que foram colocadas. Até a mais antiga de 2014 por exemplo que é null também e no meio tem umas datas com previsao de conclusão. No item UZ230-VEM a última data que está em programação tem data de previsao. As datas antigas que não estão em programação não podem ser puxadas. O que ajuda é opi.quantidade>opi.coletada para não pegar as datas que já foram coletadas.
No Exemplo 1:
UZ200-VM
DataBase PrevisaoConclusao
20/06/2014 null
26/08/2018 02/09/2018
30/08/2020 null
UZ230-VEM
20/07/2014 null
27/08/2019 null
31/08/2020 05/09/2020
No exemplo 1: deve pegar a data null, pois o item UZ200-VM tem a data PrevisaoConclusao que está em programação = null.
Exemplo 2:
Exemplo 1:
UZ240-VM
DataBase PrevisaoConclusao
20/06/2014 null
26/08/2018 02/09/2018
30/08/2020 03/09/2020
UZ270-VEM
20/07/2014 null
27/08/2019 null
31/08/2020 05/09/2020
No exemplo 2: deve pegar a data 05/09/2020, pois o item UZ270-VEM tem a maior data de PrevisaoConclusao que está em programação. Que é igual a 05/09/2020.
Obrigado desde já !
Exemplo 1:
A PrevisaoConclusao da última programação é null para o item UZ200-VM, antes tem as últimas datas que foram colocadas. Até a mais antiga de 2014 por exemplo que é null também e no meio tem umas datas com previsao de conclusão. No item UZ230-VEM a última data que está em programação tem data de previsao. As datas antigas que não estão em programação não podem ser puxadas. O que ajuda é opi.quantidade>opi.coletada para não pegar as datas que já foram coletadas.
No Exemplo 1:
UZ200-VM
DataBase PrevisaoConclusao
20/06/2014 null
26/08/2018 02/09/2018
30/08/2020 null
UZ230-VEM
20/07/2014 null
27/08/2019 null
31/08/2020 05/09/2020
No exemplo 1: deve pegar a data null, pois o item UZ200-VM tem a data PrevisaoConclusao que está em programação = null.
Exemplo 2:
Exemplo 1:
UZ240-VM
DataBase PrevisaoConclusao
20/06/2014 null
26/08/2018 02/09/2018
30/08/2020 03/09/2020
UZ270-VEM
20/07/2014 null
27/08/2019 null
31/08/2020 05/09/2020
No exemplo 2: deve pegar a data 05/09/2020, pois o item UZ270-VEM tem a maior data de PrevisaoConclusao que está em programação. Que é igual a 05/09/2020.
Obrigado desde já !
GOSTEI 0
Imex
24/08/2020
Não consegui entender a estrutura das tabelas ItensPed e OpItens. Acho que vai facilitar se você postar um exemplo com as colunas relevantes dessas tabelas separadamente, alguns valores e o respectivo resultado esperado.
Uma dúvida que tenho por exemplo é como você consegue identificar quais são os itens de um determinado pedido?
Nesse exemplo que você postou agora você acrescentou essa coluna Database e também citou esse critério das datas coletadas mas não consegui entender como direito o funcionamento.
Uma dúvida que tenho por exemplo é como você consegue identificar quais são os itens de um determinado pedido?
Nesse exemplo que você postou agora você acrescentou essa coluna Database e também citou esse critério das datas coletadas mas não consegui entender como direito o funcionamento.
GOSTEI 0
Bruno
24/08/2020
Na itensped me mostra os itens do pedido.
Por exemplo:
pedido numero 2789183
Possui os itens 054345 e 054459
Na opitens são os itens que estiveram em produção e os que estão em produção.
Por exemplo:
Uz200-vm
Data base(data que foi colocada em produção) exemplo:02/09/2020(a última vez que o item foi colocado em produção)
A previsão para concluir é 07/09/2020 que no caso é a coluna PrevisaoConclusao.
Na opitens aparece as datas bases antigas também.
Por Exemplo:
Uz200-vm
Data base
Exemplo:04/08/2018 com previsão null.
Para diferenciar as novas das antigas pode ser usado as colunas quantidade > coletada .
Exemplo: data base(05/08/2018)
quantidade =70 coletada = 70
Data base 02/09/2020
Quantidade = 80 coletada = 0
Vamos ao exemplo:
Pedido 289765:
Itensped:
Uz100-vm
Uz200-vm
Uz300-vem
Opitens
Item DataBase. PrevisaoConclusao
Uz100-vm. 02/08/2018. Null
Uz100-vm. 02/09/2020. 07/09/2020 em produ
Uz200-vm. 02/07/217. Null
Uz200-vm. 02/09/2020. 08/09/2020. Em produ
Uz300-vem. 07/10/2014. Null
Uz300-vem 02/09/2020. Null. Em producao
Então deve trazer null , pois o item uz300-vem
Que está em produção está null, as datas antigas deve-se desconsiderar como explicado para quantidade > coletada significando que não está em produção.
Se todas datas previsão conclusão estiver com uma data então deve pegar a maior data de um dos três itens.
Por exemplo:
pedido numero 2789183
Possui os itens 054345 e 054459
Na opitens são os itens que estiveram em produção e os que estão em produção.
Por exemplo:
Uz200-vm
Data base(data que foi colocada em produção) exemplo:02/09/2020(a última vez que o item foi colocado em produção)
A previsão para concluir é 07/09/2020 que no caso é a coluna PrevisaoConclusao.
Na opitens aparece as datas bases antigas também.
Por Exemplo:
Uz200-vm
Data base
Exemplo:04/08/2018 com previsão null.
Para diferenciar as novas das antigas pode ser usado as colunas quantidade > coletada .
Exemplo: data base(05/08/2018)
quantidade =70 coletada = 70
Data base 02/09/2020
Quantidade = 80 coletada = 0
Vamos ao exemplo:
Pedido 289765:
Itensped:
Uz100-vm
Uz200-vm
Uz300-vem
Opitens
Item DataBase. PrevisaoConclusao
Uz100-vm. 02/08/2018. Null
Uz100-vm. 02/09/2020. 07/09/2020 em produ
Uz200-vm. 02/07/217. Null
Uz200-vm. 02/09/2020. 08/09/2020. Em produ
Uz300-vem. 07/10/2014. Null
Uz300-vem 02/09/2020. Null. Em producao
Então deve trazer null , pois o item uz300-vem
Que está em produção está null, as datas antigas deve-se desconsiderar como explicado para quantidade > coletada significando que não está em produção.
Se todas datas previsão conclusão estiver com uma data então deve pegar a maior data de um dos três itens.
GOSTEI 0
Emerson Nascimento
24/08/2020
nessa Opitens deveria ter o número do pedido.
se a produção foi solicitada por um pedido, preenche o campo.
se a procução foi solicitada para compor o estoque, o campo do pedido fica em branco.
se não fizer isso não tem como fazer o link entre a produção e a venda.
se a produção foi solicitada por um pedido, preenche o campo.
se a procução foi solicitada para compor o estoque, o campo do pedido fica em branco.
se não fizer isso não tem como fazer o link entre a produção e a venda.
GOSTEI 0
Bruno
24/08/2020
Problema que esta opitens serve para produzir o item para qualquer pedido que necessite do item ,não em específico para aquele pedido.
GOSTEI 0
Imex
24/08/2020
Pode existir mais de um pedido para o mesmo item e da mesma empresa?
Se pode, acho que o resultado pode não ser exato para um determinado pedido.
Se pode, acho que o resultado pode não ser exato para um determinado pedido.
GOSTEI 0
Bruno
24/08/2020
Pse aí mora outro problema ,mas queria resolver esse pra depois ver o próximo que teria que olhar o saldo
GOSTEI 0
Emerson Nascimento
24/08/2020
se "coletada" serve como filtro, tente algo assim:
select it.Empresa ,it.Item ,max(case when opi2.Item is null then opi.PrevisaoConclusao else null end) as PrevisaoConclusao into #tempOpitens -- retire para testar a query from itensped it left join opitens opi on opi.Empresa = it.Empresa and opi.item = it.Item and opi.Coletada < opi.Quantidade and not (opi.PrevisaoConclusao is null) left join opitens opi2 on opi2.Empresa = it.Empresa and opi2.Item = it.Item and opi2.Coletada < opi2.Quantidade and opi2.PrevisaoConclusao is null --where it.Numero in (2787617, 2787388) group by it.Empresa, it.Item
GOSTEI 0
Bruno
24/08/2020
select
it.Empresa
,max(case when opi2.Item is null then opi.PrevisaoConclusao else null end) as PrevisaoConclusao
,it.Numero
from
itensped it
left join
opitens opi on
opi.Empresa = it.Empresa and
opi.item = it.Item and
opi.Coletada < opi.Quantidade and
not (opi.PrevisaoConclusao is null)
left join
opitens opi2 on
opi2.Empresa = it.Empresa and
opi2.Item = it.Item and
opi2.Coletada < opi2.Quantidade and
opi2.PrevisaoConclusao is null
where it.Numero in (2788986, 2787440)
group by
it.Empresa, it.Numero
Fiz pelo número e deveria me trazer null pois tem datas null, mas por item está trazendo correto
it.Empresa
,max(case when opi2.Item is null then opi.PrevisaoConclusao else null end) as PrevisaoConclusao
,it.Numero
from
itensped it
left join
opitens opi on
opi.Empresa = it.Empresa and
opi.item = it.Item and
opi.Coletada < opi.Quantidade and
not (opi.PrevisaoConclusao is null)
left join
opitens opi2 on
opi2.Empresa = it.Empresa and
opi2.Item = it.Item and
opi2.Coletada < opi2.Quantidade and
opi2.PrevisaoConclusao is null
where it.Numero in (2788986, 2787440)
group by
it.Empresa, it.Numero
Fiz pelo número e deveria me trazer null pois tem datas null, mas por item está trazendo correto
GOSTEI 0
Emerson Nascimento
24/08/2020
não tem como fazer por número se você não tem o numero na opitens (e isto é uma falha).
GOSTEI 0
Bruno
24/08/2020
A opitens são apenas os itens em produção, depois que são direcionadas para os pedidos, pois não terá sempre uma ordem lógica de pedidos, pode alterar a ordem
GOSTEI 0