Files
GateDge2023_ljy/07.珠海英搏尔/Enpower.Python/产品成本还原报AAAAAAAAAAAA.sql
PastSaid 5472714e30 aa
2024-08-29 09:42:49 +08:00

312 lines
10 KiB
PL/PgSQL

IF EXISTS (SELECT 1 WHERE OBJECT_ID('tempdb..#查询结果') IS NOT NULL)
BEGIN
DROP TABLE [dbo].[#]
END
DECLARE @period int
DECLARE @dbName varchar(100)
DECLARE @ACCTGORGID int
DECLARE @billNo varchar(100)
SET @ACCTGORGID = 100039
SET @period = 201801
SET @billNo = 'MO000019'
SELECT @dbName = DB_NAME()
IF @dbName != 'AIS20231110222743'
BEGIN
SET @period = 202407
--SET @period = 202308
SET @ACCTGORGID = 1
SET @billNo = 'WO2403210039'
--SET @billNo = 'WO2403210048'
--SET @billNo = 'WO2304230023'
--SET @billNo = 'WO2405290121'
--SET @billNo = 'WO2406220013'
--SET @billNo = 'TO2302060061'
--SET @billNo = 'WO2311020005'
--SET @billNo = 'WO2312050303'
--SET @billNo = 'WO2403270354'
--SET @billNo = 'WO2406050001'
--SET @billNo = 'WO2404170154'
END
CREATE TABLE #(
[FPRODUCTNO] nvarchar(255) COLLATE Chinese_PRC_CI_AS NOT NULL,
[FBILLID] int NOT NULL,
[FBILLENTRYID] int NOT NULL,
[FPRODUCTID] int NOT NULL,
--[FFORMID] varchar(36) COLLATE Chinese_PRC_CI_AS NOT NULL,
[FPRODUCTDIMEID] int NOT NULL,
[INFOID] int NOT NULL,
[FACCTGID] int NOT NULL,
[FMATERIALID] int NOT NULL,
[FEXPTYPE] char(1) COLLATE Chinese_PRC_CI_AS NOT NULL,
--[单耗] decimal(23,10) NULL,
--[自身单耗] decimal(23,10) NULL,
[使] decimal(23,10) NOT NULL,
--[成本占比] decimal(23,10) NOT NULL,
--[单价] decimal(23,10) NOT NULL,
[] decimal(23,10) NOT NULL,
[] decimal(23,10) NOT NULL,
[] decimal(23,10) NOT NULL,
[] decimal(23,10) NOT NULL,
[] decimal(23,10) NOT NULL,
[] decimal(23,10) NOT NULL,
[] decimal(23,10) NOT NULL,
[] decimal(23,10) NOT NULL,
[FAMOUNT] decimal(23,10) NULL,
[FQTY] decimal(23,10) NULL,
[FLOT] int NULL,
[FPERIOD] int NULL,
[FNUMBER] nvarchar(255) COLLATE Chinese_PRC_CI_AS NULL,
[SubBillId] int NULL,
[SubBillEntryId] int NULL,
[SubPRODUCTDIMEID] int NULL,
[MPATH] nvarchar(MAX) COLLATE Chinese_PRC_CI_AS NOT NULL,
[FGOON] int NOT NULL,
[FLEVEL] int not null
)
CREATE INDEX idx_查询结果_fuhesuoyin ON #([SubBillEntryId]);
;WITH # AS (
SELECT t0.FPRODUCTNO
,t0.FBILLID
,t0.FBILLENTRYID
,t0.FPRODUCTID
,t0.FFORMID
,t3.FMATERIALID
,t1.FPRODUCTDIMEID
,t1.FACCTGID
,t1.FID AS 'INFOID'
,t3.FEXPTYPE
,t3.FSUMCURRINPUTAMOUNT '物料投入成本'
,t3.FSUMQUALIFIEDINAMOUNT '物料完工成本'
,t4.FSUMCURRINPUTAMOUNT '产品投入成本'
,t4.FSUMQUALIFIEDINAMOUNT '产品完工成本'
,t3.FSUMCURRINPUTQTY '物料投入数量'
,CAST(t3.FSUMQUALIFIEDINQTY AS decimal(23,10)) '物料完工数量'
,t4.FSUMCURRINPUTQTY '产品投入数量'
,t4.FSUMQUALIFIEDINQTY '产品完工数量'
,CONCAT(t0.FPRODUCTNO,'_') AS 'MPATH'
,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD'
,RANK() OVER (ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN'
FROM T_CB_PROORDERDIME t0
INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID
INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID
INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID
INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID
WHERE 1 = 1
AND t0.FPRODUCTNO = @billNo
AND t2.FACCTGORGID = @ACCTGORGID
AND t2.FCOMPUTEID != ''
AND (t2.FYEAR * 100 + t2.FPERIOD) <= @period
AND t1.FENDINITKEY = 1
AND t4.FSUMQUALIFIEDINQTY != 0
)
INSERT INTO #
SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID
,t0.FPRODUCTDIMEID
,t0.INFOID
,t0.FACCTGID
,t0.FMATERIALID
,t0.FEXPTYPE
,CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) AND t0. != 0 THEN (ISNULL(t4.FAMOUNT, 0) / t0.) ELSE 1 END '使用比例'
,t0.
,t0.
,t0.[]
,t0.
,t0.[]
,t0.
,t0.[]
,t0.
,ISNULL(t4.FAMOUNT, 0) '领料成本'
,ISNULL(t4.FQTY,0) AS '领料数量'
,ISNULL(t4.FLOT,0) AS 'FLOT'
,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD'
,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT'
,t6.FBILLID SUBFBILLID
,t6.FBILLENTRYID SUBFBILLENTRYID
,t6.FPRODUCTDIMEID SUBFPRODUCTDIMEID
,t0.MPATH AS 'MPATH'
,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0
WHEN t0.FPRODUCTNO = t5.FNUMBER THEN 0
WHEN t0. = 0 THEN 0
ELSE 1 END 'FGOON'
,0
FROM # t0
OUTER APPLY (
SELECT t5.FLOT
,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD'
,SUM(t4.FAMOUNT) AS 'FAMOUNT',CAST(SUM(t6.FQTY) AS decimal(23,10)) AS 'FQTY'
FROM V_CB_COSTALLORESULTSEND t4
INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0
INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID
WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID
AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD
GROUP BY t5.FLOT
,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112))
) t4
LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT
LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID
WHERE t0.RN = 1
ORDER BY t0.FPRODUCTDIMEID
,t0.FEXPTYPE DESC
,t0.FMATERIALID ASC
,t4.FLOT ASC
DECLARE @num INT,@level int,@LoopCount int
SET @num = 1
SET @level =1
SET @LoopCount = 0;
WHILE(@num!=0 AND @LoopCount < 30)
BEGIN
;WITH # AS (
SELECT t0.FPRODUCTNO
,t0.FBILLID
,t0.FBILLENTRYID
,t0.FPRODUCTID
,t0.FFORMID
,t3.FMATERIALID
,t1.FPRODUCTDIMEID
,t1.FACCTGID
,t1.FID AS 'INFOID'
,t3.FEXPTYPE
,t3.FSUMCURRINPUTQTY '物料投入数量'
,t3.FSUMCURRINPUTAMOUNT '物料投入成本'
,t3.FSUMQUALIFIEDINQTY '物料完工数量'
,t3.FSUMQUALIFIEDINAMOUNT '物料完工成本'
,t4.FSUMCURRINPUTQTY '产品投入数量'
,t4.FSUMCURRINPUTAMOUNT '产品投入成本'
,t4.FSUMQUALIFIEDINQTY '产品完工数量'
,t4.FSUMQUALIFIEDINAMOUNT '产品完工成本'
,CONCAT(tt.MPATH,t0.FPRODUCTNO,'_') AS 'MPATH'
,(t2.FYEAR * 100 + t2.FPERIOD) AS 'FPERIOD'
,RANK() OVER (PARTITION BY t0.FBILLENTRYID ORDER BY (t2.FYEAR * 100 + t2.FPERIOD) DESC) 'RN'
,tt.使
,tt. AS '上级物料完工成本'
,CAST(CASE WHEN t4.FSUMQUALIFIEDINAMOUNT = 0 THEN 1 ELSE tt. / t4.FSUMQUALIFIEDINAMOUNT END AS decimal(23,10)) AS '完工占比'
FROM # tt
INNER JOIN T_CB_PROORDERDIME t0 on tt.SubBillEntryId = t0.FBILLENTRYID
AND tt.SubBillId = t0.FBILLID AND tt.SubPRODUCTDIMEID = t0.FPRODUCTDIMEID
INNER JOIN V_CB_PROORDERINFO t1 on t1.FPRODUCTDIMEID = t0.FPRODUCTDIMEID
INNER JOIN V_HS_OUTACCTG t2 on t1.FACCTGID = t2.FID
INNER JOIN V_CB_COSTMATTERIAL t3 on t3.FID = t1.FID
INNER JOIN V_CB_COSTCALEXPENSE t4 on t4.FID = t3.FID
WHERE 1 = 1
AND tt.FGOON = 1
AND tt.FLEVEL = @level - 1
AND t2.FACCTGORGID = @ACCTGORGID
AND t2.FCOMPUTEID != ''
AND (t2.FYEAR * 100 + t2.FPERIOD) <= tt.FPERIOD
AND t1.FENDINITKEY = 1
--AND t4.FSUMQUALIFIEDINQTY != 0
--AND tt.FLEVEL < 2
)
INSERT INTO #
SELECT t0.FPRODUCTNO,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID
,t0.FPRODUCTDIMEID
,t0.INFOID
,t0.FACCTGID
,t0.FMATERIALID
,t0.FEXPTYPE
,CAST(CASE WHEN (t0.FEXPTYPE = 0 AND ISNULL(t4.FLOT,0)!= 0) AND t0. != 0 THEN (ISNULL(t4.FAMOUNT, 0) / t0.) ELSE 1 END AS decimal(23,10)) * CAST(t0.使 * t0. AS decimal(23,10)) '使用比例'
,t0.
,t0.
,t0.[]
,t0.
,t0.[]
,t0.
,t0.[]
,t0.
,ISNULL(t4.FAMOUNT, 0) '领料成本'
,ISNULL(t4.FQTY,0) AS '领料数量'
,ISNULL(t4.FLOT,0) AS 'FLOT'
,ISNULL(t4.FPERIOD ,0) AS 'FPERIOD'
,ISNULL(t5.FNUMBER,'') AS 'FLOT_TEXT'
,t6.FBILLID SUBFBILLID
,t6.FBILLENTRYID SUBFBILLENTRYID
,t6.FPRODUCTDIMEID SUBFPRODUCTDIMEID
,t0.MPATH AS 'MPATH'
,CASE WHEN ISNULL(t6.FBILLENTRYID,0) = 0 THEN 0
WHEN CHARINDEX(CONCAT(t5.FNUMBER,'_'),t0.MPATH) > 0 THEN 0
WHEN t0. = 0 THEN 0
ELSE 1 END 'FGOON'
,@level AS 'Flevel'
FROM # t0
OUTER APPLY (
SELECT t5.FLOT
,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) AS 'FPERIOD'
,SUM(t4.FAMOUNT) AS 'FAMOUNT',CAST(SUM(t6.FQTY) AS decimal(23,10)) AS 'FQTY'
FROM V_CB_COSTALLORESULTSEND t4
INNER JOIN T_HS_INIVSTOCKDIMENSION t5 on t5.FENTRYID = t4.FDIMEENTRYID AND t5.FLOT != 0
INNER JOIN V_HS_OUTINSTOCKSEQ t6 on t6.FENTRYID = t4.FOUTINSTOCKID
WHERE t4.FPRODUCTDIMEID = t0.FPRODUCTDIMEID AND t5.FMATERIALID = t0.FMATERIALID
AND CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112)) <= t0.FPERIOD
GROUP BY t5.FLOT
,CONVERT(int,CONVERT(varchar(6) ,t6.FBILLDATE,112))
) t4
LEFT JOIN T_BD_LOTMASTER t5 on t5.FLOTID = t4.FLOT
LEFT JOIN T_CB_PROORDERDIME t6 on t6.FPRODUCTNO = t5.FNUMBER AND t6.FPRODUCTID = t0.FMATERIALID
WHERE t0.RN = 1
ORDER BY t0.FPRODUCTDIMEID
,t0.FEXPTYPE DESC
,t0.FMATERIALID ASC
,t4.FLOT ASC
SET @num = @@ROWCOUNT
SET @level += 1
SET @LoopCount += 1
UPDATE STATISTICS # idx_查询结果_fuhesuoyin;
END
SELECT t0.FPRODUCTNO AS '工单编号'
,t0.FBILLID,t0.FBILLENTRYID,t0.FPRODUCTID,t0.FPRODUCTDIMEID
,t0.FACCTGID,t0.INFOID
,t0.FMATERIALID
--,t1.FNUMBER AS '物料编码'
--,t1_l.FNAME AS '物料名称'
,CASE t0.FEXPTYPE WHEN 0 THEN '直接材料' WHEN 1 THEN '间接材料' WHEN 2 THEN '加工费' WHEN 9 THEN '工时' ELSE '其他' END AS '费用类别'
,t0.使
,t0.使 * t0. AS '料工费'
--,ROUND(t0.使用比例 * t0.物料完工成本,2) AS '料工费'
,CASE t0.FEXPTYPE WHEN 9 THEN t0. ELSE 0 END * t0.使 AS '总工时'
,t0.
,t0.
,t0.
,t0.
,t0.FNUMBER AS '批号'
,t0.FPERIOD AS '领料周期'
,t0.FGOON AS '执行分解'
,t0.FLEVEL AS '层级'
,t0.MPATH AS '分解路径'
,t0.
,t0.
,t0.
,t0.
,t0.FAMOUNT AS '领料成本'
,t0.FQTY AS '领料数量'
,t0.FLOT
,t0.SubBillId
,t0.SubBillEntryId
,t0.SubPRODUCTDIMEID
FROM # t0
--INNER JOIN V_CB_COSTMATTERIAL t1 on t1.FID = t0.INFOID
--INNER JOIN V_CB_COSTMATTERIALDETAIL t1d on t1d.FENTRYID = t1.FENTRYID
--LEFT JOIN T_BD_MATERIAL t1 on t0.FMATERIALID = t1.FMATERIALID
--LEFT JOIN T_BD_MATERIAL_L t1_l on t1_l.FMATERIALID = t0.FMATERIALID AND t1_l.FLOCALEID = 2052
--LEFT JOIN T_BD_MATERIAL t2 on t2.FMATERIALID = t0.FPRODUCTID
--LEFT JOIN T_BD_MATERIAL_L t2_l on t2_l.FMATERIALID = t0.FPRODUCTID AND t2_l.FLOCALEID = 2052
WHERE 1=1
ORDER BY t0.FLEVEL
,t0.FPRODUCTID DESC
,t0.FEXPTYPE
,t0.FMATERIALID