345 lines
16 KiB
C#
345 lines
16 KiB
C#
using Kingdee.BOS.App.Data;
|
||
using Kingdee.BOS;
|
||
using Kingdee.BOS.Contracts.Report;
|
||
using Kingdee.BOS.Core.Report;
|
||
using Kingdee.BOS.Orm.DataEntity;
|
||
using Kingdee.BOS.Util;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using Kingdee.BOS.Core.Enums;
|
||
|
||
namespace Pilot.Report.Exploitation.AccountsReceivableStatements
|
||
{
|
||
/// <summary>
|
||
/// 应收账款对账报表【简易版】
|
||
/// </summary>
|
||
[Description("【服务插件】应收账款对账报表【简易版】取数"), HotUpdate]
|
||
public class AccountsReceivableReport: 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();
|
||
|
||
header.AddChild("Number", new LocaleValue("序号"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("DATE", new LocaleValue("签订日期"), SqlStorageType.SqlDatetime);
|
||
header.AddChild("CONTRACTNUMBER", new LocaleValue("订单号"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("ProjectName", new LocaleValue("项目名称"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("OrderAmount", new LocaleValue("订单金额"), SqlStorageType.SqlDecimal);
|
||
header.AddChild("ShipmentsAmount", new LocaleValue("发货金额"), SqlStorageType.SqlDecimal);
|
||
header.AddChild("FBillAllAmount", new LocaleValue("退货金额"), SqlStorageType.SqlDecimal);
|
||
header.AddChild("PPBillingDate", new LocaleValue("普票开票时间"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("PPFALLAmountFor", new LocaleValue("普票开票金额"), SqlStorageType.SqlDecimal);
|
||
header.AddChild("ZPBillingDate", new LocaleValue("专票开票时间"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("ZPFALLAmountFor", new LocaleValue("专票开票金额"), SqlStorageType.SqlDecimal);
|
||
header.AddChild("FALLAMOUNTFOR", new LocaleValue("开票金额"), SqlStorageType.SqlDecimal);
|
||
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.Sqlvarchar);
|
||
header.AddChild("IsEnded", new LocaleValue("是否已完结"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("Remark", new LocaleValue("备注"), SqlStorageType.Sqlvarchar);
|
||
|
||
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;
|
||
|
||
// 客户
|
||
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 FSDate = customFilter["FSDate"]?.ToString();
|
||
|
||
// 订单状态
|
||
var fGROUP = customFilter["F_ALL_GROUP"]?.ToString();
|
||
|
||
//纸质合同号
|
||
var ZZHTH = customFilter["F_ZZHTH"].ToString();
|
||
|
||
//销售员
|
||
var XSYFID = (customFilter["F_XSY"] as DynamicObject)["Id"].ToString();
|
||
|
||
var fProject = fProjectList == null ? "" : (string.Join(",", fProjectList));
|
||
|
||
base.BuilderReportSqlAndTempTable(filter, tableName);
|
||
|
||
string sql = string.Format(@"/*dialect*/
|
||
Select * INTO #TABLEXYX From
|
||
(Select A.FID From View_Table_Temp2 A JOIN View_Table_Temp3 B
|
||
on A.FCONTRACTNUMBER=B.FCONTRACTNUMBER AND A.FCREATEDATE = B.FCREATEDATE
|
||
UNION ALL
|
||
Select * From View_Table_Temp1) W
|
||
Select
|
||
CAST(ROW_NUMBER() OVER (ORDER BY A.FDate DESC) as nvarchar(MAX)) AS 'Number',
|
||
A.FDate as 'DATE', --签订日期
|
||
A.F_CONTRACTNUMBER as 'CONTRACTNUMBER', --订单号
|
||
ISNULL(H.FNAME,'') as 'ProjectName', --项目名称
|
||
ISNULL(AA.FBillAllAmount_LC,0) as 'OrderAmount', --订单金额
|
||
ISNULL(H2.FALLAMOUNT,0) as 'ShipmentsAmount', --发货金额
|
||
ISNULL(H3.FBillAllAmount,0) as 'FBillAllAmount', --退货金额
|
||
ISNULL(H4.FALLAMOUNTFOR,0) as 'FALLAMOUNTFOR', --开票金额
|
||
ISNULL(A.F_AMOUNT,0) as 'PaymentAmount', --回款金额
|
||
ISNULL(H2.FALLAMOUNT,0)-ISNULL(H3.FBillAllAmount,0) -ISNULL(H6.FWRITTENOFFAMOUNTFOR,0) as 'ShippedDebt', --已出货欠款
|
||
ISNULL(H4.FALLAMOUNTFOR,0) -ISNULL(H6.FWRITTENOFFAMOUNTFOR,0) as 'InvoicedDebt', --已开票欠款
|
||
ISNULL((ISNULL(H2.FALLAMOUNT,0)-ISNULL(H3.FBillAllAmount,0) -0)-(ISNULL(H4.FALLAMOUNTFOR,0) -0),0) as 'OwedTickets', --欠票
|
||
CASE WHEN (ISNULL(AA.FBillAllAmount,0)-ISNULL(H3.FBillAllAmount,0)) = ISNULL(H2.FALLAMOUNT,0)
|
||
AND (ISNULL(AA.FBillAllAmount,0)-ISNULL(H3.FBillAllAmount,0)) = ISNULL(H4.FALLAMOUNTFOR,0)
|
||
AND (ISNULL(AA.FBillAllAmount,0)-ISNULL(H3.FBillAllAmount,0)) = ISNULL(H5.FREALRECAMOUNTFOR,0)
|
||
THEN '已完结'
|
||
ELSE '未完结'
|
||
END as 'IsEnded', --是否已完结
|
||
A.FNOTE as 'Remark' --备注
|
||
INTO #TEMPTABLE1 --临时表
|
||
From
|
||
T_SAL_ORDER A
|
||
JOIN
|
||
T_SAL_ORDERFIN AA
|
||
on A.FID = AA.FID
|
||
LEFT JOIN
|
||
(Select q2.FNAME,q1.* From
|
||
T_BAS_PREBDONE q1
|
||
JOIN
|
||
T_BAS_PREBDONE_L q2
|
||
on q1.FID = q2.FID
|
||
Where q2.FLocaleID = 2052
|
||
AND q1.FDocumentStatus = 'C'
|
||
AND q1.FForbidStatus = 'A') H --工程项目表(预置基础资料1)
|
||
on H.FID = A.F_projectname
|
||
LEFT JOIN
|
||
(SELECT W2.FSBILLID,SUM(W1.FALLAMOUNT) as 'FALLAMOUNT' FROM
|
||
(Select q2.FAllAmount,q2.FENTRYID From T_SAL_DELIVERYNOTICE q1
|
||
JOIN T_SAL_DELIVERYNOTICEENTRY_F q2
|
||
on q1.FID = q2.FID Where q1.FDocumentStatus = 'C'
|
||
AND q1.FCancelStatus = 'A') W1
|
||
JOIN T_SAL_DELIVERYNOTICEENTRY_LK W2 on W1.FENTRYID = W2.FENTRYID
|
||
Where W2.FSTABLENAME = 'T_SAL_ORDERENTRY' GROUP BY W2.FSBILLID) H2 --发货通知单
|
||
on A.FID = H2.FSBILLID
|
||
LEFT JOIN
|
||
(SELECT A1.FSBILLID,SUM(A2.FRetNoticeQty*A3.FTaxPrice) as 'FBillAllAmount' FROM
|
||
(SELECT W2.FSBILLID,W1.FENTRYID FROM
|
||
(Select q1.* From
|
||
T_SAL_ORDERENTRY q1
|
||
JOIN
|
||
T_SAL_ORDER q2
|
||
on q1.FID = q2.FID
|
||
Where q2.FBusinessType = 'RETURNSO'
|
||
AND q2.FDocumentStatus = 'C') W1
|
||
JOIN T_SAL_ORDERENTRY_LK W2 on W1.FENTRYID = W2.FENTRYID) A1
|
||
JOIN T_SAL_ORDERENTRY_R A2 on A1.FENTRYID = A2.FENTRYID JOIN
|
||
T_SAL_ORDERENTRY_F A3 on A2.FENTRYID = A3.FENTRYID GROUP BY A1.FSBILLID) H3 --销售订单(退货)
|
||
on A.FID = H3.FSBILLID
|
||
LEFT JOIN
|
||
(SELECT W2.FSBILLID,SUM(W1.FALLAMOUNTFOR) as 'FALLAMOUNTFOR' FROM
|
||
(Select B.FALLAMOUNTFOR,B.FENTRYID From T_AR_RECEIVABLE A
|
||
JOIN T_AR_RECEIVABLEENTRY B on A.FID = B.FID Where A.FDocumentStatus = 'C'
|
||
AND B.FORDERNUMBER !='' AND A.F_GeneralInvoice != 'Y') W1
|
||
JOIN T_AR_RECEIVABLEENTRY_LK W2 on W1.FENTRYID = W2.FENTRYID
|
||
Where W2.FSTABLENAME = 'T_SAL_ORDERENTRY' GROUP BY W2.FSBILLID) H4 --应收单表
|
||
on A.FID = H4.FSBILLID
|
||
LEFT JOIN
|
||
(Select q2.FSALEORDERNO,SUM(q1.FREALRECAMOUNTFOR) as 'FREALRECAMOUNTFOR' From T_AR_RECEIVEBILL q1
|
||
JOIN T_AR_RECEIVEBILLENTRY q2 on q1.FID = q2.FID Where q1.FDOCUMENTSTATUS = 'C'
|
||
AND q1.FCancelStatus = 'A' AND q2.FSALEORDERNO != '' GROUP BY q2.FSALEORDERNO) H5 --收款单表
|
||
on A.FBILLNO = H5.FSALEORDERNO
|
||
LEFT JOIN
|
||
(Select a1.FID,a1.F_CONTRACTNUMBER,SUM(a2.FWRITTENOFFAMOUNTFOR) as 'FWRITTENOFFAMOUNTFOR' From T_AR_RECEIVEBILL a1 JOIN T_AR_RECEIVEBILLENTRY a2 on a1.FID = a2.FID
|
||
WHere a1.F_CONTRACTNUMBER!='' GROUP BY a1.FID,a1.F_CONTRACTNUMBER) H6
|
||
on H6.F_CONTRACTNUMBER = A.F_CONTRACTNUMBER
|
||
Where A.FDocumentStatus = 'C' AND A.FBusinessType = 'NORMAL' AND A.FID in (Select * From #TABLEXYX)");
|
||
|
||
if (!string.IsNullOrEmpty(fClient) && fClient != "0")
|
||
{
|
||
sql += string.Format(@" AND A.FCustId in ({0})", fClient);
|
||
}
|
||
if (!string.IsNullOrEmpty(fProject))
|
||
{
|
||
sql += string.Format(@" AND A.F_projectname in ({0})", fProject);
|
||
}
|
||
if (!string.IsNullOrEmpty(fDate))
|
||
{
|
||
sql += string.Format(@" AND A.FAPPROVEDATE <= EOMONTH('{0}')", fDate);
|
||
}
|
||
if (!string.IsNullOrEmpty(FSDate))
|
||
{
|
||
sql += string.Format(@" AND A.FAPPROVEDATE >= EOMONTH('{0}')", FSDate);
|
||
}
|
||
if (!string.IsNullOrEmpty(ZZHTH))
|
||
{
|
||
sql += string.Format(@"AND A.F_contractnumber = '{0}'", ZZHTH);
|
||
}
|
||
if (!string.IsNullOrEmpty(XSYFID))
|
||
{
|
||
sql += string.Format(@"AND A.FSalerId = '{0}'",XSYFID);
|
||
}
|
||
sql += string.Format(@";");
|
||
|
||
sql += string.Format(@"/*dialect*/
|
||
Select * INTO #TEMPTABLE2 From #TEMPTABLE1
|
||
Where 1=1");
|
||
|
||
if (!string.IsNullOrEmpty(fGROUP) && fGROUP == "2")
|
||
{
|
||
sql += string.Format(@" AND IsEnded = '否'");
|
||
}
|
||
|
||
sql += string.Format(@";");
|
||
|
||
sql += string.Format(@"/*dialect*/
|
||
Select * INTO #TEMPTABLE3 From
|
||
#TEMPTABLE1");
|
||
|
||
sql += string.Format(@"/*dialect*/
|
||
--清空表数据
|
||
TRUNCATE TABLE YingShouZhanKuanJY
|
||
|
||
INSERT INTO YingShouZhanKuanJY(Number,[Date],ContractNumber,ProjectName,OrderAmount,ShipmentsAmount,
|
||
FBillAllAmount,FALLAmountFor,PaymentAmount,ShippedDebt,InvoicedDebt,OwedTickets,IsEnded,Remark)
|
||
SELECT *
|
||
FROM #TEMPTABLE3");
|
||
|
||
sql += string.Format(@"/*dialect*/
|
||
EXEC UpdateYSDZBJY_GZTH");
|
||
|
||
sql += string.Format(@"/*dialect*/
|
||
Select
|
||
*,
|
||
ROW_NUMBER() OVER (ORDER BY Date DESC) AS FID,
|
||
ROW_NUMBER() OVER (ORDER BY Date DESC) AS FIDENTITYID
|
||
INTO {0}
|
||
From
|
||
YingShouZhanKuanJY
|
||
ORDER BY [ContractNumber]
|
||
", tableName);
|
||
|
||
DBUtils.Execute(this.Context, sql);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取前端组件转换过滤条件
|
||
/// </summary>
|
||
/// <param name="filter"></param>
|
||
/// <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();
|
||
//销售员
|
||
var XSYFID = (customFilter["F_XSY"] as DynamicObject)["Id"].ToString();
|
||
|
||
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;
|
||
}
|
||
|
||
//设计报表合计列
|
||
public override List<SummaryField> GetSummaryColumnInfo(IRptParams filter)
|
||
{
|
||
|
||
var result = base.GetSummaryColumnInfo(filter);
|
||
result.Add(new SummaryField("OrderAmount", BOSEnums.Enu_SummaryType.SUM));
|
||
result.Add(new SummaryField("ShipmentsAmount", BOSEnums.Enu_SummaryType.SUM));
|
||
result.Add(new SummaryField("FBillAllAmount", BOSEnums.Enu_SummaryType.SUM));
|
||
result.Add(new SummaryField("PPFALLAmountFor", BOSEnums.Enu_SummaryType.SUM));
|
||
result.Add(new SummaryField("ZPFALLAmountFor", BOSEnums.Enu_SummaryType.SUM));
|
||
result.Add(new SummaryField("FALLAMOUNTFOR", BOSEnums.Enu_SummaryType.SUM));
|
||
result.Add(new SummaryField("PaymentAmount", BOSEnums.Enu_SummaryType.SUM));
|
||
result.Add(new SummaryField("ShippedDebt", BOSEnums.Enu_SummaryType.SUM));
|
||
result.Add(new SummaryField("InvoicedDebt", BOSEnums.Enu_SummaryType.SUM));
|
||
return result;
|
||
}
|
||
}
|
||
}
|