172 lines
5.6 KiB
Transact-SQL
172 lines
5.6 KiB
Transact-SQL
declare @sqlL varchar(max)
|
|
declare @billNo varchar(100),@materialNumber varchar(100)
|
|
declare @dbName varchar(100)
|
|
IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#生产订单') IS NOT NULL)
|
|
BEGIN
|
|
DROP TABLE #生产订单
|
|
END
|
|
|
|
IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#关联项目费用临时表') IS NOT NULL)
|
|
BEGIN
|
|
DROP TABLE [dbo].[#关联项目费用临时表]
|
|
END
|
|
|
|
CREATE TABLE #生产订单(
|
|
[FBILLNO] [nvarchar] (255) NOT NULL,
|
|
[FID] [int] NOT NULL,
|
|
[FENTRYID] [int] NOT NULL,
|
|
[TopMaterialId] [int] NULL,
|
|
[FMATERIALID] [int] NULL,
|
|
[FFORMID] [varchar](36) NULL,
|
|
[入库数量] [decimal](23, 10) NOT NULL,
|
|
[FSTATUS] [char](1) NULL,
|
|
[FCOSTDATE] [datetime] NULL,
|
|
[FQTY] [decimal](23, 10) NOT NULL,
|
|
[FPERIOD] [int] NULL
|
|
) ON [PRIMARY]
|
|
|
|
SET @sqlL = N'
|
|
INSERT INTO #生产订单
|
|
SELECT t0.FBILLNO,t0.FID,t0e.FENTRYID,t0e.FMATERIALID AS TopMaterialId,t0e.FMATERIALID
|
|
,t0.FFORMID AS FFORMID,t0e_a.FSTOCKINQUASELAUXQTY AS 入库数量
|
|
,t0e_a.FSTATUS,t0e_a.FCOSTDATE,t0e_a.FSTOCKINQUASELAUXQTY AS FQTY
|
|
,CONVERT(INT, CONVERT(VARCHAR(6),ISNULL(t0e_a.FCOSTDATE,GETDATE()),112)) AS FPERIOD
|
|
FROM T_PRD_MO t0
|
|
INNER JOIN T_PRD_MOENTRY t0e on t0.FID = t0e.FID
|
|
INNER JOIN T_PRD_MOENTRY_A t0e_a on t0e.FENTRYID = t0e_a.FENTRYID
|
|
INNER JOIN T_BD_MATERIAL t1 on t1.FMATERIALID = t0e.FMATERIALID
|
|
WHERE 1 = 1
|
|
'
|
|
|
|
select @dbName = db_name()
|
|
if @dbName != 'AIS20231110222743'
|
|
BEGIN
|
|
SET @billNo = 'WO2403210039'
|
|
END
|
|
|
|
IF @billNo != '' OR @materialNumber = ''
|
|
BEGIN
|
|
SET @sqlL = @sqlL + N' AND t0.FBILLNO = ''' + @billNo + ''''
|
|
END
|
|
|
|
IF @materialNumber != ''
|
|
BEGIN
|
|
SET @sqlL = @sqlL + N' AND t1.FNUMBER = ''' + @materialNumber + ''''
|
|
END
|
|
|
|
EXEC(@sqlL)
|
|
|
|
;WITH #批号 AS (
|
|
SELECT t0.FLOTID,ISNULL(t1.FID,0) 'LotMoId'
|
|
,ISNULL(t1e.FENTRYID,0) 'LotMoEntryId'
|
|
FROM T_BD_LOTMASTER t0
|
|
LEFT JOIN T_PRD_MO t1 on t0.FNUMBER = t1.FBILLNO
|
|
LEFT JOIN T_PRD_MOENTRY t1e on t1e.FID = t1.FID
|
|
WHERE t0.FDOCUMENTSTATUS = 'C'
|
|
AND t0.FFORBIDSTATUS = 'A'
|
|
)
|
|
--, #直接材料 AS (
|
|
-- SELECT t2.FMATERIALID
|
|
-- ,t1.FPRODUCTDIMEID,t2.FLOT
|
|
-- ,SUM(t1.FAMOUNT) 'FAMOUNT'
|
|
-- ,MAX(CONVERT(int,CONVERT(varchar(6) ,t3.FBILLDATE,112))) AS 'FPERIOD'
|
|
-- FROM V_CB_COSTALLORESULTSEND t1
|
|
-- INNER JOIN T_HS_INIVSTOCKDIMENSION t2 on t1.FDIMEENTRYID = t2.FENTRYID
|
|
-- INNER JOIN V_HS_OUTINSTOCKSEQ t3 on t3.FENTRYID = t1.FOUTINSTOCKID
|
|
-- OUTER APPLY (
|
|
-- SELECT t4.FNUMBER,t7.FPRODUCTNO
|
|
-- ,ISNULL(t7.FBILLID,0),ISNULL(t7.FBILLENTRYID,0)
|
|
-- FROM T_BD_LOTMASTER t4
|
|
-- LEFT JOIN T_CB_PROORDERDIME t7 on t7.FPRODUCTNO = t4.FNUMBER
|
|
-- WHERE t4.FLOTID = t0.FLOT
|
|
-- ) t4
|
|
-- GROUP BY t2.FMATERIALID,t1.FPRODUCTDIMEID,t2.FLOT
|
|
--)
|
|
,#数据整合 AS (
|
|
SELECT t0.FBILLNO AS 'MoBillNo'
|
|
,t0.FBILLNO AS 'PMoBillNo'
|
|
,CONVERT(varchar(1000),ROW_NUMBER() OVER (ORDER BY t0.FID,t0.FENTRYID,t0.FMATERIALID)) AS 'aPATH'
|
|
,CONVERT(varchar(1000),'0') AS 'PPATH'
|
|
,CONVERT(VARCHAR(8000),'') AS 'MPath'
|
|
,0 AS 'lv'
|
|
,t0.FID AS 'MoId'
|
|
,t0.FENTRYID AS 'MoEntryId'
|
|
,t0.FMATERIALID AS 'MoMaterialId'
|
|
,0 AS 'PMoId'
|
|
,0 AS 'PMoEntryId'
|
|
,0 AS 'PMoMaterialId'
|
|
,t0.TopMaterialId
|
|
,t0.FMATERIALID
|
|
,0 Lot
|
|
--,CONVERT(nvarchar(255),t0.FBILLNO) AS 'Lot'
|
|
,CONVERT(decimal(23,10),0) AS 'FAMOUNT'
|
|
,t0.FPERIOD
|
|
FROM #生产订单 t0
|
|
INNER JOIN T_CB_PROORDERDIME tt on t0.FID = tt.FBILLID AND t0.FENTRYID = tt.FBILLENTRYID
|
|
INNER JOIN V_CB_COSTALLORESULTSEND t1 on tt.FPRODUCTDIMEID = t1.FPRODUCTDIMEID
|
|
INNER JOIN T_HS_INIVSTOCKDIMENSION t2 on t2.FENTRYID = t1.FDIMEENTRYID
|
|
INNER JOIN V_HS_OUTINSTOCKSEQ t3 on t3.FENTRYID = t1.FOUTINSTOCKID
|
|
UNION ALL
|
|
SELECT ISNULL(t1.FPRODUCTNO,'') AS 'MoBillNo'
|
|
,tt.MoBillNo
|
|
,CONVERT(varchar(1000),CONCAT(tt.aPATH,'.',ROW_NUMBER() OVER (PARTITION BY tt.MoId,tt.MoEntryId ORDER BY t1.FMATERIALID))) AS 'aPATH'
|
|
,tt.aPATH
|
|
,CONVERT(varchar(8000),CONCAT(tt.MPath,ISNULL(tt.MoBillNo,''),'>'))
|
|
,tt.lv + 1 lv
|
|
,ISNULL(t1.FBILLID,0) AS 'MoId'
|
|
,ISNULL(t1.FBILLENTRYID,0) AS 'MoEntryId'
|
|
,ISNULL(t1.FMATERIALID, 0)
|
|
,tt.MoId AS 'PMoId'
|
|
,tt.MoEntryId AS 'PMoEntryId'
|
|
,tt.MoMaterialId AS 'PMoMaterialId'
|
|
,tt.TopMaterialId
|
|
,t1.FMATERIALID
|
|
,ISNULL(t1.FLOT,0)
|
|
,CONVERT(decimal(23,10),t1.FAMOUNT)
|
|
,t1.FPERIOD
|
|
FROM (SELECT t0.*,t1.FNUMBER
|
|
FROM #数据整合 t0
|
|
INNER JOIN T_BD_LOTMASTER t1 on t0.Lot != 0 AND t0.Lot = t1.FLOTID
|
|
) tt
|
|
CROSS APPLY (
|
|
SELECT
|
|
t0.FBILLID,t0.FBILLENTRYID
|
|
,t0.FPRODUCTNO
|
|
,t1.FAMOUNT,t2.FMATERIALID,t2.FLOT
|
|
,CONVERT(int,CONVERT(varchar(6) ,t3.FBILLDATE,112)) AS 'FPERIOD'
|
|
FROM T_CB_PROORDERDIME t0
|
|
INNER JOIN V_CB_COSTALLORESULTSEND t1 on t0.FPRODUCTDIMEID = t1.FPRODUCTDIMEID
|
|
INNER JOIN T_HS_INIVSTOCKDIMENSION t2 on t2.FENTRYID = t1.FDIMEENTRYID
|
|
INNER JOIN V_HS_OUTINSTOCKSEQ t3 on t3.FENTRYID = t1.FOUTINSTOCKID
|
|
--WHERE tt.FID = t0.FBILLID AND tt.FENTRYID = t0.FBILLENTRYID
|
|
WHERE tt.FNUMBER = t0.FPRODUCTNO
|
|
--GROUP BY t2.FMATERIALID,t4.FNUMBER,t5.FID,t5e.FENTRYID
|
|
) t1
|
|
)
|
|
, #成本计算 AS (
|
|
SELECT
|
|
t0.FPRODUCTDIMEID
|
|
,t0.FPRODUCTNO
|
|
,t2.FMATERIALID
|
|
,SUM(t2.FQUALIFIEDINQTY) '本期完工入库数量'
|
|
,SUM(t2e.FQUALIFIEDINAMOUNT) AS '本期完工入库金额'
|
|
,SUM(t2.FCURRINPUTAMOUNT) AS '本期投入金额'
|
|
FROM T_CB_PROORDERDIME t0
|
|
INNER JOIN V_CB_PROORDERINFO t1 ON t1.FPRODUCTDIMEID= t0.FPRODUCTDIMEID
|
|
INNER JOIN V_CB_COSTMATTERIAL t2 on t2.FID = t1.FID
|
|
INNER JOIN V_CB_COSTMATTERIALDETAIL t2e on t2.FENTRYID = t2e.FENTRYID
|
|
WHERE 1 = 1
|
|
AND t2.FEXPTYPE = 0
|
|
--AND t0.FPRODUCTNO = 'WO2403210039'
|
|
AND t2e.FEXPENSESITEMID = 20045
|
|
AND t2e.FCOSTITEMID = 20522
|
|
GROUP BY t0.FPRODUCTDIMEID
|
|
,t2.FMATERIALID
|
|
,t0.FPRODUCTNO
|
|
)SELECT * FROM #数据整合
|
|
--SELECT
|
|
-- *
|
|
-- ,t1.总成本 / t0.本期投入金额 * t0.本期完工入库金额 AS '完工金额'
|
|
--FROM #成本计算 t0
|
|
-- INNER JOIN #材料费用分配明细 t1 on t0.FPRODUCTDIMEID = t1.FPRODUCTDIMEID
|
|
-- AND t0.FMATERIALID = t1.FMATERIALID |