物料供需汇总/明细数据二次加工办法
问题描述:
在实际业务场景中,因用户分析数据角度的差异,有些需求并非只是对报表增加字段就能满足,而是需要对标准的物料供需汇总/明细表展示数据进行二次加工,这时就需要获取标准的物料供需汇总/明细表数据,以便进行再加工后展示。
解决方案:
本贴以二开的角度说明如何拿到物料供需汇总/明细数据,以下示例代码是执行计划插件代码,实际上只需要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"] = computeId;
#region 本代码块是检测物料供需数据是否已收集,未收集则进行收集
//对应物料供需数据的收集,可参照相关帖子:https://vip-admin.kingdee.com/questions/331715096760317952/answers/331715096760317952
IMtrlDSDataSumCalcService rptService = AppServiceContext.GetService<IMtrlDSDataSumCalcService>();
bool isReady = rptService.CheckMtrlDSDataByComputeId(ctx, computeId);
if (!isReady)
{
OperateOption option = OperateOption.Create();
option.SetVariableValue("ComputeId", computeId);
TaskProxyItem tpi = new TaskProxyItem();
option.SetVariableValue("TaskId", tpi.TaskId);
rptService.Execute(ctx, option);
}
#endregion 本代码块是检测物料供需数据是否已收集,未收集则进行收集
//报表参数
IRptParams param = new RptParams();
param.FormId = rptFilterMetadata.BusinessInfo.GetForm().Id;
param.StartRow = 1;
param.EndRow = int.MaxValue;
param.FilterParameter = filterPara;
param.FilterFieldInfo = rptModel.FilterFieldInfo;
param.CustomParams = new Dictionary<string, object>();
param.CustomParams.Add("OpenParameter", new Dictionary<string, object>());
//报表服务参数,用于查询。
var reportServiceParam = new ReportServiceParameter();
reportServiceParam.RptFilterParams = param;
reportServiceParam.Context = ctx;
reportServiceParam.PageId = Guid.NewGuid().ToString();
reportServiceParam.BusinessInfo = rptMetadata.BusinessInfo;
//下一句的resutl.DataSource报表数据的DataTable,物理表名是resutl.DataSource.TableName,可将期数据转储到特定表进行二次加工
var result = SysReportServiceHelper.GetReportData(reportServiceParam);
}
catch (Exception ex)
{
Kingdee.BOS.Log.Logger.Info("ABC.XX.PLN", string.Format("物料供需数据抓取失败。{0},{1}\t\n{2}", computeNo, ex.Message, ex.StackTrace));
}
}
}
}
物料供需汇总/明细数据二次加工办法
本文2024-09-23 03:15:56发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-157753.html
- 鼎捷EAI整合規範文件V3.1.07 (集團).pdf
- 鼎捷OpenAPI應用場景說明_基礎資料.pdf
- 鼎捷OpenAPI應用場景說明_財務管理.pdf
- 鼎捷T100 API設計器使用手冊T100 APIDesigner(V1.0).docx
- 鼎新e-GoB2雲端ERP B2 線上課程E6-2應付票據整批郵寄 領取.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A4使用者建立權限設定.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程C3會計開帳與會計傳票.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程E6-1應付票據.pdf
- 鼎新e-GoB2雲端ERP B2 線上課程A5-1進銷存參數設定(初階篇).pdf
- 鼎新e-GoB2雲端ERP B2 線上課程D2帳款開帳與票據開帳.pdf