428 lines
17 KiB
Python
428 lines
17 KiB
Python
|
|
import clr
|
||
|
|
clr.AddReference("System")
|
||
|
|
clr.AddReference("Kingdee.BOS")
|
||
|
|
clr.AddReference("Kingdee.BOS.Core")
|
||
|
|
clr.AddReference("Kingdee.BOS.DataEntity")
|
||
|
|
clr.AddReference("Kingdee.BOS.App")
|
||
|
|
clr.AddReference("Kingdee.BOS.Contracts")
|
||
|
|
clr.AddReference("Kingdee.BOS.ServiceHelper")
|
||
|
|
clr.AddReference("ExtensionMethods")
|
||
|
|
|
||
|
|
from Kingdee.BOS import*
|
||
|
|
from Kingdee.BOS.Core import *
|
||
|
|
from Kingdee.BOS.Core.Metadata.EntityElement import *
|
||
|
|
from Kingdee.BOS.Orm.DataEntity import*
|
||
|
|
from Kingdee.BOS.Orm.Metadata.DataEntity import*
|
||
|
|
from Kingdee.BOS.Core.DynamicForm.PlugIn import *
|
||
|
|
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
|
||
|
|
from System import *
|
||
|
|
from System.ComponentModel import*
|
||
|
|
from System.Collections.Generic import*
|
||
|
|
from System.Text import*
|
||
|
|
from Kingdee.BOS.ServiceHelper import *
|
||
|
|
from ExtensionMethods import BooleanExtension as boolObjEx
|
||
|
|
from ExtensionMethods import DateTimeExtension as dateObjEx
|
||
|
|
from ExtensionMethods import ObjectExtension as objEx
|
||
|
|
from ExtensionMethods import StringExtension as strObjEx
|
||
|
|
|
||
|
|
def ButtonClick(e):
|
||
|
|
if e.Key.EndsWith("FToSelectBtn", StringComparison.OrdinalIgnoreCase):
|
||
|
|
billNo = ""
|
||
|
|
materialId = 0
|
||
|
|
|
||
|
|
if billNo == "" and materialId == 0:
|
||
|
|
return;
|
||
|
|
|
||
|
|
sqlL = GetSqlStr(billNo,materialId)
|
||
|
|
res = DBServiceHelper.ExecuteDynamicObject(this.Context,sqlL)
|
||
|
|
if res != None and res.Count > 0:
|
||
|
|
this.View.Model.BeginIniti()
|
||
|
|
|
||
|
|
materialEntity = this.View.Model.BillBusinessInfo.GetEntryEntity("F_POSH_Entity")
|
||
|
|
materialRows = this.View.Model.GetEntityDataObject(materialEntity)
|
||
|
|
materialRows.Clear()
|
||
|
|
|
||
|
|
matFld = this.View.BillBusinessInfo.GetField("FAnalyzeMaterialId");#物料字段元素元数据,使用字段标识
|
||
|
|
for item in res:
|
||
|
|
row = DynamicObject(materialEntity.DynamicObjectType)
|
||
|
|
|
||
|
|
matId = item["MaterialId"]
|
||
|
|
matObj = BusinessDataServiceHelper.LoadSingle(this.Context, matId, matFld.RefFormDynamicObjectType)
|
||
|
|
|
||
|
|
|
||
|
|
this.View.Model.EndIniti();
|
||
|
|
|
||
|
|
def GetSqlStr(billNo, materialId):
|
||
|
|
|
||
|
|
whereSql = "";
|
||
|
|
if billNo != "":
|
||
|
|
whereSql = whereSql + " AND t0.FBILLNO = '{0}' ".format(billNo);
|
||
|
|
|
||
|
|
if materialId != "":
|
||
|
|
whereSql = whereSql + " AND t0e.FMATERIALID = {0} ".format(materialId);
|
||
|
|
|
||
|
|
sqlL = """/*dialect*/
|
||
|
|
;WITH #TopMo AS (
|
||
|
|
SELECT t0.FBILLNO,t0e.FID,t0e.FENTRYID,t0e.FMATERIALID AS TopMaterialId,t0e.FMATERIALID
|
||
|
|
,0 FLOT,CAST('' AS nvarchar(255)) FLOT_TEXT,CONVERT(decimal(23,10), 0) FAMOUNT
|
||
|
|
,CONVERT(varchar(1000),ROW_NUMBER() OVER (ORDER BY t0.FID,t0e.FSEQ)) AS 'aPATH'
|
||
|
|
,0 lv
|
||
|
|
,t0e_a.FSTOCKINQUASELAUXQTY AS '入库数量'
|
||
|
|
,t0e_a.FSTATUS
|
||
|
|
,t0.FFORMID AS 'FFORMID'
|
||
|
|
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 {0}
|
||
|
|
)
|
||
|
|
,#生产领料单 AS (
|
||
|
|
SELECT t1e.FLOT,t1e.FLOT_TEXT,t1e.FMATERIALID,'PRD_MO' AS 'FFORMID'
|
||
|
|
,SUM(t1e.FAMOUNT) AS 'FAMOUNT',t1e.FMOENTRYID,t1e.FMOBILLNO
|
||
|
|
FROM T_PRD_PICKMTRL t1
|
||
|
|
INNER JOIN T_PRD_PICKMTRLDATA t1e on t1.FID = t1e.FID
|
||
|
|
WHERE t1.FDOCUMENTSTATUS = 'C'
|
||
|
|
GROUP BY t1e.FLOT,t1e.FLOT_TEXT,t1e.FMATERIALID,t1e.FMOENTRYID,t1e.FMOBILLNO
|
||
|
|
)
|
||
|
|
, #生产补料单 AS (
|
||
|
|
SELECT t0e.FMOENTRYID,t0e.FMATERIALID,t0e.FLOT,SUM(t0e.FAMOUNT) AS 'FAMOUNT','PRD_MO' AS 'FFORMID'
|
||
|
|
FROM T_PRD_FEEDMTRL t0
|
||
|
|
INNER JOIN T_PRD_FEEDMTRLDATA t0e on t0.FID = t0e.FID
|
||
|
|
WHERE t0.FDOCUMENTSTATUS = 'C'
|
||
|
|
GROUP BY t0e.FMOID,t0e.FMOENTRYID,t0e.FMATERIALID,t0e.FLOT
|
||
|
|
)
|
||
|
|
, #生产退料单 AS (
|
||
|
|
SELECT t0e.FMOENTRYID,t0e.FMATERIALID,t0e.FLOT,SUM(t0e.FAMOUNT) AS 'FAMOUNT','PRD_MO' AS 'FFORMID'
|
||
|
|
FROM T_PRD_RETURNMTRL t0
|
||
|
|
INNER JOIN T_PRD_RETURNMTRLENTRY t0e on t0.FID = t0e.FID
|
||
|
|
WHERE t0.FDOCUMENTSTATUS = 'C'
|
||
|
|
GROUP BY t0e.FMOID,t0e.FMOENTRYID,t0e.FMATERIALID,t0e.FLOT
|
||
|
|
)
|
||
|
|
,#委外领料单 AS (
|
||
|
|
SELECT t1e.FLOT,t1e.FLOT_TEXT,t1e.FMATERIALID,'SUB_SUBREQORDER' AS 'FFORMID'
|
||
|
|
,SUM(ISNULL(t1e_a.FAMOUNT,0)) FAMOUNT,t1e.FSUBREQENTRYID AS FMOENTRYID
|
||
|
|
FROM T_SUB_PICKMTRL t1
|
||
|
|
INNER JOIN T_SUB_PICKMTRLDATA t1e on t1.FID = t1e.FID
|
||
|
|
INNER JOIN T_SUB_PICKMTRLDATA_A t1e_a on t1e.FENTRYID = t1e_a.FENTRYID
|
||
|
|
WHERE t1.FDOCUMENTSTATUS = 'C'
|
||
|
|
GROUP BY t1e.FLOT,t1e.FLOT_TEXT,t1e.FMATERIALID,t1e.FSUBREQENTRYID
|
||
|
|
)
|
||
|
|
, #委外补料单 AS (
|
||
|
|
SELECT t0e.FSUBREQENTRYID AS FMOENTRYID,t0e.FMATERIALID,t0e.FLOT,SUM(t0e.FAMOUNT) AS 'FAMOUNT','SUB_SUBREQORDER' AS 'FFORMID'
|
||
|
|
FROM T_SUB_FEEDMTRL t0
|
||
|
|
INNER JOIN T_SUB_FEEDMTRLENTRY t0e on t0.FID = t0e.FID
|
||
|
|
WHERE t0.FDOCUMENTSTATUS = 'C'
|
||
|
|
GROUP BY t0e.FLOT,t0e.FMATERIALID,t0e.FSUBREQENTRYID
|
||
|
|
)
|
||
|
|
, #委外退料单 AS (
|
||
|
|
SELECT t0e_a.FSUBREQENTRYID AS FMOENTRYID,t0e.FMATERIALID,t0e.FLOT,SUM(t0e.FAMOUNT) AS 'FAMOUNT','SUB_SUBREQORDER' AS 'FFORMID'
|
||
|
|
FROM T_SUB_RETURNMTRL t0
|
||
|
|
INNER JOIN T_SUB_RETURNMTRLENTRY t0e on t0.FID = t0e.FID
|
||
|
|
INNER JOIN T_SUB_RETURNMTRLENTRY_A t0e_a on t0e.FENTRYID = t0e_a.FENTRYID
|
||
|
|
WHERE t0.FDOCUMENTSTATUS = 'C'
|
||
|
|
GROUP BY t0e.FLOT,t0e.FMATERIALID,t0e_a.FSUBREQENTRYID
|
||
|
|
)
|
||
|
|
, #数据拆解 AS (
|
||
|
|
SELECT t0.FMATERIALID AS 'TopMaterialId'
|
||
|
|
,t0.FMATERIALID AS 'MoMaterialId'
|
||
|
|
,t1e.FMATERIALID
|
||
|
|
,t1e.FLOT
|
||
|
|
,t1e.FLOT_TEXT
|
||
|
|
,t1e.FAMOUNT
|
||
|
|
,CONVERT(decimal(23,10),0) AS '入库数量'
|
||
|
|
,0 AS 'FSTATUS'
|
||
|
|
,CONVERT(varchar(1000),CONCAT(t0.aPATH,'.',ROW_NUMBER() OVER (PARTITION BY t0.FID,t0.FENTRYID ORDER BY t1e.FMATERIALID))) AS 'aPATH'
|
||
|
|
,t0.aPATH AS 'PPATH'
|
||
|
|
,t0.lv + 1 lv
|
||
|
|
,t0.FFORMID
|
||
|
|
,t1e.MoId AS 'MoId'
|
||
|
|
,t1e.MoEntryId AS 'MoEntryId'
|
||
|
|
,t1e.MoBillNo AS 'MoBillNo'
|
||
|
|
,t0.FID AS 'PMoId'
|
||
|
|
,t0.FENTRYID AS 'PMoEntryId'
|
||
|
|
,t0.FBILLNO AS 'PMoBillNo'
|
||
|
|
,0 AS 'isTrue'
|
||
|
|
,CONVERT(varchar(100),'') PID
|
||
|
|
FROM #TopMo t0
|
||
|
|
CROSS APPLY (
|
||
|
|
SELECT t1e.FLOT,t1e.FLOT_TEXT,t1e.FMATERIALID,SUM(t1e.FAMOUNT) AS 'FAMOUNT'
|
||
|
|
,ISNULL(t2.FID,0) AS 'MoId',ISNULL(t2e.FENTRYID,0) AS 'MoEntryId',ISNULL(t2.FBILLNO,'') AS 'MoBillNo'
|
||
|
|
FROM T_PRD_PICKMTRLDATA t1e
|
||
|
|
LEFT JOIN T_PRD_MO t2 on t2.FBILLNO = t1e.FLOT_TEXT
|
||
|
|
LEFT JOIN T_PRD_MOENTRY t2e on t2e.FID = t2.FID
|
||
|
|
WHERE t1e.FMOENTRYID = t0.FENTRYID
|
||
|
|
GROUP BY t1e.FLOT,t1e.FLOT_TEXT,t1e.FMATERIALID,t2.FID,t2e.FENTRYID,t2.FBILLNO
|
||
|
|
) t1e
|
||
|
|
UNION ALL
|
||
|
|
SELECT tt.TopMaterialId
|
||
|
|
,ISNULL(t0.MoMaterialId,'')
|
||
|
|
,t0.FMATERIALID
|
||
|
|
,t0.FLOT
|
||
|
|
,t0.FLOT_TEXT
|
||
|
|
,t0.FAMOUNT
|
||
|
|
,ISNULL(t0.入库数量,0) AS '入库数量'
|
||
|
|
,t0.FSTATUS
|
||
|
|
,CONVERT(varchar(1000),CONCAT(tt.aPATH,'.',ROW_NUMBER() OVER (PARTITION BY tt.MoId,tt.MoEntryId ORDER BY t0.FMATERIALID))) AS 'aPATH'
|
||
|
|
,tt.aPATH
|
||
|
|
,tt.lv + 1 lv
|
||
|
|
,ISNULL(t0.FFORMID,'')
|
||
|
|
,ISNULL(t0.FID,0) AS 'MoId'
|
||
|
|
,ISNULL(t0.FENTRYID,0) AS 'MoEntryId'
|
||
|
|
,ISNULL(t0.FBILLNO,'') AS 'MoBillNo'
|
||
|
|
,tt.MoId AS 'PMoId'
|
||
|
|
,tt.MoEntryId AS 'PMoEntryId'
|
||
|
|
,tt.MoBillNo AS 'PMoEntryId'
|
||
|
|
,CASE WHEN t0.FBILLNO = tt.MoBillNo THEN 1 ELSE 0 END AS 'isTrue'
|
||
|
|
,CAST(CAST(CONCAT('/',REPLACE(tt.aPATH,'.','/'),'/') AS HIERARCHYID) AS varchar(100))
|
||
|
|
FROM #数据拆解 tt
|
||
|
|
CROSS APPLY (
|
||
|
|
SELECT t0.FID,t0.FBILLNO,t0e.FENTRYID,t0e.FMATERIALID AS MoMaterialId,t0e.FBOMID
|
||
|
|
,CONVERT(decimal(23,10),0) AS '入库数量'
|
||
|
|
,0 AS 'FSTATUS'
|
||
|
|
,t1.FLOT,t1.FLOT_TEXT,t1.FMATERIALID,t1.FAMOUNT,t1.FMOENTRYID,CONVERT(varchar(36),t1.FFORMID) AS 'FFORMID'
|
||
|
|
FROM #生产领料单 t1
|
||
|
|
LEFT JOIN T_PRD_MO t0 on t0.FBILLNO = t1.FLOT_TEXT
|
||
|
|
LEFT JOIN T_PRD_MOENTRY t0e on t0.FID = t0e.FID
|
||
|
|
WHERE t1.FMOENTRYID = tt.MoEntryId
|
||
|
|
AND tt.FFORMID = t1.FFORMID
|
||
|
|
UNION ALL
|
||
|
|
SELECT t0.FID,t0.FBILLNO,t0e.FENTRYID,t0e.FMATERIALID AS MoMaterialId,t0e.FBOMID
|
||
|
|
,t0e.FSTOCKINQTY,t0e.FSTATUS
|
||
|
|
,t1.FLOT,t1.FLOT_TEXT,t1.FMATERIALID,t1.FAMOUNT,t1.FMOENTRYID,CONVERT(varchar(36),t1.FFORMID) AS 'FFORMID'
|
||
|
|
FROM #委外领料单 t1
|
||
|
|
INNER JOIN T_SUB_REQORDER t0 on t0.FBILLNO = t1.FLOT_TEXT
|
||
|
|
INNER JOIN T_SUB_REQORDERENTRY t0e on t0.FID = t0e.FID
|
||
|
|
WHERE t1.FMOENTRYID = tt.MoEntryId
|
||
|
|
AND tt.FFORMID = t1.FFORMID
|
||
|
|
) t0
|
||
|
|
WHERE 1=1
|
||
|
|
AND tt.isTrue = 0
|
||
|
|
)
|
||
|
|
, #整合数据 AS (
|
||
|
|
SELECT FID AS 'MoId',FENTRYID AS 'MoEntryId',FBILLNO AS 'MoBillNo'
|
||
|
|
,0 AS 'PMoId'
|
||
|
|
,0 AS 'PMoEntryId'
|
||
|
|
,FBILLNO AS 'PMoBillNo'
|
||
|
|
,TopMaterialId,TopMaterialId AS 'MoMaterialId',FMATERIALID,FLOT,FLOT_TEXT,FAMOUNT
|
||
|
|
,入库数量,FSTATUS,aPATH,'0' AS 'PPATH',lv,FFORMID
|
||
|
|
FROM #TopMo
|
||
|
|
UNION ALL
|
||
|
|
SELECT MoId,MoEntryId,MoBillNo,PMoId,PMoEntryId,PMoBillNo
|
||
|
|
,TopMaterialId,MoMaterialId,FMATERIALID,FLOT,FLOT_TEXT,FAMOUNT,入库数量,FSTATUS,aPATH,PPATH,lv,FFORMID
|
||
|
|
FROM #数据拆解
|
||
|
|
)
|
||
|
|
, #实际工时归集 AS (
|
||
|
|
SELECT t0e.FPROORDERNO,t0e.FPROORDERENTRYID,FCOSTCENTERID
|
||
|
|
,SUM(t0e.FHRWORKTIME) AS '人员实作工时',SUM(t0e.FRPTQTY) AS '汇报数量'
|
||
|
|
,SUM(t2e.FHRWORKTIME) FHRWORKTIME,SUM(t2e.FFINISHQTY) FFINISHQTY
|
||
|
|
FROM T_CB_WORKHOURSENTRY t0e
|
||
|
|
INNER JOIN T_PRD_MORPTENTRY t2e on t2e.FENTRYID = t0e.FSRCENTRYID
|
||
|
|
WHERE t0e.FSRCBILLFORMID = 'PRD_MORPT'
|
||
|
|
GROUP BY t0e.FPROORDERNO,t0e.FPROORDERENTRYID,FCOSTCENTERID
|
||
|
|
)
|
||
|
|
,#费用项目 AS (
|
||
|
|
SELECT t2.FNAME
|
||
|
|
--,t0_L.FNAME
|
||
|
|
,ISNULL(t0.FEXPID,0) AS 'FEXPID'
|
||
|
|
,t2.fieldName
|
||
|
|
FROM T_BD_EXPENSE t0
|
||
|
|
INNER JOIN T_BD_EXPENSE_L t0_L on t0.FEXPID = t0_L.FEXPID AND t0_L.FLOCALEID = 2052
|
||
|
|
RIGHT JOIN (
|
||
|
|
SELECT 'o1' AS 'fieldName','直接人工' AS 'FNAME'
|
||
|
|
UNION ALL SELECT 'o2', '职工薪酬'
|
||
|
|
UNION ALL SELECT 'o3', '股份支付'
|
||
|
|
UNION ALL SELECT 'o4', '劳动保护费'
|
||
|
|
UNION ALL SELECT 'o5', '差旅费'
|
||
|
|
UNION ALL SELECT 'o6', '业务招待费'
|
||
|
|
UNION ALL SELECT 'o7', '办公费'
|
||
|
|
UNION ALL SELECT 'o8', '折旧与摊销'
|
||
|
|
UNION ALL SELECT 'o9', '租赁费'
|
||
|
|
UNION ALL SELECT 'o10', '水电费'
|
||
|
|
UNION ALL SELECT 'o11', '物料消耗'
|
||
|
|
UNION ALL SELECT 'o12', '加工、修理、检测费'
|
||
|
|
UNION ALL SELECT 'o13', '车辆使用费'
|
||
|
|
UNION ALL SELECT 'o14', '制造费用-其他'
|
||
|
|
) t2 on CHARINDEX(t2.FNAME ,t0_L.FNAME) > 0
|
||
|
|
)
|
||
|
|
, #费用分配明细 AS (
|
||
|
|
SELECT
|
||
|
|
t0.aPATH
|
||
|
|
,SUM(t2.FAMOUNT) famount
|
||
|
|
--,t4_l.FNAME AS '费用项目'
|
||
|
|
,t4_l.fieldName AS '费用项目'
|
||
|
|
,' ' fsourcebilltypename
|
||
|
|
FROM #整合数据 t0
|
||
|
|
INNER JOIN T_CB_PROORDERDIME t1 ON t1.FBILLID = t0.MoId
|
||
|
|
AND t1.FFORMID = t0.FFORMID AND t0.MoEntryId = t1.FBILLENTRYID
|
||
|
|
INNER JOIN V_CB_EXPALLORESULTREC t2 on t2.FPRODUCTDIMEID = t1.FPRODUCTDIMEID
|
||
|
|
INNER JOIN V_CB_EXPALLORESULTSEND t3 on t3.FSENDID = t2.FSENDID
|
||
|
|
INNER JOIN #费用项目 t4_l on t4_l.FEXPID = t2.FEXPENSEITEMID
|
||
|
|
WHERE 1 = 1
|
||
|
|
AND t0.MoEntryId != 0
|
||
|
|
GROUP BY t1.FCOSTCENTERID
|
||
|
|
,t2.FCOSTCENTERID,t2.FCostItemId,t2.FEXPENSEITEMID
|
||
|
|
--,t4_l.FNAME
|
||
|
|
,t4_l.fieldName
|
||
|
|
,t0.aPATH
|
||
|
|
)
|
||
|
|
, #费用项目行转列 AS (
|
||
|
|
SELECT *
|
||
|
|
FROM #费用分配明细 t0
|
||
|
|
PIVOT
|
||
|
|
(
|
||
|
|
SUM(t0.famount)
|
||
|
|
FOR
|
||
|
|
t0.费用项目 IN (o1,o2,o3,o4,o5,o6,o7,o8,o9,o10,o11,o12,o13,o14)
|
||
|
|
--t0.费用项目 IN ([直接人工],[职工薪酬],[股份支付],[劳动保护费],[差旅费],[业务招待费],[办公费],[折旧与摊销],[租赁费],[水电费],[物料消耗],[加工、修理、检测费],[车辆使用费],[制造费用-其他])
|
||
|
|
) AS t1
|
||
|
|
)
|
||
|
|
, #工时与成本 AS (
|
||
|
|
SELECT MoBillNo,PMoBillNo
|
||
|
|
,MoId,MoEntryId,PMoId,PMoEntryId,TopMaterialId,MoMaterialId,t0.FMATERIALID
|
||
|
|
,t0.FLOT,t0.FLOT_TEXT AS '批号',aPATH,PPATH,lv,t0.FFORMID
|
||
|
|
--,t0.FAMOUNT AS '领料总成本', ISNULL(t2.FAMOUNT,0) AS '补料总成本',ISNULL(t3.FAMOUNT,0) AS '退料总成本'
|
||
|
|
--, ISNULL(t4.FAMOUNT,0) AS '委外补料总成本',ISNULL(t5.FAMOUNT,0) AS '委外退料总成本'
|
||
|
|
,CASE t0.MoId WHEN 0 THEN (t0.FAMOUNT + ISNULL(t2.FAMOUNT,0) -ISNULL(t3.FAMOUNT,0) + ISNULL(t4.FAMOUNT,0) - ISNULL(t5.FAMOUNT,0)) ELSE 0 END AS '直接材料'
|
||
|
|
,CASE ISNULL(t6.汇报数量,0) WHEN 0 THEN 0 ELSE ISNULL(t6.人员实作工时,0)/ISNULL(t6.汇报数量,0) END AS '单位工时B'
|
||
|
|
,(CASE LEFT(t0.MoBillNo,2) WHEN 'WO' THEN 1 WHEN 'TO' THEN 2 WHEN 'RO' THEN 3 WHEN 'RT' THEN 4 ELSE 0 END) AS 'MoType'
|
||
|
|
,CASE t0.FFORMID WHEN 'PRD_MO' THEN ISNULL(t0e.FSTOCKINQUASELAUXQTY ,0) ELSE t0.入库数量 END AS '入库数量A'
|
||
|
|
,CASE t0.FFORMID WHEN 'PRD_MO' THEN ISNULL(t0e.FSTATUS ,0) ELSE t0.FSTATUS END AS '业务状态'
|
||
|
|
FROM #整合数据 t0
|
||
|
|
LEFT JOIN T_PRD_MOENTRY_A t0e on t0.MoEntryId = t0e.FENTRYID
|
||
|
|
LEFT JOIN #生产补料单 t2 on t2.FMOENTRYID = t0.PMoEntryId AND t2.FMATERIALID = t0.FMATERIALID AND t2.FLOT = t0.FLOT AND t2.FFORMID = t0.FFORMID
|
||
|
|
LEFT JOIN #生产退料单 t3 on t3.FMOENTRYID = t0.PMoEntryId AND t3.FMATERIALID = t0.FMATERIALID AND t3.FLOT = t0.FLOT AND t3.FFORMID = t0.FFORMID
|
||
|
|
LEFT JOIN #委外补料单 t4 on t4.FMOENTRYID = t0.PMoEntryId AND t4.FMATERIALID = t0.FMATERIALID AND t4.FLOT = t0.FLOT AND t4.FFORMID = t0.FFORMID
|
||
|
|
LEFT JOIN #委外退料单 t5 on t5.FMOENTRYID = t0.PMoEntryId AND t5.FMATERIALID = t0.FMATERIALID AND t5.FLOT = t0.FLOT AND t5.FFORMID = t0.FFORMID
|
||
|
|
LEFT JOIN #实际工时归集 t6 on t6.FPROORDERENTRYID = t0.MoEntryId
|
||
|
|
)
|
||
|
|
, #关联项目费用 AS (
|
||
|
|
SELECT t0.MoBillNo
|
||
|
|
,t0.PMoBillNo
|
||
|
|
,t0.aPATH
|
||
|
|
,t0.PPATH
|
||
|
|
,t0.lv
|
||
|
|
,t0.批号
|
||
|
|
,t0.直接材料
|
||
|
|
,t0.业务状态
|
||
|
|
,t0.入库数量A
|
||
|
|
,t0.单位工时B
|
||
|
|
,CASE t0.MoType WHEN 1 THEN t0.单位工时B ELSE 0 END '普通C'
|
||
|
|
,CASE t0.MoType WHEN 2 THEN t0.单位工时B ELSE 0 END '试制D'
|
||
|
|
,CASE t0.MoType WHEN 3 THEN t0.单位工时B ELSE 0 END '返工E'
|
||
|
|
,CASE t0.MoType WHEN 4 THEN t0.单位工时B ELSE 0 END '返工试制F'
|
||
|
|
,CASE t0.MoType WHEN 0 THEN t0.单位工时B ELSE 0 END '其他G'
|
||
|
|
,CASE t0.MoType WHEN 1 THEN t0.单位工时B * t0.入库数量A ELSE 0 END '普通I=C*A'
|
||
|
|
,CASE t0.MoType WHEN 2 THEN t0.单位工时B * t0.入库数量A ELSE 0 END '试制J=D*A'
|
||
|
|
,CASE t0.MoType WHEN 3 THEN t0.单位工时B * t0.入库数量A ELSE 0 END '返工K=E*A'
|
||
|
|
,CASE t0.MoType WHEN 4 THEN t0.单位工时B * t0.入库数量A ELSE 0 END '返工试制L=F*A'
|
||
|
|
,CASE t0.MoType WHEN 0 THEN t0.单位工时B * t0.入库数量A ELSE 0 END '其他M=G*A'
|
||
|
|
,MoId,MoEntryId,PMoId,PMoEntryId,TopMaterialId,MoMaterialId,t0.FMATERIALID
|
||
|
|
,ISNULL(t7.O1,0) AS 'o1'
|
||
|
|
,ISNULL(t7.O2,0) AS 'o2'
|
||
|
|
,ISNULL(t7.O3,0) AS 'o3'
|
||
|
|
,ISNULL(t7.O4,0) AS 'o4'
|
||
|
|
,ISNULL(t7.O5,0) AS 'o5'
|
||
|
|
,ISNULL(t7.O6,0) AS 'o6'
|
||
|
|
,ISNULL(t7.O7,0) AS 'o7'
|
||
|
|
,ISNULL(t7.O8,0) AS 'o8'
|
||
|
|
,ISNULL(t7.O9,0) AS 'o9'
|
||
|
|
,ISNULL(t7.O10,0) AS 'o10'
|
||
|
|
,ISNULL(t7.O11,0) AS 'o11'
|
||
|
|
,ISNULL(t7.O12,0) AS 'o12'
|
||
|
|
,ISNULL(t7.O13,0) AS 'o13'
|
||
|
|
,ISNULL(t7.O14,0) AS 'o14'
|
||
|
|
,CAST(CONCAT('/',REPLACE(t0.aPATH,'.','/'),'/') AS HIERARCHYID) PATH_ID
|
||
|
|
FROM #工时与成本 t0
|
||
|
|
LEFT JOIN #费用项目行转列 t7 on t7.aPATH = t0.aPATH
|
||
|
|
)
|
||
|
|
SELECT * INTO #关联项目费用临时表 FROM #关联项目费用
|
||
|
|
;WITH #统计 AS (
|
||
|
|
SELECT
|
||
|
|
SUM(t1.[普通C]) AS 'C'
|
||
|
|
,SUM(t1.[试制D]) AS 'D'
|
||
|
|
,SUM(t1.[返工E]) AS 'E'
|
||
|
|
,SUM(t1.[返工试制F]) AS 'F'
|
||
|
|
,SUM(t1.[其他G]) AS 'G'
|
||
|
|
,SUM(t1.[普通I=C*A]) AS 'I'
|
||
|
|
,SUM(t1.[试制J=D*A]) AS 'J'
|
||
|
|
,SUM(t1.[返工K=E*A]) AS 'K'
|
||
|
|
,SUM(t1.[返工试制L=F*A]) AS 'L'
|
||
|
|
,SUM(t1.[其他M=G*A]) AS 'M'
|
||
|
|
,SUM(t1.直接材料) AS '直接材料'
|
||
|
|
,SUM(t1.O1) AS 'o1'
|
||
|
|
,SUM(t1.O2) AS 'o2'
|
||
|
|
,SUM(t1.O3) AS 'o3'
|
||
|
|
,SUM(t1.O4) AS 'o4'
|
||
|
|
,SUM(t1.O5) AS 'o5'
|
||
|
|
,SUM(t1.O6) AS 'o6'
|
||
|
|
,SUM(t1.O7) AS 'o7'
|
||
|
|
,SUM(t1.O8) AS 'o8'
|
||
|
|
,SUM(t1.O9) AS 'o9'
|
||
|
|
,SUM(t1.O10) AS 'o10'
|
||
|
|
,SUM(t1.O11) AS 'o11'
|
||
|
|
,SUM(t1.O12) AS 'o12'
|
||
|
|
,SUM(t1.O13) AS 'o13'
|
||
|
|
,SUM(t1.O14) AS 'o14'
|
||
|
|
,t0.aPATH
|
||
|
|
FROM #关联项目费用临时表 t0
|
||
|
|
INNER JOIN #关联项目费用临时表 t1 ON t0.lv <= t1.lv
|
||
|
|
--AND CHARINDEX(t0.aPATH,t1.aPATH) = 1
|
||
|
|
AND t1.PATH_ID.IsDescendantOf(t0.PATH_ID) = 1
|
||
|
|
GROUP BY t0.aPATH
|
||
|
|
)
|
||
|
|
SELECT t0.MoBillNo
|
||
|
|
,t0.PMoBillNo
|
||
|
|
,t3.FNUMBER AS '产品编码',t3_l.FNAME AS '产品名称',t3_l.FSPECIFICATION AS '产品规格型号'
|
||
|
|
,t1.FNUMBER AS '物料编码',t1_l.FNAME AS '物料名称',t1_l.FSPECIFICATION AS '物料规格型号'
|
||
|
|
,CASE t1b.FERPCLSID WHEN 1 THEN '外购' WHEN 2 THEN '自制' WHEN 3 THEN '委外' WHEN 5 THEN '虚拟' ELSE '' END AS '物料属性'
|
||
|
|
,t0.批号
|
||
|
|
,t0.业务状态
|
||
|
|
,t2.直接材料 + t2.O1 + t2.O2 + t2.O3 + t2.O4 + t2.O5 + t2.O6 + t2.O7 + t2.O8 + t2.O9 + t2.O10 + t2.O11 + t2.O12 + t2.O13 + t2.O14 AS O0
|
||
|
|
,t2.直接材料
|
||
|
|
,t2.O1 AS 直接人工 --AS O1
|
||
|
|
,t2.O2 AS 职工薪酬 --AS O2
|
||
|
|
,t2.O3 AS 股份支付 --AS O3
|
||
|
|
,t2.O4 AS 劳动保护费 --AS O4
|
||
|
|
,t2.O5 AS 差旅费 --AS O5
|
||
|
|
,t2.O6 AS 业务招待费 --AS O6
|
||
|
|
,t2.O7 AS 办公费 --AS O7
|
||
|
|
,t2.O8 AS 折旧与摊销 --AS O8
|
||
|
|
,t2.O9 AS 租赁费 --AS O9
|
||
|
|
,t2.O10 AS 水电费 --AS O10
|
||
|
|
,t2.O11 AS 物料消耗费 --AS O11
|
||
|
|
,t2.O12 --AS [加工、修理、检测费]
|
||
|
|
,t2.O13 AS 车辆使用费 --AS O13
|
||
|
|
,t2.O14 --AS [制造费用-其他]
|
||
|
|
,t0.入库数量A --AS A
|
||
|
|
,t0.单位工时B --AS B
|
||
|
|
,t2.C AS [普通C]
|
||
|
|
,t2.D AS [试制D]
|
||
|
|
,t2.E AS [返工E]
|
||
|
|
,t2.F AS [返工试制F]
|
||
|
|
,t2.G AS [其他G]
|
||
|
|
,t2.C + t2.D +t2.E + t2.F + t2.G AS H--[合计H=C+D+E+F+G]
|
||
|
|
,t2.I --AS [普通I=C*A]
|
||
|
|
,t2.J --AS [试制J=D*A]
|
||
|
|
,t2.K --AS [返工K=E*A]
|
||
|
|
,t2.L --AS [返工试制L=F*A]
|
||
|
|
,t2.M --AS [其他M=G*A]
|
||
|
|
,t2.I + t2.J + t2.K + t2.L + t2.M AS N--[合计N=I+J+K+L+M]
|
||
|
|
,t0.aPATH
|
||
|
|
,t0.PPATH
|
||
|
|
,t0.lv
|
||
|
|
,MoId,MoEntryId,PMoId,PMoEntryId,TopMaterialId,MoMaterialId,t0.FMATERIALID
|
||
|
|
,CAST(CONCAT('/',REPLACE(t0.aPATH,'.','/'),'/') AS HIERARCHYID) ID
|
||
|
|
,CAST(CONCAT('/',REPLACE(t0.PPATH,'.','/'),'/') AS HIERARCHYID) PID
|
||
|
|
FROM #关联项目费用临时表 t0
|
||
|
|
INNER JOIN T_BD_MATERIAL t1 on t0.FMATERIALID = t1.FMATERIALID
|
||
|
|
INNER JOIN T_BD_MATERIALBASE t1b on t1b.FMATERIALID = t0.FMATERIALID
|
||
|
|
INNER JOIN T_BD_MATERIAL_L t1_l on t0.FMATERIALID = t1_l.FMATERIALID AND t1_l.FLOCALEID = 2052
|
||
|
|
INNER JOIN #统计 t2 on t0.aPATH = t2.aPATH
|
||
|
|
INNER JOIN T_BD_MATERIAL t3 on t0.TopMaterialId = t3.FMATERIALID
|
||
|
|
INNER JOIN T_BD_MATERIAL_L t3_l on t0.TopMaterialId = t3_l.FMATERIALID AND t3_l.FLOCALEID = 2052
|
||
|
|
ORDER BY CAST(CONCAT('/',REPLACE(t0.aPATH,'.','/'),'/') AS HIERARCHYID)
|
||
|
|
|
||
|
|
DROP TABLE #关联项目费用临时表
|
||
|
|
""".format(whereSql)
|
||
|
|
|
||
|
|
return sqlL
|