Files
GateDge2023_ljy/ProductionMaterialsReport/ProductionMaterialsReportEx.cs
PastSaid f3eae0a034 a
2024-01-08 10:58:24 +08:00

363 lines
15 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts.Report;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProductionMaterialsReport
{
[Description("生产投料报表-服务插件"), HotUpdate]
public class ProductionMaterialsReport : SysReportBaseService
{
/***********事件执行顺序*************
2015/8/31 18:04:12 : Initialize
2015/8/31 18:04:12 : GetTableName
2015/8/31 18:04:15 : BuilderReportSqlAndTempTable
2015/8/31 18:04:15 : GetIdentityFieldIndexSQL
2015/8/31 18:04:15 : ExecuteBatch
2015/8/31 18:04:19 : GetReportHeaders
2015/8/31 18:04:19 : GetReportTitles
2015/8/31 18:04:27 : GetTableName
2015/8/31 18:04:27 : GetIdentityFieldIndexSQL
2015/8/31 18:04:28 : ExecuteBatch
2015/8/31 18:04:28 : AnalyzeDspCloumn
2015/8/31 18:04:28 : AfterCreateTempTable
2015/8/31 18:04:28 : GetSummaryColumnInfo
2015/8/31 18:04:28 : GetSummaryColumsSQL
2015/8/31 18:04:28 : GetTableName
2015/8/31 18:04:28 : GetTableName
2015/8/31 18:04:29 : ExecuteBatch
2015/8/31 18:04:29 : GetIdentityFieldIndexSQL
2015/8/31 18:04:29 : ExecuteBatch
2015/8/31 18:04:29 : CreateGroupSummaryData
2015/8/31 18:04:29 : GetListData
2015/8/31 18:04:30 : GetReportData
2015/8/31 18:04:30 : GetRowsCount
2015/8/31 18:04:30 : GetListData
*/
public override void Initialize()
{
base.Initialize();
//简单账表类型:普通、树形、分页
this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL;
//报表名称
this.ReportProperty.ReportName = new LocaleValue("生产投料报表", base.Context.UserLocale.LCID);
//是否由插件创建表名
this.IsCreateTempTableByPlugin = true;
//
this.ReportProperty.IsUIDesignerColumns = false;
//
this.ReportProperty.IsGroupSummary = true;
//
this.ReportProperty.SimpleAllCols = false;
// 单据主键两行FID相同则为同一单的两条分录单据编号可以不重复显示
this.ReportProperty.PrimaryKeyFieldName = "FID";
//
this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true;
// 报表主键字段名默认为FIDENTITYID可以修改
//this.ReportProperty.IdentityFieldName = "FIDENTITYID";
// 设置精度控制
var list = new List<DecimalControlField>
{
new DecimalControlField("FDECIMALS", "FLOTYIELD"),
};
this.ReportProperty.DecimalControlFieldList = list;
this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FSTOCKID", "仓库");
}
public override string GetTableName()
{
return base.GetTableName();
}
/// <summary>
/// 向报表临时表,插入报表数据
/// </summary>
/// <param name="filter"></param>
/// <param name="tableName"></param>
public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
{
base.BuilderReportSqlAndTempTable(filter, tableName);
string seqFld = string.Format(base.KSQL_SEQ, " t0.FID ");
var sql = $@"
DECLARE @FBILLNO varchar(80)
,@MainNumber varchar(80)
,@MainName varchar(80)
,@FMOBILLNO varchar(80)
,@FNumber varchar(80)
,@FName varchar(80)
,@FSALEORDERNO varchar(80)
,@LCID int
set @FBILLNO = ''
set @MainNumber = ''
set @MainName = ''
set @FMOBILLNO = ''
set @FNumber = ''
set @FName = ''
set @FSALEORDERNO = ''
set @LCID = 2052
--set @FBILLNO =''
--set @MainNumber=''
--set @MainName=''
--set @FMOBILLNO=''
--set @FNumber=''
--set @FName=''
--set @FSALEORDERNO=''
--set @LCID=2052
SELECT
top 1000
ROW_NUMBER() OVER(ORDER BY T0.FMATERIALID) AS '行号' --1.行号
,T0.FID
--,T0.FFORMID
,t7.FDATE AS '单据日期' --2.单据日期
,T0.FBILLNO AS '生产投料单号'--3.生产投料单号
--,T0.FMOID --生产订单内码
----,T0.FMOENTRYID --生产订单子表内码
--,t0.FSALEORDERID
--,t0.FSALEORDERENTRYID
,T0.FSALEORDERNO AS '销售订单号' --4.销售订单号
--,T0.FMATERIALID --产品ID
--5.购货单位代码
,T1.FMNEMONICCODE AS '助记码'--6.助记码
,T0.FMOBILLNO AS '生产任务单号'--7.生产任务单号
,T1.FNUMBER --AS '产品编码'--8.产品编码
,T1_L.FNAME AS '产品名称'--9.产品名称
,T1_L.FSPECIFICATION AS '产品规格型号'--10.产品规格型号
,T3_L.FNAME AS '产品单位'--11.产品单位
,T0.FQTY AS '产品生产数量'--12.产品生产数量
,T2.FNUMBER AS '物料代码'--13.物料代码
,T2_L.FNAME AS '物料名称'--14.物料名称
,(CASE T2.FMATERIALSRC WHEN 'A' THEN 'PLM' WHEN 'B' THEN 'ERP' ELSE '' END) AS '物料来源' --15.物料来源
,T2_L.FSPECIFICATION AS '物料规格型号'--16.物料规格型号
,t10_L.FNAME AS '物料技术标准'--17.物料技术标准
,(T0E.FNUMERATOR / T0E.FDENOMINATOR) AS '物料单位用量' --18.物料单位用量
--,T0E.FUNITID AS ENTRYUNITID
,T4_L.FNAME AS '物料单位' --19.物料单位
,t9.FBASEQTY AS '物料库存量'--20.物料库存量
,T11E_A.FBASEINVQTY
--21.物料待检数
,T0E.FNEEDQTY AS '物料总需求'--22.物料总需求
,T0E_Q.FBASEWIPQTY AS '当前在制品数量'--23.当前在制品数量
--,(case when t9.FBASEQTY > T0E.FNEEDQTY then 0 else T0E.FNEEDQTY - t9.FBASEQTY end) AS '欠料'--24.欠料
,T11E.FBASELACKQTY AS '欠料'--24.欠料
,T11E_A.FBASEONORDERQTY AS '物料在途数' --25.物料在途数
,T11E_A.FENTRYID
--26.计划投料数量
,T0E_Q.FPICKEDQTY AS '已领数量'--27.已领数量
,T0E_Q.FNOPICKEDQTY AS '未领数量'--28.未领数量
,T0E.FSTDQTY AS '标准数量'--标准用量 --29.标准数量
,T0E.FMUSTQTY AS '应发数量'--应发数量 --30.应发数量
,t0E_L.FMEMO AS '备注'--31.备注
,T0E_Q.FPICKEDQTY * (100 - t7E.FYIELDRATE) AS '损耗数量'--32.损耗数量
,T0E_Q.FSCRAPQTY AS '报废数量' --33.报废数量
--34.计划发料日期
,T0E_C.FSTOCKID
,T5_L.FNAME --AS '仓库'--35.仓库
,T0E_C.FSTOCKLOCID --36.仓位
,T0E_Q.FREPICKEDQTY AS '补料数量'--37.补料数量
,t7E.FPLANSTARTDATE AS '计划开工日期'--38.计划开工日期
,t7E.FPLANFINISHDATE AS '计划完工日期'--39.计划完工日期
--40.工位
--,7E.FMEMO AS '其他备注项' --41.其他备注项
,t8_L.FMEMO AS 'BOM备注项'--42.BOM备注项
--,t8.FNUMERATOR
,(CASE T7e.FPRODUCTTYPE WHEN 1 THEN '主产品' WHEN 2 THEN '主产品' WHEN 3 THEN '主产品' ELSE '' END) AS '生产类型'--43.生产类型
--,T0.FWORKSHOPID
,T6_L.FNAME AS '生产车间'--44.生产车间
,(CASE T7E_A.FSTATUS WHEN 6 THEN '已结案'ELSE '' END) AS '生产任务单结案否'--45.生产任务单结案否
,(CASE t0.FDOCUMENTSTATUS WHEN 'A' THEN '创建' WHEN 'B' THEN '审核中' WHEN 'C' THEN '已审核' WHEN 'D' THEN '重新审核' WHEN 'Z' THEN '暂存' ELSE '' END) AS '生产投料单状态'--46.生产投料单状态
--47.PR已审未转PO数量
,6 AS FDECIMALS
,{seqFld}
into {tableName}
FROM
T_PRD_MO t7 --生产订单
LEFT JOIN T_PRD_MOENTRY t7E on t7E.FID = t7.FID
LEFT JOIN T_PRD_MOENTRY_A t7E_A on t7E_A.FENTRYID = t7E.FENTRYID
LEFT JOIN T_PRD_PPBOM T0 on T0.FMOID = t7.FID --生产用料清单
LEFT JOIN T_PRD_PPBOMENTRY T0E ON T0.FID = T0E.FID AND t0.FMOENTRYSEQ = t7e.FSEQ--生产用料清单子表
LEFT JOIN T_PRD_PPBOMENTRY_Q T0E_Q ON T0E_Q.FENTRYID = T0E.FENTRYID --生产用料清单数量拆分表
LEFT JOIN T_PRD_PPBOMENTRY_C T0E_C ON T0E_C.FENTRYID = T0E.FENTRYID
LEFT JOIN T_PRD_PPBOMENTRY_L t0E_L on t0E_L.FENTRYID = T0E.FENTRYID AND t0E_L.FLOCALEID = @LCID
LEFT JOIN T_BD_MATERIAL T1 ON T1.FMATERIALID = T0.FMATERIALID
LEFT JOIN T_BD_MATERIAL_L T1_L ON T1_L.FMATERIALID = T0.FMATERIALID AND T1_L.FLOCALEID = @LCID
LEFT JOIN T_BD_MATERIAL T2 ON T2.FMATERIALID = T0E.FMATERIALID
LEFT JOIN T_BD_MATERIAL_L T2_L ON T2_L.FMATERIALID = T0E.FMATERIALID AND T2_L.FLOCALEID = @LCID
LEFT JOIN T_BD_UNIT_L T3_L ON T3_L.FUNITID = T0.FUNITID AND T3_L.FLOCALEID = @LCID
LEFT JOIN T_BD_UNIT_L T4_L ON T4_L.FUNITID = T0E.FUNITID AND T4_L.FLOCALEID = @LCID
LEFT JOIN T_BD_STOCK_L T5_L ON T5_L.FSTOCKID = T0E_C.FSTOCKID AND T5_L.FLOCALEID =@LCID
LEFT JOIN T_BD_DEPARTMENT_L T6_L ON T6_L.FDEPTID = T0.FWORKSHOPID AND T6_L.FLOCALEID = @LCID
LEFT JOIN T_ENG_BOMCHILD_L t8_L ON t8_L.FENTRYID = T0E.FBOMENTRYID AND t8_L.FLOCALEID = @LCID
LEFT JOIN (
SELECT
t0.FMATERIALID
,t0.FSTOCKORGID
,sum(t0.FBASEQTY) AS FBASEQTY
FROM
T_STK_INVENTORY t0
GROUP BY
t0.FMATERIALID
,t0.FSTOCKORGID
) t9 on t9.FMATERIALID = T2.FMASTERID AND t9.FSTOCKORGID = t2.FUSEORGID
LEFT JOIN T_ENG_ROUTE_L t10_L on t10_L.FID = t7E.FROUTINGID AND t10_L.FLOCALEID = @LCID
LEFT JOIN T_PRD_PMPPBOMENTRY T11E on T11E.FMOID = t7e.FID AND T11E.FMOENTRYID = t7e.FENTRYID AND T11E.FMOENTRYSEQ = t7E.FSEQ AND T11E.FMATERIALIDSUB = T0E.FMATERIALID AND T11E.FMATERIALID = t0.FMATERIALID
LEFT JOIN T_PRD_PMPPBOMENTRY_A T11E_A ON T11E_A.FENTRYID = T11E.FENTRYID
WHERE
T0.FBILLNO = (CASE WHEN @FBILLNO != '' THEN @FBILLNO ELSE T0.FBILLNO END)
AND T0.FMOBILLNO = (CASE WHEN @FMOBILLNO != '' THEN @FMOBILLNO ELSE T0.FMOBILLNO END)
AND T0.FSALEORDERNO = (CASE WHEN @FSALEORDERNO != '' THEN @FSALEORDERNO ELSE T0.FSALEORDERNO END)
AND T1.FNUMBER = (CASE WHEN @MAINNUMBER != '' THEN @MAINNUMBER ELSE T1.FNUMBER END)
AND T1_L.FNAME = (CASE WHEN @MAINNAME != '' THEN @MAINNAME ELSE T1_L.FNAME END)
AND T2.FNUMBER = (CASE WHEN @FNUMBER != '' THEN @FNUMBER ELSE T2.FNUMBER END)
AND T2_L.FNAME = (CASE WHEN @FNAME != '' THEN @FNAME ELSE T2_L.FNAME END)
";
var res = DBUtils.ExecuteDynamicObject(this.Context, $"/*dialect*/{sql}");
}
public override ReportHeader GetReportHeaders(IRptParams filter)
{
var header = base.GetReportHeaders(filter);
int _colIndex = 0;
header.AddChild("FNUMBER", new LocaleValue("产品编码"), _colIndex++);
header.AddChild("FSTOCKID", new LocaleValue("仓库"), _colIndex++);
header.AddChild("FSTOCKLOCID", new LocaleValue("仓位"), _colIndex++);
return header;
}
protected override void ExecuteBatch(List<string> listSql)
{
base.ExecuteBatch(listSql);
}
public override ReportTitles GetReportTitles(IRptParams filter)
{
var result = base.GetReportTitles(filter);
//DynamicObject dyFilter = filter.FilterParameter.CustomFilter;
//if (dyFilter != null)
//{
// if (result == null)
// {
// result = new ReportTitles();
// }
// //数据保存状态
// string saveDataStauts = dyFilter["DataBDStatu"].Long2Int() > 0 ? "1" : "0";
// result.AddTitle("FDataBDStatu", saveDataStauts);
// result.AddTitle("FDataHoldYear", dyFilter["DataHoldYear"].ToString());
// result.AddTitle("FDataHoldMonth", dyFilter["DataHoldMonth"].ToString());
//}
return result;
}
protected override string AnalyzeDspCloumn(IRptParams filter, string tablename)
{
string result = base.AnalyzeDspCloumn(filter, tablename);
return result;
}
protected override void AfterCreateTempTable(string tablename)
{
base.AfterCreateTempTable(tablename);
}
/// <summary>
/// 设置报表合计列
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public override List<SummaryField> GetSummaryColumnInfo(IRptParams filter)
{
var result = base.GetSummaryColumnInfo(filter);
return result;
}
protected override string GetSummaryColumsSQL(List<SummaryField> summaryFields)
{
var result = base.GetSummaryColumsSQL(summaryFields);
return result;
}
protected override System.Data.DataTable GetListData(string sSQL)
{
var result = base.GetListData(sSQL);
return result;
}
protected override System.Data.DataTable GetReportData(IRptParams filter)
{
var result = base.GetReportData(filter);
return result;
}
protected override System.Data.DataTable GetReportData(string tablename, IRptParams filter)
{
var result = base.GetReportData(tablename, filter);
return result;
}
public override int GetRowsCount(IRptParams filter)
{
var result = base.GetRowsCount(filter);
return result;
}
protected override string BuilderFromWhereSQL(IRptParams filter)
{
string result = base.BuilderFromWhereSQL(filter);
return result;
}
protected override string BuilderSelectFieldSQL(IRptParams filter)
{
string result = base.BuilderSelectFieldSQL(filter);
return result;
}
protected override string BuilderTempTableOrderBySQL(IRptParams filter)
{
string result = base.BuilderTempTableOrderBySQL(filter);
return result;
}
public override void CloseReport()
{
base.CloseReport();
}
protected override string CreateGroupSummaryData(IRptParams filter, string tablename)
{
string result = base.CreateGroupSummaryData(filter, tablename);
return result;
}
protected override void CreateTempTable(string sSQL)
{
base.CreateTempTable(sSQL);
}
public override void DropTempTable()
{
base.DropTempTable();
}
public override System.Data.DataTable GetList(IRptParams filter)
{
var result = base.GetList(filter);
return result;
}
public override List<long> GetOrgIdList(IRptParams filter)
{
var result = base.GetOrgIdList(filter);
return result;
}
public override List<TreeNode> GetTreeNodes(IRptParams filter)
{
var result = base.GetTreeNodes(filter);
return result;
}
}
}