This commit is contained in:
PastSaid
2024-03-04 16:50:20 +08:00
parent f3eae0a034
commit 5e2781182d
133 changed files with 20406 additions and 501 deletions

View File

@@ -1,9 +1,14 @@
using Kingdee.BOS;
using ExtensionMethods;
using K3CExttensionMethods;
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts.Report;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.List.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Resource;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
@@ -45,6 +50,8 @@ namespace ProductionMaterialsReport
2015/8/31 18:04:30 : GetListData
*/
private List<string> billNames = new List<string>();
public override void Initialize()
{
base.Initialize();
@@ -55,10 +62,6 @@ namespace ProductionMaterialsReport
//是否由插件创建表名
this.IsCreateTempTableByPlugin = true;
//
this.ReportProperty.IsUIDesignerColumns = false;
//
this.ReportProperty.IsGroupSummary = true;
//
this.ReportProperty.SimpleAllCols = false;
// 单据主键两行FID相同则为同一单的两条分录单据编号可以不重复显示
this.ReportProperty.PrimaryKeyFieldName = "FID";
@@ -66,22 +69,33 @@ namespace ProductionMaterialsReport
this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true;
// 报表主键字段名默认为FIDENTITYID可以修改
//this.ReportProperty.IdentityFieldName = "FIDENTITYID";
this.ReportProperty.IdentityFieldName = "FIDENTITYID";
// 设置精度控制
var list = new List<DecimalControlField>
{
new DecimalControlField("FDECIMALS", "FLOTYIELD"),
new DecimalControlField("LOWEST6","FQTY"),
new DecimalControlField("LOWEST6","FUnitNeedQty"),
new DecimalControlField("LOWEST6","FBASEQTY"),
new DecimalControlField("LOWEST6","FNEEDQTY"),
new DecimalControlField("LOWEST6","FBASEWIPQTY"),
new DecimalControlField("LOWEST6","FBASELACKQTY"),
new DecimalControlField("LOWEST6","FBASEONORDERQTY"),
new DecimalControlField("LOWEST6","FPICKEDQTY"),
new DecimalControlField("LOWEST6","FNOPICKEDQTY"),
new DecimalControlField("LOWEST6","FSTDQTY"),
new DecimalControlField("LOWEST6","FMUSTQTY"),
new DecimalControlField("LOWEST6","FLossQty"),
new DecimalControlField("LOWEST6","FSCRAPQTY"),
new DecimalControlField("LOWEST6","FREPICKEDQTY"),
};
this.ReportProperty.DecimalControlFieldList = list;
base.ReportProperty.IsGroupSummary = true;
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FSTOCKID", "FSTOCKNAME");
base.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("ProMaterialId", "ProNumber");
//列头是否是通过BOSIDE设计
//base.ReportProperty.IsUIDesignerColumns = true;
this.ReportProperty.DspInsteadColumnsInfo.DefaultDspInsteadColumns.Add("FSTOCKID", "仓库");
}
public override string GetTableName()
{
return base.GetTableName();
}
/// <summary>
@@ -93,140 +107,15 @@ namespace ProductionMaterialsReport
{
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
var proMaterialId = filter.FilterParameter.CustomFilter["ProMaterialId"].Long2Int();
var materialId = filter.FilterParameter.CustomFilter["MaterialId"].Long2Int();
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 BILLNO = filter.FilterParameter.CustomFilter["BILLNO"].ToSafeTurnString();
var PPBOMBILLNO = filter.FilterParameter.CustomFilter["PPBOMBILLNO"].ToSafeTurnString();
var SALEORDERNO = filter.FilterParameter.CustomFilter["SALEORDERNO"].ToSafeTurnString();
var sql = $@" PROC_PPBOM_RPT '{tableName}', '{seqFld}' ,{proMaterialId} ,{materialId},'{BILLNO}','{PPBOMBILLNO}','{SALEORDERNO}' ,{this.Context.UserLocale.LCID} ";
var res = DBUtils.ExecuteDynamicObject(this.Context, $"/*dialect*/{sql}");
}
@@ -235,128 +124,82 @@ namespace ProductionMaterialsReport
{
var header = base.GetReportHeaders(filter);
int _colIndex = 0;
header.AddChild("FNUMBER", new LocaleValue("产品编码"), _colIndex++);
header.AddChild("FSTOCKID", new LocaleValue("仓库"), _colIndex++);
//var head1 = header.AddChild("FNUMBER", new LocaleValue("产品编码"), _colIndex++);
//head1.Mergeable = true;
//header.AddChild("FIDENTITYID", new LocaleValue("行号"), _colIndex++);
header.AddRange(new List<ListHeader>
{
new ListHeader("FDATE", new LocaleValue("单据日期"))
});
header.AddChild("FDATE", new LocaleValue("单据日期"), _colIndex++).SetHeader(x => { x.Mergeable = true;x.ColType = SqlStorageType.SqlDecimal;});
header.AddChild("FPPBOMBILLNO", new LocaleValue("生产投料单号"), _colIndex++).SetHeader(x => { x.Mergeable = true; });
header.AddChild("FSALEORDERNO", new LocaleValue("销售订单号"), _colIndex++).SetHeader(x => { x.Mergeable = true; });
header.AddChild("SaleUnitId", new LocaleValue("购货单位代码"), _colIndex++);
header.AddChild("ProMnemoniccode", new LocaleValue("助记码"), _colIndex++).SetHeader(x => { x.Mergeable = true; });
header.AddChild("FBILLNO", new LocaleValue("生产任务单号"), _colIndex++).SetHeader(x => { x.Mergeable = true; });
header.AddChild("ProMaterialId", new LocaleValue("产品代码"), _colIndex++).SetHeader(x => { x.Mergeable = true; });
header.AddChild("ProName", new LocaleValue("产品名称"), _colIndex++).SetHeader(x => { x.Mergeable = true; });
header.AddChild("ProSpecification", new LocaleValue("产品规格型号"), _colIndex++).SetHeader(x => { x.Mergeable = true; });
header.AddChild("ProUnitName", new LocaleValue("产品单位"), _colIndex++).SetHeader(x => { x.Mergeable = true; });
header.AddChild("FQTY", new LocaleValue("产品生产数量"), _colIndex++).SetHeader(x => { x.Mergeable = true; });
header.AddChild("MaterialNumber", new LocaleValue("物料代码"), _colIndex++);
header.AddChild("MaterialName", new LocaleValue("物料名称"), _colIndex++);
header.AddChild("Materialsrc", new LocaleValue("物料来源"), _colIndex++);
header.AddChild("MaterialSpecification", new LocaleValue("物料规格型号"), _colIndex++);
header.AddChild("ROUTENAME", new LocaleValue("物料技术标准"), _colIndex++);
header.AddChild("FUnitNeedQty", new LocaleValue("物料单位用量"), _colIndex++);
header.AddChild("MaterialUnitName", new LocaleValue("物料单位"), _colIndex++);
header.AddChild("FBASEQTY", new LocaleValue("物料库存量"), _colIndex++);
header.AddChild("ToBeInspectQTY", new LocaleValue("物料待检数"), _colIndex++);
header.AddChild("FNEEDQTY", new LocaleValue("物料总需求"), _colIndex++);
header.AddChild("FBASEWIPQTY", new LocaleValue("当前在制品数量"), _colIndex++);
header.AddChild("FBASELACKQTY", new LocaleValue("欠料"), _colIndex++);
header.AddChild("FBASEONORDERQTY", new LocaleValue("物料在途数"), _colIndex++);
header.AddChild("PlanThrowInQty", new LocaleValue("计划投料数量"), _colIndex++);
header.AddChild("FPICKEDQTY", new LocaleValue("已领数量"), _colIndex++);
header.AddChild("FNOPICKEDQTY", new LocaleValue("未领数量"), _colIndex++);
header.AddChild("FSTDQTY", new LocaleValue("标准数量"), _colIndex++);
header.AddChild("FMUSTQTY", new LocaleValue("应发数量"), _colIndex++);
header.AddChild("FMEMO", new LocaleValue("备注"), _colIndex++);
header.AddChild("FLossQty", new LocaleValue("损耗数量"), _colIndex++);
header.AddChild("FSCRAPQTY", new LocaleValue("报废数量"), _colIndex++);
header.AddChild("PlanThrowInDate", new LocaleValue("计划发料日期"), _colIndex++);
header.AddChild("FSTOCKNAME", new LocaleValue("仓库"), _colIndex++);
header.AddChild("FSTOCKLOCID", new LocaleValue("仓位"), _colIndex++);
return header;
}
header.AddChild("FREPICKEDQTY", new LocaleValue("补料数量"), _colIndex++);
header.AddChild("FPLANSTARTDATE", new LocaleValue("计划开工日期"), _colIndex++);
header.AddChild("FPLANFINISHDATE", new LocaleValue("计划完工日期"), _colIndex++);
header.AddChild("CubicleName", new LocaleValue("工位"), _colIndex++);
header.AddChild("OTHERMEMO", new LocaleValue("其他备注项"), _colIndex++);
header.AddChild("BOMMEMO", new LocaleValue("BOM备注项"), _colIndex++);
header.AddChild("PRODUCTTYPE", new LocaleValue("生产类型"), _colIndex++);
header.AddChild("WORKSHOPNAME", new LocaleValue("生产车间"), _colIndex++);
header.AddChild("StatusIs6", new LocaleValue("生产任务单结案否"), _colIndex++);
header.AddChild("PPBOMStatus", new LocaleValue("生产投料单状态"), _colIndex++);
header.AddChild("PR_C2PO_QTY", new LocaleValue("PR已审未转PO数量"), _colIndex++);
protected override void ExecuteBatch(List<string> listSql)
{
base.ExecuteBatch(listSql);
return header;
}
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;
}
var titles = base.GetReportTitles(filter);
DynamicObject dyFilter = filter.FilterParameter.CustomFilter;
if (dyFilter != null)
{
if (titles == null)
{
titles = new ReportTitles();
}
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);
}
var materialId = dyFilter["ProMaterialId_Id"].ToString();
if (!materialId.IsNullOrEmpty())
titles.AddTitle("FTitleProMaterialId", materialId);
/// <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;
}
}
return titles;
}
}
}