USE [ERPTOOL_JY]
GO

-- 库存查询采购中排除已入库数据；修改人:Ld 修改时间:2026-07-23 16:39:41;
ALTER PROCEDURE [dbo].[仓储管理_库存查询_查询]
@物料名称_check bit = null,
@物料名称 nvarchar(50) = null,
@物料编码_check bit = null,
@物料编码 nvarchar(50) = null,
@图号_check bit = null,
@图号 nvarchar(50) = null,
@类型_check bit = null,
@类型 nvarchar(50) = null,
@库位_check bit = null,
@库位 nvarchar(50) = null,
@排序名称 int = null,
@排序方式 int = null
 AS

declare @selectStr nvarchar(4000)
declare @selectStrWhere nvarchar(4000)
--(select 车间生产管理_零件工艺计划_视图.物料流水号,isnull(SUM(数量) - SUM(车间生产管理_零件工艺计划_视图.入库数量) - SUM(P.报废数量),0) as 加工中 from 车间生产管理_零件工艺计划_视图 inner join (select 工艺计划流水号,工序流水号 from dbo.车间生产管理工艺_零件工序 where dbo.车间生产管理工艺_零件工序.工序顺序 = 1) as n
-- 这是改动前
set @selectStr =
'Select 仓储管理_累计库存查询_视图.*,批次,isnull(需求量,0) as 需求量,毛坯库存,isnull(加工中,0) as 加工中,isnull(采购中,0) as 采购中,isnull(补货毛坯,0) as 补货毛坯 from 仓储管理_累计库存查询_视图 
left join 
(select count(*) as 批次,物料流水号 from 库存管理_物料与货位对照表 where 货位存量 > 0  group by 物料流水号) 
as a on 仓储管理_累计库存查询_视图.物料流水号 = a.物料流水号 LEFT JOIN dbo.物料管理_需求量_视图 ON a.物料流水号 = dbo.物料管理_需求量_视图.物料流水号
left join 
(select 车间生产管理_零件工艺计划_视图.物料流水号,isnull(SUM(数量) - SUM(车间生产管理_零件工艺计划_视图.入库数量) - ISNULL(SUM(P.报废数量),0),0) as 加工中 from 车间生产管理_零件工艺计划_视图 inner join (select 工艺计划流水号,工序流水号 from dbo.车间生产管理工艺_零件工序 where dbo.车间生产管理工艺_零件工序.工序顺序 = 1) as n
on 车间生产管理_零件工艺计划_视图.工艺计划流水号 = n.工艺计划流水号 inner join
(select SUM(ISNULL(已领数量,0)) as 数量,工序流水号 from 车间生产管理工艺_零件工序_任务分配 group by 工序流水号) as m on n.工序流水号 = m.工序流水号 left join

(select sum(报废数量) as 报废数量,工艺计划流水号 from 车间生产管理工艺_零件工艺计划_报废零件记录 group by 工艺计划流水号) as P on 车间生产管理_零件工艺计划_视图.工艺计划流水号 = P.工艺计划流水号 where 车间生产管理_零件工艺计划_视图.是否提交 < 5 and 车间生产管理_零件工艺计划_视图.考核状态 < 3
group by 物料流水号) 
as D on 仓储管理_累计库存查询_视图.物料流水号 = D.物料流水号
left join 
(select sum(isnull(采购数,0)-isnull(到货数,0)) as 采购中,物料流水号 from 采购管理_采购合同明细_全部_查询视图 where 是否滑台 <> 1 and 是否滑台 <> 2 and 已删 = 0 and 采购状态 <> ''已到'' and 采购状态 <> ''已入库''
GROUP BY 物料流水号) 
as T on 仓储管理_累计库存查询_视图.物料流水号 = T.物料流水号
left join 
(select isnull(sum(isnull(累计库存,0)),0) as 毛坯库存,库存管理_物料主文件_基本.代号,库存管理_物料主文件_基本.名称 from 库存管理_物料主文件_基本
 left join 库存管理_外购件累计库存 on 库存管理_物料主文件_基本.物料流水号 = 库存管理_外购件累计库存.物料流水号 where 库存管理_物料主文件_基本.是否禁用 = 0 group by 库存管理_物料主文件_基本.代号,库存管理_物料主文件_基本.名称) as C on 仓储管理_累计库存查询_视图.图号或型号 + ''MP'' = C.代号  AND 仓储管理_累计库存查询_视图.物料名称 + ''MP'' = C.名称
 left join 
(SELECT     dbo.库存管理_物料主文件_基本.名称, dbo.库存管理_物料主文件_基本.代号, isnull(SUM(dbo.采购管理_采购合同明细.数量 - dbo.采购管理_采购合同明细.已到货数量),0) AS 补货毛坯
FROM         dbo.采购管理_采购合同明细 INNER JOIN
                      dbo.PDM_零件明细表_标准件和外购件 ON dbo.采购管理_采购合同明细.标准件和外购件流水号 = dbo.PDM_零件明细表_标准件和外购件.标准件和外购件流水号 INNER JOIN
                      dbo.库存管理_物料主文件_基本 ON dbo.PDM_零件明细表_标准件和外购件.物料流水号 = dbo.库存管理_物料主文件_基本.物料流水号
GROUP BY dbo.库存管理_物料主文件_基本.名称, dbo.库存管理_物料主文件_基本.代号) as E on 仓储管理_累计库存查询_视图.图号或型号 + ''MP'' = E.代号  AND 仓储管理_累计库存查询_视图.物料名称 + ''MP'' = E.名称  '

set @selectStrWhere = 'where 1 = 1 '

--2024-04-29改动备注：isnull(SUM(数量 - 车间生产管理_零件工艺计划_视图.入库数量 - P.报废数量),0)  as 加工中
--isnull(SUM(数量) - SUM(车间生产管理_零件工艺计划_视图.入库数量) - SUM(P.报废数量),0) as 加工中
if(@物料名称_check = 1)
	set @selectStrWhere = @selectStrWhere+' and isnull(物料名称,'''') like + ''%'' + @物料名称 + ''%''  '
if(@物料编码_check = 1)
	set @selectStrWhere = @selectStrWhere+' and isnull(物料编码,'''') like + ''%'' + @物料编码 + ''%''  '
if(@图号_check = 1)
	set @selectStrWhere = @selectStrWhere+' and isnull(图号或型号,'''') like + ''%'' + @图号 + ''%''  '
if(@类型_check = 1)
	set @selectStrWhere = @selectStrWhere+' and 类型 = @类型  '
if(@库位_check = 1)
	set @selectStrWhere = @selectStrWhere+' and isnull(货位名称,'''') like + ''%'' + @库位 + ''%'' '


if @排序名称 = 1
	begin
	  if @排序方式 = 1 
			begin
				set @selectStr = @selectStr+@selectStrWhere+'order by 物料编码 DESC'
			end
		else
			begin
				set @selectStr = @selectStr+@selectStrWhere+'order by 物料编码 ASC'
			end
	end
else if @排序名称 = 2
	begin
	  if @排序方式 = 1 
			begin
				set @selectStr = @selectStr+@selectStrWhere+'order by 物料名称 DESC'
			end
		else
			begin
				set @selectStr = @selectStr+@selectStrWhere+'order by 物料名称 ASC'
			end
	end
else if @排序名称 = 3
	begin
	  if @排序方式 = 1 
			begin
				set @selectStr = @selectStr+@selectStrWhere+'order by 货位名称 DESC'
			end
		else
			begin
				set @selectStr = @selectStr+@selectStrWhere+'order by 货位名称 ASC'
			end
	end
else if @排序名称 = 4
	begin
	  if @排序方式 = 1 
			begin
				set @selectStr = @selectStr+@selectStrWhere+'order by 库存 DESC'
			end
		else
			begin
				set @selectStr = @selectStr+@selectStrWhere+'order by 库存 ASC'
			end
	end
else if @排序名称 = 5
	begin
	  if @排序方式 = 1 
			begin
				set @selectStr = @selectStr+@selectStrWhere+'order by 最低库存 DESC'
			end
		else
			begin
				set @selectStr = @selectStr+@selectStrWhere+'order by 最低库存 ASC'
			end
	end
else
	begin
		 set @selectStr = @selectStr+@selectStrWhere
	end
print @selectStr
EXEC sp_executesql @selectStr,N'@物料名称 nvarchar(50),@物料编码 nvarchar(50), @图号 nvarchar(50),@类型 nvarchar(50),@库位 nvarchar(50)',
@物料名称,@物料编码,@图号,@类型,@库位
GO
