This commit is contained in:
PastSaid
2024-03-11 14:47:23 +08:00
parent 6dd1816c96
commit 08d8878eef
202 changed files with 274 additions and 246 deletions

View File

@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D0FC5BEC-2362-48BD-90A5-EDE6BA3D3073}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Enpower.PRD_MO</RootNamespace>
<AssemblyName>Enpower.PRD_MO</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="SQLserver\PLAN2.sql" />
<Content Include="SQLserver\更新计划订单_预测单信息_存储过程.sql" />
<Content Include="SQLserver\更新计划订单_预测单信息_存储过程_20240120.sql" />
<Content Include="SQLserver\查询生产层号为空的生产用料清单202402261540.sql" />
<Content Include="SQLserver\查询语句.sql" />
<Content Include="SQLserver\生产订单BOM.sql" />
<Content Include="SQLserver\生产订单BOM_创建临时表.sql" />
<Content Include="SQLserver\生产订单BOM_查询.sql" />
<Content Include="SQLserver\生产订单BOM_选中订单_更新层号_存储过程20240115.sql" />
<Content Include="SQLserver\生产订单BOM更新层号_存储过程20240114.sql" />
<Content Include="SQLserver\统计需要更新的数据.sql" />
<Content Include="SQLserver\英博尔测试20240220.sql" />
<Content Include="SQLserver\计划订单更新预测单信息新sql.sql" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("Enpower.PRD_MO")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Enpower.PRD_MO")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("4593b258-853f-42e5-8805-64d5a0da08a3")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,222 @@
USE [AIS202401040030]
GO
/****** Object: StoredProcedure [dbo].[P_UpdatePlan2] Script Date: 2024-01-17 17:38:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <20><><EFBFBD><EFBFBD><Author,,Name>
-- Create date: 2023-05-23<Create Date,,>
-- Description: <20><><EFBFBD>¼ƻ<C2BC><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[P_UpdatePlan2]
(
@FBILLNO NVARCHAR(1000)
)
AS
BEGIN
DECLARE @RC int
SET @RC = 1;
WHILE(@RC >0)
BEGIN
EXEC @RC = PROC_UPDATE_PLAN_BY_PAGE
END
--SET NOCOUNT ON;
--SELECT
-- A.FBILLNO AS '<27>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
-- ,A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as '<27>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD>к<EFBFBD>'
-- ,A.F_Source_order_number as '<27>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
-- ,A.F_FORECASTNUMBER as '<27>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><E2B5A5><EFBFBD><EFBFBD>'
-- ,A.F_Linenumber as '<27>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>к<EFBFBD>'
-- ,E.FBILLNO AS 'Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD>'
-- ,D.FSEQ,D.F_Source_order_number as 'Ԥ<><EFBFBD><E2B5A5><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
-- ,D.F_SOURCE_ORDER_LINE_NUMBER as 'Ԥ<><EFBFBD><E2B5A5><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD>к<EFBFBD>'
--INTO #TEMP1
--FROM T_PLN_PLANORDER A
--INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
--INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
--INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
--INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
----inner join #temp2 f on f.fname = a.FBILLNO
--WHERE A.F_FORECASTNUMBER=''
----AND A.FBILLNO = @FBILLNO
----where A.FBILLNO = 'MRP00260726'
----WHERE A.F_SOURCE_ORDER_LINE_NUMBER = ''
-- SELECT
--<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
--'Ԥ<EFBFBD><EFBFBD>к<EFBFBD>'=ISNULL( stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where <20>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=t.<2E>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> and Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> =t.Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> for xml path('')),1,1,''),''),
--'<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) from #TEMP1 where Ԥ<><EFBFBD><E2B5A5><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>'' and <20>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=t.<2E>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> and Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> =t.Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> for xml path('')),1,1,''),''),
--'<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>) from #TEMP1 where Ԥ<><EFBFBD><E2B5A5><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD>к<EFBFBD><>'' and <20>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=t.<2E>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> and Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> =t.Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> for xml path('')),1,1,''),'')
--into #temp3
-- FROM #TEMP1 t
-- GROUP BY <20>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><E2B5A5><EFBFBD><EFBFBD>
-- UPDATE T_PLN_PLANORDER SET F_FORECASTNUMBER=B.Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD>, F_Linenumber=B.Ԥ<><EFBFBD>к<EFBFBD>, F_SOURCE_ORDER_LINE_NUMBER=b.<2E><><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD>к<EFBFBD>, F_SOURCE_ORDER_NUMBER=b.<2E><><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
--FROM T_PLN_PLANORDER A
--inner join #temp3 B
--ON A.FBILLNO=B.<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
----inner join #temp2 f on f.fname = a.FBILLNO
--DROP TABLE #TEMP1
--DROP TABLE #temp3
--UPDATE A SET A.F_CUSTOMERNAME=D.FCUSTID,A.F_MATERIALCODE=D.FMATERIALID
--from T_PLN_PLANORDER A
--INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
--INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
--INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
--INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
----inner join #temp2 f on f.fname = a.FBILLNO
----where (a.F_CUSTOMERNAME=0 or a.F_MATERIALCODE=0 )
----AND A.FBILLNO = @FBILLNO
--update a set F_CUSTOMERNAME=d.FCUSTID,F_MATERIALCODE=d.FMATERIALID,F_FORECASTNUMBER=c.FBILLNO,F_Linenumber=d.FSEQ,F_SOURCE_ORDER_LINE_NUMBER=d.F_SOURCE_ORDER_LINE_NUMBER,F_Source_order_number=d.F_Source_order_number
--FROM T_PLN_PLANORDER A
--INNER JOIN T_PLN_PLANORDER_B B ON A.FID=B.FID
--INNER JOIN T_PLN_FORECAST C ON C .FBILLNO = B.FSALEORDERNO
--INNER JOIN T_PLN_FORECASTENTRY D ON D .FID= C.FID AND D.FSEQ=B.FSALEORDERENTRYSEQ
----INNER JOIN #temp2 e ON A.FBILLNO = e.Fname
----WHERE A.FBILLNO = 'MRP00640407'
----UPDATE A SET A.F_Remark=ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
----from T_PLN_PLANORDER A
----INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
----INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
----INNER JOIN T_PLN_FORECASTENTRY D on D.FID=B.FID AND D.FSEQ=A.F_Linenumber
----where ( a.F_Remark='' )
--UPDATE E SET F_DESCRIPTION=ISNULL(C.FDESCRIPTION ,'' )
--from T_PLN_PLANORDER A
--INNER JOIN T_PLN_PLANORDER_L E ON E.FID=A.FID
--INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
--INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
----inner join #temp2 f on f.fname = a.FBILLNO
----where ( e.F_DESCRIPTION='' )
----AND A.FBILLNO = @FBILLNO
--UPDATE T_PLN_PLANORDER SET F_Remark=
-- ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
--from T_PLN_PLANORDER A
----inner join #temp2 f on f.fname = a.FBILLNO
--where
--1=1
----and ( a.F_Remark='' )
--AND CONVERT(nvarchar(100), a.FCREATEDATE,23) = CONVERT(nvarchar(100), GETDATE(),23)
----AND A.FBILLNO = @FBILLNO
----UPDATE T_PLN_PLANORDER SET F_WAUG_LAYER =
----CASE WHEN B.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> IS NULL THEN <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ELSE CONCAT(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,'-',<EFBFBD><EFBFBD><EFBFBD><EFBFBD>) END
---- from T_PLN_PLANORDER A
---- inner join
----(
----select A.FID, dbo.GetBomSeq( B .FBOMID,a.FMATERIALID) as '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>', A.FMATERIALID,B.FBOMID,A.f_WAUG_LAYER,A.F_FORECASTNUMBER,A.F_LINENUMBER,
----A.F_MATERIALCODE,a.FBILLNO as '1',b.FBILLNO as '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' from T_PLN_PLANORDER A
----INNER JOIN T_PLN_PLANORDER B ON A.F_FORECASTNUMBER=B.F_FORECASTNUMBER AND A.F_LINENUMBER=B.F_LINENUMBER AND A.F_MATERIALCODE =B.FMATERIALID
----INNER JOIN #temp2 C ON C.Fname=A.FBILLNO
------WHERE a.F_WAUG_LAYER = ''
----) B ON A.FID = B.FID
----DROP TABLE #temp2
------select a.FBILLNO AS '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>',A.F_Source_order_number as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
------, A.F_FORECASTNUMBER as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>', A.F_Linenumber as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>к<EFBFBD>',
------E.FBILLNO AS 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',D.FSEQ,D.F_Source_order_number as 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',D.F_SOURCE_ORDER_LINE_NUMBER as 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>'
------INTO #TEMP1
------from T_PLN_PLANORDER A
------INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
------INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
------INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
------INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
------WHERE A.F_FORECASTNUMBER=''
------AND A.FBILLNO = @FBILLNO
--------where A.FBILLNO = 'MRP00260726'
--------WHERE A.F_SOURCE_ORDER_LINE_NUMBER = ''
------ --select * from #TEMP1
--------
------UPDATE A SET A.F_FORECASTNUMBER=B.Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD>,A.F_Linenumber=B.Ԥ<><EFBFBD>к<EFBFBD>,a.F_SOURCE_ORDER_LINE_NUMBER=b.<2E><><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD>к<EFBFBD>,a.F_SOURCE_ORDER_NUMBER=b.<2E><><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
------FROM T_PLN_PLANORDER A
------inner join
------(
------SELECT
------<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
------'Ԥ<EFBFBD><EFBFBD>к<EFBFBD>'=ISNULL( stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where <20>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=t.<2E>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> and Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> =t.Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> for xml path('')),1,1,''),''),
------'<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) from #TEMP1 where Ԥ<><EFBFBD><E2B5A5><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>'' and <20>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=t.<2E>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> and Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> =t.Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> for xml path('')),1,1,''),''),
------'<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>'=ISNULL( stuff((select distinct ','+CONVERT(nvarchar(100), Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>) from #TEMP1 where Ԥ<><EFBFBD><E2B5A5><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD>к<EFBFBD><>'' and <20>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=t.<2E>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> and Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> =t.Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> for xml path('')),1,1,''),'')
------ FROM #TEMP1 t
------ GROUP BY <20>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><E2B5A5><EFBFBD><EFBFBD>
------) B
------ON A.FBILLNO=B.<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
------WHERE A.F_FORECASTNUMBER=''
------AND A.FBILLNO = @FBILLNO
------DROP TABLE #TEMP1
----UPDATE A SET A.F_CUSTOMERNAME=D.FCUSTID,A.F_MATERIALCODE=D.FMATERIALID
----from T_PLN_PLANORDER A
----INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
----INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
----INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
----INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
----where (a.F_CUSTOMERNAME=0 or a.F_MATERIALCODE=0 )
----AND A.FBILLNO = @FBILLNO
------UPDATE A SET A.F_Remark=ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
------from T_PLN_PLANORDER A
------INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
------INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
------INNER JOIN T_PLN_FORECASTENTRY D on D.FID=B.FID AND D.FSEQ=A.F_Linenumber
------where ( a.F_Remark='' )
----UPDATE E SET F_DESCRIPTION=ISNULL(C.FDESCRIPTION ,'' )
----from T_PLN_PLANORDER A
----INNER JOIN T_PLN_PLANORDER_L E ON E.FID=A.FID
----INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
----INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
----where ( e.F_DESCRIPTION='' )
----AND A.FBILLNO = @FBILLNO
----UPDATE T_PLN_PLANORDER SET F_Remark=
---- ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
----from T_PLN_PLANORDER A
----where
----1=1
----and ( a.F_Remark='' )
----AND CONVERT(nvarchar(100), a.FCREATEDATE,23) = CONVERT(nvarchar(100), GETDATE(),23)
----AND A.FBILLNO = @FBILLNO
END

View File

@@ -0,0 +1,148 @@
IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_UPDATE_PLAN_BY_PAGE')
DROP PROCEDURE dbo.PROC_UPDATE_PLAN_BY_PAGE;
GO
CREATE PROCEDURE PROC_UPDATE_PLAN_BY_PAGE
@ListCount int output
AS
BEGIN
SET NOCOUNT ON;
SET @ListCount = 0;
SELECT
TOP 5000
A.FID
,A.FBILLNO AS '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,A.FSALENOROW,A.F_SOURCE_ORDER_LINE_NUMBER as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>'
,A.F_SOURCE_ORDER_NUMBER as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,A.F_FORECASTNUMBER as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,A.F_Linenumber as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>к<EFBFBD>'
,E.FBILLNO AS 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,D.FSEQ,D.F_SOURCE_ORDER_NUMBER as 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,D.F_SOURCE_ORDER_LINE_NUMBER as 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>'
INTO #TEMP1
FROM T_PLN_PLANORDER A
INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID = C.FSRCENTRYID
INNER JOIN T_PLN_FORECAST E ON E .FID=D.FID
WHERE A.F_FORECASTNUMBER = ''
--AND A.FBILLNO = @FBILLNO
--AND A.FBILLNO = 'MRP00260726'
SELECT FID
INTO #BillNoSet
FROM #TEMP1
GROUP BY FID
CREATE INDEX [#BillNoSet_INDEX_FID] ON #BillNoSet(FID);
SELECT @ListCount = count(1) FROM #BillNoSet
--SELECT @ListCount
IF(@ListCount > 0)
BEGIN
SELECT
--<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
t.FID
,Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,'Ԥ<EFBFBD><EFBFBD>к<EFBFBD>'=ISNULL(stuff((select ','+CONVERT(nvarchar(100), FSEQ) from #TEMP1 where <20>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=t.<2E>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> and Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> = t.Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> for xml path('')),1,1,''),'')
,'<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'=ISNULL(stuff((select distinct ','+CONVERT(nvarchar(100), Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) from #TEMP1 where Ԥ<><EFBFBD><E2B5A5><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>'' and <20>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=t.<2E>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> and Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> =t.Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> for xml path('')),1,1,''),'')
,'<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>'=ISNULL(stuff((select distinct ','+CONVERT(nvarchar(100), Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>) from #TEMP1 where Ԥ<><EFBFBD><E2B5A5><EFBFBD>۶<EFBFBD><DBB6><EFBFBD><EFBFBD>к<EFBFBD><>'' and <20>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=t.<2E>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> and Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> =t.Ԥ<><EFBFBD><E2B5A5><EFBFBD><EFBFBD> for xml path('')),1,1,''),'')
INTO #TEMP3
FROM #TEMP1 t
WHERE t.Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = ''
GROUP BY t.FID,t.Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UPDATE T_PLN_PLANORDER
SET F_FORECASTNUMBER = B.Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
,F_Linenumber = B.Ԥ<EFBFBD><EFBFBD>к<EFBFBD>
,F_SOURCE_ORDER_LINE_NUMBER = b.<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
,F_SOURCE_ORDER_NUMBER = b.<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
FROM
T_PLN_PLANORDER A
INNER JOIN #BillNoSet tt ON tt.FID = A.FID
INNER JOIN #TEMP3 B ON A.FID=B.FID
--inner join #temp2 f on f.fname = a.FBILLNO
--DROP TABLE #TEMP1
DROP TABLE #temp3
UPDATE A SET
A.F_CUSTOMERNAME = D.FCUSTID
,A.F_MATERIALCODE = D.FMATERIALID
from
T_PLN_PLANORDER A
INNER JOIN #BillNoSet tt ON tt.FID = A.FID
INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
INNER JOIN T_PLN_FORECAST e on e.fid=d.FID
--inner join #temp2 f on f.fname = a.FBILLNO
--where (a.F_CUSTOMERNAME=0 or a.F_MATERIALCODE=0 )
--AND A.FBILLNO = @FBILLNO
UPDATE A
SET F_CUSTOMERNAME = D.FCUSTID
,F_MATERIALCODE = D.FMATERIALID
,F_FORECASTNUMBER = C.FBILLNO
,F_LINENUMBER = D.FSEQ
,F_SOURCE_ORDER_LINE_NUMBER = D.F_SOURCE_ORDER_LINE_NUMBER
,F_SOURCE_ORDER_NUMBER = D.F_SOURCE_ORDER_NUMBER
FROM
T_PLN_PLANORDER A
INNER JOIN #BillNoSet tt ON tt.FID = A.FID
INNER JOIN T_PLN_PLANORDER_B B ON A.FID=B.FID
INNER JOIN T_PLN_FORECAST C ON C .FBILLNO = B.FSALEORDERNO
INNER JOIN T_PLN_FORECASTENTRY D ON D .FID= C.FID AND D.FSEQ=B.FSALEORDERENTRYSEQ
--INNER JOIN #temp2 e ON A.FBILLNO = e.Fname
--WHERE A.FBILLNO = 'MRP00640407'
--UPDATE A SET A.F_Remark=ISNULL( dbo.GetForecast(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
--from T_PLN_PLANORDER A
--INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
--INNER JOIN T_PLN_FORECAST_L C ON C.FID=B.FID
--INNER JOIN T_PLN_FORECASTENTRY D on D.FID=B.FID AND D.FSEQ=A.F_Linenumber
--where ( a.F_Remark='' )
UPDATE E SET F_DESCRIPTION = ISNULL(C.FDESCRIPTION ,'' )
from T_PLN_PLANORDER A
INNER JOIN #BillNoSet tt ON tt.FID = A.FID
INNER JOIN T_PLN_PLANORDER_L E ON E.FID=A.FID
INNER JOIN T_PLN_FORECAST B ON B.FBILLNO=A.F_FORECASTNUMBER
INNER JOIN T_PLN_FORECAST_L C ON C.FID = B.FID
--inner join #temp2 f on f.fname = a.FBILLNO
--where ( e.F_DESCRIPTION='' )
--AND A.FBILLNO = @FBILLNO
UPDATE T_PLN_PLANORDER
SET F_REMARK = ISNULL( DBO.GETFORECAST(A.F_FORECASTNUMBER ,A.F_LINENUMBER),'')
FROM T_PLN_PLANORDER A
INNER JOIN #BillNoSet tt ON tt.FID = A.FID
--inner join #temp2 f on f.fname = a.FBILLNO
WHERE 1=1
--and ( a.F_Remark='' )
--AND CONVERT(nvarchar(100),a.FCREATEDATE,23) = CONVERT(nvarchar(100),GETDATE(),23)
AND CONVERT(nvarchar(100),a.FCREATEDATE,23) = CONVERT(nvarchar(100),'2024-01-17',23)
--AND A.FBILLNO = @FBILLNO
--UPDATE T_PLN_PLANORDER SET F_WAUG_LAYER =
--CASE WHEN B.<EFBFBD><EFBFBD><EFBFBD><EFBFBD> IS NULL THEN <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ELSE CONCAT(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,'-',<EFBFBD><EFBFBD><EFBFBD><EFBFBD>) END
-- from T_PLN_PLANORDER A
-- inner join
--(
--select A.FID, dbo.GetBomSeq( B .FBOMID,a.FMATERIALID) as '<EFBFBD><EFBFBD><EFBFBD><EFBFBD>', A.FMATERIALID,B.FBOMID,A.f_WAUG_LAYER,A.F_FORECASTNUMBER,A.F_LINENUMBER,
--A.F_MATERIALCODE,a.FBILLNO as '1',b.FBILLNO as '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' from T_PLN_PLANORDER A
--INNER JOIN T_PLN_PLANORDER B ON A.F_FORECASTNUMBER=B.F_FORECASTNUMBER AND A.F_LINENUMBER=B.F_LINENUMBER AND A.F_MATERIALCODE =B.FMATERIALID
--INNER JOIN #temp2 C ON C.Fname=A.FBILLNO
----WHERE a.F_WAUG_LAYER = ''
--) B ON A.FID = B.FID
--DROP TABLE #temp2
END
DROP TABLE #TEMP1
DROP TABLE #BillNoSet
SET NOCOUNT OFF
END

View File

@@ -0,0 +1,187 @@
IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_UPDATE_PLAN_20240120')
DROP PROCEDURE dbo.PROC_UPDATE_PLAN_20240120;
GO
CREATE PROCEDURE PROC_UPDATE_PLAN_20240120
AS
BEGIN
SELECT
t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0.FBILLNO
,t2.FID 'FORECAST_ID'
,t2e.FENTRYID 'FORECASTENTRY_ID'
,t2.FBILLNO 'F_FORECASTNUMBER'
,t2e.FSEQ 'F_LINENUMBER'
,t2e.FCUSTID 'F_CUSTOMERNAME'
,t2e.FMATERIALID 'F_MATERIALCODE' --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t2e.F_SOURCE_ORDER_LINE_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
,t2e.F_SOURCE_ORDER_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#
,t0.F_REMARK
INTO #TEMP_PLANORDER_ID_LIST
FROM T_PLN_PLANORDER t0
INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0.FID
INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID = t1e.FID
INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FENTRYID = t1.FSRCENTRYID
INNER JOIN T_PLN_FORECAST t2 on t2.fid = t2e.FID
WHERE 1 = 1
AND t0.F_FORECASTNUMBER = ''
--AND CONVERT(nvarchar(100),t0.FCREATEDATE,23) = '2024-01-18'
CREATE INDEX #TEMP_PLANORDER_ID_LIST_INDEX_FID ON #TEMP_PLANORDER_ID_LIST(FID);
SELECT
t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0.FBILLNO
,t0.FORECAST_ID
,t0.FORECASTENTRY_ID
,t0.F_FORECASTNUMBER
,t0.F_LINENUMBER
,t0.F_CUSTOMERNAME
,t0.F_MATERIALCODE --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0.F_SOURCE_ORDER_LINE_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
,t0.F_SOURCE_ORDER_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#
,ISNULL(t1_l.FDESCRIPTION,'') AS F_DESCRIPTION
--,t1_l.FDESCRIPTION F_DESCRIPTION
,ISNULL(t1e_l.FDESCRIPTION,'') AS F_REMARK --<EFBFBD><EFBFBD><EFBFBD>ע
--,t1e_l.FDESCRIPTION F_REMARK
,t2.FNUMBER 'MATERIAL_NUMBER'
,t2_l.FNAME 'MATERIAL_NAME'
,t3.TOTAL
INTO #TEMP_PLANORDER_RESERVELINK
FROM #TEMP_PLANORDER_ID_LIST t0
INNER JOIN (SELECT FID,COUNT(1) TOTAL FROM #TEMP_PLANORDER_ID_LIST GROUP BY FID ) t3 on t3.FID = t0.FID
LEFT JOIN T_PLN_FORECAST_L t1_l on t0.FORECAST_ID = t1_l.FID AND t1_l.FLOCALEID = 2052
LEFT JOIN T_PLN_FORECASTENTRY_L t1e_l on t1e_l.FENTRYID = t0.FORECASTENTRY_ID AND t1e_l.FLOCALEID = 2052
LEFT JOIN T_BD_MATERIAL t2 on t0.F_MATERIALCODE = t2.FMATERIALID
LEFT JOIN T_BD_MATERIAL_L t2_l on t0.F_MATERIALCODE = t2_l.FMATERIALID AND t2_l.FLOCALEID = 2052
WHERE 1=1
--AND t0.F_FORECASTNUMBER = ''
CREATE INDEX #TEMP_PLANORDER_RESERVELINK_INDEX ON #TEMP_PLANORDER_RESERVELINK(FID);
--<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Դ---
UPDATE t0
SET t0.F_FORECASTNUMBER = tt.F_FORECASTNUMBER
,t0.F_LINENUMBER = tt.F_LINENUMBER
,t0.F_CUSTOMERNAME = tt.F_CUSTOMERNAME
,t0.F_MATERIALCODE = tt.F_MATERIALCODE
,t0.F_REMARK = tt.F_REMARK
,t0.F_MATERIALCODESHOW = tt.MATERIAL_NUMBER
,t0.F_MATERIALNAMESHOW = tt.MATERIAL_NAME
FROM T_PLN_PLANORDER t0
INNER JOIN #TEMP_PLANORDER_RESERVELINK tt on t0.FID = tt.FID AND tt.TOTAL = 1
--<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Դ---
UPDATE t0_l
SET t0_l.F_DESCRIPTION = tt.F_DESCRIPTION
FROM T_PLN_PLANORDER_L t0_l
INNER JOIN #TEMP_PLANORDER_RESERVELINK tt on t0_l.FID = tt.FID AND tt.TOTAL = 1
SELECT
t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0.FBILLNO
,t0.FORECAST_ID
,t0.FORECASTENTRY_ID
,t0.F_FORECASTNUMBER
,DENSE_RANK() over(partition BY t0.FID order by t0.FORECAST_ID) 'FORECASTNUMBER_SEQ'
,t0.F_LINENUMBER
,ROW_NUMBER() over(partition BY t0.FID,t0.FORECAST_ID order by t0.F_LINENUMBER) 'LINENUMBER_SEQ'
,t0.F_CUSTOMERNAME
,t0.F_MATERIALCODE --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0.F_SOURCE_ORDER_LINE_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
,t0.F_SOURCE_ORDER_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#
,t0.F_REMARK
,t0.F_DESCRIPTION
,t0.MATERIAL_NUMBER
,t0.MATERIAL_NAME
,t0.TOTAL
,DENSE_RANK() over(partition BY t0.FID order by t0.F_MATERIALCODE) 'DENSE_RANK_NUM'
INTO #TEMP_PLANORDER_RESERVELINK2
FROM
#TEMP_PLANORDER_RESERVELINK t0
WHERE 1 = 1
AND TOTAL > 1
ORDER BY FID
CREATE INDEX #TEMP_PLANORDER_RESERVELINK2_INDEX ON #TEMP_PLANORDER_RESERVELINK2(FID);
UPDATE t0 SET t0.F_MATERIALCODE = 0,t0.F_CUSTOMERNAME = 0
FROM #TEMP_PLANORDER_RESERVELINK2 t0,(SELECT FID FROM #TEMP_PLANORDER_RESERVELINK2 WHERE DENSE_RANK_NUM = 2) t1 WHERE t0.FID = t1.FID
SELECT
t0.FID
,t0.FBILLNO
,t0.FORECAST_ID
,t0.F_FORECASTNUMBER
,t0.F_DESCRIPTION
,t0.F_MATERIALCODE
,t0.F_CUSTOMERNAME
,ISNULL(stuff((select ','+ CONVERT(nvarchar(100), tt.F_LINENUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_LINENUMBER'
,ISNULL(stuff((select distinct ';'+ ISNULL(tt.F_REMARK,'') from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_REMARK'
,ISNULL(stuff((select distinct ','+ tt.MATERIAL_NUMBER from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'MATERIAL_NUMBER'
,ISNULL(stuff((select distinct ','+ tt.MATERIAL_NAME from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'MATERIAL_NAME'
,ISNULL(stuff((select distinct ','+ CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_NUMBER'
,ISNULL(stuff((select distinct ','+ CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_LINE_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_LINE_NUMBER'
INTO #TEMP
FROM #TEMP_PLANORDER_RESERVELINK2 t0
GROUP BY
t0.FID
,t0.FBILLNO
,t0.FORECAST_ID
,t0.F_FORECASTNUMBER
,t0.F_DESCRIPTION
,t0.F_MATERIALCODE
,t0.F_CUSTOMERNAME
CREATE INDEX #TEMP_INDEX ON #TEMP(FID);
SELECT
t0.FID
,t0.FBILLNO
,t0.F_MATERIALCODE
,t0.F_CUSTOMERNAME
,ISNULL(stuff((select ';'+ CONVERT(nvarchar(100), tt.F_LINENUMBER) from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_LINENUMBER'
,ISNULL(stuff((select ';'+ CONVERT(nvarchar(100), tt.F_FORECASTNUMBER) from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_FORECASTNUMBER'
,ISNULL(stuff((select distinct ';' + tt.MATERIAL_NUMBER from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'MATERIAL_NUMBER'
,ISNULL(stuff((select distinct ';' + tt.MATERIAL_NAME from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'MATERIAL_NAME'
,ISNULL(stuff((select distinct ';' + tt.F_REMARK from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_REMARK'
,ISNULL(stuff((select distinct ';' + ISNULL(tt.F_DESCRIPTION,'') from #TEMP tt where tt.FID = t0.FID for xml path('')),1,1,''),'') 'F_DESCRIPTION'
,ISNULL(stuff((select distinct ';' + CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_NUMBER'
,ISNULL(stuff((select distinct ';' + CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_LINE_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_LINE_NUMBER'
INTO #TEMP2
FROM #TEMP t0
--WHERE t0.fbillno ='MRP01679279'
GROUP BY
t0.FID
,t0.FBILLNO
,t0.F_MATERIALCODE
,t0.F_CUSTOMERNAME
CREATE INDEX #TEMP2_INDEX ON #TEMP2(FID);
--UPDATE #TEMP2 SET F_REMARK = '' WHERE F_REMARK = ';'
--<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ--
UPDATE t0
SET t0.F_FORECASTNUMBER = tt.F_FORECASTNUMBER
,t0.F_LINENUMBER = tt.F_LINENUMBER
,t0.F_CUSTOMERNAME = tt.F_CUSTOMERNAME
,t0.F_MATERIALCODE = tt.F_MATERIALCODE
,t0.F_REMARK = tt.F_REMARK
,t0.F_MATERIALCODESHOW = tt.MATERIAL_NUMBER
,t0.F_MATERIALNAMESHOW = tt.MATERIAL_NAME
FROM T_PLN_PLANORDER t0
INNER JOIN #TEMP2 tt on t0.FID = tt.FID --AND tt.TOTAL = 1
--<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ--
UPDATE t0_l
SET t0_l.F_DESCRIPTION = tt.F_DESCRIPTION
FROM T_PLN_PLANORDER_L t0_l
INNER JOIN #TEMP2 tt on t0_l.FID = tt.FID --AND tt.TOTAL = 1
SELECT * FROM #TEMP2
DROP TABLE #TEMP
DROP TABLE #TEMP2
DROP TABLE #TEMP_PLANORDER_ID_LIST
DROP TABLE #TEMP_PLANORDER_RESERVELINK
DROP TABLE #TEMP_PLANORDER_RESERVELINK2
END

View File

@@ -0,0 +1,19 @@
SELECT t0.FBILLNO,t0.FID,t0e.FENTRYID
,t1.FDATE,t0.FMOBILLNO
,t0e.FFORECASTGROUP,t0e.FFORECASTGROUPFRIST
,t1e.FFORECASTGROUPFRIST AS MOGROUPFRIST,t1e.FFORECASTGROUP AS MOGROUP,
--UPDATE t0e SET t0e.FFORECASTGROUP = t1e.FFORECASTGROUP
-- ,t0e.FFORECASTGROUPFRIST =
CASE
WHEN CHARINDEX( '-',REPLACE( t1e.FFORECASTGROUP,'_','-') ,0) = 0
THEN t1e.FFORECASTGROUP
ELSE SUBSTRING(t1e.FFORECASTGROUP,0, CHARINDEX( '-',REPLACE( t1e.FFORECASTGROUP,'_','-') ,0))
END
FROM T_PRD_PPBOM t0
INNER JOIN T_PRD_PPBOMENTRY t0e on t0.FID = t0e.FID
INNER JOIN T_PRD_MO t1 on t1.FID = t0.FMOID
INNER JOIN T_PRD_MOENTRY t1e on t1e.FID = t0.FMOID
WHERE 1 = 1 AND t1e.FFORECASTGROUP != ''
AND t0e.FFORECASTGROUP = ''
AND t0e.FFORECASTGROUPFRIST != t1e.FFORECASTGROUPFRIST
ORDER BY t1.FDATE desc

View File

@@ -0,0 +1,117 @@
--<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯstart--
SELECT
--TOP 5000
t0.FID
,t0.FBILLNO
,t0.FBOMID
,t0.FMATERIALID --<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0_b.FSALEORDERID --<EFBFBD><EFBFBD><EFBFBD>󵥺<EFBFBD>id
,t0_b.FSALEORDERENTRYID --<EFBFBD><EFBFBD><EFBFBD>󵥺ű<EFBFBD><EFBFBD><EFBFBD>id
,t0_b.FSALEORDERENTRYSEQ --<EFBFBD><EFBFBD><EFBFBD>󵥺ű<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
,t0.F_Linenumber 'Ԥ<EFBFBD><EFBFBD>к<EFBFBD>#'
,t0_b.FSALEORDERNO '<EFBFBD><EFBFBD><EFBFBD>󵥺<EFBFBD>'--<EFBFBD><EFBFBD><EFBFBD>󵥺<EFBFBD>
,t1.FBILLNO 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t0.F_FORECASTNUMBER 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#'
,t1e.FCUSTID
,t0.F_CUSTOMERNAME
,t1e.FMATERIALID AS F_MATERIALCODE --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0.F_MATERIALCODE
,t0.F_SOURCE_ORDER_LINE_NUMBER
,t1e.F_SOURCE_ORDER_LINE_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
,t0.F_SOURCE_ORDER_NUMBER
,t1e.F_SOURCE_ORDER_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#
,ISNULL(t1_l.FDESCRIPTION,'') AS F_DESCRIPTION --<EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ע
,t0_l.F_DESCRIPTION
,ISNULL(t1e_l.FDESCRIPTION,'') AS F_REMARK --<EFBFBD><EFBFBD><EFBFBD>ע
,t0.F_REMARK
FROM
T_PLN_PLANORDER t0
INNER JOIN T_PLN_PLANORDER_B t0_b on t0.FID = t0_b.FID
INNER JOIN T_PLN_PLANORDER_L t0_l on t0.FID = t0_l.FID
INNER JOIN T_PLN_FORECAST t1 on t0_b.FSALEORDERID = t1.FID --Ԥ<EFBFBD>
LEFT JOIN T_PLN_FORECAST_L t1_l on t1_l.FID = t0_b.FSALEORDERID --Ԥ<EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>Ϣ
INNER JOIN T_PLN_FORECASTENTRY t1e on t1e.FID = t0_b.FSALEORDERID AND t0_b.FSALEORDERENTRYID = t1e.FENTRYID --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
LEFT JOIN T_PLN_FORECASTENTRY_L t1e_l on t1e_l.FENTRYID = t0_b.FSALEORDERENTRYID --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>Ϣ
--INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = t0.FBILLNO
--INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
--INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
--INNER JOIN T_PLN_FORECAST E ON E .FID=D.FID
WHERE 1 = 1
AND t0.F_FORECASTNUMBER = ''
AND t0_b.FDEMANDTYPE = 2
AND CONVERT(nvarchar(100),t0.FCREATEDATE,23) = '2024-01-18'
--AND t0.FCOMPUTERNO ='MRP000401'
--AND t0_b.FSALEORDERID = 0
--ORDER BY t0_b.FSALEORDERID,t0_b.FSALEORDERENTRYSEQ
--<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯend--
--<2D>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯstart--
SELECT A.FID
into #temp
FROM T_PLN_PLANORDER A
INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
WHERE 1=1
--AND A.F_FORECASTNUMBER=''
AND A.FCOMPUTERNO ='MRP000401'
AND CONVERT(nvarchar(100),a.FCREATEDATE,23) = '2024-01-18'
GROUP BY A.FID
HAVing count(1) > 1
CREATE INDEX [#temp_INDEX_FID] ON #temp(FID);
SELECT
t0_b.FSALEORDERID --<EFBFBD><EFBFBD><EFBFBD>󵥺<EFBFBD>id
,t0_b.FSALEORDERENTRYID --<EFBFBD><EFBFBD><EFBFBD>󵥺ű<EFBFBD><EFBFBD><EFBFBD>id
,t0_b.FSALEORDERENTRYSEQ --<EFBFBD><EFBFBD><EFBFBD>󵥺ű<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
--,t0.F_Linenumber 'Ԥ<EFBFBD><EFBFBD>к<EFBFBD>#'
,t0_b.FSALEORDERNO '<EFBFBD><EFBFBD><EFBFBD>󵥺<EFBFBD>'--<EFBFBD><EFBFBD><EFBFBD>󵥺<EFBFBD>
,t0.F_FORECASTNUMBER 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#'
,d.FSEQ
,case when t0_b.FSALEORDERENTRYSEQ = d.FSEQ then 1 else 0 end
,t0.FBILLNO
--SELECt *
FROM T_PLN_PLANORDER t0
INNER JOIN T_PLN_PLANORDER_B t0_b on t0.FID = t0_b.FID
--INNER JOIN T_PLN_FORECAST t1 on t0_b.FSALEORDERID = t1.FID --Ԥ<EFBFBD>
--LEFT JOIN T_PLN_FORECAST_L t1_l on t1_l.FID = t0_b.FSALEORDERID --Ԥ<EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD>Ϣ
--INNER JOIN T_PLN_FORECASTENTRY t1e on t1e.FID = t0_b.FSALEORDERID AND t0_b.FSALEORDERENTRYID = t1e.FENTRYID --and t0_b.FSALEORDERENTRYSEQ = t1e.FSEQ--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = t0.FBILLNO
INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
WHERE exists (SELECT 1 FROM #temp tt WHERE tt.FID = t0.FID) and (t0_b.FSALEORDERENTRYSEQ != d.FSEQ or t0_b.FSALEORDERNO != e.FBILLNO)
DROP TABLE #TEMP
--<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯend--
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶβ<D6B6>ѯstart--
SELECT
a.FBILLNO AS '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,A.FSALENOROW
,A.F_SOURCE_ORDER_LINE_NUMBER as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>'
,A.F_Source_order_number as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,A.F_FORECASTNUMBER as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,A.F_Linenumber as '<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>к<EFBFBD>'
,E.FBILLNO AS 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,D.FSEQ,D.F_Source_order_number as 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,D.F_SOURCE_ORDER_LINE_NUMBER as 'Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>'
--UPDATE A SET A.F_Forecastnumber = '',A.F_Linenumber='',A.F_MaterialCode = 0,A.F_Remark = ''
SELECT A.*
FROM T_PLN_PLANORDER A
INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
WHERE 1=1
AND A.F_FORECASTNUMBER=''
AND a.fbillno='MRP01348067'
AND CONVERT(nvarchar(100),a.FCREATEDATE,23) = '2024-01-18'
--AND A.F_Forecastnumber ='N+30000028'
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶβ<EFBFBD>ѯend--
'WO2401220106,WO2401220362,WO2401220363,WO2401220364,WO2401220365,WO2401220366,WO2401220367,WO2401220368,WO2401220369,WO2401220370,WO2401220371,WO2401220372,WO2401220373,WO2401220374,WO2401220375,WO2401220376,WO2401220377,WO2401220378'

View File

@@ -0,0 +1,49 @@
/*<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ͷ<EFBFBD>ţ<EFBFBD>T_PLN_RESERVELINKENTRY<EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
SELECT
t0e.FID
,t0.FBILLNO
,t0e.FENTRYID
,t0e.FMATERIALID
,t0e.FBomId MOBomId
,t1.FSRCFORMID '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCBILLNO '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCINTERID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
,t1.FSRCENTRYID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>*/ ---<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ͬһԤ<EFBFBD>ͬһ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
,t2e.FSEQ
,t2e.FBomId /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FBomIdȡƥ<EFBFBD><EFBFBD>BOM<EFBFBD>༶չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>*/
,t2e.FMATERIALID OMATERAILID
,'' BOMLevel
/*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
--INTO #_MO
FROM T_PRD_MO t0 --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID=t0e.FID AND t1e.FINTSUPPLYENTRYID=t0e.FENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID='PLN_FORECAST'--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID=t1.FSRCINTERID AND t2e.FENTRYID=t1.FSRCENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WHERE 1 = 1
--t0.FBILLNO='WO2401100002' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
AND t0e.FFORECASTGROUP='' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>*/
AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>MRP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶĵ<EFBFBD><EFBFBD><EFBFBD>*/
--CREATE INDEX [#PLid] ON #_MO (FSRCINTERID ASC,FSRCENTRYID ASC) /*<2A><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
--CREATE INDEX [#BomId] ON #_MO (FBomId ASC) /*BOM<4F>༶չ<E0BCB6><D5B9><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2>ſ<EFBFBD><C5BF><EFBFBD>*/
--SELECT FSRCINTERID,FSRCENTRYID,MO2.FBILLNO AS '<EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>'
--into #n_mo
--FROM #_MO MO INNER JOIN T_PRD_MOENTRY MO1 ON MO1.FID=MO.FID AND MO1.FENTRYID=MO.FENTRYID
--INNER JOIN T_PRD_MO MO2 ON MO2.FID=MO.FID
--CREATE INDEX [#n_mo] ON #n_mo (FSRCINTERID ASC,FSRCENTRYID ASC) /*<2A><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
----update mo set BOMLevel=nmo.<EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>+'-'+'<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>'
----from #_MO mo left join #n_mo nmo on nmo.FSRCINTERID=mo.FSRCINTERID and nmo.FSRCENTRYID=mo.FSRCENTRYID
--/*-------------<2D><>dbo.GetBomSeq<65><71>Ϊ<EFBFBD><CEAA>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD>ذ<EFBFBD><D8B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶεı<CEB5>-----------------
-- <09><><EFBFBD><EFBFBD>BOM_ID(<28><>Ӧ#_MO<4D>е<EFBFBD>FBomId)<29><>
-- <09><>BOM_ID(<28><>Ӧ#_MO<4D>е<EFBFBD>MOBomId)<29><>
-- <09><><EFBFBD><EFBFBD>
----------------<2D><>dbo.GetBomSeq<65><71>Ϊ<EFBFBD><CEAA>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD>ذ<EFBFBD><D8B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶεı<CEB5>------------------*/
----select dbo.GetBomSeq(7293846,3994919)
--select * from #_MO
--DROP TABLE #_MO
--DROP TABLE #n_mo

View File

@@ -0,0 +1,186 @@
IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_UPDATE_BOMLEVEL')
DROP PROCEDURE dbo.PROC_UPDATE_BOMLEVEL;
GO
CREATE PROCEDURE PROC_UPDATE_BOMLEVEL
AS
BEGIN
CREATE TABLE #TMP_MO --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>#TMP
(
FID INT
,FBILLNO VARCHAR(255)
,FDATE DATE
,FENTRYID INT
,FMATERIALID INT
,MOBOMID INT
,FSRCFORMID VARCHAR(255)
,FSRCBILLNO VARCHAR(255)
,FSRCINTERID INT
,FSRCENTRYID INT
,FSEQ INT
,FBOMID INT
,BOMLEVEL VARCHAR(255)
,TOPBILLNO VARCHAR(255)
);
CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
--INSERT INTO #TMP_MO
/*<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ͷ<EFBFBD>ţ<EFBFBD>T_PLN_RESERVELINKENTRY<EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
SELECT
t0e.FID
,t0.FBILLNO
,t0.FDATE
,t0e.FENTRYID
,t0e.FMATERIALID
,t0e.FBomId MOBomId
,t1.FSRCFORMID --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCBILLNO --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCINTERID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
,t1.FSRCENTRYID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>*/ ---<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ͬһԤ<EFBFBD>ͬһ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
,t2e.FSEQ
,t2e.FBomId /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FBomIdȡƥ<EFBFBD><EFBFBD>BOM<EFBFBD>༶չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>*/
,t2e.FMATERIALID OMATERAILID
,t0e.FFORECASTGROUP
,'' BOMLevel
INTO #TMP_MO_PART
FROM T_PRD_MO t0 --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WHERE 1 = 1
--t0.FBILLNO='WO2401100002' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
--AND t0e.FFORECASTGROUP='' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>*/
AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>MRP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶĵ<EFBFBD><EFBFBD><EFBFBD>*/
INSERT INTO #TMP_MO
SELECT
tt.FID
,tt.FBILLNO
,tt.FDATE
,tt.FENTRYID
,tt.FMATERIALID
,tt.MOBomId
,tt.FSRCFORMID --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,tt.FSRCBILLNO --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,tt.FSRCINTERID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
,tt.FSRCENTRYID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>*/ ---<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ͬһԤ<EFBFBD>ͬһ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
,tt.FSEQ
,tt.FBomId /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FBomIdȡƥ<EFBFBD><EFBFBD>BOM<EFBFBD>༶չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>*/
,tt.BOMLevel
,t0.FBILLNO
--into #TMP_MO
FROM
#TMP_MO_PART tt
INNER JOIN (
SELECT
MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen
,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO) order by FBILLNO) ROWID
FROM
#TMP_MO_PART
WHERE FBOMID =MOBomId
) t0 ON tt.FBOMID = t0.FBOMID
AND tt.FSEQ = t0.FSEQ
AND tt.FSRCINTERID = t0.FSRCINTERID
AND tt.FSRCENTRYID = t0.FSRCENTRYID
AND tt.FDATE = t0.FDATE
AND t0.ROWID =1
AND t0.Billnolen = len(tt.FBILLNO)
WHERE
tt.FFORECASTGROUP = ''
CREATE TABLE #TMP_TOP_BOM_SET(
FID int
,FNUMBER varchar(80)
,FMATERIALID int
,FSEQ int
,BOMLEVEL int
,TOPID int
,showlevel varchar(80)
,oId int
)
CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t0.FID
,t0.FNUMBER
,t0.FMATERIALID
,ROW_NUMBER() over(partition BY t0.FID order by t0.FMATERIALID)
,1 'BOMLEVEL'
,t0.FID AS 'TOPID'
,''
,t0.FID
FROM
T_ENG_BOM t0
INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID
WHERE 1 = 1
GROUP BY
t0.FID
,t0.FNUMBER
,t0.FMATERIALID
DECLARE @num INT,@level int,@LoopCount int
SET @num = 1
SET @level =1
SET @LoopCount = 0;
WHILE (@num <> 0 AND @LoopCount < 30)
BEGIN
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t3.FID
,t3.FNUMBER
,t3.FMATERIALID
,ROW_NUMBER() over(partition BY t0.TOPID order by t0.fseq)
,t0.BOMLEVEL + 1
,t0.TOPID
,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid order by t1.fseq) as VARCHAR))
,t0.FID
FROM
#TMP_TOP_BOM_SET t0
INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
WHERE 1 = 1
AND (t2.FERPCLSID = 2 )
AND t0.BOMLEVEL = @level
SET @num = @@ROWCOUNT
SET @level += 1
SET @LoopCount += 1
END
SELECT
ROW_NUMBER() over(partition BY TOPID order by FSEQ) AS rowId,
*
INTO #TMP_TOP_BOM_GROUP
FROM #TMP_TOP_BOM_SET
WHERE 1 = 1
GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UPDATE t0 SET t0.BOMLEVEL = t0.TOPBILLNO + t1.showlevel
FROM #TMP_MO t0 INNER JOIN #TMP_TOP_BOM_GROUP t1 on t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
--<EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
--UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL
--FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
SELECT t0.*,t1.fnumber
FROM #TMP_TOP_BOM_GROUP t0 INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
--WHERE t0.OID = 6339745
order by t0.FSEQ,t0.BOMLEVEL
SELECT * FROM #TMP_MO WHERE 1 = 1
--AND FBOMID <> MOBOMID
--AND FBOMID = 6339745 AND topbillno='WO2308090009' --<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DROP TABLE #TMP_MO_PART
DROP TABLE #TMP_TOP_BOM_SET
DROP TABLE #TMP_TOP_BOM_GROUP
DROP TABLE #TMP_MO --ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>#TMP
END
--SET STATISTICS TIME ON
--EXEC PROC_UPDATE_BOMLEVEL
--SET STATISTICS TIME OFF

View File

@@ -0,0 +1,219 @@
CREATE TABLE #TMP_MO --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>#TMP
(
FID INT
,FBILLNO VARCHAR(255)
,FDATE DATE
,FENTRYID INT
,FMATERIALID INT
,OMATERAILID int
,MOBOMID INT
,FSRCFORMID VARCHAR(255)
,FSRCBILLNO VARCHAR(255)
,FSRCINTERID INT
,FSRCENTRYID INT
,FSEQ INT
,FBOMID INT
,BOMLEVEL VARCHAR(255)
,TOPBILLNO VARCHAR(255)
,FFORECASTGROUP varchar(255)
);
CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
--INSERT INTO #TMP_MO
/*<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ͷ<EFBFBD>ţ<EFBFBD>T_PLN_RESERVELINKENTRY<EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
SELECT
t0e.FID
,t0.FBILLNO
,t0.FDATE
,t0e.FENTRYID
,t0e.FMATERIALID
,t0e.FBomId MOBomId
,t1.FSRCFORMID --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCBILLNO --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCINTERID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
,t1.FSRCENTRYID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>*/ ---<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ͬһԤ<EFBFBD>ͬһ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
,t2e.FSEQ
,t2e.FBomId /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FBomIdȡƥ<EFBFBD><EFBFBD>BOM<EFBFBD>༶չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>*/
,t2e.FMATERIALID OMATERAILID
,t0e.FFORECASTGROUP
,t0e.FFORECASTGROUPFRIST
--,t0_lk.FSTABLENAME
--,t0_lk.FSTABLEID
--,t0_lk.FSBILLID
,t0_lk.FSID
,t0e_Q.FSRCSPLITID
,'' BOMLevel
INTO #TMP_MO_PART
FROM T_PRD_MO t0 --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e.FENTRYID = t0e_Q.FENTRYID
INNER JOIN T_PRD_MOENTRY_LK t0_lk on t0e.FENTRYID = t0_lk.FENTRYID
INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WHERE 1 = 1
--t0.FBILLNO='WO2401100002' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
AND t0e.FFORECASTGROUP = '' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>*/
--AND t0e.FFORECASTGROUPFRIST = 'WO2312270043'
AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>MRP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶĵ<EFBFBD><EFBFBD><EFBFBD>*/
AND t0e_Q.FSRCSPLITID = 0
INSERT INTO #TMP_MO
SELECT
tt.FID
,tt.FBILLNO
,tt.FDATE
,tt.FENTRYID
,tt.FMATERIALID
,tt.OMATERAILID
,tt.MOBomId
,tt.FSRCFORMID --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,tt.FSRCBILLNO --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,tt.FSRCINTERID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
,tt.FSRCENTRYID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>*/ ---<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ͬһԤ<EFBFBD>ͬһ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
,tt.FSEQ
,tt.FBomId /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FBomIdȡƥ<EFBFBD><EFBFBD>BOM<EFBFBD>༶չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>*/
,tt.BOMLevel
,ISNULL(t0.FBILLNO,'<EFBFBD>޶<EFBFBD><EFBFBD><EFBFBD>') FBILLNO
,tt.FFORECASTGROUP
--into #TMP_MO
FROM
#TMP_MO_PART tt
LEFT JOIN (
SELECT
FID,MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen,OMATERAILID,FMATERIALID,FSID
,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO),OMATERAILID,FMATERIALID order by FBILLNO) ROWID
FROM
#TMP_MO_PART
WHERE FMATERIALID = OMATERAILID
) t0 ON 1=1
AND tt.FBOMID = t0.FBOMID
AND tt.FSEQ = t0.FSEQ
AND tt.FSRCINTERID = t0.FSRCINTERID
AND tt.FSRCENTRYID = t0.FSRCENTRYID
AND tt.FDATE = t0.FDATE
--AND t0.ROWID =1
AND tt.OMATERAILID = t0.FMATERIALID
AND t0.Billnolen = len(tt.FBILLNO)
--AND tt.fsid = t0.FSID
WHERE 1 = 1
--AND tt.FFORECASTGROUP = ''
CREATE TABLE #TMP_TOP_BOM_SET(
FID int
,FNUMBER varchar(80)
,FMATERIALID int
,FSEQ int
,BOMLEVEL int
,TOPID int
,showlevel varchar(80)
,oId int
)
CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t0.FID
,t0.FNUMBER
,t0.FMATERIALID
,ROW_NUMBER() over(partition BY t0.FID order by t0.fid)
,1 'BOMLEVEL'
,t0.FID AS 'TOPID'
,''
,t0.FID
FROM
T_ENG_BOM t0
INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID
WHERE 1 = 1
AND t3.FMATERIALID = t3.OMATERAILID
GROUP BY
t0.FID
,t0.FNUMBER
,t0.FMATERIALID
DECLARE @num INT,@level int,@LoopCount int
SET @num = 1
SET @level =1
SET @LoopCount = 0;
WHILE (@num <> 0 AND @LoopCount < 30)
BEGIN
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t3.FID
,t3.FNUMBER
,t3.FMATERIALID
,ROW_NUMBER() over(partition BY t0.TOPID,t0.oid order by t0.fseq)
,t0.BOMLEVEL + 1
,t0.TOPID
,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.oid,t0.fid order by t1.fseq) as VARCHAR))
,t0.FID
FROM
#TMP_TOP_BOM_SET t0
INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
WHERE 1 = 1
AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 )
AND t0.BOMLEVEL = @level
SET @num = @@ROWCOUNT
SET @level += 1
SET @LoopCount += 1
END
SELECT
*
INTO #TMP_TOP_BOM_GROUP
FROM #TMP_TOP_BOM_SET
WHERE 1 = 1
GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
SELECT FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
INTO #TMP_MO_GROUP
FROM #TMP_MO
GROUP BY FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UPDATE t0 SET t0.BOMLEVEL = (CASE t0.TOPBILLNO WHEN '<EFBFBD>޶<EFBFBD><EFBFBD><EFBFBD>' THEN '' ELSE ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'') END)
FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
----<EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
--UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL,t0e.FFORECASTGROUPFRIST = t1.TOPBILLNO
--FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
--WHERE t0e.FFORECASTGROUP = ''
--SELECT t0.*,t1.fnumber
--FROM #TMP_TOP_BOM_GROUP t0
--INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
----WHERE t0.TOPID = 8062230
--order by t0.FSEQ,t0.BOMLEVEL
--SELECT t0.*,t1.FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043'<27><>
SELECT t0.*
,t0_lk.FSTABLENAME
,t0_lk.FSTABLEID
,t0_lk.FSBILLID
,t0_lk.FSID
,t0e_Q.FSRCSPLITBILLNO
,t0e_Q.FSRCSPLITID
,t0e_Q.FSRCSPLITSEQ
,t0e_Q.FSRCSPLITENTRYID
--INTO #TMP_MO_PART
FROM #TMP_MO_GROUP t0
LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID
INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID
WHERE 1 = 1
--AND FBOMID =8237478 AND MOBOMID =8237478
--AND topbillno='WO2311080183'
--SELECT * FROM #TMP_MO WHERE 1 = 1
--AND FBOMID <> MOBOMID
--AND FBOMID = 6339745 --AND topbillno='WO2308090009' --<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DROP TABLE #TMP_MO_GROUP
DROP TABLE #TMP_MO_PART
DROP TABLE #TMP_TOP_BOM_SET
DROP TABLE #TMP_TOP_BOM_GROUP
DROP TABLE #TMP_MO --ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>#TMP

View File

@@ -0,0 +1,231 @@
IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_SELECT_UPDATE_BOMLEVEL')
DROP PROCEDURE dbo.PROC_SELECT_UPDATE_BOMLEVEL;
GO
CREATE PROCEDURE PROC_SELECT_UPDATE_BOMLEVEL
@billnoStr varchar(1000)
AS
BEGIN
CREATE TABLE #TMP_MO --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>#TMP
(
FID INT
,FBILLNO VARCHAR(255)
,FDATE DATE
,FENTRYID INT
,FMATERIALID INT
,OMATERAILID int
,MOBOMID INT
,FSRCFORMID VARCHAR(255)
,FSRCBILLNO VARCHAR(255)
,FSRCINTERID INT
,FSRCENTRYID INT
,FSEQ INT
,FBOMID INT
,BOMLEVEL VARCHAR(255)
,TOPBILLNO VARCHAR(255)
,FFORECASTGROUP varchar(255)
);
CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
--INSERT INTO #TMP_MO
/*<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ͷ<EFBFBD>ţ<EFBFBD>T_PLN_RESERVELINKENTRY<EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
SELECT
t0e.FID
,t0.FBILLNO
,t0.FDATE
,t0e.FENTRYID
,t0e.FMATERIALID
,t0e.FBomId MOBomId
,t1.FSRCFORMID --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCBILLNO --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCINTERID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
,t1.FSRCENTRYID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>*/ ---<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ͬһԤ<EFBFBD>ͬһ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
,t2e.FSEQ
,t2e.FBomId /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FBomIdȡƥ<EFBFBD><EFBFBD>BOM<EFBFBD>༶չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>*/
,t2e.FMATERIALID OMATERAILID
,t0e.FFORECASTGROUP
--,t0_lk.FSTABLENAME
--,t0_lk.FSTABLEID
--,t0_lk.FSBILLID
,t0_lk.FSID
,t0e_Q.FSRCSPLITID
,'' BOMLevel
INTO #TMP_MO_PART
FROM T_PRD_MO t0 --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e.FENTRYID = t0e_Q.FENTRYID
INNER JOIN T_PRD_MOENTRY_LK t0_lk on t0e.FENTRYID = t0_lk.FENTRYID
INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WHERE 1 = 1
--t0.FBILLNO='WO2401100002' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
AND t0e.FFORECASTGROUP='' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>*/
--AND t0e.FFORECASTGROUPFRIST = 'WO2312270043'
AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>MRP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶĵ<EFBFBD><EFBFBD><EFBFBD>*/
AND t0e_Q.FSRCSPLITID = 0
AND t0.FBILLNO in (SELECT b.billno FROM (SELECT CAST('<v>'+REPLACE(@billnoStr,',','</v><v>')+'</v>' AS xml) billno ) a OUTER APPLY (SELECT T.C.value('.','varchar(50)') billno FROM a.billno.nodes('/v') AS T(C)) b ) --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD><EFBFBD>
INSERT INTO #TMP_MO
SELECT
tt.FID
,tt.FBILLNO
,tt.FDATE
,tt.FENTRYID
,tt.FMATERIALID
,tt.OMATERAILID
,tt.MOBomId
,tt.FSRCFORMID --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,tt.FSRCBILLNO --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,tt.FSRCINTERID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
,tt.FSRCENTRYID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>*/ ---<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ͬһԤ<EFBFBD>ͬһ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
,tt.FSEQ
,tt.FBomId /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FBomIdȡƥ<EFBFBD><EFBFBD>BOM<EFBFBD>༶չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>*/
,tt.BOMLevel
,t0.FBILLNO
,tt.FFORECASTGROUP
--into #TMP_MO
FROM
#TMP_MO_PART tt
INNER JOIN (
SELECT
FID,MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen,OMATERAILID,FMATERIALID,FSID
,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO),OMATERAILID,FMATERIALID order by FBILLNO) ROWID
FROM
#TMP_MO_PART
WHERE FMATERIALID = OMATERAILID
) t0 ON 1=1
AND tt.FBOMID = t0.FBOMID
AND tt.FSEQ = t0.FSEQ
AND tt.FSRCINTERID = t0.FSRCINTERID
AND tt.FSRCENTRYID = t0.FSRCENTRYID
AND tt.FDATE = t0.FDATE
--AND t0.ROWID =1
AND tt.OMATERAILID = t0.FMATERIALID
AND t0.Billnolen = len(tt.FBILLNO)
--AND tt.fsid = t0.FSID
WHERE 1 = 1
--AND tt.FFORECASTGROUP = ''
CREATE TABLE #TMP_TOP_BOM_SET(
FID int
,FNUMBER varchar(80)
,FMATERIALID int
,FSEQ int
,BOMLEVEL int
,TOPID int
,showlevel varchar(80)
,oId int
)
CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t0.FID
,t0.FNUMBER
,t0.FMATERIALID
,ROW_NUMBER() over(partition BY t0.FID order by t0.fid)
,1 'BOMLEVEL'
,t0.FID AS 'TOPID'
,''
,t0.FID
FROM
T_ENG_BOM t0
INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID
WHERE 1 = 1
AND t3.FMATERIALID = t3.OMATERAILID
GROUP BY
t0.FID
,t0.FNUMBER
,t0.FMATERIALID
DECLARE @num INT,@level int,@LoopCount int
SET @num = 1
SET @level =1
SET @LoopCount = 0;
WHILE (@num <> 0 AND @LoopCount < 30)
BEGIN
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t3.FID
,t3.FNUMBER
,t3.FMATERIALID
,ROW_NUMBER() over(partition BY t0.TOPID,t0.oid order by t0.fseq)
,t0.BOMLEVEL + 1
,t0.TOPID
,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.oid,t0.fid order by t1.fseq) as VARCHAR))
,t0.FID
FROM
#TMP_TOP_BOM_SET t0
INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
WHERE 1 = 1
AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 )
AND t0.BOMLEVEL = @level
SET @num = @@ROWCOUNT
SET @level += 1
SET @LoopCount += 1
END
SELECT
*
INTO #TMP_TOP_BOM_GROUP
FROM #TMP_TOP_BOM_SET
WHERE 1 = 1
GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
SELECT FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
INTO #TMP_MO_GROUP
FROM #TMP_MO
GROUP BY FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UPDATE t0 SET t0.BOMLEVEL = ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'')
FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
----<EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
--UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL,t0e.FFORECASTGROUPFRIST = t1.TOPBILLNO
--FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
--SELECT t0.*,t1.fnumber
--FROM #TMP_TOP_BOM_GROUP t0
--INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
----WHERE t0.TOPID = 8062230
--order by t0.FSEQ,t0.BOMLEVEL
--SELECT t0.*,t1.FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043'<27><>
--SELECT t0.*
-- ,t0_lk.FSTABLENAME
-- ,t0_lk.FSTABLEID
-- ,t0_lk.FSBILLID
-- ,t0_lk.FSID
-- ,t0e_Q.FSRCSPLITBILLNO
-- ,t0e_Q.FSRCSPLITID
-- ,t0e_Q.FSRCSPLITSEQ
-- ,t0e_Q.FSRCSPLITENTRYID
-- --INTO #TMP_MO_PART
-- FROM #TMP_MO_GROUP t0
-- LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID
-- INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID
-- WHERE 1 = 1
--AND FBOMID =8237478 AND MOBOMID =8237478
--AND topbillno='WO2311080183'
--SELECT * FROM #TMP_MO WHERE 1 = 1
--AND FBOMID <> MOBOMID
--AND FBOMID = 6339745 --AND topbillno='WO2308090009' --<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DROP TABLE #TMP_MO_GROUP
DROP TABLE #TMP_MO_PART
DROP TABLE #TMP_TOP_BOM_SET
DROP TABLE #TMP_TOP_BOM_GROUP
DROP TABLE #TMP_MO --ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>#TMP
END
--SET STATISTICS TIME ON
--EXEC PROC_UPDATE_BOMLEVEL
--SET STATISTICS TIME OFF

View File

@@ -0,0 +1,229 @@
IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_UPDATE_BOMLEVEL')
DROP PROCEDURE dbo.PROC_UPDATE_BOMLEVEL;
GO
CREATE PROCEDURE PROC_UPDATE_BOMLEVEL
AS
BEGIN
CREATE TABLE #TMP_MO --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>#TMP
(
FID INT
,FBILLNO VARCHAR(255)
,FDATE DATE
,FENTRYID INT
,FMATERIALID INT
,OMATERAILID int
,MOBOMID INT
,FSRCFORMID VARCHAR(255)
,FSRCBILLNO VARCHAR(255)
,FSRCINTERID INT
,FSRCENTRYID INT
,FSEQ INT
,FBOMID INT
,BOMLEVEL VARCHAR(255)
,TOPBILLNO VARCHAR(255)
,FFORECASTGROUP varchar(255)
);
CREATE INDEX [#TMP_MO_FID] ON #TMP_MO(FID);
--INSERT INTO #TMP_MO
/*<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ͷ<EFBFBD>ţ<EFBFBD>T_PLN_RESERVELINKENTRY<EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
SELECT
t0e.FID
,t0.FBILLNO
,t0.FDATE
,t0e.FENTRYID
,t0e.FMATERIALID
,t0e.FBomId MOBomId
,t1.FSRCFORMID --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCBILLNO --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,t1.FSRCINTERID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
,t1.FSRCENTRYID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>*/ ---<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ͬһԤ<EFBFBD>ͬһ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
,t2e.FSEQ
,t2e.FBomId /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FBomIdȡƥ<EFBFBD><EFBFBD>BOM<EFBFBD>༶չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>*/
,t2e.FMATERIALID OMATERAILID
,t0e.FFORECASTGROUP
--,t0_lk.FSTABLENAME
--,t0_lk.FSTABLEID
--,t0_lk.FSBILLID
,t0_lk.FSID
,t0e_Q.FSRCSPLITID
,'' BOMLevel
INTO #TMP_MO_PART
FROM T_PRD_MO t0 --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PRD_MOENTRY t0e ON t0e.FID=t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0e.FENTRYID = t0e_Q.FENTRYID
INNER JOIN T_PRD_MOENTRY_LK t0_lk on t0e.FENTRYID = t0_lk.FENTRYID
INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0e.FID AND t1e.FINTSUPPLYENTRYID = t0e.FENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID=t1e.FID AND t1.FSRCFORMID = 'PLN_FORECAST'--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FID = t1.FSRCINTERID AND t2e.FENTRYID = t1.FSRCENTRYID--Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
WHERE 1 = 1
--t0.FBILLNO='WO2401100002' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
AND t0e.FFORECASTGROUP='' /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>*/
--AND t0e.FFORECASTGROUPFRIST = 'WO2312270043'
AND t0e.FSRCBILLTYPE='PLN_PLANORDER' /*ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>MRP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶĵ<EFBFBD><EFBFBD><EFBFBD>*/
AND t0e_Q.FSRCSPLITID = 0
INSERT INTO #TMP_MO
SELECT
tt.FID
,tt.FBILLNO
,tt.FDATE
,tt.FENTRYID
,tt.FMATERIALID
,tt.OMATERAILID
,tt.MOBomId
,tt.FSRCFORMID --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,tt.FSRCBILLNO --'<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
,tt.FSRCINTERID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
,tt.FSRCENTRYID /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>*/ ---<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ͬһԤ<EFBFBD>ͬһ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
,tt.FSEQ
,tt.FBomId /*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>FBomIdȡƥ<EFBFBD><EFBFBD>BOM<EFBFBD>༶չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD>*/
,tt.BOMLevel
,t0.FBILLNO
,tt.FFORECASTGROUP
--into #TMP_MO
FROM
#TMP_MO_PART tt
INNER JOIN (
SELECT
FID,MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FBILLNO,FDATE,len(FBILLNO) Billnolen,OMATERAILID,FMATERIALID,FSID
,ROW_NUMBER() over(partition BY MOBomId,FBOMID,FSEQ,FSRCINTERID,FSRCENTRYID,FDATE,len(FBILLNO),OMATERAILID,FMATERIALID order by FBILLNO) ROWID
FROM
#TMP_MO_PART
WHERE FMATERIALID = OMATERAILID
) t0 ON 1=1
AND tt.FBOMID = t0.FBOMID
AND tt.FSEQ = t0.FSEQ
AND tt.FSRCINTERID = t0.FSRCINTERID
AND tt.FSRCENTRYID = t0.FSRCENTRYID
AND tt.FDATE = t0.FDATE
--AND t0.ROWID =1
AND tt.OMATERAILID = t0.FMATERIALID
AND t0.Billnolen = len(tt.FBILLNO)
--AND tt.fsid = t0.FSID
WHERE 1 = 1
--AND tt.FFORECASTGROUP = ''
CREATE TABLE #TMP_TOP_BOM_SET(
FID int
,FNUMBER varchar(80)
,FMATERIALID int
,FSEQ int
,BOMLEVEL int
,TOPID int
,showlevel varchar(80)
,oId int
)
CREATE INDEX [#TMP_TOP_BOM_SET_FID] ON #TMP_TOP_BOM_SET(FID);
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t0.FID
,t0.FNUMBER
,t0.FMATERIALID
,ROW_NUMBER() over(partition BY t0.FID order by t0.fid)
,1 'BOMLEVEL'
,t0.FID AS 'TOPID'
,''
,t0.FID
FROM
T_ENG_BOM t0
INNER JOIN #TMP_MO t3 on t3.FBOMID = t0.FID AND t3.FMATERIALID = t0.FMATERIALID
WHERE 1 = 1
AND t3.FMATERIALID = t3.OMATERAILID
GROUP BY
t0.FID
,t0.FNUMBER
,t0.FMATERIALID
DECLARE @num INT,@level int,@LoopCount int
SET @num = 1
SET @level =1
SET @LoopCount = 0;
WHILE (@num <> 0 AND @LoopCount < 30)
BEGIN
INSERT INTO #TMP_TOP_BOM_SET
SELECT
t3.FID
,t3.FNUMBER
,t3.FMATERIALID
,ROW_NUMBER() over(partition BY t0.TOPID,t0.oid order by t0.fseq)
,t0.BOMLEVEL + 1
,t0.TOPID
,CONCAT(t0.showlevel,'-',CAST(dense_rank() over(partition BY t0.topid,t0.oid,t0.fid order by t1.fseq) as VARCHAR))
,t0.FID
FROM
#TMP_TOP_BOM_SET t0
INNER JOIN T_ENG_BOMCHILD t1 on t0.FID = t1.FID
INNER JOIN T_BD_MATERIALBASE t2 on t2.FMATERIALID = t1.FMATERIALID
INNER JOIN T_ENG_BOM t3 on t1.FMATERIALID = t3.FMATERIALID
WHERE 1 = 1
AND (t2.FERPCLSID = 2 OR t2.FERPCLSID = 5 )
AND t0.BOMLEVEL = @level
SET @num = @@ROWCOUNT
SET @level += 1
SET @LoopCount += 1
END
SELECT
*
INTO #TMP_TOP_BOM_GROUP
FROM #TMP_TOP_BOM_SET
WHERE 1 = 1
GROUP BY FID,FNUMBER,FMATERIALID,FSEQ,BOMLEVEL,TOPID,showlevel,oId
SELECT FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
INTO #TMP_MO_GROUP
FROM #TMP_MO
GROUP BY FID,FBILLNO,FENTRYID,FDATE,FMATERIALID,OMATERAILID,MOBOMID,FSRCENTRYID,FSRCINTERID,FSEQ,FBOMID,TOPBILLNO,BOMLEVEL,FFORECASTGROUP
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UPDATE t0 SET t0.BOMLEVEL = ISNULL(t0.TOPBILLNO,'') + ISNULL(t1.showlevel ,'')
FROM #TMP_MO_GROUP t0 LEFT JOIN #TMP_TOP_BOM_GROUP t1 on t0.FMATERIALID = t1.FMATERIALID AND t0.MOBOMID = t1.FID AND t0.FBOMID = t1.TOPID
----<EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
--UPDATE t0e SET t0e.FFORECASTGROUP = t1.BOMLEVEL,t0e.FFORECASTGROUPFRIST = t1.TOPBILLNO
--FROM T_PRD_MOENTRY t0e INNER JOIN #TMP_MO_GROUP t1 on t0e.FBOMID = t1.MOBOMID AND t0e.FENTRYID = t1.FENTRYID
--SELECT t0.*,t1.fnumber
--FROM #TMP_TOP_BOM_GROUP t0
--INNER JOIN T_BD_MATERIAL t1 on t0.fmaterialid = t1.fmaterialid
----WHERE t0.TOPID = 8062230
--order by t0.FSEQ,t0.BOMLEVEL
--SELECT t0.*,t1.FENTRYID FROM #TMP_MO_GROUP t0 RIGHT join T_PRD_MOENTRY t1 on t0.FID = t1.FID AND t0.FENTRYID = t1.FENTRYID WHERE 1 = 1 AND t1.FFORECASTGROUPFRIST = 'WO2312270043'<27><>
--SELECT t0.*
-- ,t0_lk.FSTABLENAME
-- ,t0_lk.FSTABLEID
-- ,t0_lk.FSBILLID
-- ,t0_lk.FSID
-- ,t0e_Q.FSRCSPLITBILLNO
-- ,t0e_Q.FSRCSPLITID
-- ,t0e_Q.FSRCSPLITSEQ
-- ,t0e_Q.FSRCSPLITENTRYID
-- --INTO #TMP_MO_PART
-- FROM #TMP_MO_GROUP t0
-- LEft JOIN T_PRD_MOENTRY_LK t0_lk on t0.FENTRYID = t0_lk.FENTRYID
-- INNER JOIN T_PRD_MOENTRY_Q t0e_Q on t0.FENTRYID = t0e_Q.FENTRYID
-- WHERE 1 = 1
--AND FBOMID =8237478 AND MOBOMID =8237478
--AND topbillno='WO2311080183'
--SELECT * FROM #TMP_MO WHERE 1 = 1
--AND FBOMID <> MOBOMID
--AND FBOMID = 6339745 --AND topbillno='WO2308090009' --<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DROP TABLE #TMP_MO_GROUP
DROP TABLE #TMP_MO_PART
DROP TABLE #TMP_TOP_BOM_SET
DROP TABLE #TMP_TOP_BOM_GROUP
DROP TABLE #TMP_MO --ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>#TMP
END
--SET STATISTICS TIME ON
--EXEC PROC_UPDATE_BOMLEVEL
--SET STATISTICS TIME OFF

View File

@@ -0,0 +1,20 @@
IF EXISTS(SELECT * FROM SYS.PROCEDURES WHERE NAME='PROC_COUNT_UPDATE_PLAN_LIST')
DROP PROCEDURE dbo.PROC_COUNT_UPDATE_PLAN_LIST;
GO
CREATE PROCEDURE PROC_COUNT_UPDATE_PLAN_LIST
AS
BEGIN
SELECT COUNT(1) as totalCount,5000 as pageSize
FROM (
SELECT A.FID
FROM T_PLN_PLANORDER A
INNER JOIN T_PLN_RESERVELINKENTRY B ON B.FSUPPLYBILLNO = A.FBILLNO
INNER JOIN T_PLN_RESERVELINK C ON C.FID=B.FID
INNER JOIN T_PLN_FORECASTENTRY D ON D.FENTRYID=C.FSRCENTRYID
INNER JOIN T_PLN_FORECAST e on e .fid=d.FID
WHERE 1=1
AND A.F_FORECASTNUMBER = ''
GROUP BY A.FID
) t
END

View File

@@ -0,0 +1,232 @@
declare @FBILLNO NVARCHAR(1000)
set @FBILLNO = 'WO2402200045,WO2402200046,WO2402200047'
select fname into #temp2 from dbo.fn_hr_StrSplit(@FBILLNO,',')
UPDATE B SET FFORECASTGROUP = REPLACE( D.FFORECASTGROUP,H.FBILLNO,L.FBILLNO)
FROM T_PRD_MO A
INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
INNER JOIN T_PRD_MOENTRY_Q C ON C.FENTRYID=B.FENTRYID
INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FSRCSPLITENTRYID
INNER JOIN T_PRD_MO E ON E.FID=D.FID
INNER JOIN T_PRD_MO H ON H.FBILLNO=D.FFORECASTGROUPFRIST --<EFBFBD>ײ<EFBFBD>
INNER JOIN T_PRD_MOENTRY I ON I.FID=H.FID --<EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
INNER JOIN T_PRD_MOENTRY_Q J ON J.FSRCSPLITENTRYID=I.FENTRYID
INNER JOIN T_PRD_MOENTRY K ON K.FENTRYID=J.FENTRYID
INNER JOIN T_PRD_MO L ON L.FID=K.FID AND SUBSTRING(L.FBILLNO, CHARINDEX('-',L.FBILLNO)+1,LEN(L.FBILLNO)) = SUBSTRING(A.FBILLNO, CHARINDEX('-',A.FBILLNO)+1,LEN(A.FBILLNO))
inner join #temp2 m on m.Fname=a.FBILLNO
WHERE 1=1
AND B.FFORECASTGROUP = ''
--2024-01-15 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD> ,ʹ<EFBFBD>ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
exec PROC_SELECT_UPDATE_BOMLEVEL @FBILLNO
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
UPDATE B SET FFORECASTGROUP = ISNULL( cast( e.FBILLNO as nvarchar(100))+'-'+ cast( dbo.GetBomSeq(D.fbomid,b.fmaterialid) as nvarchar(100)) ,'')
--SELECT
--F.FNUMBER,
--a.FBILLNO,
--B.FENTRYID ,
--D.fbomid,b.fmaterialid,
--cast( e.FBILLNO as nvarchar(100))+'-'+ cast( dbo.GetBomSeq(D.fbomid,b.fmaterialid) as nvarchar(100)) as 'Bom<EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
--CONVERT( nvarchar(1000),'') as '<EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>',a.FBILLNO as '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',e.FBILLNO as 'Դͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
FROM T_PRD_MO A
INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
INNER JOIN T_PRD_MOENTRY_LK C ON C .FENTRYID=B.FENTRYID
INNER JOIN T_PRD_MOENTRY D ON D.FID=C.FSBILLID AND D.FENTRYID=C.FSID
INNER JOIN T_PRD_MO E ON E.FID=D.FID
INNER JOIN T_BD_MATERIAL F ON F.FMATERIALID=B.FMATERIALID
inner join #temp2 g on g.Fname=a.FBILLNO
WHERE B.FFORECASTGROUP = ''
--AND A.FBILLNO =@FBILLNO
--2024-01-23 18<EFBFBD><EFBFBD>14 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>start--
----<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD><><CEAA><EFBFBD>ĵ<EFBFBD><C4B5>ݱ<EFBFBD><DDB1><EFBFBD>)
--UPDATE B SET FFORECASTGROUP = A.FBILLNO
----SELECT *
--FROM T_PRD_MO A
--INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
--LEFT JOIN T_PRD_MOENTRY_LK D ON D.FENTRYID=B.FENTRYID AND D.FSTABLENAME = 'T_PRD_MOENTRY'
--inner join #temp2 f on f.Fname=a.FBILLNO
--WHERE
--1=1
--AND D.FSID IS NULL
--AND B.FFORECASTGROUP = ''
----AND A.FBILLNO =@FBILLNO
--2024-01-23 18<EFBFBD><EFBFBD>14 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>end--
--2024-01-23 18<31><38>14 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>start--
UPDATE B SET FFORECASTGROUP = A.FBILLNO
--SELECT A.FBILLNO
FROM T_PRD_MO A
INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
INNER JOIN T_PRD_MOENTRY_A t0e_a on B.FENTRYID = t0e_a.FENTRYID
INNER JOIN #temp2 f on f.Fname=a.FBILLNO
WHERE
1=1
AND B.FFORECASTGROUP = ''
AND t0e_a.FCREATETYPE != 3
--AND B.FFORECASTGROUPFRIST != '<EFBFBD>޶<EFBFBD><EFBFBD><EFBFBD>'
AND NOT EXISTS (
SELECT 1
FROM T_PRD_MOENTRY_LK t1_lk
WHERE 1=1
AND t1_lk.FSTABLENAME = 'T_PRD_MOENTRY'
AND t1_lk.FENTRYID = B.FENTRYID)
--2024-01-23 18<EFBFBD><EFBFBD>14 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>end--
--<2D><>ϵͳ<CFB5><CDB3>׼<EFBFBD>ı<EFBFBD>ע<EFBFBD>ֶθ<D6B6><CEB8>µ<EFBFBD><C2B5><EFBFBD>ע2<D7A2>ֶ<EFBFBD>
update B set FNOTE2=c.FMEMO FROM T_PRD_MO A
INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
INNER JOIN T_PRD_MOENTRY_L C ON C.FENTRYID=B.FENTRYID
INNER JOIN #temp2 f on f.Fname=a.FBILLNO
--where FNOTE2 = ''
--AND A.FBILLNO =@FBILLNO
--<EFBFBD>𵥻<EFBFBD>ȡԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע
UPDATE B SET FNOTE2 = D.FNOTE2
FROM T_PRD_MO A
INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
INNER JOIN T_PRD_MOENTRY_Q C ON C.FENTRYID=B.FENTRYID
INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FSRCSPLITENTRYID
inner join #temp2 f on f.Fname=a.FBILLNO
--where A.FBILLNO = 'WO2301050101'
where B.FNOTE2= ''
--AND A.FBILLNO =@FBILLNO
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>ע
--UPDATE D SET D.FNOTE2 = B.FNOTE2
--SELECT a.FBILLNO,b.FNOTE2,c.FBILLNO ,d.FNOTE2
UPDATE B SET FNOTE2 = D.FNOTE2
FROM T_PRD_MO A
INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
INNER JOIN T_PRD_MO C ON C.FBILLNO= B.FFORECASTGROUPFRIST
INNER JOIN T_PRD_MOENTRY D ON D.FID=C.FID
inner join #temp2 f on f.Fname=a.FBILLNO
--where A.FBILLNO = 'WO2301050101'
where B.FNOTE2= ''
AND A.FBILLNO <> B.FFORECASTGROUPFRIST
-- AND A.FBILLNO =@FBILLNO
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UPDATE D SET FFORECASTGROUP= c.FFORECASTGROUP
FROM T_PRD_PPBOM A
INNER JOIN T_PRD_PPBOMENTRY D ON A.FID=D.FID
INNER JOIN T_PRD_MO B ON B.FBILLNO=A.FMOBillNO
INNER JOIN T_PRD_MOENTRY C ON C.FID=B.FID
inner join #temp2 f on f.Fname=a.FMOBILLNO
where d.FFORECASTGROUP = ''
--AND A.FMOBILLNO =@FBILLNO
UPDATE A SET FINVSTOCKQTY=B.FBASEQTY
FROM T_PRD_MOENTRY A
INNER JOIN
(
SELECT B.FMATERIALID,SUM(FBASEQTY) AS 'FBASEQTY' FROM T_STK_INVENTORY A
INNER JOIN T_BD_MATERIAL B ON A.FMATERIALID=B.FMASTERID
WHERE A.FISEFFECTIVED=1
GROUP BY B.FMATERIALID
) B ON A.FMATERIALID=B.FMATERIALID
inner join t_prd_mo c on c.fid=a.fid
inner join #temp2 f on f.Fname=c.FBILLNO WHERE FINVSTOCKQTY = 0
--AND c.FBILLNO =@FBILLNO
--UPDATE a SET a.FBILLNO = ISNULL( cast( e.FBILLNO as nvarchar(100))+'-'+ cast( dbo.GetBomSeq(D.fbomid,b.fmaterialid) as nvarchar(100)) ,'')
----SELECT
----F.FNUMBER,
----a.FBILLNO,
----B.FENTRYID ,
----D.fbomid,b.fmaterialid,
----cast( e.FBILLNO as nvarchar(100))+'-'+ cast( dbo.GetBomSeq(D.fbomid,b.fmaterialid) as nvarchar(100)) as 'Bom<EFBFBD><EFBFBD><EFBFBD><EFBFBD>',
----CONVERT( nvarchar(1000),'') as '<EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD>',a.FBILLNO as '<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',e.FBILLNO as 'Դͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
--FROM T_PRD_MO A
--INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
--INNER JOIN T_PRD_MOENTRY_LK C ON C .FENTRYID=B.FENTRYID
--INNER JOIN T_PRD_MOENTRY D ON D.FID=C.FSBILLID AND D.FENTRYID=C.FSID
--INNER JOIN T_PRD_MO E ON E.FID=D.FID
--INNER JOIN T_BD_MATERIAL F ON F.FMATERIALID=B.FMATERIALID
--WHERE B.FFORECASTGROUP = ''
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
update a set FFORECASTGROUPFRIST =
CASE WHEN CHARINDEX( '-',REPLACE( FFORECASTGROUP,'_','-') ,0) = 0 THEN FFORECASTGROUP
WHEN CHARINDEX( '-',REPLACE( FFORECASTGROUP,'_','-') ,0) > 0 AND B.FSRCSPLITENTRYID=0 THEN SUBSTRING(FFORECASTGROUP,0,dbo.[func_find](FFORECASTGROUP,'-',1))
WHEN CHARINDEX( '-',REPLACE( FFORECASTGROUP,'_','-') ,0) > 0 AND B.FSRCSPLITENTRYID>0 AND SUBSTRING(FFORECASTGROUP,0,dbo.[func_find](FFORECASTGROUP,'-',2)) IS NULL THEN FFORECASTGROUP
ELSE SUBSTRING(FFORECASTGROUP,0,dbo.[func_find](FFORECASTGROUP,'-',2)) END
FROM T_PRD_MOENTRY A
INNER JOIN T_PRD_MOENTRY_Q B ON A.FENTRYID=B.FENTRYID
inner join T_PRD_MO c on c.fid =a.fid
inner join #temp2 f on f.Fname=c.FBILLNO
WHERE
1=1
AND FFORECASTGROUPFRIST= ''
--AND c.FBILLNO =@FBILLNO
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
update T_PRD_PPBOMENTRY set FFORECASTGROUPFRIST =
CASE
WHEN CHARINDEX( '-',REPLACE( A.FFORECASTGROUP,'_','-') ,0) = 0
THEN A.FFORECASTGROUP
ELSE SUBSTRING(A.FFORECASTGROUP,0, CHARINDEX( '-',REPLACE( A.FFORECASTGROUP,'_','-') ,0))
END
FROM T_PRD_PPBOMENTRY a
inner join T_PRD_PPBOM b on a.fid=b.fid
inner join #temp2 f on f.Fname=b.FMOBILLNO
WHERE FFORECASTGROUPFRIST= ''
--and b.FMOBILLNO = @FBILLNO
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD>ӹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UPDATE E SET E.F_PKGR_CUSTOMER= A.F_PKGR_CUSTOMER
--SELECT *
--D.FNOTE2,
--B.FNOTE2,*
FROM T_PRD_MO A
INNER JOIN T_PRD_MOENTRY B ON A.FID=B.FID
INNER JOIN T_PRD_MOENTRY_LK C ON C.FSID=B.FENTRYID AND C.FSBILLID=B.FID
INNER JOIN T_PRD_MOENTRY D ON D.FENTRYID=C.FENTRYID
INNER JOIN T_PRD_MO E ON E.FID=D.FID
inner join #temp2 f on f.Fname=a.FBILLNO
--where A.FBILLNO = 'TO2305300002'
AND ISNULL(E.F_PKGR_CUSTOMER,0)= 0
and E.F_PKGR_CUSTOMER<>A.F_PKGR_CUSTOMER
--<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
--SELECT FNUMERATOR,FDENOMINATOR,
--ROUND(FNUMERATOR/FDENOMINATOR,3), F_PKGR_CONSUMPTION,
--*
update T_PRD_PPBOMENTRY set FBomStdQty = ROUND(FNUMERATOR/FDENOMINATOR,3)
FROM T_PRD_PPBOMENTRY a
inner join T_PRD_PPBOM b on a.fid=b.fid
inner join #temp2 c on c.Fname=b.FMOBILLNO
WHERE FBomStdQty = 0
--and b.FMOBILLNO = @FBILLNO
drop table #temp2

View File

@@ -0,0 +1,179 @@
SELECT
t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0.FBILLNO
,t2.FID 'FORECAST_ID'
,t2e.FENTRYID 'FORECASTENTRY_ID'
,t2.FBILLNO 'F_FORECASTNUMBER'
,t2e.FSEQ 'F_LINENUMBER'
,t2e.FCUSTID 'F_CUSTOMERNAME'
,t2e.FMATERIALID 'F_MATERIALCODE' --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t2e.F_SOURCE_ORDER_LINE_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
,t2e.F_SOURCE_ORDER_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#
,t0.F_REMARK
INTO #TEMP_PLANORDER_ID_LIST
FROM T_PLN_PLANORDER t0
INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0.FID
INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID = t1e.FID
INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FENTRYID = t1.FSRCENTRYID
INNER JOIN T_PLN_FORECAST t2 on t2.fid = t2e.FID
WHERE 1 = 1
--AND t0.F_FORECASTNUMBER = ''
AND CONVERT(nvarchar(100),t0.FCREATEDATE,23) = '2024-01-18'
CREATE INDEX #TEMP_PLANORDER_ID_LIST_INDEX_FID ON #TEMP_PLANORDER_ID_LIST(FID);
SELECT
t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0.FBILLNO
,t0.FORECAST_ID
,t0.FORECASTENTRY_ID
,t0.F_FORECASTNUMBER
,t0.F_LINENUMBER
,t0.F_CUSTOMERNAME
,t0.F_MATERIALCODE --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0.F_SOURCE_ORDER_LINE_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
,t0.F_SOURCE_ORDER_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#
,ISNULL(t1_l.FDESCRIPTION,'') AS F_DESCRIPTION
--,t1_l.FDESCRIPTION F_DESCRIPTION
,ISNULL(t1e_l.FDESCRIPTION,'') AS F_REMARK --<EFBFBD><EFBFBD><EFBFBD>ע
--,t1e_l.FDESCRIPTION F_REMARK
,t2.FNUMBER 'MATERIAL_NUMBER'
,t2_l.FNAME 'MATERIAL_NAME'
,t3.TOTAL
INTO #TEMP_PLANORDER_RESERVELINK
FROM #TEMP_PLANORDER_ID_LIST t0
INNER JOIN (SELECT FID,COUNT(1) TOTAL FROM #TEMP_PLANORDER_ID_LIST GROUP BY FID ) t3 on t3.FID = t0.FID
LEFT JOIN T_PLN_FORECAST_L t1_l on t0.FORECAST_ID = t1_l.FID AND t1_l.FLOCALEID = 2052
LEFT JOIN T_PLN_FORECASTENTRY_L t1e_l on t1e_l.FENTRYID = t0.FORECASTENTRY_ID AND t1e_l.FLOCALEID = 2052
LEFT JOIN T_BD_MATERIAL t2 on t0.F_MATERIALCODE = t2.FMATERIALID
LEFT JOIN T_BD_MATERIAL_L t2_l on t0.F_MATERIALCODE = t2_l.FMATERIALID
WHERE 1=1
--AND t0.F_FORECASTNUMBER = ''
CREATE INDEX #TEMP_PLANORDER_RESERVELINK_INDEX ON #TEMP_PLANORDER_RESERVELINK(FID);
----<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Դ---
--UPDATE t0
--SET t0.F_FORECASTNUMBER = tt.F_FORECASTNUMBER
-- ,t0.F_LINENUMBER = tt.F_LINENUMBER
-- ,t0.F_CUSTOMERNAME = tt.F_CUSTOMERNAME
-- ,t0.F_MATERIALCODE = tt.F_MATERIALCODE
-- ,t0.F_REMARK = tt.F_REMARK
-- ,t0.F_MATERIALCODESHOW = tt.MATERIAL_NUMBER
-- ,t0.F_MATERIALNAMESHOW = tt.MATERIAL_NAME
--FROM T_PLN_PLANORDER t0
-- INNER JOIN #TEMP_PLANORDER_RESERVELINK tt on t0.FID = tt.FID AND tt.TOTAL = 1
----<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Դ---
--UPDATE t0_l
--SET t0_l.F_DESCRIPTION = tt.F_DESCRIPTION
--FROM T_PLN_PLANORDER_L t0_l
-- INNER JOIN #TEMP_PLANORDER_RESERVELINK tt on t0_l.FID = tt.FID AND tt.TOTAL = 1
SELECT
t0.FID --<EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0.FBILLNO
,t0.FORECAST_ID
,t0.FORECASTENTRY_ID
,t0.F_FORECASTNUMBER
,DENSE_RANK() over(partition BY t0.FID order by t0.FORECAST_ID) 'FORECASTNUMBER_SEQ'
,t0.F_LINENUMBER
,ROW_NUMBER() over(partition BY t0.FID,t0.FORECAST_ID order by t0.F_LINENUMBER) 'LINENUMBER_SEQ'
,t0.F_CUSTOMERNAME
,t0.F_MATERIALCODE --Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>id
,t0.F_SOURCE_ORDER_LINE_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
,t0.F_SOURCE_ORDER_NUMBER --<EFBFBD><EFBFBD><EFBFBD>۶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#
,t0.F_REMARK
,t0.F_DESCRIPTION
,t0.MATERIAL_NUMBER
,t0.MATERIAL_NAME
,t0.TOTAL
,DENSE_RANK() over(partition BY t0.FID order by t0.F_MATERIALCODE) 'DENSE_RANK_NUM'
INTO #TEMP_PLANORDER_RESERVELINK2
FROM
#TEMP_PLANORDER_RESERVELINK t0
WHERE 1 = 1
AND TOTAL > 1
ORDER BY FID
CREATE INDEX #TEMP_PLANORDER_RESERVELINK2_INDEX ON #TEMP_PLANORDER_RESERVELINK2(FID);
UPDATE t0 SET t0.F_MATERIALCODE = 0,t0.F_CUSTOMERNAME = 0
FROM #TEMP_PLANORDER_RESERVELINK2 t0,(SELECT FID FROM #TEMP_PLANORDER_RESERVELINK2 WHERE DENSE_RANK_NUM = 2) t1 WHERE t0.FID = t1.FID
SELECT
t0.FID
,t0.FBILLNO
,t0.FORECAST_ID
,t0.F_FORECASTNUMBER
,t0.F_DESCRIPTION
,t0.F_MATERIALCODE
,t0.F_CUSTOMERNAME
,ISNULL(stuff((select ','+ CONVERT(nvarchar(100), tt.F_LINENUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_LINENUMBER'
,ISNULL(stuff((select distinct ';'+ ISNULL(tt.F_REMARK,'') from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_REMARK'
,ISNULL(stuff((select distinct ','+ tt.MATERIAL_NUMBER from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'MATERIAL_NUMBER'
,ISNULL(stuff((select distinct ','+ tt.MATERIAL_NAME from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'MATERIAL_NAME'
,ISNULL(stuff((select distinct ','+ CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_NUMBER'
,ISNULL(stuff((select distinct ','+ CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_LINE_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_LINE_NUMBER'
INTO #TEMP
FROM #TEMP_PLANORDER_RESERVELINK2 t0
GROUP BY
t0.FID
,t0.FBILLNO
,t0.FORECAST_ID
,t0.F_FORECASTNUMBER
,t0.F_DESCRIPTION
,t0.F_MATERIALCODE
,t0.F_CUSTOMERNAME
CREATE INDEX #TEMP_INDEX ON #TEMP(FID);
SELECT
t0.FID
,t0.FBILLNO
,t0.F_MATERIALCODE
,t0.F_CUSTOMERNAME
,ISNULL(stuff((select ';'+ CONVERT(nvarchar(100), tt.F_LINENUMBER) from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_LINENUMBER'
,ISNULL(stuff((select ';'+ CONVERT(nvarchar(100), tt.F_FORECASTNUMBER) from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_FORECASTNUMBER'
,ISNULL(stuff((select distinct ';' + tt.MATERIAL_NUMBER from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'MATERIAL_NUMBER'
,ISNULL(stuff((select distinct ';' + tt.MATERIAL_NAME from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'MATERIAL_NAME'
,ISNULL(stuff((select distinct ';' + tt.F_REMARK from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_REMARK'
,ISNULL(stuff((select distinct ';' + ISNULL(tt.F_DESCRIPTION,'') from #TEMP tt where tt.FID = t0.FID for xml path('')),1,1,''),'') 'F_DESCRIPTION'
,ISNULL(stuff((select distinct ';' + CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_NUMBER'
,ISNULL(stuff((select distinct ';' + CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_LINE_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_LINE_NUMBER'
INTO #TEMP2
FROM #TEMP t0
--WHERE t0.fbillno ='MRP01679279'
GROUP BY
t0.FID
,t0.FBILLNO
,t0.F_MATERIALCODE
,t0.F_CUSTOMERNAME
CREATE INDEX #TEMP2_INDEX ON #TEMP2(FID);
--UPDATE #TEMP2 SET F_REMARK = '' WHERE F_REMARK = ';'
----<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ--
--UPDATE t0
--SET t0.F_FORECASTNUMBER = tt.F_FORECASTNUMBER
-- ,t0.F_LINENUMBER = tt.F_LINENUMBER
-- ,t0.F_CUSTOMERNAME = tt.F_CUSTOMERNAME
-- ,t0.F_MATERIALCODE = tt.F_MATERIALCODE
-- ,t0.F_REMARK = tt.F_REMARK
-- ,t0.F_MATERIALCODESHOW = tt.MATERIAL_NUMBER
-- ,t0.F_MATERIALNAMESHOW = tt.MATERIAL_NAME
--FROM T_PLN_PLANORDER t0
-- INNER JOIN #TEMP2 tt on t0.FID = tt.FID --AND tt.TOTAL = 1
----<EFBFBD>ƻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ--
--UPDATE t0_l
--SET t0_l.F_DESCRIPTION = tt.F_DESCRIPTION
--FROM T_PLN_PLANORDER_L t0_l
-- INNER JOIN #TEMP2 tt on t0_l.FID = tt.FID --AND tt.TOTAL = 1
SELECT * FROM #TEMP2
DROP TABLE #TEMP
DROP TABLE #TEMP2
DROP TABLE #TEMP_PLANORDER_ID_LIST
DROP TABLE #TEMP_PLANORDER_RESERVELINK
DROP TABLE #TEMP_PLANORDER_RESERVELINK2