网站建设饱和了吗,宜宾商城网站建设,wordpress添加微信扫码支付,网络营销出来可以干什么工作文章目录 委外订单执行明细表增加二开字段业务背景业务需求方案设计详细设计扩展《委外订单执行明细表》扩展《委外订单执行明细过滤》创建插件#xff0c;并实现报表逻辑修改创建插件#xff0c;添加引用创建类#xff0c;继承原数据源类ROExecuteDetailRpt报表挂载插件 委… 文章目录 委外订单执行明细表增加二开字段业务背景业务需求方案设计详细设计扩展《委外订单执行明细表》扩展《委外订单执行明细过滤》创建插件并实现报表逻辑修改创建插件添加引用创建类继承原数据源类ROExecuteDetailRpt报表挂载插件 委外订单执行明细表增加二开字段
业务背景
目前的逻辑是入库数量/计划数量达成率需要加入计划完成时间和数据/实际完成时间和数量达成率。
业务需求
过滤框提供输入时间段作为入库单的时间限制算出入库数实际达成率入库数/计划数*100%。
方案设计
二开标准产品添加字段创建插件继承标准产品插件重写方法申请一个临时表获取初步的查询结果到临时表然后关联处理得到新的列插入到报表的临时表
详细设计
扩展《委外订单执行明细表》
引入扩展添加入库数和实际达成率 扩展《委外订单执行明细过滤》
引入扩展快捷过滤添加两个日期控件。 显示隐藏列添加需要显示的两个字段入库数实际达成率
创建插件并实现报表逻辑修改
创建插件添加引用 创建类继承原数据源类ROExecuteDetailRpt
重写BuilderReportSqlAndTempTable using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Core.Util;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using Kingdee.K3.MFG.SUB.App.ReportPlugIn.ROExecute;
using System;
using System.ComponentModel;
using System.Text;namespace Krystal.K3.SCGL.App.Report.SUB
{/// summary/// 功能描述 Krystal_ROExecuteDetailRpt /// 创 建 者 Administrator/// 创建日期 2024/7/12 17:33:14 /// 最后修改者 Krystal/// 最后修改日期2024/7/12 17:33:14 /// /summary[Description(委外订单执行明细表服务端插件二开-报表插件), HotUpdate]public class Krystal_ROExecuteDetailRpt: ROExecuteDetailRpt{#region 常量#endregion 常量#region 变量/// summary/// 页面过滤参数/// /summaryFilterArgs _filterArgs new FilterArgs();private string[] rptTempTableNames;#endregion 变量#region 方法/// summary/// 获取过滤条件/// /summary/// param namefilter/paramprivate DynamicObject GetFilter(IRptParams filter){DynamicObject dyFilter filter.FilterParameter.CustomFilter;_filterArgs.ISBeginTime this.GetDataByKey(dyFilter, F_Krystal_InStockBeginTime) string.Empty ? DateTime.MinValue : Convert.ToDateTime(this.GetDataByKey(dyFilter, F_Krystal_InStockBeginTime));_filterArgs.ISEndTime this.GetDataByKey(dyFilter, F_Krystal_InStockEndTime) string.Empty ? DateTime.MaxValue : Convert.ToDateTime(this.GetDataByKey(dyFilter, F_Krystal_InStockEndTime));return dyFilter;}/// summary/// 构建报表sql和临时表/// 申请一个临时表获取初步的查询结果到临时表然后关联处理得到新的列插入到报表的临时表/// /summary/// param namefilter/param/// param nametableName/parampublic override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName){IDBService dbservice Kingdee.BOS.App.ServiceHelper.GetServiceIDBService();rptTempTableNames dbservice.CreateTemporaryTableName(this.Context, 1);string strTable rptTempTableNames[0];//调用基类的方法获取初步的查询结果到临时表base.BuilderReportSqlAndTempTable(filter, strTable);DynamicObject dyFilter this.GetFilter(filter);StringBuilder sb new StringBuilder();sb.AppendLine(string.Format(/*dialect*/SELECT T1.*,isnull(MOE.FInstockQty,0) F_Krystal_InStockQty,(case when T1.FPLANQTY0 then round(isnull(MOE.FInstockQty,0)*1.0/T1.FPLANQTY,4)*100 else 0 end) F_Krystal_FinishPercent));sb.AppendFormat( into {0} , tableName);sb.AppendFormat( FROM {0} T1, strTable);sb.AppendFormat( LEFT JOIN (SELECT b.FMOENTRYID FENTRYID ,SUM(b.FREALQTY) FInstockQtyFROM T_PRD_INSTOCK a JOIN T_PRD_INSTOCKENTRY b ON a.FIDb.FIDWHERE a.FDOCUMENTSTATUSC AND CONVERT(varchar(100), a.FAPPROVEDATE, 23) BETWEEN {0} AND {1}GROUP BY b.FMOENTRYID ) MOE ON T1.FMOENTRYIDMOE.FENTRYID, _filterArgs.ISBeginTime, _filterArgs.ISEndTime);//DBUtils.Execute(this.Context, DROP TABLE tableName);DBUtils.Execute(this.Context, sb.ToString());}/// summary/// 查询条件标题/// /summary/// param namefilter/param/// returns/returnspublic override ReportTitles GetReportTitles(IRptParams filter){ReportTitles reportTitle base.GetReportTitles(filter);reportTitle.AddTitle(F_Krystal_InStockTitle, string.Format({0}--{1}, FieldFormatterUtil.GetDateFormatString(base.Context, _filterArgs.ISBeginTime), FieldFormatterUtil.GetDateFormatString(base.Context, _filterArgs.ISEndTime)));return reportTitle;}#endregion 方法#region 过滤参数 FilterArgsinternal class FilterArgs{public DateTime ISBeginTime { get; set; }//起始年月public DateTime ISEndTime { get; set; }//结束年月}#endregion}
}
报表挂载插件