物料供需汇总/明细数据二次加工办法

问题描述:
在实际业务场景中,因用户分析数据角度的差异,有些需求并非只是对报表增加字段就能满足,而是需要对标准的物料供需汇总/明细表展示数据进行二次加工,这时就需要获取标准的物料供需汇总/明细表数据,以便进行再加工后展示。
解决方案:
本贴以二开的角度说明如何拿到物料供需汇总/明细数据,以下示例代码是执行计划插件代码,实际上只需要BOS上下文(Context)即可,因此,以下代码同样可以移植到表单/列表,或操作等各类插件上。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Model.ReportFilter;
using Kingdee.K3.Core.MFG.Common;
using Kingdee.K3.MFG.App;
using Kingdee.K3.MFG.Contracts.PLN;
namespace ABC.XX.K3Cloud.WebApi.ServicePlugIn
{
public class MtrlDSDataCollect_Schedule : IScheduleService
{
public void Run(Context ctx, Schedule schedule)
{
string computeNo = string.Empty;
try
{
string rptFormId = "PLN_MtrlSupplyDemandRpt"; //查询的目标报表标识
string rptFilterFormId = "PLN_MtrlSupplyDemandFilter"; //报表对应的过滤界面标识
string rptFilterSchemeId = string.Empty; //过滤方案ID,没传则为默认方案
//获取相关元数据
var comFilterMetadata = FormMetaDataCache.GetCachedFilterMetaData(ctx);
var rptMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, rptFormId);
var rptFilterMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, rptFilterFormId);
//获取报表过滤方案的构建基础,便于后续模型构建
var rptFilterServiceProvider = rptFilterMetadata .BusinessInfo.GetForm().GetFormServiceProvider();
var rptModel = new SysReportFilterModel();
rptModel.SetContext(ctx, rptFilterMetadata.BusinessInfo, rptFilterServiceProvider);
rptModel.FormId = rptFilterMetadata.BusinessInfo.GetForm().Id;
rptModel.FilterObject.FilterMetaData = comFilterMetadata;
rptModel.InitFieldList(rptMetadata, rptFilterMetadata);
rptModel.GetSchemeList();
//IsNullOrEmptyOrWhiteSpace()方法须using Kingdee.BOS.Util;
if (rptFilterSchemeId.IsNullOrEmptyOrWhiteSpace())
{
rptModel.LoadDefaultScheme();//加载默认过滤方案
}
else
{
rptModel.Load(rptFilterSchemeId);
}
var filterPara = rptModel.GetFilterParameter();
//获取最近一次成功的,非计划模拟运算的MRP运算标识和编号
DynamicObject filterObj = filterPara.CustomFilter;
string sql = string.Format(@" SELECT TOP 1 A.FCOMPUTEID, A.FNUMBER
FROM T_PLN_MRPLOG A WHERE A.FSTATUS='3' AND A.FISSIMUMRP='0'
ORDER BY A.FCREATEDATE DESC ");
DynamicObject mrpCalInfo = DBUtils.ExecuteDynamicObject(ctx, sql).FirstOrDefault();
if(mrpCalInfo.IsNullOrEmpty()) return;
string computeId = mrpCalInfo["FCOMPUTEID"].ToString(); //运算ID
computeNo = mrpCalInfo["FNUMBER"].ToString(); //运算编码
filterObj["MrpBillNo"] = computeNo;
filterObj["ComputeId"] = comp
物料供需汇总/明细数据二次加工办法
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



