using Kingdee.BOS.App.Data; using Kingdee.BOS.Contracts.Report; using Kingdee.BOS.Core.Report; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using Kingdee.BOS; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using Kingdee.BOS.Core.Enums; using Kingdee.BOS.Log; namespace Pilot.Report.Exploitation.AccountsReceivableStatements { /// /// 应收账款对账报表【明细版】 /// [Description("[服务插件] 应收账款对账报表【兴诺明细版】取数"), HotUpdate] public class AccountsReceivableReport2_XN : SysReportBaseService { /// /// 初始化 /// public override void Initialize() { base.Initialize(); this.ReportProperty.ReportName = new LocaleValue("应收账款对账单【兴诺明细版】", base.Context.UserLocale.LCID); this.ReportProperty.IsUIDesignerColumns = false; // 简单账表类型:普通、树形、分页 this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL; this.IsCreateTempTableByPlugin = true; // this.IsCreateTempTableByPlugin = true; // this.ReportProperty.IsGroupSummary = true; // this.ReportProperty.SimpleAllCols = false; // 单据主键:两行FID相同,则为同一单的两条分录,单据编号可以不重复显示 this.ReportProperty.PrimaryKeyFieldName = "FID"; // this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true; // 设置精度控制 var list = new List { new DecimalControlField("FDECIMALS", "OrigInvoiceAmount"), new DecimalControlField("FDECIMALS", "ExchangeRate"), new DecimalControlField("FDECIMALS", "InvoiceAmountTHB"), new DecimalControlField("FDECIMALS", "MonthEndExRate"), new DecimalControlField("FDECIMALS", "RevaluationAountInTHB"), new DecimalControlField("FDECIMALS", "UnrealizedGainLoss"), }; this.ReportProperty.DecimalControlFieldList = list; } /// /// 报表列表头 /// /// /// public override ReportHeader GetReportHeaders(IRptParams filter) { base.GetReportHeaders(filter); ReportHeader header = new ReportHeader(); header.AddChild("Number", new LocaleValue("序号"), SqlStorageType.Sqlvarchar); header.AddChild("DATE", new LocaleValue("签订日期"), SqlStorageType.Sqlvarchar); header.AddChild("CONTRACTNUMBER", new LocaleValue("订单号"), SqlStorageType.Sqlvarchar); header.AddChild("ProjectName", new LocaleValue("项目名称"), SqlStorageType.Sqlvarchar); header.AddChild("SizeModel", new LocaleValue("规格型号"), SqlStorageType.Sqlvarchar); header.AddChild("FQty", new LocaleValue("数量/台"), SqlStorageType.SqlInt); header.AddChild("FTaxPrice", new LocaleValue("单价"), SqlStorageType.SqlDecimal); header.AddChild("FAllAmount", new LocaleValue("价税合计"), SqlStorageType.SqlDecimal); header.AddChild("OrderAmount", new LocaleValue("订单金额"), SqlStorageType.SqlDecimal); header.AddChild("ShipmentsDate", new LocaleValue("发货日期"), SqlStorageType.Sqlvarchar); header.AddChild("K3发货数量", new LocaleValue("K3发货数量"), SqlStorageType.SqlDecimal); header.AddChild("K3发货金额", new LocaleValue("K3发货金额"), SqlStorageType.SqlDecimal); header.AddChild("星空发货数量", new LocaleValue("星空发货数量"), SqlStorageType.SqlDecimal); header.AddChild("星空发货金额", new LocaleValue("星空发货金额"), SqlStorageType.SqlDecimal); header.AddChild("ShipmentsNum", new LocaleValue("总发货数量"), SqlStorageType.SqlDecimal); header.AddChild("ShipmentsAmount", new LocaleValue("总发货金额"), SqlStorageType.SqlDecimal); header.AddChild("ReturnDate", new LocaleValue("退货日期"), SqlStorageType.Sqlvarchar); header.AddChild("K3退货数量", new LocaleValue("K3退货数量"), SqlStorageType.SqlDecimal); header.AddChild("K3退货金额", new LocaleValue("K3退货金额"), SqlStorageType.SqlDecimal); header.AddChild("星空退货数量", new LocaleValue("星空退货数量"), SqlStorageType.SqlDecimal); header.AddChild("星空退货金额", new LocaleValue("星空退货金额"), SqlStorageType.SqlDecimal); header.AddChild("ReturnNum", new LocaleValue("总退货数量"), SqlStorageType.SqlInt); header.AddChild("ReturnAmount", new LocaleValue("总退货金额"), SqlStorageType.SqlDecimal); header.AddChild("PPBillingDate", new LocaleValue("普票开票日期"), SqlStorageType.Sqlvarchar); header.AddChild("PPBillingAmount", new LocaleValue("星空普票开票金额"), SqlStorageType.SqlDecimal); header.AddChild("ZPBillingDate", new LocaleValue("专票开票日期"), SqlStorageType.Sqlvarchar); header.AddChild("ZPBillingAmount", new LocaleValue("星空专票开票金额"), SqlStorageType.SqlDecimal); header.AddChild("BillingAmount", new LocaleValue("总发票金额"), SqlStorageType.SqlDecimal); header.AddChild("PaymentDate", new LocaleValue("回款日期"), SqlStorageType.Sqlvarchar); header.AddChild("PaymentAmount", new LocaleValue("回款金额"), SqlStorageType.SqlDecimal); header.AddChild("ShippedDebt", new LocaleValue("已出货欠款"), SqlStorageType.SqlDecimal); header.AddChild("InvoicedDebt", new LocaleValue("已开票欠款"), SqlStorageType.SqlDecimal); header.AddChild("OwedTickets", new LocaleValue("欠票"), SqlStorageType.SqlDecimal); header.AddChild("IsEnded", new LocaleValue("是否已完结"), SqlStorageType.Sqlvarchar); header.AddChild("FSalerId", new LocaleValue("销售员"), SqlStorageType.Sqlvarchar); header.AddChild("Remark", new LocaleValue("备注"), SqlStorageType.Sqlvarchar); header.AddChild("K3专票金额", new LocaleValue("K3专票金额"), SqlStorageType.SqlDecimal); header.AddChild("K3普票金额", new LocaleValue("K3普票金额"), SqlStorageType.SqlDecimal); foreach (var item in header.GetChilds()) { item.Width = 160; } return header; } /// /// 显示报表数据 /// /// /// public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName) { DynamicObject customFilter = filter.FilterParameter.CustomFilter; //组织 var ZZ = (customFilter["F_VRYF_OrgId_re5"] as DynamicObject); var ZZFID = ZZ["Id"]?.ToString(); // 客户 string fClient = customFilter["FClient_Id"]?.ToString(); // 工程项目名称 var fProjectList = (customFilter["FProject"] as DynamicObjectCollection)?.Select(n => (n["FProject"] as DynamicObject)["ID"].ToString()).ToList(); // 截止对账日期 var fDate = customFilter["FDate"]?.ToString(); // 订单状态 var fGROUP = customFilter["F_ALL_GROUP"]?.ToString(); //开始对账日期 var FSDate = customFilter["FSDate"]?.ToString(); //纸质合同号 var ZZHTH = customFilter["F_ZZHTH"]?.ToString(); //销售员 var XSY = customFilter["F_XSY"] as DynamicObject; var XSYFID = string.Empty; if (XSY != null) { XSYFID = XSY["Id"]?.ToString(); } var fProject = fProjectList == null ? "" : (string.Join(",", fProjectList)); var SFQJFWDZ = customFilter["F_ALL_GROUP2"]?.ToString(); base.BuilderReportSqlAndTempTable(filter, tableName); string sql = string.Format(@"/*dialect*/ --更新表中的字段 EXEC UpdateYSDZBMX_GZTH_XN '{0}','{1}','{2}','{3}','{4}','{5}','{6}' --更新表中的发票金额 EXEC GXFPJEYSDZDMX_GZTH '{0}','{1}' ", FSDate,fDate,ZZFID,fClient,XSYFID,ZZHTH,SFQJFWDZ); sql += string.Format($@"/*dialect*/ INSERT INTO YingShouZhanKuanMX_GZTH(FID,NUMBER,PaymentAmount,ShippedDebt,InvoicedDebt) Select 999998,'待核销' ,Sum((FRECAMOUNTFOR-F_AMOUNT)*FEXCHANGERATE) AS DHXJE ,-Sum((FRECAMOUNTFOR-F_AMOUNT)*FEXCHANGERATE) AS YCHQK ,-Sum((FRECAMOUNTFOR-F_AMOUNT)*FEXCHANGERATE) AS YKPQK From T_AR_RECEIVEBILL T1 Where 1=1 And FDOCUMENTSTATUS = 'C' And FCONTACTUNIT ={fClient} INSERT INTO YingShouZhanKuanMX_GZTH(FID,NUMBER,FQTY,FALLAMOUNT,OrderAmount,ShipmentsNum,ShipmentsAmount, ReturnNum,ReturnAmount,BillingAmount,PaymentAmount,ShippedDebt,InvoicedDebt,OwedTickets,[K3退货金额],PPBillingAmount,ZPBillingAmount,[星空退货金额],[星空发货金额] ,[K3发货数量],[K3发货金额],[星空发货数量],[K3退货数量],[星空退货数量],[K3专票金额],[K3普票金额]) SELECT 999999, '合计', SUM(FQTY), SUM(FALLAMOUNT), SUM(OrderAmount), SUM(ShipmentsNum), SUM(ShipmentsAmount), SUM(ReturnNum), SUM(ReturnAmount), SUM(BillingAmount), SUM(PaymentAmount), SUM(ShippedDebt), SUM(InvoicedDebt), SUM(OwedTickets),sum(K3退货金额) , SUM(PPBillingAmount), SUM(ZPBillingAmount), sum(星空退货金额),SUM(星空发货金额), SUM(K3发货数量),SUM(K3发货金额),SUM(星空发货数量),SUM(K3退货数量),SUM(星空退货数量),SUM(K3专票金额),SUM(K3普票金额) FROM YingShouZhanKuanMX_GZTH where 1=1 "); if (fGROUP == "2") { sql += string.Format("AND FID IN (SELECT FID FROM YingShouZhanKuanMX_GZTH WHERE IsEnded = '未完结')"); } sql += string.Format(@" SELECT --ROW_NUMBER() OVER (ORDER BY [DATE] DESC,[FID]) AS FIDENTITYID, --DENSE_RANK() OVER (ORDER BY [DATE] DESC,[FID] ) AS OUTPUTNUMBER, ROW_NUMBER() OVER (ORDER BY (CASE [NUMBER] WHEN '待核销' THEN 999998 WHEN '合计' THEN 999999 ELSE CONVERT(INT,[NUMBER]) END),[FID]) AS FIDENTITYID, DENSE_RANK() OVER (ORDER BY (CASE [NUMBER] WHEN '待核销' THEN '2099-12-30' WHEN '合计' THEN '2099-12-31' ELSE [DATE] END),[FID] ) AS OUTPUTNUMBER, * INTO {0} FROM YingShouZhanKuanMX_GZTH WHERE 1=1 ", tableName); if (fGROUP == "2") { sql += string.Format("AND FID IN (SELECT FID FROM YingShouZhanKuanMX_GZTH WHERE IsEnded = '未完结')"); } //Logger.Error("sql脚本", sql, new Exception()); DBUtils.Execute(this.Context, sql); } /// /// 获取前端组件转换过滤条件 /// /// public override ReportTitles GetReportTitles(IRptParams filter) { ReportTitles reportTitles = new ReportTitles(); DynamicObject customFilter = filter.FilterParameter.CustomFilter; if (customFilter != null) { // 客户 var fClientList = (customFilter["FClient"] as DynamicObject)?["Name"]?.ToString(); // 工程项目名称 var fProjectList = (customFilter["FProject"] as DynamicObjectCollection)?.Select(n => (n["FProject"] as DynamicObject)["Name"].ToString()).ToList(); // 截止对账日期 var fDate = customFilter["FDate"]?.ToString(); //开始对账日期 var FSDate = customFilter["FSDate"]?.ToString(); // 订单状态 var fGROUP = customFilter["F_ALL_GROUP"]?.ToString(); //纸质合同号 var ZZHTH = customFilter["F_ZZHTH"]?.ToString(); //销售员 var XSY = (customFilter["F_XSY"] as DynamicObject); var XSYFID = string.Empty; if (XSY != null) { XSYFID = XSY["Id"].ToString(); } string fState = ""; if (fGROUP == "1") { fState = "全部订单"; } if (fGROUP == "2") { fState = "未完结订单"; } //是否月结客户 var SFQJFWDZ = customFilter["F_ALL_GROUP2"]?.ToString(); //这里是报表页面的标识 reportTitles.AddTitle("FState", fGROUP == null ? "" : fState); reportTitles.AddTitle("FClient", fClientList == null ? "" : fClientList); reportTitles.AddTitle("FDate", fDate == null ? "" : Convert.ToDateTime(fDate).ToString("yyyy-MM-dd")); reportTitles.AddTitle("FSDate", fDate == null ? "" : Convert.ToDateTime(FSDate).ToString("yyyy-MM-dd")); reportTitles.AddTitle("FProject", fProjectList == null ? "" : string.Join(",", fProjectList)); reportTitles.AddTitle("F_ZZHTH", ZZHTH == null ? "" : ZZHTH); reportTitles.AddTitle("F_XSY", XSYFID == null ? "" : XSYFID); reportTitles.AddTitle("F_SFYJKH", SFQJFWDZ == null ? "" : SFQJFWDZ); } return reportTitles; } //设计报表合计列 //public override List GetSummaryColumnInfo(IRptParams filter) //{ // var result = base.GetSummaryColumnInfo(filter); // result.Add(new SummaryField("FQty", BOSEnums.Enu_SummaryType.SUM)); // result.Add(new SummaryField("FAllAmount", BOSEnums.Enu_SummaryType.SUM)); // result.Add(new SummaryField("OrderAmount", BOSEnums.Enu_SummaryType.SUM)); // result.Add(new SummaryField("ShipmentsNum", BOSEnums.Enu_SummaryType.SUM)); // result.Add(new SummaryField("ShipmentsAmount", BOSEnums.Enu_SummaryType.SUM)); // result.Add(new SummaryField("ReturnNum", BOSEnums.Enu_SummaryType.SUM)); // result.Add(new SummaryField("ReturnAmount", BOSEnums.Enu_SummaryType.SUM)); // result.Add(new SummaryField("PPBillingAmount", BOSEnums.Enu_SummaryType.SUM)); // result.Add(new SummaryField("ZPBillingAmount", BOSEnums.Enu_SummaryType.SUM)); // result.Add(new SummaryField("BillingAmount", BOSEnums.Enu_SummaryType.SUM)); // result.Add(new SummaryField("PaymentAmount", BOSEnums.Enu_SummaryType.SUM)); // result.Add(new SummaryField("OwedTickets", BOSEnums.Enu_SummaryType.SUM)); // return result; //} } }