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; using Kingdee.BOS.Contracts.Report; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Report; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; namespace GZ_LTHReportForms.YingShouBiao { [Description("应收款情况表(SBU)报表插件"), HotUpdate] public class YingShouQKBiao : SysReportBaseService { //初始化方法 public override void Initialize() { base.Initialize(); //设置报表类型为普通类型 this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL; //设置是否通过插件创建临时表 this.IsCreateTempTableByPlugin = true; //设置是否分组汇总 this.ReportProperty.IsGroupSummary = true; } //获取过滤条件信息(构造单据信息) public override ReportTitles GetReportTitles(IRptParams filter) { //创建标题对象 ReportTitles reportTitles = new ReportTitles(); //获取自定义过滤条件 DynamicObject customFilter = filter.FilterParameter.CustomFilter; if (customFilter != null) { //获取组织名称 string multiOrgnNameValues = this.GetMultiOrgnNameValues(customFilter["F_YKQC_OrgId_ca9"] as DynamicObject); //获取起始日期 string startValue = (customFilter["F_YKQC_Date_apv"] == null) ? string.Empty : Convert.ToDateTime(customFilter["F_YKQC_Date_apv"]) .ToString("yyyy-MM-dd"); //获取结束日期 string endValue = (customFilter["F_YKQC_Date_tzk"] == null) ? string.Empty : Convert.ToDateTime(customFilter["F_YKQC_Date_tzk"]) .ToString("yyyy-MM-dd"); //添加标题信息 reportTitles.AddTitle("F_YKQC_OrgId_re5", multiOrgnNameValues); reportTitles.AddTitle("F_YKQC_Date_qtr", startValue); reportTitles.AddTitle("F_YKQC_Date_83g", endValue); } //返回标题 return reportTitles; } //获取组织名称 private string GetMultiOrgnNameValues(DynamicObject orgIdStrings) { //创建组织名称列表 List list = new List(); //初始化结果字符串 string result = string.Empty; //如果组织ID字符串不为空 if (String.IsNullOrEmpty(orgIdStrings["Id"].ToString())) { //获取查询服务 IQueryService service = Kingdee.BOS.Contracts.ServiceFactory.GetService(base.Context); //创建查询参数 QueryBuilderParemeter para = new QueryBuilderParemeter { //表单ID FormId = "ORG_Organizations", //查询组织名称 SelectItems = SelectorItemInfo.CreateItems("FNAME"), //过滤条件,根据组织ID和区域ID FilterClauseWihtKey = string.Format("FORGID IN ({0}) AND FLOCALEID = {1}", orgIdStrings["Id"].Long2Int(), base.Context.UserLocale.LCID) }; //获取动态对象集合 DynamicObjectCollection dynamicObjects = service.GetDynamicObjectCollection(base.Context, para, null); //遍历获取到的动态对象 foreach (DynamicObject current in dynamicObjects) { //将组织名称添加到列表 list.Add(current["FNAME"].ToString()); } //如果列表不为空 if (list.Count > 0) { result = string.Join(",", list.ToArray()); } } //返回组织名称字符串 return result; } //设置单据列 public override ReportHeader GetReportHeaders(IRptParams filter) { //创建表头对象 ReportHeader header = new ReportHeader(); header.AddChild("SBU", new LocaleValue("SBU", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("本年度发货及验收额", new LocaleValue("本年度发货及验收额", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("已到期应收账款", new LocaleValue("已到期应收账款", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); //一级表头 var header1 = header.AddChild("应收账款账龄", new LocaleValue("应收账款账龄")); header1.AddChild("1-6个月", new LocaleValue("1-6个月", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header1.AddChild("7-12个月", new LocaleValue("7-12个月", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header1.AddChild("13-18个月", new LocaleValue("13-18个月", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header1.AddChild("19个月以上", new LocaleValue("19个月以上", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("回款额(含子公司)", new LocaleValue("回款额(含子公司)", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("专责小组回款额", new LocaleValue("专责小组回款额", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("实际业绩额(含往年变更金额)", new LocaleValue("实际业绩额(含往年变更金额)", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("上年度应收额", new LocaleValue("上年度应收额", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("专责小组应收额", new LocaleValue("专责小组应收额", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("回款率", new LocaleValue("回款率", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("预发货到期应收账款", new LocaleValue("预发货到期应收账款", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("预发货回款额", new LocaleValue("预发货回款额", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("预发货回款率", new LocaleValue("预发货回款率", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("回款目标", new LocaleValue("回款目标", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("应收款上限", new LocaleValue("应收款上限", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); header.AddChild("回款达标率", new LocaleValue("回款达标率", this.Context.UserLocale.LCID), SqlStorageType.Sqlvarchar); return header; } //创建临时表 public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName) { //获取过滤条件 string Filter = GetFilterWhere(filter); /* 取数SQL SQL查询字符串,提取所需数据并将结果存入临时表 */ string sql = string.Format(@"/*dialect*/ ", tableName, Filter); //执行SQL并动态创建报表 DBUtils.ExecuteDynamicObject(this.Context, sql); } //获取过滤条件 private string GetFilterWhere(IRptParams fileter) { //获取自定义过滤条件 DynamicObject customFilter = fileter.FilterParameter.CustomFilter; //创建字符串构建器 StringBuilder strwhere = new StringBuilder(); //初始化过滤条件 strwhere.AppendLine("Where 1=1"); var orgFid = customFilter["F_YKQC_OrgId_ca9"] as DynamicObject; if (orgFid != null) { string org = string.IsNullOrWhiteSpace(customFilter["F_YKQC_OrgId_ca9"].ToString()) ? "" : string.Format("AND A.FSaleOrgId IN ({0})", orgFid["Id"].Long2Int()); //添加组织过滤条件 strwhere.AppendLine(org); } //日期 string startValue = (customFilter["F_YKQC_Date_apv"] == null) ? string.Empty : Convert.ToDateTime(customFilter["F_YKQC_Date_apv"]).ToString("yyyy-MM-dd"); string endValue = (customFilter["F_YKQC_Date_tzk"] == null) ? string.Empty : Convert.ToDateTime(customFilter["F_YKQC_Date_tzk"]).ToString("yyyy-MM-dd"); //添加日期过滤条件 if (!String.IsNullOrWhiteSpace(startValue)) { strwhere.AppendLine(string.Format(@"AND A.FDate >= '{0}'", startValue)); } if(!String.IsNullOrWhiteSpace(endValue)) { strwhere.AppendLine(string.Format(@"AND A.FDate <= '{0}'", endValue)); } return strwhere.ToString(); } public override List 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; } } }