/*
库房管理物料库位分页查询脚本（测试库 ERPTOOL_JY_20250826Back）
修改人:Ld 修改时间:2026-07-31 13:05:48;
说明：新增独立分页查询过程供库房管理新页面“物料综合查询/物料找库位/库位找物料”使用，不修改原仓储管理过程。
*/

SET NOCOUNT ON;
GO

IF OBJECT_ID(N'dbo.仓储管理_物料库位_分页查询_库房管理', N'P') IS NOT NULL
    DROP PROCEDURE dbo.仓储管理_物料库位_分页查询_库房管理;
GO

CREATE PROCEDURE dbo.仓储管理_物料库位_分页查询_库房管理
    @查询方向 NVARCHAR(20) = N'综合',
    @关键字 NVARCHAR(50) = NULL,
    @关键字_check BIT = 0,
    @库房名称 NVARCHAR(50) = NULL,
    @库房名称_check BIT = 0,
    @PageCurrent INT = NULL,
    @PageSize INT = NULL,
    @PageCount INT = NULL OUTPUT,
    @ItemCount INT = NULL OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @tbname NVARCHAR(MAX);
    DECLARE @fieldkey NVARCHAR(1000);
    DECLARE @where NVARCHAR(MAX);
    DECLARE @fieldshow NVARCHAR(MAX);
    DECLARE @fieldOrder NVARCHAR(1000);
    DECLARE @keyword NVARCHAR(100);
    DECLARE @warehouse NVARCHAR(100);

    SET @keyword = REPLACE(ISNULL(@关键字, N''), N'''', N'''''');
    SET @warehouse = REPLACE(ISNULL(@库房名称, N''), N'''', N'''''');
    SET @PageCurrent = ISNULL(NULLIF(@PageCurrent, 0), 1);
    SET @PageSize = ISNULL(NULLIF(@PageSize, 0), 20);

    SET @tbname = N'(
        SELECT
            ROW_NUMBER() OVER (ORDER BY ISNULL(A.货位名称, N''''), ISNULL(A.物料编码, N''''), A.物料与货位流水号) AS 分页流水号,
            A.物料名称 AS 名称,
            A.图号或型号 AS 代号,
            A.物料编码,
            A.物料名称,
            A.图号或型号,
            A.类型,
            A.单位,
            A.库存,
            A.库存 AS 库存数量,
            A.货位名称,
            A.货位名称 AS 库位,
            A.物料与货位流水号,
            ISNULL(m.物料流水号, 0) AS 物料流水号,
            A.货位流水号,
            A.货位流水号 AS 库位流水号,
            A.批次编号,
            A.编辑人,
            A.编辑时间,
            ISNULL(k.库房名称,
                CASE
                    WHEN A.货位名称 LIKE N''%毛坯%'' THEN N''一楼毛坯库''
                    WHEN A.货位名称 LIKE N''%耗材%'' THEN N''耗材库''
                    WHEN A.货位名称 LIKE N''[A-Za-z][0-9]%-[0-9]%'' AND A.货位名称 NOT LIKE N''%-%-%'' THEN N''二楼隔层仓库''
                    WHEN A.货位名称 LIKE N''[0-9][0-9]-[0-9][0-9]-[0-9][0-9]'' THEN N''立库仓库''
                    WHEN A.货位名称 LIKE N''[0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]'' THEN N''三楼仓库''
                    ELSE N''库房A区''
                END) AS 库房名称,
            ISNULL(q.库区名称,
                CASE
                    WHEN A.货位名称 LIKE N''%毛坯%'' THEN N''一楼毛坯库区''
                    WHEN A.货位名称 LIKE N''%耗材%'' THEN N''耗材库区''
                    WHEN A.货位名称 LIKE N''[A-Za-z][0-9]%-[0-9]%'' AND A.货位名称 NOT LIKE N''%-%-%'' THEN N''二楼隔层库区''
                    WHEN A.货位名称 LIKE N''[0-9][0-9]-[0-9][0-9]-[0-9][0-9]'' THEN N''立库库区''
                    WHEN A.货位名称 LIKE N''[0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]'' THEN N''三楼可视化库区''
                    ELSE N''标准库位区''
                END) AS 库区名称,
            CASE WHEN ISNULL(A.库存, 0) > 0 THEN N''有库存'' ELSE N'''' END AS 库存状态
        FROM dbo.外购件库存_视图 A
        LEFT JOIN dbo.库存管理_货位主文件 h ON A.货位流水号 = h.货位流水号
        LEFT JOIN dbo.库存管理_物料主文件_基本 m ON A.物料编码 = m.物料编码
        LEFT JOIN dbo.库房管理_库房主文件 k ON h.库房流水号 = k.库房流水号
        LEFT JOIN dbo.库房管理_库区主文件 q ON h.库区流水号 = q.库区流水号
        WHERE ((ISNULL(A.批次编号, N'''') <> N'''' AND ISNULL(A.库存, 0) > 0) OR ISNULL(A.批次编号, N'''') = N'''')
    ) AS T';
    SET @fieldkey = N'分页流水号';
    SET @fieldOrder = N'库位 ASC, 物料编码 ASC, 物料与货位流水号 ASC';
    SET @fieldshow = N'名称,代号,物料编码,物料名称,图号或型号,类型,单位,库存,库存数量,货位名称,库位,物料与货位流水号,物料流水号,货位流水号,库位流水号,批次编号,编辑人,编辑时间,库房名称,库区名称,库存状态';
    SET @where = N'1 = 1';

    IF @关键字_check = 1 AND @keyword <> N''
    BEGIN
        IF @查询方向 = N'逆向'
            SET @where = @where + N' AND (库位 LIKE N''%' + @keyword + N'%'' OR 货位名称 LIKE N''%' + @keyword + N'%'')';
        ELSE IF @查询方向 = N'正向'
            SET @where = @where + N' AND (名称 LIKE N''%' + @keyword + N'%'' OR 代号 LIKE N''%' + @keyword + N'%'' OR 物料名称 LIKE N''%' + @keyword + N'%'' OR 图号或型号 LIKE N''%' + @keyword + N'%'' OR 物料编码 LIKE N''%' + @keyword + N'%'')';
        ELSE
            SET @where = @where + N' AND (名称 LIKE N''%' + @keyword + N'%'' OR 代号 LIKE N''%' + @keyword + N'%'' OR 物料名称 LIKE N''%' + @keyword + N'%'' OR 图号或型号 LIKE N''%' + @keyword + N'%'' OR 物料编码 LIKE N''%' + @keyword + N'%'' OR 库位 LIKE N''%' + @keyword + N'%'' OR 货位名称 LIKE N''%' + @keyword + N'%'')';
    END

    IF @库房名称_check = 1 AND @warehouse <> N''
        SET @where = @where + N' AND 库房名称 = N''' + @warehouse + N'''';

    EXEC dbo.sp_xt_pagesplit2
        @tbname,
        @fieldkey,
        @where,
        @fieldshow,
        @fieldOrder,
        @PageCurrent,
        @PageSize,
        @PageCount OUTPUT,
        @ItemCount OUTPUT;
END
GO
