186 lines
9.8 KiB
C#
186 lines
9.8 KiB
C#
![]() |
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<string> list = new List<string>();
|
|||
|
//初始化结果字符串
|
|||
|
string result = string.Empty;
|
|||
|
//如果组织ID字符串不为空
|
|||
|
if (String.IsNullOrEmpty(orgIdStrings["Id"].ToString()))
|
|||
|
{
|
|||
|
//获取查询服务
|
|||
|
IQueryService service = Kingdee.BOS.Contracts.ServiceFactory.GetService<IQueryService>(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<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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|