PiolotTH_ReportFrom/YSZKDZBaoBiao/AccountsReceivableReport2.cs

281 lines
14 KiB
C#
Raw Normal View History

2025-06-03 13:44:45 +08:00
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;
2025-07-15 18:38:45 +08:00
using Kingdee.BOS.Log;
2025-06-03 13:44:45 +08:00
namespace Pilot.Report.Exploitation.AccountsReceivableStatements
{
/// <summary>
/// 应收账款对账报表【明细版】
/// </summary>
[Description("[服务插件] "), HotUpdate]
public class AccountsReceivableReport2 : SysReportBaseService
{
/// <summary>
/// 初始化
/// </summary>
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<DecimalControlField>
{
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;
}
/// <summary>
/// 报表列表头
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public override ReportHeader GetReportHeaders(IRptParams filter)
{
base.GetReportHeaders(filter);
ReportHeader header = new ReportHeader();
2025-07-02 10:10:05 +08:00
header.AddChild("Number", new LocaleValue("序号"), SqlStorageType.Sqlvarchar);
2025-06-17 00:58:10 +08:00
header.AddChild("DATE", new LocaleValue("签订日期"), SqlStorageType.Sqlvarchar);
2025-06-03 13:44:45 +08:00
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);
2025-07-04 17:31:39 +08:00
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);
2025-06-03 13:44:45 +08:00
header.AddChild("ShipmentsAmount", new LocaleValue("发货金额"), SqlStorageType.SqlDecimal);
header.AddChild("ReturnDate", new LocaleValue("退货日期"), SqlStorageType.Sqlvarchar);
2025-07-04 17:31:39 +08:00
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);
2025-06-03 13:44:45 +08:00
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.Sqlvarchar);
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);
2025-07-02 10:10:05 +08:00
header.AddChild("FSalerId", new LocaleValue("销售员"), SqlStorageType.Sqlvarchar);
2025-06-03 13:44:45 +08:00
header.AddChild("Remark", new LocaleValue("备注"), SqlStorageType.Sqlvarchar);
2025-07-15 18:38:45 +08:00
header.AddChild("K3专票金额", new LocaleValue("K3专票金额"), SqlStorageType.SqlDecimal);
header.AddChild("K3普票金额", new LocaleValue("K3普票金额"), SqlStorageType.SqlDecimal);
2025-06-03 13:44:45 +08:00
foreach (var item in header.GetChilds())
{
item.Width = 160;
}
return header;
}
/// <summary>
/// 显示报表数据
/// </summary>
/// <param name="filter"></param>
/// <param name="tableName"></param>
public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
{
DynamicObject customFilter = filter.FilterParameter.CustomFilter;
2025-06-17 00:58:10 +08:00
//组织
var ZZ = (customFilter["F_VRYF_OrgId_re5"] as DynamicObject);
var ZZFID = ZZ["Id"]?.ToString();
2025-06-03 13:44:45 +08:00
// 客户
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();
//纸质合同号
2025-06-17 00:58:10 +08:00
var ZZHTH = customFilter["F_ZZHTH"]?.ToString();
2025-06-03 13:44:45 +08:00
//销售员
2025-06-17 00:58:10 +08:00
var XSY = customFilter["F_XSY"] as DynamicObject;
var XSYFID = string.Empty;
if (XSY != null)
{
XSYFID = XSY["Id"]?.ToString();
}
2025-06-03 13:44:45 +08:00
var fProject = fProjectList == null ? "" : (string.Join(",", fProjectList));
base.BuilderReportSqlAndTempTable(filter, tableName);
string sql = string.Format(@"/*dialect*/
2025-06-17 00:58:10 +08:00
--
2025-07-02 10:10:05 +08:00
EXEC UpdateYSDZBMX_GZTH '{0}','{1}','{2}','{3}','{4}','{5}'
2025-06-17 00:58:10 +08:00
--
EXEC GXFPJEYSDZDMX_GZTH
2025-07-02 10:10:05 +08:00
", FSDate,fDate,ZZFID,fClient,XSYFID,ZZHTH);
sql += string.Format(@"/*dialect*/
INSERT INTO YingShouZhanKuanMX_GZTH(NUMBER,FQTY,FTAXPRICE,FALLAMOUNT,OrderAmount,ShipmentsNum,ShipmentsAmount,
ReturnNum,ReturnAmount,BillingAmount,PaymentAmount,ShippedDebt,InvoicedDebt,OwedTickets)
SELECT
'',
SUM(FQTY),
SUM(FTAXPRICE),
SUM(FALLAMOUNT),
SUM(OrderAmount),
SUM(ShipmentsNum),
SUM(ShipmentsAmount),
SUM(ReturnNum),
SUM(ReturnAmount),
SUM(BillingAmount),
SUM(PaymentAmount),
SUM(ShippedDebt),
SUM(InvoicedDebt),
SUM(OwedTickets)
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(@"
2025-06-17 00:58:10 +08:00
SELECT
ROW_NUMBER() OVER (ORDER BY [FID]) AS FIDENTITYID,
*
2025-07-02 10:10:05 +08:00
INTO {0}
2025-06-17 00:58:10 +08:00
FROM YingShouZhanKuanMX_GZTH
2025-07-02 10:10:05 +08:00
WHERE 1=1
",tableName);
if (fGROUP == "2")
2025-06-03 13:44:45 +08:00
{
2025-06-17 00:58:10 +08:00
sql += string.Format("AND FID IN (SELECT FID FROM YingShouZhanKuanMX_GZTH WHERE IsEnded = '未完结')");
2025-06-03 13:44:45 +08:00
}
2025-07-15 18:38:45 +08:00
Logger.Error("sql脚本", sql, new Exception());
2025-06-03 13:44:45 +08:00
DBUtils.Execute(this.Context, sql);
}
/// <summary>
/// 获取前端组件转换过滤条件
/// </summary>
/// <returns></returns>
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();
//销售员
2025-06-17 00:58:10 +08:00
var XSY = (customFilter["F_XSY"] as DynamicObject);
var XSYFID = string.Empty;
if (XSY != null)
{
XSYFID = XSY["Id"].ToString();
}
2025-06-03 13:44:45 +08:00
string fState = "";
if (fGROUP == "1")
{
fState = "全部订单";
}
if (fGROUP == "2")
{
fState = "未完结订单";
}
//这里是报表页面的标识
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);
}
return reportTitles;
}
//设计报表合计列
2025-07-02 10:10:05 +08:00
//public override List<SummaryField> GetSummaryColumnInfo(IRptParams filter)
//{
2025-06-03 13:44:45 +08:00
2025-07-02 10:10:05 +08:00
// 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;
//}
2025-06-03 13:44:45 +08:00
}
}