This commit is contained in:
李狗蛋
2025-03-14 10:00:24 +08:00
commit 69cf26105d
508 changed files with 2743021 additions and 0 deletions

View File

@@ -0,0 +1,449 @@
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 Pilot.Report.Exploitation.PublicClass;
using DocumentFormat.OpenXml.Bibliography;
using DocumentFormat.OpenXml.Spreadsheet;
using NPOI.SS.Formula.Functions;
namespace Pilot.Report.Exploitation.SaleOrderProgress
{
/// <summary>
/// 销售业绩排行榜报表
/// </summary>
[Description("【列表插件】销售业绩排行榜【报表】"), HotUpdate]
public class PHBSaleOrderReport : SysReportBaseService
{
private string tableNameView = EnvironmentTEST.tableNameView_TEST;
/// <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)
{
DynamicObject customFilter = filter.FilterParameter.CustomFilter;
base.GetReportHeaders(filter);
ReportHeader header = new ReportHeader();
// 下单时间
string fDate = customFilter["F_Date"]?.ToString();
int year = Convert.ToInt32(fDate.Split('-')[0]);
header.AddChild("SBU", new LocaleValue("部门(SBU)"), SqlStorageType.Sqlvarchar);
header.AddChild("DetailArea", new LocaleValue("区域明细"), SqlStorageType.Sqlvarchar);
header.AddChild("GName", new LocaleValue("职位名称"), SqlStorageType.Sqlvarchar);
header.AddChild("Salesperson", new LocaleValue("姓名"), SqlStorageType.Sqlvarchar);
header.AddChild("RDate", new LocaleValue("入司时间"), SqlStorageType.SqlDatetime);
header.AddChild("ZWDate", new LocaleValue("担任本职位日期"), SqlStorageType.SqlDatetime);
header.AddChild("XSDate", new LocaleValue("担任销售日期"), SqlStorageType.SqlDatetime);
header.AddChild("RZYear", new LocaleValue("入职年限"), SqlStorageType.Sqlvarchar);
header.AddChild("CliqueBG", new LocaleValue("派诺集团-已进行集团业绩调整(含往年订单变更)"), SqlStorageType.SqlDecimal);
header.AddChild("PNBG", new LocaleValue("派诺业绩(含往年订单变更)"), SqlStorageType.SqlDecimal);
header.AddChild("XNBG", new LocaleValue("兴诺业绩(含往年订单变更)"), SqlStorageType.SqlDecimal);
header.AddChild("WHPNBG", new LocaleValue("武汉派诺业绩(含往年订单变更)"), SqlStorageType.SqlDecimal);
header.AddChild("TSBG", new LocaleValue("广东碳索业绩(含往年订单变更)"), SqlStorageType.SqlDecimal);
header.AddChild("XGPNBG", new LocaleValue("香港派诺业绩(含往年订单变更)"), SqlStorageType.SqlDecimal);
header.AddChild("HXYLBG", new LocaleValue("华夏云联业绩(含往年订单变更)"), SqlStorageType.SqlDecimal);
header.AddChild("DNLJYJ", new LocaleValue("当年累计业绩"), SqlStorageType.SqlDecimal);
header.AddChild("WNBGHTE", new LocaleValue("往年变更合同额"), SqlStorageType.SqlDecimal);
header.AddChild("JTHKHJ", new LocaleValue("集团回款合计"), SqlStorageType.SqlDecimal);
header.AddChild("PNLJHKE", new LocaleValue("派诺累计回款额"), SqlStorageType.SqlDecimal);
header.AddChild("XNLJHKE", new LocaleValue("兴诺累计回款额"), SqlStorageType.SqlDecimal);
header.AddChild("WHPNLJHKE", new LocaleValue("武汉派诺累计回款额"), SqlStorageType.SqlDecimal);
header.AddChild("GDTSLJHKE", new LocaleValue("广东碳索累计回款额"), SqlStorageType.SqlDecimal);
header.AddChild("XGPNLJHKE", new LocaleValue("香港派诺累计回款额"), SqlStorageType.SqlDecimal);
header.AddChild("HXYLLJHKE", new LocaleValue("华夏云联累计回款额"), SqlStorageType.SqlDecimal);
header.AddChild("XXSMB", new LocaleValue(year + "年销售目标-新"), SqlStorageType.SqlDecimal);
header.AddChild("DBL1", new LocaleValue(year + "年达标率(不含往年订单变更)-新"), SqlStorageType.SqlDecimal);
header.AddChild("YXSMB", new LocaleValue(year + "年销售目标-原"), SqlStorageType.SqlDecimal);
header.AddChild("DBL2", new LocaleValue(year + "年达标率(不含往年订单变更)-原"), SqlStorageType.SqlDecimal);
header.AddChild("MBTZJE", new LocaleValue("目标调整金额"), SqlStorageType.SqlDecimal);
header.AddChild("NDXSE1", new LocaleValue((year - 1) + "年度销售额"), SqlStorageType.SqlDecimal);
header.AddChild("NDXSE2", new LocaleValue((year - 2) + "年度销售额"), SqlStorageType.SqlDecimal);
header.AddChild("NDXSE3", new LocaleValue((year - 3) + "年度销售额"), SqlStorageType.SqlDecimal);
header.AddChild("NDXSE4", new LocaleValue((year - 4) + "年度销售额"), SqlStorageType.SqlDecimal);
header.AddChild("NDXSE5", new LocaleValue((year - 5) + "年度销售额"), SqlStorageType.SqlDecimal);
header.AddChild("NDXSE6", new LocaleValue((year - 6) + "年度销售额"), SqlStorageType.SqlDecimal);
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;
// 组织列表
var organizationList = (customFilter["FZuZhi"] as DynamicObjectCollection)?.Select(n => (n["FZuZhi"] as DynamicObject)["ID"].ToString()).ToList();
// 组织
var organization = organizationList == null ? "" : (string.Join(",", organizationList));
// 开始日期
string fStrartDate = customFilter["FStrartDate"]?.ToString();
// 结束日期
string fEndDate = customFilter["FEndDate"]?.ToString();
// 审核开始日期
string fSDate = customFilter["FSDate"]?.ToString();
// 审核结束日期
string fEDate = customFilter["FEDate"]?.ToString();
// 下单时间
string fDate = customFilter["F_Date"]?.ToString();
int year = Convert.ToInt32(fDate.Split('-')[0]);
base.BuilderReportSqlAndTempTable(filter, tableName);
string sql = string.Format(@"/*dialect*/
Select
CASE WHEN ISNULL(X2.FNAME,'') = '' THEN S.区域 ELSE S2.区域 END as 'SBU',--部门SBU
CASE WHEN ISNULL(X2.FNAME,'') = '' THEN S.明细区域 ELSE S2.明细区域 END as 'DetailArea',--区域明细
G.GFNAME as 'GName', --职位名称
CASE WHEN ISNULL(X2.FNAME,'') = '' THEN X.FNAME ELSE X2.FNAME END as 'Salesperson', --销售员
ISNULL(G2.FSTARTDATE,'') as 'RDate',--入司时间
ISNULL(G.FSTARTDATE,'') as 'ZWDate', --担任本职位日期
CASE WHEN ISNULL(G3.FSTARTDATE,'')='' THen null ELSE ISNULL(G3.FSTARTDATE,'') END as 'XSDate',--担任销售日期
ROUND((DATEDIFF(DAY, ISNULL(G2.FSTARTDATE,''), GETDATE()) / 365.0), 1) as 'RZYear',--入职年限
--ISNULL(Y2.FSHARERATE,100) as 'FSHARERATE', --分摊比例
ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0) as 'CliqueBG',--派诺集团-已进行集团业绩调整(含往年订单变更)
CASE WHEN A.FSaleOrgId = 100302 THEN ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0) ELSE null END as 'PNBG',--派诺业绩(含往年订单变更)
CASE WHEN A.FSaleOrgId = 100303 THEN (ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0)) ELSE null END as 'XNBG',--兴诺业绩(含往年订单变更) *(ISNULL(Y2.FSHARERATE,100)/100)
CASE WHEN A.FSaleOrgId = 100305 THEN (ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0)) ELSE null END as 'WHPNBG',--武汉派诺业绩(含往年订单变更) *(ISNULL(Y2.FSHARERATE,100)/100)
CASE WHEN A.FSaleOrgId = 438223 THEN (ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0)) ELSE null END as 'TSBG',--碳索业绩(含往年订单变更) *(ISNULL(Y2.FSHARERATE,100)/100)
CASE WHEN A.FSaleOrgId = 438224 THEN (ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0)) ELSE null END as 'XGPNBG',--香港派诺业绩(含往年订单变更) *(ISNULL(Y2.FSHARERATE,100)/100)
CASE WHEN A.FSaleOrgId = 533896 THEN (ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0)) ELSE null END as 'HXYLBG',--华夏云联业绩(含往年订单变更) *(ISNULL(Y2.FSHARERATE,100)/100)
CASE WHEN YEAR(A.FDATE) = {0} THEN (Select SUM(a1.FALLAMOUNT_LC) as 'FALLAMOUNT_LC' From T_SAL_ORDERENTRY_F a1 JOIN T_SAL_ORDERENTRY a2 on a1.FENTRYID = a2.FENTRYID
Where a2.FMANUALROWCLOSE!='1' AND a1.FID = A.FID)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'DNLJYJ',--当年累计业绩
CASE WHEN YEAR(A.FDATE)<{0} THEN ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0) ELSE null END as 'WNBGHTE',--往年变更合同额(派诺+兴诺+武兴派诺)
ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) as 'JTHKHJ',--集团回款合计
CASE WHEN A.FSaleOrgId = 100302 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'PNLJHKE',--派诺累计回款额
CASE WHEN A.FSaleOrgId = 100303 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'XNLJHKE',--兴诺累计回款额
CASE WHEN A.FSaleOrgId = 100305 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'WHPNLJHKE',--武汉派诺累计回款额
CASE WHEN A.FSaleOrgId = 438223 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'GDTSLJHKE',--广东碳索累计回款额
CASE WHEN A.FSaleOrgId = 438224 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'XGPNLJHKE',--香港派诺累计回款额
CASE WHEN A.FSaleOrgId = 533896 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'HXYLLJHKE',--华夏云联累计回款额
ISNULL(G4.FPERFORMANCETARGETS,0) as 'XXSMB',--2024年销售目标-新
CASE WHEN ISNULL(G4.FPERFORMANCETARGETS,0) = 0 THEN 0 ELSE ROUND((ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100)/ISNULL(G4.FPERFORMANCETARGETS,0),2) END as 'DBL1',--2024年达成率不含往年订单变更
ISNULL(G4.FPERFORMANCETARGETS,0) as 'YXSMB',--2024年销售目标-原
CASE WHEN ISNULL(G4.FPERFORMANCETARGETS,0) = 0 THEN 0 ELSE ROUND((ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100)/ISNULL(G4.FPERFORMANCETARGETS,0),2) END as 'DBL2',--2024年达成率不含往年订单变更)
ISNULL(G4.FPERFORMANCETARGETS,0)-ISNULL(G4.FPERFORMANCETARGETS,0) as 'MBTZJE',--目标调整金额
CASE WHEN YEAR(A.FDATE) = {1} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE1',--2024年度销售额
CASE WHEN YEAR(A.FDATE) = {2} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE2',--2023年度销售额
CASE WHEN YEAR(A.FDATE) = {3} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE3',--2022年度销售额
CASE WHEN YEAR(A.FDATE) = {4} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE4',--2021年度销售额
CASE WHEN YEAR(A.FDATE) = {5} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE5',--2020年度销售额
CASE WHEN YEAR(A.FDATE) = {6} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE6'--2019年度销售额
INTO #TABLETMEP1
From
T_SAL_ORDER A --销售订单
LEFT JOIN
(Select FNumber,FENTRYID From T_BAS_ASSISTANTDATAENTRY Where FID = '670cc977263353') W8 --合同类型
on W8.FENTRYID = A.F_ORDERCATEGORY
LEFT JOIN
T_SAL_ORDERFIN B on A.FID = B.FID
LEFT JOIN
V_BD_SALESMAN_L X on X.fid = A.FSALERID
LEFT JOIN
T_BD_CUSTOMER_L K on K.FCUSTID = A.FCUSTID
LEFT JOIN --收款退款单
T_AR_REFUNDBILL C on C.F_VRYF_TEXT_83G = A.F_CONTRACTNUMBER
LEFT JOIN
T_PerformanceSharing Y on Y.FSOURCEBILLNO = A.FBILLNO
LEFT JOIN
T_PerformanceSharingEntry Y2 on Y2.FID = Y.FID
LEFT JOIN
V_BD_SALESMAN_L X2 on Y2.FSALEID = X2.fid
LEFT JOIN
{7} S on X.FNAME = S.名称
LEFT JOIN
{7} S2 on X2.FNAME = S2.名称
LEFT JOIN
(Select a1.FNAME,a2.*,a3.FNAME as 'GFNAME' From T_HR_EMPINFO_L a1 JOIN T_BD_STAFFTEMP a2 on a1.FID = a2.FID
LEFT JOIN T_ORG_POST_L a3 on a2.FPOSTID = a3.FPOSTID
Where a2.FENTRYID in (Select * From V_User_FID_GW)) G on G.FNAME = (CASE WHEN ISNULL(X2.FNAME,'') = '' THEN X.FNAME ELSE X2.FNAME END)
LEFT JOIN --获取入司时间
V_User_FID_GW2 G2 on G2.FNAME = (CASE WHEN ISNULL(X2.FNAME,'') = '' THEN X.FNAME ELSE X2.FNAME END)
LEFT JOIN --获取销售任刚时间
V_User_FID_GW3 G3 on G3.FNAME = (CASE WHEN ISNULL(X2.FNAME,'') = '' THEN X.FNAME ELSE X2.FNAME END)
LEFT JOIN--业绩目标回款表
(Select a2.FPERFORMANCETARGETS,a2.FPAYMENTSUM,a3.FNAME From MBBA_t_Cust100002 a1 JOIn MBBA_t_Cust_Entry100003 a2 on a1.FID = a2.FID
JOIN V_BD_SALESMAN_L a3 on a2.FNAME = a3.fid Where a1.FDOCUMENTSTATUS = 'C' AND F_MBBA_Combo_qtr = '{0}')
G4 on G4.FNAME = (CASE WHEN ISNULL(X2.FNAME,'') = '' THEN X.FNAME ELSE X2.FNAME END)
LEFT JOIN
(Select a2.FBILLNO2,CASE WHEN ISNULL(a2.FALLAMOUNT2,0)>ISNULL(b1.FALLAMOUNT3,0) THEN ISNULL(b1.FALLAMOUNT3,0)
ELSE ISNULL(a2.FALLAMOUNT2,0) END as 'FALLAMOUNT' From T_AutoWrireRecord a1
JOIN T_AutoWrireRecordEntry a2 on a1.FID = a2.FID
LEFT JOIN
(Select a1.FID,SUM(CAST(a2.FALLAMOUNT3 as DECIMAL(10,2))) as 'FALLAMOUNT3' From T_AutoWrireRecord a1
JOIN T_AutoWrireRecordEntry2 a2 on a1.FID = a2.FID
Where a1.FDOCUMENTSTATUS = 'C' AND Year(a2.FDATE3) = '{0}'
GROUP BY a1.FID) b1 on b1.FID = a1.FID
Where a1.FDOCUMENTSTATUS = 'C') H on H.FBILLNO2 = A.FBILLNO
Where A.FDOCUMENTSTATUS = 'C' AND W8.FNumber != 'Z' --AND ISNULL(X.FNAME,'') != ''
AND A.FSALEORGID = 100302 AND S.区域 != '碳索智控' AND A.FMANUALCLOSE != '1'
AND ISNULL(K.FNAME,'') NOT IN ('派诺科技(香港)有限公司','武汉派诺科技发展有限公司')
AND X.FNAME != '兴诺总';", year, year - 1, year - 2, year - 3, year - 4, year - 5, year - 6, tableNameView);
if (!string.IsNullOrEmpty(organization))
{
sql += string.Format(@" AND A.FSaleOrgId in ({0})", organization);
}
if (!string.IsNullOrEmpty(fStrartDate))
{
sql += string.Format(@" AND A.FDate >= '{0}'", fStrartDate);
}
if (!string.IsNullOrEmpty(fEndDate))
{
sql += string.Format(@" AND A.FDate <= '{0}'", fEndDate);
}
if (!string.IsNullOrEmpty(fSDate))
{
sql += string.Format(@" AND A.FAPPROVEDATE >= '{0}'", fSDate);
}
if (!string.IsNullOrEmpty(fEDate))
{
sql += string.Format(@" AND A.FAPPROVEDATE < DATEADD(DAY, 1, CONVERT(DATE, '{0}'))", fEDate);
}
sql += string.Format(@";");
sql += string.Format(@"/*dialect*/
Select
CASE WHEN ISNULL(X2.FNAME,'') = '' THEN S.区域 ELSE S2.区域 END as 'SBU',--部门SBU
CASE WHEN ISNULL(X2.FNAME,'') = '' THEN S.明细区域 ELSE S2.明细区域 END as 'DetailArea',--区域明细
G.GFNAME as 'GName', --职位名称
CASE WHEN ISNULL(X2.FNAME,'') = '' THEN X.FNAME ELSE X2.FNAME END as 'Salesperson', --销售员
ISNULL(G2.FSTARTDATE,'') as 'RDate',--入司时间
ISNULL(G.FSTARTDATE,'') as 'ZWDate', --担任本职位日期
CASE WHEN ISNULL(G3.FSTARTDATE,'')='' THen null ELSE ISNULL(G3.FSTARTDATE,'') END as 'XSDate',--担任销售日期
ROUND((DATEDIFF(DAY, ISNULL(G2.FSTARTDATE,''), GETDATE()) / 365.0), 1) as 'RZYear',--入职年限
--ISNULL(Y2.FSHARERATE,100) as 'FSHARERATE', --分摊比例
ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0) as 'CliqueBG',--派诺集团-已进行集团业绩调整(含往年订单变更)
CASE WHEN A.FSaleOrgId = 100302 THEN ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0) ELSE null END as 'PNBG',--派诺业绩(含往年订单变更)
CASE WHEN A.FSaleOrgId = 100303 THEN (ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0)) ELSE null END as 'XNBG',--兴诺业绩(含往年订单变更) *(ISNULL(Y2.FSHARERATE,100)/100)
CASE WHEN A.FSaleOrgId = 100305 THEN (ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0)) ELSE null END as 'WHPNBG',--武汉派诺业绩(含往年订单变更) *(ISNULL(Y2.FSHARERATE,100)/100)
CASE WHEN A.FSaleOrgId = 438223 THEN (ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0)) ELSE null END as 'TSBG',--碳索业绩(含往年订单变更) *(ISNULL(Y2.FSHARERATE,100)/100)
CASE WHEN A.FSaleOrgId = 438224 THEN (ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0)) ELSE null END as 'XGPNBG',--香港派诺业绩(含往年订单变更) *(ISNULL(Y2.FSHARERATE,100)/100)
CASE WHEN A.FSaleOrgId = 533896 THEN (ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0)) ELSE null END as 'HXYLBG',--华夏云联业绩(含往年订单变更) *(ISNULL(Y2.FSHARERATE,100)/100)
CASE WHEN YEAR(A.FDATE) = {0} THEN (Select SUM(a1.FALLAMOUNT_LC) as 'FALLAMOUNT_LC' From T_SAL_ORDERENTRY_F a1 JOIN T_SAL_ORDERENTRY a2 on a1.FENTRYID = a2.FENTRYID
Where a2.FMANUALROWCLOSE!='1' AND a1.FID = A.FID)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'DNLJYJ',--当年累计业绩
CASE WHEN YEAR(A.FDATE)<{0} THEN ISNULL(A.F_AMOUNTSTAR,0)-ISNULL(B.FBILLALLAMOUNT_LC,0) ELSE null END as 'WNBGHTE',--往年变更合同额(派诺+兴诺+武兴派诺)
ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) as 'JTHKHJ',--集团回款合计
CASE WHEN A.FSaleOrgId = 100302 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'PNLJHKE',--派诺累计回款额
CASE WHEN A.FSaleOrgId = 100303 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'XNLJHKE',--兴诺累计回款额
CASE WHEN A.FSaleOrgId = 100305 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'WHPNLJHKE',--武汉派诺累计回款额
CASE WHEN A.FSaleOrgId = 438223 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'GDTSLJHKE',--广东碳索累计回款额
CASE WHEN A.FSaleOrgId = 438224 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'XGPNLJHKE',--香港派诺累计回款额
CASE WHEN A.FSaleOrgId = 533896 THEN ISNULL(H.FALLAMOUNT,0)-ISNULL(C.FREALREFUNDAMOUNT,0) ELSE null END as 'HXYLLJHKE',--华夏云联累计回款额
ISNULL(G4.FPERFORMANCETARGETS,0) as 'XXSMB',--2024年销售目标-新
CASE WHEN ISNULL(G4.FPERFORMANCETARGETS,0) = 0 THEN 0 ELSE ROUND((ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100)/ISNULL(G4.FPERFORMANCETARGETS,0),2) END as 'DBL1',--2024年达成率不含往年订单变更
ISNULL(G4.FPERFORMANCETARGETS,0) as 'YXSMB',--2024年销售目标-原
CASE WHEN ISNULL(G4.FPERFORMANCETARGETS,0) = 0 THEN 0 ELSE ROUND((ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100)/ISNULL(G4.FPERFORMANCETARGETS,0),2) END as 'DBL2',--2024年达成率不含往年订单变更)
ISNULL(G4.FPERFORMANCETARGETS,0)-ISNULL(G4.FPERFORMANCETARGETS,0) as 'MBTZJE',--目标调整金额
CASE WHEN YEAR(A.FDATE) = {1} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE1',--2024年度销售额
CASE WHEN YEAR(A.FDATE) = {2} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE2',--2023年度销售额
CASE WHEN YEAR(A.FDATE) = {3} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE3',--2022年度销售额
CASE WHEN YEAR(A.FDATE) = {4} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE4',--2021年度销售额
CASE WHEN YEAR(A.FDATE) = {5} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE5',--2020年度销售额
CASE WHEN YEAR(A.FDATE) = {6} THEN ISNULL(B.FBILLALLAMOUNT_LC,0)*ISNULL(Y2.FSHARERATE,100)/100 ELSE 0 END as 'NDXSE6'--2019年度销售额
INTO #TABLETMEP2
From
T_SAL_ORDER A --销售订单
LEFT JOIN
(Select FNumber,FENTRYID From T_BAS_ASSISTANTDATAENTRY Where FID = '670cc977263353') W8 --合同类型
on W8.FENTRYID = A.F_ORDERCATEGORY
LEFT JOIN
T_SAL_ORDERFIN B on A.FID = B.FID
LEFT JOIN
V_BD_SALESMAN_L X on X.fid = A.FSALERID
LEFT JOIN
T_BD_CUSTOMER_L K on K.FCUSTID = A.FCUSTID
LEFT JOIN --收款退款单
T_AR_REFUNDBILL C on C.F_VRYF_TEXT_83G = A.F_CONTRACTNUMBER
LEFT JOIN
T_PerformanceSharing Y on Y.FSOURCEBILLNO = A.FBILLNO
LEFT JOIN
T_PerformanceSharingEntry Y2 on Y2.FID = Y.FID
LEFT JOIN
V_BD_SALESMAN_L X2 on Y2.FSALEID = X2.fid
LEFT JOIN
{7} S on X.FNAME = S.名称
LEFT JOIN
{7} S2 on X2.FNAME = S2.名称
LEFT JOIN
(Select a1.FNAME,a2.*,a3.FNAME as 'GFNAME' From T_HR_EMPINFO_L a1 JOIN T_BD_STAFFTEMP a2 on a1.FID = a2.FID
LEFT JOIN T_ORG_POST_L a3 on a2.FPOSTID = a3.FPOSTID
Where a2.FENTRYID in (Select * From V_User_FID_GW)) G on G.FNAME = (CASE WHEN ISNULL(X2.FNAME,'') = '' THEN X.FNAME ELSE X2.FNAME END)
LEFT JOIN --获取入司时间
V_User_FID_GW2 G2 on G2.FNAME = (CASE WHEN ISNULL(X2.FNAME,'') = '' THEN X.FNAME ELSE X2.FNAME END)
LEFT JOIN --获取销售任刚时间
V_User_FID_GW3 G3 on G3.FNAME = (CASE WHEN ISNULL(X2.FNAME,'') = '' THEN X.FNAME ELSE X2.FNAME END)
LEFT JOIN--业绩目标回款表
(Select a2.FPERFORMANCETARGETS,a2.FPAYMENTSUM,a3.FNAME From MBBA_t_Cust100002 a1 JOIn MBBA_t_Cust_Entry100003 a2 on a1.FID = a2.FID
JOIN V_BD_SALESMAN_L a3 on a2.FNAME = a3.fid Where a1.FDOCUMENTSTATUS = 'C' AND F_MBBA_Combo_qtr = '{0}')
G4 on G4.FNAME = (CASE WHEN ISNULL(X2.FNAME,'') = '' THEN X.FNAME ELSE X2.FNAME END)
LEFT JOIN
(Select a2.FBILLNO2,CASE WHEN ISNULL(a2.FALLAMOUNT2,0)>ISNULL(b1.FALLAMOUNT3,0) THEN ISNULL(b1.FALLAMOUNT3,0)
ELSE ISNULL(a2.FALLAMOUNT2,0) END as 'FALLAMOUNT' From T_AutoWrireRecord a1
JOIN T_AutoWrireRecordEntry a2 on a1.FID = a2.FID
LEFT JOIN
(Select a1.FID,SUM(CAST(a2.FALLAMOUNT3 as DECIMAL(10,2))) as 'FALLAMOUNT3' From T_AutoWrireRecord a1
JOIN T_AutoWrireRecordEntry2 a2 on a1.FID = a2.FID
Where a1.FDOCUMENTSTATUS = 'C' AND Year(a2.FDATE3) = '{0}'
GROUP BY a1.FID) b1 on b1.FID = a1.FID
Where a1.FDOCUMENTSTATUS = 'C') H on H.FBILLNO2 = A.FBILLNO
Where A.FDOCUMENTSTATUS = 'C' AND W8.FNumber != 'Z' --AND ISNULL(X.FNAME,'') != ''
AND A.FSALEORGID != 100302 AND A.FMANUALCLOSE != '1'"
, year, year - 1, year - 2, year - 3, year - 4, year - 5, year - 6, tableNameView);
if (!string.IsNullOrEmpty(organization))
{
sql += string.Format(@" AND A.FSaleOrgId in ({0})", organization);
}
if (!string.IsNullOrEmpty(fStrartDate))
{
sql += string.Format(@" AND A.FDate >= '{0}'", fStrartDate);
}
if (!string.IsNullOrEmpty(fEndDate))
{
sql += string.Format(@" AND A.FDate <= '{0}'", fEndDate);
}
if (!string.IsNullOrEmpty(fSDate))
{
sql += string.Format(@" AND A.FAPPROVEDATE >= '{0}'", fSDate);
}
if (!string.IsNullOrEmpty(fEDate))
{
sql += string.Format(@" AND A.FAPPROVEDATE < DATEADD(DAY, 1, CONVERT(DATE, '{0}'))", fEDate);
}
sql += string.Format(@";");
sql += string.Format(@"/*dialect*/Select * INTO #TABLETMEP3 From #TABLETMEP1 UNION ALL (Select * From #TABLETMEP2)");
sql += string.Format(@"/*dialect*/
Select
SBU,DetailArea,GName,Salesperson,RDate,ZWDate,XSDate,RZYear,SUM(CliqueBG)/10000'CliqueBG',SUM(PNBG)/10000'PNBG',SUM(XNBG)/10000'XNBG',
SUM(WHPNBG)/10000'WHPNBG',SUM(TSBG)/10000'TSBG',SUM(XGPNBG)/10000'XGPNBG',SUM(HXYLBG)/10000'HXYLBG',SUM(DNLJYJ)/10000'DNLJYJ',SUM(WNBGHTE)/10000'WNBGHTE',SUM(JTHKHJ)/10000'JTHKHJ',SUM(PNLJHKE)/10000'PNLJHKE',
SUM(XNLJHKE)/10000'XNLJHKE',SUM(WHPNLJHKE)/10000'WHPNLJHKE',SUM(GDTSLJHKE)/10000'GDTSLJHKE',SUM(XGPNLJHKE)/10000'XGPNLJHKE',SUM(HXYLLJHKE)/10000'HXYLLJHKE',SUM(XXSMB)/10000'XXSMB',SUM(DBL1)/10000'DBL1',
SUM(YXSMB)/10000'YXSMB',SUM(DBL2)/10000'DBL2',SUM(MBTZJE)/10000'MBTZJE',SUM(NDXSE1)/10000'NDXSE1',SUM(NDXSE2)/10000'NDXSE2',SUM(NDXSE3)/10000'NDXSE3',SUM(NDXSE4)/10000'NDXSE4',SUM(NDXSE5)/10000'NDXSE5',SUM(NDXSE6)/10000'NDXSE6'
INTO #TABLETMEP4
From #TABLETMEP3 GROUP BY SBU,DetailArea,GName,Salesperson,RDate,ZWDate,XSDate,RZYear;");
sql += string.Format(@"/*dialect*/
SELECT
*,
ROW_NUMBER() OVER (ORDER BY Sort) AS FID,
ROW_NUMBER() OVER (ORDER BY Sort) AS FIDENTITYID
INTO {0}
FROM(SELECT *,1 Sort FROM #TABLETMEP4
UNION ALL
SELECT
'总合计:','','','',null,null,null,null,
SUM(CliqueBG)'CliqueBG',SUM(PNBG)'PNBG',SUM(XNBG)'XNBG',
SUM(WHPNBG)'WHPNBG',SUM(TSBG)'TSBG',SUM(XGPNBG)'XGPNBG',SUM(HXYLBG)'HXYLBG',SUM(DNLJYJ)'DNLJYJ',SUM(WNBGHTE)'WNBGHTE',SUM(JTHKHJ)'JTHKHJ',SUM(PNLJHKE)'PNLJHKE',
SUM(XNLJHKE)'XNLJHKE',SUM(WHPNLJHKE)'WHPNLJHKE',SUM(GDTSLJHKE)'GDTSLJHKE',SUM(XGPNLJHKE)'XGPNLJHKE',SUM(HXYLLJHKE)'HXYLLJHKE',SUM(XXSMB)'XXSMB',SUM(DBL1)'DBL1',
SUM(YXSMB)'YXSMB',SUM(DBL2)'DBL2',SUM(MBTZJE)'MBTZJE',SUM(NDXSE1)'NDXSE1',SUM(NDXSE2)'NDXSE2',SUM(NDXSE3)'NDXSE3',SUM(NDXSE4)'NDXSE4',SUM(NDXSE5)'NDXSE5',SUM(NDXSE6)'NDXSE6',
0 Sort
FROM #TABLETMEP4) t1
order by Sort;", 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)
// {
// // 年份
// string fDate = customFilter["F_Date"]?.ToString();
// // 开始日期
// string fStrartDate = customFilter["FStrartDate"]?.ToString();
// // 结束日期
// string fEndDate = customFilter["FEndDate"]?.ToString();
// // 组织
// var organizationList = (customFilter["FZuZhi"] as DynamicObjectCollection)?.Select(n => (n["FZuZhi"] as DynamicObject)["Name"].ToString()).ToList();
// //这里是报表页面的标识
// reportTitles.AddTitle("FDate", fDate == null ? "" : Convert.ToDateTime(fDate).ToString("yyyy-MM-dd"));
// reportTitles.AddTitle("FStrartDate", string.IsNullOrWhiteSpace(fStrartDate) ? "" : Convert.ToDateTime(fStrartDate).ToString("yyyy-MM-dd"));
// reportTitles.AddTitle("FEndDate", string.IsNullOrWhiteSpace(fEndDate) ? "" : Convert.ToDateTime(fEndDate).ToString("yyyy-MM-dd"));
// reportTitles.AddTitle("FZuZhi", organizationList == null ? "" : string.Join(",", organizationList));
// }
// return reportTitles;
//}
}
}

View File

@@ -0,0 +1,331 @@
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Kingdee.BOS.Contracts.Report;
using Kingdee.BOS.Util;
using System.ComponentModel;
namespace Pilot.Report.Exploitation.SaleOrderProgress
{
/// <summary>
/// 销售订单进度报表
/// </summary>
[Description("【列表插件】销售订单进度报表【报表】"), HotUpdate]
public class SaleOrderProgressReport: 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("ClientName", new LocaleValue("客户名称"), SqlStorageType.Sqlnvarchar);
header.AddChild("ContractNumber", new LocaleValue("纸质合同号"), SqlStorageType.Sqlnvarchar);
header.AddChild("ProjectName", new LocaleValue("项目名称"), SqlStorageType.Sqlnvarchar);
header.AddChild("Salesman", new LocaleValue("销售员"), SqlStorageType.Sqlnvarchar);
header.AddChild("ContractPrice", new LocaleValue("合同金额"), SqlStorageType.SqlDecimal);
header.AddChild("CollectionName", new LocaleValue("收款负责人"), SqlStorageType.Sqlnvarchar);
header.AddChild("CollectionDate", new LocaleValue("收款日期"), SqlStorageType.Sqlnvarchar);
header.AddChild("CollectionAmount", new LocaleValue("收款金额"), SqlStorageType.Sqlnvarchar);
header.AddChild("RefundName", new LocaleValue("退款负责人"), SqlStorageType.Sqlnvarchar);
header.AddChild("RefundDate", new LocaleValue("退款日期"), SqlStorageType.Sqlnvarchar);
header.AddChild("RefundAmount", new LocaleValue("退款金额"), SqlStorageType.SqlDecimal);
header.AddChild("ShipmentsName", new LocaleValue("发货负责人"), SqlStorageType.Sqlnvarchar);
header.AddChild("ShipmentsDate", new LocaleValue("发货日期"), SqlStorageType.Sqlnvarchar);
header.AddChild("ShipmentsNum", new LocaleValue("发货数量"), SqlStorageType.SqlBigInt);
header.AddChild("ShipmentsAmount", new LocaleValue("发货金额"), SqlStorageType.SqlDecimal);
header.AddChild("OutShipmentsName", new LocaleValue("出库负责人"), SqlStorageType.Sqlnvarchar);
header.AddChild("OutShipmentsDate", new LocaleValue("出库日期"), SqlStorageType.Sqlnvarchar);
header.AddChild("OutShipmentsNum", new LocaleValue("出库数量"), SqlStorageType.SqlBigInt);
header.AddChild("OutShipmentsAmount", new LocaleValue("出库金额"), SqlStorageType.SqlDecimal);
header.AddChild("SignNum", new LocaleValue("签收数量"), SqlStorageType.SqlBigInt);
header.AddChild("IsSign", new LocaleValue("是否签收"), SqlStorageType.Sqlnvarchar);
header.AddChild("ReturnName", new LocaleValue("退货负责人"), SqlStorageType.Sqlnvarchar);
header.AddChild("ReturnDate", new LocaleValue("退货日期"), SqlStorageType.Sqlnvarchar);
header.AddChild("ReturnNum", new LocaleValue("退货数量"), SqlStorageType.SqlBigInt);
header.AddChild("ReturnAmount", new LocaleValue("退货金额"), SqlStorageType.SqlDecimal);
header.AddChild("BillingName", new LocaleValue("开票负责人"), SqlStorageType.Sqlnvarchar);
header.AddChild("BillingNumber", new LocaleValue("发票号码"), SqlStorageType.Sqlnvarchar);
header.AddChild("BillingDate", new LocaleValue("开票日期"), SqlStorageType.Sqlnvarchar);
header.AddChild("BillingNum", new LocaleValue("开票数量"), SqlStorageType.SqlBigInt);
header.AddChild("BillingAmount", new LocaleValue("开票金额"), SqlStorageType.SqlDecimal);
header.AddChild("NotCollectedAmount", new LocaleValue("销售订单未收款金额"), SqlStorageType.SqlDecimal);
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 fDate = customFilter["FDate"]?.ToString();
// 结束日期
string fEndDate = customFilter["FEndDate"]?.ToString();
// 纸质合同号
string fPaperContract = customFilter["FPaperContract"]?.ToString();
// 组织
var organizationList = (customFilter["FZuZhi"] as DynamicObjectCollection)?.Select(n => (n["FZuZhi"] as DynamicObject)["ID"].ToString()).ToList();
var organization = organizationList == null ? "" : (string.Join(",", organizationList));
base.BuilderReportSqlAndTempTable(filter, tableName);
string sql = string.Format(@"/*dialect*/
Select
A.FDate as 'Date',
ISNULL(B.FNAME,'') as 'ClientName', --客户名称
A.F_contractnumber as 'ContractNumber', --纸质合同号
ISNULL(C.FNAME,'') as 'ProjectName', --项目名称
ISNULL(D.FNAME,'') as 'Salesman', --销售员
AA.FBILLALLAMOUNT_LC as 'ContractPrice', --合同金额
ISNULL(E5.FNAME,'') as 'CollectionName', --收款负责人
ISNULL(E5.FDate,'') as 'CollectionDate', --收款日期
ISNULL(E5.FREALRECAMOUNT,0) as 'CollectionAmount', --收款金额
ISNULL(E6.FNAME,'') as 'RefundName', --退款负责人
ISNULL(E6.FDate,'') as 'RefundDate', --退款日期
ISNULL(E6.FREALREFUNDAMOUNT,0) as 'RefundAmount', --退款金额
ISNULL(E1.FName,'') as 'ShipmentsName', --发货负责人
ISNULL(E1.FDate,'') as 'ShipmentsDate', --发货日期
ISNULL(E1.FPriceUnitQty,0) as 'ShipmentsNum', --发货数量
ISNULL(E1.FALLAMOUNT_LC,0) as 'ShipmentsAmount', --发货金额
ISNULL(E2.FNAME,'') as 'OutShipmentsName', --出库负责人
ISNULL(E2.FDate,'') as 'OutShipmentsDate', --出库日期
ISNULL(E2.FREALQTY,0) as 'OutShipmentsNum', --出库数量
ISNULL(E2.FALLAMOUNT_LC,0) as 'OutShipmentsAmount', --出库金额
ISNULL(E2.FSIGNQTY,0) as 'SignNum', --签收数量
CASE WHEN E2.FTRACESTATUS = 3 THEN '已签收'
ELSE '未签收'
END as 'IsSign', --是否签收
ISNULL(E3.FNAME,'') as 'ReturnName', --退货负责人
ISNULL(E3.FDate,'') as 'ReturnDate', --退货日期
ISNULL(E3.FPriceUnitQty,0) as 'ReturnNum', --退货数量
ISNULL(E3.FALLAMOUNT_LC,0) as 'ReturnAmount', --退货金额
ISNULL(E4.FNAME,'') as 'BillingName', --开票负责人
ISNULL(E4.F_INVOICENUMBER,'') as 'BillingNumber', --发票号码
ISNULL(E4.FDate,'') as 'BillingDate', --开票日期
ISNULL(E4.FPriceQty,0) as 'BillingNum', --开票数量
ISNULL(E4.FALLAMOUNT,0) as 'BillingAmount' --开票金额
--0 as 'NotCollectedAmount' --销售订单未收款金额
INTO #TEMPTABLE1
From
T_SAL_ORDER A --销售顶大
JOIN
T_SAL_ORDERFIN AA --销售订单-财务
on A.FID = AA.FID
LEFT JOIN
(SELECT A2.FDATAVALUE,A1.* FROM
(Select q2.FNAME,q1.* From
T_BD_CUSTOMER q1
JOIN
T_BD_CUSTOMER_L q2
on q1.FCUSTID = q2.FCUSTID) A1
LEFT JOIN
(Select A.FMASTERID,B.FDATAVALUE From T_BAS_ASSISTANTDATAENTRY A
JOIN T_BAS_ASSISTANTDATAENTRY_L B on A.FENTRYID = B.FENTRYID
Where A.FID = '673af6092e2877'
AND A.FDocumentStatus = 'C'
AND A.FForbidStatus = 'A') A2
on A1.F_CREDITCLASSIFICATION = A2.FMASTERID) B --客户表
on A.FCustId = B.FCUSTID
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') C --工程项目预置1项目表
on C.FID = A.F_projectname
LEFT JOIN
(Select q2.FNAME,q1.* From
V_BD_SALESMAN q1
LEFT JOIN
V_BD_SALESMAN_L q2
on q1.fid = q2.fid
Where q2.FLOCALEID = 2052
AND q1.FDocumentStatus = 'C'
AND q1.FForbidStatus = 'A'
AND q1.FForbiddenStatus = '0') D --销售员表
on A.FSalerId = D.fid
LEFT JOIN
(Select R1.FSBILLID,STRING_AGG(R1.FNAME,',') as 'FName',SUM(R1.FALLAMOUNT_LC) as 'FALLAMOUNT_LC',SUM(R1.FPriceUnitQty) as 'FPriceUnitQty',
STRING_AGG(CONVERT(nvarchar,R1.FDATE,23),',') as 'FDate' From (SELECT W2.FSBILLID,W1.FNAME,SUM(W1.FALLAMOUNT_LC) as 'FALLAMOUNT_LC',
SUM(W1.FPriceUnitQty) as 'FPriceUnitQty',STRING_AGG(CONVERT(nvarchar,W1.FDATE,23),',') as 'FDate' FROM (Select q2.FALLAMOUNT_LC,
q2.FENTRYID,q1.FDATE,q3.FNAME,q2.FPriceUnitQty From T_SAL_DELIVERYNOTICE q1 JOIN T_SAL_DELIVERYNOTICEENTRY_F q2 on q1.FID = q2.FID JOIN
T_SEC_USER q3 on q1.FCreatorId = q3.FUSERID Where q1.FDocumentStatus = 'C' AND q3.FForbidStatus = 'A' 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,W1.FNAME) R1 GROUP BY R1.FSBILLID) E1 --发货通知单表
on A.FID = E1.FSBILLID
LEFT JOIN
(SELECT QQ.FSBILLID,QQ.FTRACESTATUS,SUM(QQ.FREALQTY)'FREALQTY',SUM(QQ.FSIGNQTY)'FSIGNQTY',SUM(QQ.FALLAMOUNT_LC)'FALLAMOUNT_LC',
STRING_AGG(CONVERT(nvarchar,QQ.FDATE,23),',')'FDate',STRING_AGG(QQ.FNAME,',') as 'FNAME' FROM (SELECT Q.FSBILLID,Q.FTRACESTATUS,Q.FNAME,
SUM(Q.FREALQTY)'FREALQTY',SUM(Q.FSIGNQTY)'FSIGNQTY',SUM(Q.FALLAMOUNT_LC)'FALLAMOUNT_LC',STRING_AGG(CONVERT(nvarchar,Q.FDATE,23),',')'FDate'
FROM (Select q5.FSBILLID,q1.FDate,q3.FNAME,q2.FRealQty,q4.FALLAMOUNT_LC,q7.FTraceStatus,q6.FSIGNQTY From T_SAL_OUTSTOCK q1 JOIN T_SEC_USER q3
on q1.FCreatorId = q3.FUSERID JOIN T_SAL_OUTSTOCKENTRY q2 on q1.FID = q2.FID JOIN T_SAL_OUTSTOCKENTRY_F q4 on q2.FENTRYID = q4.FENTRYID JOIN T_SAL_OUTSTOCKENTRY_LK q5
on q5.FENTRYID = q2.FENTRYID JOIN T_SAL_OUTSTOCKENTRY_R q6 on q2.FENTRYID = q6.FENTRYID LEFT JOIN T_SAL_OUTSTOCKTRACE q7 on q1.FID = q7.FID
Where q1.FDocumentStatus = 'C' AND q3.FForbidStatus = 'A' AND q1.FCancelStatus = 'A') Q GROUP BY Q.FSBILLID,Q.FTRACESTATUS,Q.FNAME) QQ GROUP BY QQ.FSBILLID,QQ.FTRACESTATUS) E2 --销售出库单
on A.FID = E2.FSBILLID
LEFT JOIN
(SELECT AA.FSBILLID,STRING_AGG(AA.FNAME,',')'FNAME',STRING_AGG(CONVERT(nvarchar,AA.FDATE,23),',')'FDate',SUM(AA.FPriceUnitQty)'FPriceUnitQty',
SUM(AA.FALLAMOUNT_LC)'FALLAMOUNT_LC' FROM (Select a7.FSBILLID,a3.FNAME,STRING_AGG(CONVERT(nvarchar,a1.FDATE,23),',')'FDate',
SUM(a2.FPriceUnitQty)'FPriceUnitQty',SUM(a2.FALLAMOUNT_LC)'FALLAMOUNT_LC' From T_SAL_RETURNSTOCK a1 JOIN T_SAL_RETURNSTOCKENTRY_F a2
on a1.FID = a2.FID JOIN T_SEC_USER a3 on a1.FCreatorId = a3.FUSERID JOIN T_SAL_RETURNSTOCKENTRY_LK a5
on a2.FENTRYID = a5.FENTRYID JOIN T_SAL_RETURNNOTICEENTRY a6 on a5.FSID = a6.FENTRYID JOIN T_SAL_RETURNNOTICEENTRY_LK a7 on a6.FENTRYID = a7.FENTRYID
Where a5.FSTABLENAME = 'T_SAL_RETURNNOTICEENTRY' AND a7.FSTABLENAME = 'T_SAL_ORDERENTRY'GROUP BY a7.FSBILLID,a3.FNAME) AA GROUP BY AA.FSBILLID) E3 --退货订单表
on A.FID = E3.FSBILLID
LEFT JOIN
(SELECT WW.FSBILLID,WW.F_INVOICENUMBER,STRING_AGG(WW.FNAME,',')as 'FNAME',SUM(WW.FALLAMOUNT) as 'FALLAMOUNT',SUM(WW.FPriceQty) as 'FPriceQty',
STRING_AGG(CONVERT(nvarchar,WW.FDATE,23),',') as 'FDate' FROM (SELECT W2.FSBILLID,W1.FNAME,W1.F_INVOICENUMBER,SUM(W1.FALLAMOUNT) as 'FALLAMOUNT',
SUM(W1.FPriceQty) as 'FPriceQty',STRING_AGG(CONVERT(nvarchar,W1.FDATE,23),',') as 'FDate' FROM (Select B1.FALLAMOUNT,B1.FENTRYID,B1.FOPENAMOUNTFOR,
A1.FDATE,A1.F_InvoiceNumber,C1.FNAME,B1.FPriceQty From T_AR_RECEIVABLE A1 JOIN T_AR_RECEIVABLEENTRY B1 on A1.FID = B1.FID JOIN T_SEC_USER C1 on
A1.FCreatorId = C1.FUSERID Where A1.FDocumentStatus = 'C' AND B1.FORDERNUMBER !='' AND A1.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,W1.FNAME,W1.F_INVOICENUMBER) WW GROUP BY WW.FSBILLID,WW.F_INVOICENUMBER) E4 --应收单表
on A.FID = E4.FSBILLID
LEFT JOIN
(Select a1.FSBILLID,a3.FID,a4.FNAME,CONVERT(nvarchar,a3.FDATE,23) as FDate,SUM(a3.FREALRECAMOUNT) as 'FREALRECAMOUNT'
From T_AR_RECEIVEBILLSRCENTRY_LK a1 JOIN T_AR_RECEIVEBILLENTRY a2 on a1.FENTRYID = a2.FENTRYID
JOIN T_AR_RECEIVEBILL a3 on a2.FID = a3.FID JOIN T_SEC_USER a4 on a3.FCreatorId = a4.FUSERID
Where a1.FSTABLENAME = 'T_SAL_ORDERPLAN' AND a3.FDOCUMENTSTATUS = 'C' Group by a1.FSBILLID,a3.FID,a4.FNAME,a3.FDATE) E5
on E5.FSBILLID = A.FID
LEFT JOIN
(Select a1.FSBILLID,a3.FID,a4.FNAME,CONVERT(nvarchar,a3.FDATE,23) as FDate,SUM(a3.FREALREFUNDAMOUNT) as 'FREALREFUNDAMOUNT'
From T_AR_REFUNDBILLSRCENTRY_LK a1 JOIN T_AR_REFUNDBILLENTRY a2 on a1.FENTRYID = a2.FENTRYID
JOIN T_AR_REFUNDBILL a3 on a2.FID = a3.FID JOIN T_SEC_USER a4 on a3.FCREATERID = a4.FUSERID
Where a1.FSTABLENAME = 'T_AR_RECEIVEBILLENTRY' AND a3.FDOCUMENTSTATUS = 'C' Group by a1.FSBILLID,a3.FID,a4.FNAME,a3.FDATE) E6
on E5.FID = E6.FSBILLID
Where A.FDocumentStatus = 'C'");
if (!string.IsNullOrEmpty(organization))
{
sql += string.Format(@" AND A.FSaleOrgId in ({0})", organization);
}
sql += string.Format(@";");
sql += string.Format(@"/*dialect*/Select *,(ContractPrice-CollectionAmount-RefundAmount) as'NotCollectedAmount' INTO #TEMPTABLE2 From #TEMPTABLE1 Where 1=1");
if (!string.IsNullOrEmpty(fDate))
{
sql += string.Format(@" AND DATE >= '{0}'", fDate);
}
if (!string.IsNullOrEmpty(fEndDate))
{
sql += string.Format(@" AND DATE <= '{0}'", fEndDate);
}
if (!string.IsNullOrEmpty(fPaperContract))
{
sql += string.Format(@" AND ContractNumber like '%{0}%'", fPaperContract);
}
sql += string.Format(@"/*dialect*/
Select * INTO #TEMPTABLE3 From #TEMPTABLE2 UNION ALL Select
'','合计:','','','',SUM(ContractPrice),'','',SUM(CollectionAmount),'','',
SUM(RefundAmount),'','',SUM(ShipmentsNum),SUM(ShipmentsAmount),'','',
SUM(OutShipmentsNum),SUM(OutShipmentsAmount),SUM(SignNum),'','','',
SUM(ReturnNum),SUM(ReturnAmount),'','','',SUM(BillingAmount),
SUM(BillingAmount),SUM(NotCollectedAmount) FROM #TEMPTABLE2");
sql += string.Format(@";");
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
#TEMPTABLE3", 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)
{
// 下单时间
string fDate = customFilter["FDate"]?.ToString();
// 下单时间
string fEndDate = customFilter["FEndDate"]?.ToString();
// 纸质合同号
string fPaperContract = customFilter["FPaperContract"]?.ToString();
// 组织
var organizationList = (customFilter["FZuZhi"] as DynamicObjectCollection)?.Select(n => (n["FZuZhi"] as DynamicObject)["Name"].ToString()).ToList();
//这里是报表页面的标识
reportTitles.AddTitle("FPaperContract", fPaperContract == null ? "" : fPaperContract);
reportTitles.AddTitle("FDate", fDate == null ? "" : Convert.ToDateTime(fDate).ToString("yyyy-MM-dd"));
reportTitles.AddTitle("FEndDate", fEndDate == null ? "" : Convert.ToDateTime(fEndDate).ToString("yyyy-MM-dd"));
reportTitles.AddTitle("FZuZhi", organizationList == null ? "" : string.Join(",", organizationList));
}
return reportTitles;
}
}
}