一.BOS创建简单账表:
1.左键单击左上角文件->新建。
2.选择简单账表,输入名称,编号,点击确定,创建简单账表。
3.选择过滤条件框,输入名称,编号,点击确定。
二.Visual Studio编辑服务插件,案例如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Kingdee.BOS;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Contracts.Report;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
namespace SY.BH.K3Cloud2k
{
[Kingdee.BOS.Util.HotUpdate]
[Description(“报表名称”)]
public class BasePaperWarehousingReport : SysReportBaseService
{
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 = false;this.ReportProperty.SimpleAllCols = false;this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true;//设置精度控制List<DecimalControlField> list = new List<DecimalControlField>();this.ReportProperty.DecimalControlFieldList = list;}public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName){base.BuilderReportSqlAndTempTable(filter, tableName);//拼接过滤条件:filterDynamicObject dyFilter = filter.FilterParameter.CustomFilter;//获取过滤器所有属性var keySet = dyFilter.DynamicObjectType.Properties;string FDate = dyFilter["FDate"] == null ? "" : ((DateTime)dyFilter["FDate"]).ToString("yyyy-MM-dd"); //该月最近1年string FAType = dyFilter["FAType"] == null ? "" : (dyFilter["FAType"]).ToString(); //A类string FBType = dyFilter["FBType"] == null ? "" : (dyFilter["FBType"]).ToString(); //B类string FNumber = dyFilter["FNumber"] == null ? "" : (dyFilter["FNumber"]).ToString(); //物料编码string FName = dyFilter["FName"] == null ? "" : (dyFilter["FName"]).ToString(); //物料名称string FSupplierNumber = dyFilter["FSupplierNumber"] == null ? "" : (dyFilter["FSupplierNumber"]).ToString(); //供应商物料编码string FSupplier = dyFilter["FSupplier"] == null ? "" : ((DynamicObject)dyFilter["FSupplier"])["Name"].ToString(); //供应商string FSpecification = dyFilter["FSpecification"] == null ? "" : (dyFilter["FSpecification"]).ToString(); //型号StringBuilder fiterSql = new StringBuilder();//循环过滤框,拼接sql过滤条件foreach (var key in keySet){//if (dyFilter[key] != null && dyFilter[key].ToString().IsNullOrEmptyOrWhiteSpace() == false) continue;if (dyFilter[key] != null && !string.IsNullOrEmpty(dyFilter[key].ToString())){//A类if (key.Name.Equals("FAType", StringComparison.OrdinalIgnoreCase) && !FAType.Equals("")){fiterSql.Append($" and c.F_ADD_TEXT11 like '%{FAType}'%");}//B类if (key.Name.Equals("FBType", StringComparison.OrdinalIgnoreCase) && !FBType.Equals("")){fiterSql.Append($" and c.F_ADD_TEXT12 like '%{FBType}%'");}//物料编码if (key.Name.Equals("FNumber", StringComparison.OrdinalIgnoreCase) && !FNumber.Equals("")){fiterSql.Append($" and c.FNUMBER like '%{FNumber}%'");}//物料名称if (key.Name.Equals("FName", StringComparison.OrdinalIgnoreCase) && !FName.Equals("")){fiterSql.Append($" and c1.FNAME like '%{FName}%'");}//供应商物料编码if (key.Name.Equals("FSupplierNumber", StringComparison.OrdinalIgnoreCase) && !FSupplierNumber.Equals("")){fiterSql.Append($" and c.F_add_Text3 like '%{FSupplierNumber}%'");}//供应商if (key.Name.Equals("FSupplier", StringComparison.OrdinalIgnoreCase) && !FSupplier.Equals("")){fiterSql.Append($" and h.FNAME = '{FSupplier}'");}//型号if (key.Name.Equals("FSpecification", StringComparison.OrdinalIgnoreCase) && !FSpecification.Equals("")){fiterSql.Append($" and c1.FSpecification like '%{FSpecification}%'");}}}// 默认排序字段:需要从filter中取用户设置的排序字段// string seqFld = string.Format(base.KSQL_SEQ, "FSOBillNo ");string filterString = filter.FilterParameter.FilterString == "" ? "" : "and" + filter.FilterParameter.FilterString;//自行编辑你需要的sql内容,必须包含一个FIDEntityID列作为一值string resultSql = $"select FIDENTITYID,* into {tableName} from Table";DBUtils.ExecuteDynamicObject(this.Context, resultSql.ToString());}//编辑报表单据头public override ReportHeader GetReportHeaders(IRptParams filter){//return base.GetReportHeaders(filter);ReportHeader header = new ReportHeader();var FFIDEntryID = header.AddChild("字段1", new LocaleValue("字段名1"));var FNUMBER = header.AddChild("字段2", new LocaleValue("字段名2"));var FSupplierNumber = header.AddChild("字段3", new LocaleValue("字段名3"));var FSupplier = header.AddChild("字段4", new LocaleValue("字段名4"));//复合单据头header.AddChild("SH01", new LocaleValue("01月&地区1"));header.AddChild("DG01", new LocaleValue("01月&地区2"));header.AddChild("HG01", new LocaleValue("01月&地区3"));header.AddChild("HJ01", new LocaleValue("01月&1月合计"));return header;}//数据列汇总//public override List<SummaryField> GetSummaryColumnInfo(IRptParams filter)//{// var result = base.GetSummaryColumnInfo(filter);// result.Add(new SummaryField("列名", Kingdee.BOS.Core.Enums.BOSEnums.Enu_SummaryType.SUM));// result.Add(new SummaryField("列名", Kingdee.BOS.Core.Enums.BOSEnums.Enu_SummaryType.SUM));// return result;//}//报表头赋值public override ReportTitles GetReportTitles(IRptParams filter){var result = new ReportTitles();DynamicObject dyFilter = filter.FilterParameter.CustomFilter;result.AddTitle("报表头字段名", dyFilter["过滤框字段名"].ToString());return result;}}
}
三.BOS配置服务插件和条件过滤框:
1.在简单账表界面的“过滤窗口业务对象(报表)”中填写上面创建的过滤框的唯一标识。
2.点击服务插件,选择注册自己编辑的报表插件。
3.操作完成,保存即可。