951 lines
39 KiB
C#
Raw Normal View History

2025-03-14 10:00:24 +08:00
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;
2025-06-21 11:07:26 +08:00
using Pilot.Report.Exploitation.Common;
2025-07-09 15:13:33 +08:00
using Kingdee.BOS.Log;
2025-03-14 10:00:24 +08:00
namespace Pilot.Report.Exploitation.SpecialDetails
{
/// <summary>
/// 特价明细报表
/// </summary>
[Description("【列表插件】特价明细报表【报表】"), HotUpdate]
public class SpecialDetailsReport : 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-06-25 19:00:53 +08:00
header.AddChild("TableName", new LocaleValue("开发看的"), SqlStorageType.Sqlvarchar);
2025-03-14 10:00:24 +08:00
header.AddChild("Date", new LocaleValue("日期"), SqlStorageType.Sqlvarchar);
header.AddChild("Month", new LocaleValue("月份"), SqlStorageType.Sqlvarchar);
header.AddChild("Client", new LocaleValue("购货单位"), SqlStorageType.Sqlvarchar);
header.AddChild("CreditType", new LocaleValue("客户信用类型"), SqlStorageType.Sqlvarchar);
header.AddChild("ContractNumber", new LocaleValue("纸质合同号"), SqlStorageType.Sqlvarchar);
header.AddChild("SizeModel", new LocaleValue("规格型号"), SqlStorageType.Sqlvarchar);
header.AddChild("Quantity", new LocaleValue("数量"), SqlStorageType.SqlInt);
header.AddChild("TaxPrice", new LocaleValue("实际含税单价"), SqlStorageType.SqlDecimal);
header.AddChild("AllAmount", new LocaleValue("价税合计"), SqlStorageType.SqlDecimal);
header.AddChild("ProjectName", new LocaleValue("项目名称"), SqlStorageType.Sqlvarchar);
header.AddChild("SalerName", new LocaleValue("业务员"), SqlStorageType.Sqlvarchar);
header.AddChild("SaleDeptName", new LocaleValue("部门"), SqlStorageType.Sqlvarchar);
header.AddChild("Supervisor", new LocaleValue("审批人"), SqlStorageType.Sqlvarchar);
header.AddChild("SpecialCauseType", new LocaleValue("特价原因分类"), SqlStorageType.Sqlvarchar);
header.AddChild("CRMSpecialCause", new LocaleValue("CRM特价原因"), SqlStorageType.Sqlvarchar);
2025-08-14 11:22:33 +08:00
header.AddChild("CurrentSettledUpsetJinE", new LocaleValue("当期结算价*数量(仪表)"), SqlStorageType.SqlDecimal);
header.AddChild("F_VRYF_Amount_yrr", new LocaleValue("整单结算总价"), SqlStorageType.SqlDecimal);
2025-03-14 10:00:24 +08:00
header.AddChild("CurrentSettledUpset1", new LocaleValue("当期结算价(仪表)"), SqlStorageType.SqlDecimal);
header.AddChild("CurrentSettledUpset2", new LocaleValue("当期结算价(系统)"), SqlStorageType.SqlDecimal);
header.AddChild("Difference", new LocaleValue("差额(单价-结算价)"), SqlStorageType.SqlDecimal);
2025-08-12 10:13:15 +08:00
header.AddChild("TotalSpreadYiBiao", new LocaleValue("仪表总价差(终)"), SqlStorageType.SqlDecimal);
header.AddChild("TotalSpread", new LocaleValue("系统总价差(终)"), SqlStorageType.SqlDecimal);
2025-03-14 10:00:24 +08:00
header.AddChild("PaymentMethods", new LocaleValue("付款方式"), SqlStorageType.Sqlvarchar);
header.AddChild("ProjectPhase", new LocaleValue("项目阶段"), SqlStorageType.Sqlvarchar);
header.AddChild("OrderAllAmount", new LocaleValue("订单总额"), SqlStorageType.SqlDecimal);
header.AddChild("NotShipmentsAmount", new LocaleValue("未发货金额"), SqlStorageType.SqlDecimal);
header.AddChild("ExpireUnpaidAmount", new LocaleValue("到期未付金额"), SqlStorageType.SqlDecimal);
header.AddChild("ProductsCode", new LocaleValue("产品长代码"), SqlStorageType.Sqlvarchar);
header.AddChild("Currency", 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;
// 客户 FClient
var fClient = (customFilter["FClient"] as DynamicObject)?["Id"]?.ToString();
// 产品
var fChanPin = (customFilter["FChanPin"] as DynamicObject)?["Id"]?.ToString();
// 项目 FProject
var fProject = (customFilter["FProject"] as DynamicObject)?["Id"]?.ToString();
// 销售员
var fSalesman = (customFilter["FSalesman"] as DynamicObject)?["Id"]?.ToString();
// 日期
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();
2025-07-05 14:29:43 +08:00
2025-03-14 10:00:24 +08:00
var organization = organizationList == null ? "" : (string.Join(",", organizationList));
base.BuilderReportSqlAndTempTable(filter, tableName);
2025-06-25 19:00:53 +08:00
string wheresql = " AND 1=1 ";
2025-03-14 10:00:24 +08:00
if (!string.IsNullOrEmpty(organization))
{
2025-06-25 19:00:53 +08:00
wheresql += string.Format(@" AND A.FSaleOrgId in ({0})", organization);
2025-03-14 10:00:24 +08:00
}
if (!string.IsNullOrEmpty(fClient))
{
2025-06-25 19:00:53 +08:00
wheresql += string.Format(@" AND A.FCUSTID in ({0})", fClient);
2025-03-14 10:00:24 +08:00
}
2025-06-25 19:00:53 +08:00
2025-03-14 10:00:24 +08:00
if (!string.IsNullOrEmpty(fProject))
{
2025-06-25 19:00:53 +08:00
wheresql += string.Format(@" AND A.F_PROJECTNAME in ({0})", fProject);
2025-03-14 10:00:24 +08:00
}
if (!string.IsNullOrEmpty(fSalesman))
{
2025-06-25 19:00:53 +08:00
wheresql += string.Format(@" AND A.FSALERID in ({0})", fSalesman);
2025-03-14 10:00:24 +08:00
}
if (!string.IsNullOrEmpty(fDate))
{
2025-06-25 19:00:53 +08:00
wheresql += string.Format(@" AND FORMAT(A.FApproveDate,'yyyy-MM-dd') >= '{0}'", fDate);
2025-03-14 10:00:24 +08:00
}
if (!string.IsNullOrEmpty(fEndDate))
{
2025-06-25 19:00:53 +08:00
wheresql += string.Format(@"AND FORMAT(A.FApproveDate,'yyyy-MM-dd') <= '{0}'", fEndDate);
}
if (!string.IsNullOrEmpty(fPaperContract))
{
wheresql += string.Format(@" AND a.F_CONTRACTNUMBER like '%{0}%'", fPaperContract);
2025-03-14 10:00:24 +08:00
}
2025-06-25 19:00:53 +08:00
//过滤公司
string sql = string.Format($@"/*dialect*/
SELECT A.FID AS FID
INTO #PaiChuGongSi
FROM T_SAL_ORDER A
INNER JOIN T_BD_CUSTOMER_L C
ON C.FCUSTID = A.FCUSTID
AND C.FLOCALEID = 2052
LEFT JOIN V_BD_SALESMAN_L L
ON L.fid = A.FSALERID
LEFT JOIN T_PerformanceSharing M
ON M.FSOURCEBILLNO = A.FBILLNO
AND M.FDOCUMENTSTATUS = 'C'
LEFT JOIN T_PerformanceSharingEntry N
ON N.FID = M.FID
LEFT JOIN V_BD_SALESMAN_L O
ON O.fid = N.FSALEID
LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACO
ON ACO. = O.FNAME
LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACL
ON ACL. = L.FNAME
WHERE A.FSALEORGID = 100302
AND ACO. = ''
OR ACL. = ''
2025-07-05 14:29:43 +08:00
OR C.FNAME IN ( '', '', '', '', '广', '', '','广' )
2025-06-25 19:00:53 +08:00
OR L.FNAME = ''
2025-03-14 19:35:54 +08:00
");
2025-06-25 19:00:53 +08:00
//仪表类
sql += string.Format($@"/*dialect*/
SELECT A.FBILLNO AS 'AFBILLNO',
'YB' F_ORDERTYPE,
2025-08-12 14:33:43 +08:00
CONVERT(NVARCHAR, A.FApproveDate, 23) AS 'Date', --
MONTH(A.FApproveDate) AS 'Month', --
2025-06-25 19:00:53 +08:00
A.F_CONTRACTNUMBER AS 'ContractNumber', --
a.FSALEORGID ,A.FID,B.FENTRYID ,'#YiBiaoHeTong' AS TableName
INTO #YiBiaoHeTong
FROM T_SAL_ORDERENTRY B --
JOIN T_SAL_ORDER A --
ON A.FID = B.FID
LEFT JOIN T_SAL_ORDERENTRY_F B2 --_F表
2025-08-06 09:31:32 +08:00
ON B.FENTRYID = B2.FENTRYID
left join T_SAL_ORDERFIN fin on a.fid=fin.fid
2025-06-25 19:00:53 +08:00
LEFT JOIN
(
SELECT FNUMBER,
FMASTERID
FROM T_BAS_ASSISTANTDATAENTRY
WHERE FID = '670cc977263353'
AND FDOCUMENTSTATUS = 'C'
AND FFORBIDSTATUS = 'A'
) D --#
ON A.F_ORDERCATEGORY = D.FMASTERID
WHERE
2025-08-08 20:29:55 +08:00
(D.FNUMBER IN ( 'P', 'E', 'C', 'S','B' ))
2025-08-06 09:31:32 +08:00
AND (B.F_SPECIALOFFER = '1' OR B2.FTaxPrice*fin.FExchangeRate < B.F_SettlementP)
2025-06-25 19:00:53 +08:00
AND B.F_YKQC_CHECKBOX_QTR != '1'
2025-09-02 10:40:26 +08:00
AND A.FDOCUMENTSTATUS = 'C'
2025-06-25 19:00:53 +08:00
AND B.FQTY >= 0
AND A.FMANUALCLOSE = '0'
AND A.FMANUALCLOSE <> '1'
AND B.FMANUALROWCLOSE <> '1'
AND A.F_CONTRACTNUMBER NOT LIKE 'Z%'
AND A.FID NOT IN
(
SELECT FID FROM #PaiChuGongSi
) {wheresql} ; ");
2025-03-14 10:00:24 +08:00
2025-06-25 19:00:53 +08:00
//系统合同
sql += string.Format($@"/*dialect*/
SELECT A.FBILLNO AS 'AFBILLNO',
'XT' F_ORDERTYPE,
2025-08-12 14:33:43 +08:00
CONVERT(NVARCHAR, A.FApproveDate, 23) AS 'Date', --
MONTH(A.FApproveDate) AS 'Month', --
2025-06-25 19:00:53 +08:00
A.F_CONTRACTNUMBER AS 'ContractNumber', --
a.FSALEORGID ,A.FID,B.FENTRYID ,'#XiTongHeTong' AS TableName
INTO #XiTongHeTong
FROM T_SAL_ORDERENTRY B --
JOIN T_SAL_ORDER A --
ON A.FID = B.FID
LEFT JOIN T_SAL_ORDERENTRY_F B2 --_F表
ON B.FENTRYID = B2.FENTRYID
JOIN T_SAL_ORDERFIN C --_财务表
ON A.FID = C.FID
LEFT JOIN
(
SELECT FNUMBER,
FMASTERID
FROM T_BAS_ASSISTANTDATAENTRY
WHERE FID = '670cc977263353'
AND FDOCUMENTSTATUS = 'C'
AND FFORBIDSTATUS = 'A'
) D --#
ON A.F_ORDERCATEGORY = D.FMASTERID
--ESWSXCWDCY
2025-08-08 20:29:55 +08:00
WHERE D.FNUMBER NOT IN ( 'P', 'E', 'C', 'S','CS','CW','B' )
AND (A.F_SpecialContracts = '是' OR a.F_GROSSMARGIN1='<35%' OR a.F_VRYF_Amount_yrr > c.FBillAllAmount ) AND (a.F_CancelSpecialContracts !='是' or a.F_CancelSpecialContracts is null )
2025-06-25 19:00:53 +08:00
AND B.FQTY >= 0
AND A.FDOCUMENTSTATUS = 'C'
AND A.FBUSINESSTYPE = 'NORMAL'
2025-07-09 15:13:33 +08:00
2025-06-25 19:00:53 +08:00
AND A.FMANUALCLOSE = '0'
AND A.F_CONTRACTNUMBER NOT LIKE 'Z%'
AND A.FMANUALCLOSE <> '1'
AND B.FMANUALROWCLOSE <> '1'
AND A.FID NOT IN
(
SELECT FID FROM #PaiChuGongSi
) {wheresql}; ");
2025-03-14 10:00:24 +08:00
2025-06-25 19:00:53 +08:00
//兴诺明细的充电桩系统合同CS、CW
sql += $@"/*dialect*/
SELECT A.FBILLNO AS 'AFBILLNO',
'CDZ' F_ORDERTYPE,
2025-08-12 14:33:43 +08:00
CONVERT(NVARCHAR, A.FApproveDate, 23) AS 'Date', --
MONTH(A.FApproveDate) AS 'Month', --
2025-06-25 19:00:53 +08:00
A.F_CONTRACTNUMBER AS 'ContractNumber', --
a.FSALEORGID,A.FID,B.FENTRYID ,'#XNChongDianZhuangHeTong' AS TableName
INTO #XNChongDianZhuangHeTong
FROM T_SAL_ORDERENTRY B --
JOIN T_SAL_ORDER A --
ON A.FID = B.FID
LEFT JOIN T_SAL_ORDERENTRY_F B2 --_F表
ON B.FENTRYID = B2.FENTRYID
LEFT JOIN
(
SELECT FNUMBER,
FMASTERID
FROM T_BAS_ASSISTANTDATAENTRY
WHERE FID = '670cc977263353'
AND FDOCUMENTSTATUS = 'C'
AND FFORBIDSTATUS = 'A'
) D --#
ON A.F_ORDERCATEGORY = D.FMASTERID
LEFT JOIN
(
SELECT B.FNAME,
B.FSPECIFICATION,
A.*
FROM T_BD_MATERIAL A
JOIN T_BD_MATERIAL_L B
ON A.FMATERIALID = B.FMATERIALID
WHERE B.FLOCALEID = 2052
AND A.FDOCUMENTSTATUS = 'C'
AND A.FFORBIDSTATUS = 'A'
) G --
ON G.FMATERIALID = B.FMATERIALID
WHERE
(D.FNUMBER IN ('CS','CW' ))
2025-09-02 10:40:26 +08:00
AND ( B.F_SPECIALOFFER = '1' or ABS(B2.FAllAmount_LC)< ABS(B.F_SettlementP*B.FQTY) )
2025-06-25 19:00:53 +08:00
AND B.F_YKQC_CHECKBOX_QTR != '1'
AND A.FDOCUMENTSTATUS = 'C'
AND B.FQTY >= 0
AND A.FMANUALCLOSE = '0'
AND A.FMANUALCLOSE <> '1'
AND B.FMANUALROWCLOSE <> '1'
AND A.F_CONTRACTNUMBER NOT LIKE 'Z%'
AND A.FID NOT IN
(
SELECT FID FROM #PaiChuGongSi
)
AND G.FNUMBER LIKE 'V%' {wheresql} ; ";
//派诺明细的充电桩系统合同CS、CW
sql += $@"/*dialect*/
SELECT A.FBILLNO AS 'AFBILLNO',
A.F_ORDERTYPE,
2025-08-12 14:33:43 +08:00
CONVERT(NVARCHAR, A.FApproveDate, 23) AS 'Date', --
MONTH(A.FApproveDate) AS 'Month', --
2025-06-25 19:00:53 +08:00
A.F_CONTRACTNUMBER AS 'ContractNumber', --
a.FSALEORGID ,A.FID,B.FENTRYID ,'#PLChongDianZhuangHeTong' AS TableName
INTO #PLChongDianZhuangHeTong
FROM T_SAL_ORDERENTRY B --
JOIN T_SAL_ORDER A --
ON A.FID = B.FID
LEFT JOIN T_SAL_ORDERENTRY_F B2 --_F表
ON B.FENTRYID = B2.FENTRYID
LEFT JOIN
(
SELECT FNUMBER,
FMASTERID
FROM T_BAS_ASSISTANTDATAENTRY
WHERE FID = '670cc977263353'
AND FDOCUMENTSTATUS = 'C'
AND FFORBIDSTATUS = 'A'
) D --#
ON A.F_ORDERCATEGORY = D.FMASTERID
LEFT JOIN
(
SELECT B.FNAME,
B.FSPECIFICATION,
A.*
FROM T_BD_MATERIAL A
JOIN T_BD_MATERIAL_L B
ON A.FMATERIALID = B.FMATERIALID
WHERE B.FLOCALEID = 2052
AND A.FDOCUMENTSTATUS = 'C'
AND A.FFORBIDSTATUS = 'A'
) G --
ON G.FMATERIALID = B.FMATERIALID
WHERE
(D.FNUMBER IN ('CS','CW' ))
--AND B.F_SPECIALOFFER = '1'
--AND B.F_YKQC_CHECKBOX_QTR != '1'
2025-08-08 20:29:55 +08:00
AND (A.F_SpecialContracts = '是' OR a.F_GROSSMARGIN1='<35%') and (a.F_CancelSpecialContracts !='是' or a.F_CancelSpecialContracts is null )
2025-09-02 10:40:26 +08:00
AND A.FDOCUMENTSTATUS = 'C'
2025-06-25 19:00:53 +08:00
AND B.FQTY >= 0
AND A.FMANUALCLOSE = '0'
AND A.FMANUALCLOSE <> '1'
AND B.FMANUALROWCLOSE <> '1'
AND A.F_CONTRACTNUMBER NOT LIKE 'Z%'
AND A.FID NOT IN
(
SELECT FID FROM #PaiChuGongSi
)
AND G.FNUMBER not LIKE 'V%' {wheresql}; ";
//几个临时表合并
2025-03-14 10:00:24 +08:00
sql += string.Format(@"/*dialect*/
2025-06-25 19:00:53 +08:00
/*dialect*/
SELECT *
INTO #TempTable3
FROM #YiBiaoHeTong
UNION ALL
SELECT *
FROM #XiTongHeTong
UNION ALL
SELECT *
FROM #XNChongDianZhuangHeTong
UNION ALL
SELECT *
FROM #PLChongDianZhuangHeTong ;");
2025-03-14 10:00:24 +08:00
2025-06-25 19:00:53 +08:00
if (!string.IsNullOrEmpty(fChanPin))
2025-03-14 10:00:24 +08:00
{
2025-06-25 19:00:53 +08:00
wheresql += string.Format(@" AND G.FMATeRIALID in ({0})", fChanPin);
2025-03-14 10:00:24 +08:00
}
2025-06-25 19:00:53 +08:00
//组合其他字段的大表
sql += $@"/*dialect*/
SELECT AAA.TableName, A.FBILLNO AS 'AFBILLNO',
AAA.F_ORDERTYPE,
2025-08-12 14:33:43 +08:00
CONVERT(NVARCHAR, A.FApproveDate, 23) AS 'Date', --
MONTH(A.FApproveDate) AS 'Month', --
2025-06-25 19:00:53 +08:00
E.FNAME AS 'Client', --
F.FNAME AS 'Currency', --
ISNULL(E.FDATAVALUE, '') AS 'CreditType', --
A.F_CONTRACTNUMBER AS 'ContractNumber', --
ISNULL(G.FSPECIFICATION, '') AS 'SizeModel', --
B.FQTY - ISNULL(B3.FRETNOTICEQTY, 0) AS 'Quantity', --
2025-07-05 14:29:43 +08:00
B2.FTAXPRICE*C.FExchangeRate AS 'TaxPrice', --
2025-06-25 19:00:53 +08:00
B2.FALLAMOUNT_LC - ISNULL(ABS(B3.FALLAMOUNT_LC), 0) AS 'AllAmount', --
ISNULL(H.FNAME, '') AS 'ProjectName', --
ISNULL(H2.FNAME, '') AS 'SalerName', --
ISNULL(H3.FNAME, '') AS 'SaleDeptName', --
ISNULL(H4.FNAME, '') AS 'Supervisor', --
H5.FDATAVALUE AS 'SpecialCauseType', --
A.FCRMSPECIALPRICINGREASON AS 'CRMSpecialCause', --CRM特价原因
2025-08-14 11:22:33 +08:00
CASE
WHEN (AAA.TableName IN ( '#YiBiaoHeTong','#XNChongDianZhuangHeTong')) THEN
B.F_SETTLEMENTP*B.FQTY
ELSE
NULL
END AS 'CurrentSettledUpsetJinE', --*
CASE
2025-08-14 18:31:06 +08:00
WHEN ROW_NUMBER() OVER (PARTITION BY A.FID ORDER BY a.FID,AAA.TableName,b.FENTRYID) = 1 THEN
2025-08-14 11:22:33 +08:00
CAST(ISNULL(A.F_VRYF_Amount_yrr, 0) AS FLOAT)
ELSE
NULL
END AS 'F_VRYF_Amount_yrr', -- #
2025-06-25 19:00:53 +08:00
CASE
2025-08-06 09:31:32 +08:00
WHEN (AAA.TableName IN ( '#YiBiaoHeTong','#XNChongDianZhuangHeTong')) THEN
2025-06-25 19:00:53 +08:00
B.F_SETTLEMENTP
ELSE
NULL
2025-08-06 09:31:32 +08:00
END AS 'CurrentSettledUpset1', --
2025-06-27 15:40:30 +08:00
2025-08-06 09:31:32 +08:00
CASE
WHEN (AAA.TableName IN ('#XiTongHeTong','#PLChongDianZhuangHeTong'))
AND ROW_NUMBER() OVER (PARTITION BY A.FID,AAA.TableName ORDER BY a.FID,AAA.TableName,b.FENTRYID) = 1 THEN
2025-06-25 19:00:53 +08:00
CAST(ISNULL(A.F_VRYF_AMOUNT_YRR, 0) AS FLOAT)
ELSE
NULL
2025-08-06 09:31:32 +08:00
END AS 'CurrentSettledUpset2', --
2025-06-25 19:00:53 +08:00
CASE
2025-08-12 10:13:15 +08:00
WHEN (AAA.TableName IN ( '#YiBiaoHeTong','#XNChongDianZhuangHeTong')) THEN (B2.FTAXPRICE - B.F_SETTLEMENTP)
2025-08-06 09:31:32 +08:00
ELSE NULL END AS 'Difference', ---
2025-08-12 10:13:15 +08:00
CASE
WHEN (AAA.TableName IN ( '#YiBiaoHeTong','#XNChongDianZhuangHeTong')) THEN (B2.FTAXPRICE - B.F_SETTLEMENTP)*B.FQTY
ELSE NULL END AS 'TotalSpreadYiBiao', --
2025-08-06 09:31:32 +08:00
CASE
WHEN (AAA.TableName IN ('#XiTongHeTong','#PLChongDianZhuangHeTong'))
AND ROW_NUMBER() OVER (PARTITION BY A.FID,AAA.TableName ORDER BY a.FID,AAA.TableName,b.FENTRYID) = 1 THEN
C.FBillAllAmount_LC - CAST(ISNULL(A.F_VRYF_Amount_yrr, 0) AS FLOAT)
2025-06-25 19:00:53 +08:00
ELSE
NULL
2025-08-12 10:13:15 +08:00
END AS 'TotalSpread', --
2025-07-05 14:29:43 +08:00
C2.FNAME AS 'PaymentMethods', --
2025-06-25 19:00:53 +08:00
CASE
WHEN A.F_ORDERTYPE = 'YB' THEN
'' --
WHEN A.F_ORDERTYPE = 'XT' THEN --
(CASE
WHEN ISNULL(A.F_XMYSSJ, '') != '' THEN
CONVERT(NVARCHAR, A.F_XMYSSJ, 23)
WHEN C.FBILLALLAMOUNT_LC - ISNULL(ABS(B3.FBillAllAmount_LC), 0) - ISNULL(H6.FALLAMOUNT_LC, 0) <= 0 THEN
''
WHEN C.FBILLALLAMOUNT_LC - ISNULL(ABS(B3.FBillAllAmount_LC), 0) - ISNULL(H6.FALLAMOUNT_LC, 0) = C.FBILLALLAMOUNT_LC
- ISNULL(
ABS(B3.FBillAllAmount_LC),
0
) THEN
''
ELSE
''
END
)
ELSE
''
END AS 'ProjectPhase', --
CASE
2025-08-14 18:31:06 +08:00
WHEN ROW_NUMBER() OVER (PARTITION BY A.F_CONTRACTNUMBER ORDER BY a.FID,AAA.TableName,b.FENTRYID) = 1 THEN
2025-06-25 19:00:53 +08:00
C.FBILLALLAMOUNT_LC - ISNULL(ABS(B3.FBillAllAmount_LC), 0)
ELSE
NULL
END AS 'OrderAllAmount', --
CASE
2025-08-14 18:31:06 +08:00
WHEN ROW_NUMBER() OVER (PARTITION BY A.F_CONTRACTNUMBER ORDER BY a.FID,AAA.TableName,b.FENTRYID) = 1 THEN
2025-06-25 19:00:53 +08:00
C.FBILLALLAMOUNT_LC - ISNULL(ABS(B3.FBillAllAmount_LC), 0) - ISNULL(H6.FALLAMOUNT_LC, 0)
ELSE
NULL
END AS 'NotShipmentsAmount', --
2025-07-05 14:29:43 +08:00
CASE
2025-08-14 18:31:06 +08:00
WHEN ROW_NUMBER() OVER (PARTITION BY A.F_CONTRACTNUMBER ORDER BY a.FID,AAA.TableName,b.FENTRYID) = 1 THEN
2025-07-05 14:29:43 +08:00
(SELECT SUM([bbb].[]*BBB.) FROM dbo.ZRP_YingShouMingXi_yuyubo bbb WHERE a.FID=bbb.ID )
2025-06-25 19:00:53 +08:00
ELSE
NULL
2025-07-05 14:29:43 +08:00
END
AS 'ExpireUnpaidAmount', --
G.FNUMBER AS 'ProductsCode' --
2025-08-14 11:22:33 +08:00
,aaa.FSALEORGID,AAA.FENTRYID,aaa.FID,B.F_K3SEQ
2025-06-25 19:00:53 +08:00
INTO #tempDaBiao
FROM #TempTable3 AAA
INNER JOIN T_SAL_ORDERENTRY B ON AAA.FENTRYID=B.FENTRYID
INNER JOIN T_SAL_ORDER A --
ON A.FID = B.FID
LEFT JOIN T_SAL_ORDERENTRY_F B2 --_F表
ON B.FENTRYID = B2.FENTRYID
LEFT JOIN
(
SELECT Aq2.FBillAllAmount_LC,
Aq.*
FROM
(
SELECT W2.FSID,
W2.FSBILLID,
STRING_AGG(CONVERT(NVARCHAR, W1.FDATE, 23), ',') AS 'FDate',
SUM(W1.FPRICEUNITQTY) AS 'FRETNOTICEQTY',
SUM(W1.FALLAMOUNT_LC) AS 'FALLAMOUNT_LC'
FROM
(
SELECT q1.FDATE,
q3.FSID,
q2.FALLAMOUNT_LC,
q2.FPRICEUNITQTY
FROM T_SAL_RETURNNOTICE q1
JOIN T_SAL_RETURNNOTICEENTRY_F q2
ON q1.FID = q2.FID
JOIN T_SAL_RETURNNOTICEENTRY_LK q3
ON q2.FENTRYID = q3.FENTRYID
WHERE q1.FDOCUMENTSTATUS = 'C'
AND q1.FCANCELSTATUS = 'A'
AND q3.FSTABLENAME = 'T_SAL_ORDERENTRY'
) W1
JOIN T_SAL_ORDERENTRY_LK W2
ON W1.FSID = W2.FENTRYID
GROUP BY W2.FSID,
W2.FSBILLID
) Aq
JOIN
(
SELECT W2.FSBILLID,
STRING_AGG(CONVERT(NVARCHAR, W1.FDATE, 23), ',') AS 'FDate',
SUM(W1.FPRICEUNITQTY) AS 'FRETNOTICEQTY',
SUM(W1.FALLAMOUNT_LC) AS 'FBillAllAmount_LC'
FROM
(
SELECT q1.FDATE,
q3.FSID,
q2.FALLAMOUNT_LC,
q2.FPRICEUNITQTY
FROM T_SAL_RETURNNOTICE q1
JOIN T_SAL_RETURNNOTICEENTRY_F q2
ON q1.FID = q2.FID
JOIN T_SAL_RETURNNOTICEENTRY_LK q3
ON q2.FENTRYID = q3.FENTRYID
WHERE q1.FDOCUMENTSTATUS = 'C'
AND q1.FCANCELSTATUS = 'A'
AND q3.FSTABLENAME = 'T_SAL_ORDERENTRY'
) W1
JOIN T_SAL_ORDERENTRY_LK W2
ON W1.FSID = W2.FENTRYID
GROUP BY W2.FSBILLID
) Aq2
ON Aq.FSBILLID = Aq2.FSBILLID
) B3 ---退
ON B.FENTRYID = B3.FSID
JOIN T_SAL_ORDERFIN C --_财务表
ON A.FID = C.FID
LEFT JOIN
2025-07-05 14:29:43 +08:00
(
SELECT w.FID,
STUFF(
(
SELECT ', ' + X2.FNAME + '--' + CONVERT(NVARCHAR(50), CONVERT(INT, w2.F_DAY)) + '--'
+ CONVERT(NVARCHAR(50), CONVERT(DECIMAL(18, 2), w2.FRECADVANCERATE)) + '%'
FROM T_SAL_ORDERPLAN w2 WITH (NOLOCK)
LEFT JOIN T_BD_RECCONDITION_L X2
ON X2.FID = w2.F_RECCONDITIONID
WHERE w2.FID = w.FID
FOR XML PATH('')
), 1, 2, ''
) AS FNAME
FROM T_SAL_ORDERPLAN w WITH (NOLOCK)
LEFT JOIN T_BD_RECCONDITION_L X
ON X.FID = w.F_RECCONDITIONID
GROUP BY w.FID
) C2 ON C2.FID=A.FID --_收款计划
2025-06-25 19:00:53 +08:00
LEFT JOIN
(
SELECT FNUMBER,
FMASTERID
FROM T_BAS_ASSISTANTDATAENTRY
WHERE FID = '670cc977263353'
AND FDOCUMENTSTATUS = 'C'
AND FFORBIDSTATUS = 'A'
) D --#
ON A.F_ORDERCATEGORY = D.FMASTERID
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
) E --_L表
ON A.FCUSTID = E.FCUSTID
LEFT JOIN
(SELECT * FROM T_BD_CURRENCY_L WHERE FLOCALEID = 2052) F --
ON C.FSETTLECURRID = F.FCURRENCYID
LEFT JOIN
(
SELECT B.FNAME,
B.FSPECIFICATION,
A.*
FROM T_BD_MATERIAL A
JOIN T_BD_MATERIAL_L B
ON A.FMATERIALID = B.FMATERIALID
WHERE B.FLOCALEID = 2052
AND A.FDOCUMENTSTATUS = 'C'
AND A.FFORBIDSTATUS = 'A'
) G --
ON G.FMATERIALID = B.FMATERIALID
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 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'
) H2 --
ON A.FSALERID = H2.fid
LEFT JOIN
(
SELECT q2.FNAME,
q1.*
FROM T_BD_DEPARTMENT q1
JOIN T_BD_DEPARTMENT_L q2
ON q1.FDEPTID = q2.FDEPTID
WHERE q2.FLOCALEID = 2052
AND q1.FDOCUMENTSTATUS = 'C'
AND q1.FFORBIDSTATUS = 'A'
) H3 --
ON A.FSALEDEPTID = H3.FDEPTID
LEFT JOIN
(
SELECT q2.FNAME,
q1.*
FROM T_HR_EMPINFO q1
JOIN T_HR_EMPINFO_L q2
ON q1.FID = q2.FID
WHERE q2.FLOCALEID = 2052
AND q1.FDOCUMENTSTATUS = 'C'
AND q1.FFORBIDSTATUS = 'A'
) H4 --#
ON A.F_VRYF_BASE_FG2 = H4.FID
LEFT JOIN
(
SELECT A.FNUMBER,
A.FMASTERID,
B.FDATAVALUE
FROM T_BAS_ASSISTANTDATAENTRY A
JOIN T_BAS_ASSISTANTDATAENTRY_L B
ON A.FENTRYID = B.FENTRYID
WHERE A.FID = '674f073de0bc25'
AND A.FDOCUMENTSTATUS = 'C'
AND A.FFORBIDSTATUS = 'A'
) H5
ON H5.FMASTERID = A.FSPECIALRESON
LEFT JOIN
2025-08-14 11:52:36 +08:00
(
SELECT W2.FSBILLID,
2025-06-25 19:00:53 +08:00
SUM(W1.FALLAMOUNT_LC) AS 'FALLAMOUNT_LC'
FROM
(
SELECT q2.FALLAMOUNT_LC,
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'
2025-08-14 11:52:36 +08:00
GROUP BY W2.FSBILLID
2025-06-25 19:00:53 +08:00
) H6 --
2025-08-14 11:52:36 +08:00
ON B.FID = H6.FSBILLID
2025-06-25 19:00:53 +08:00
LEFT JOIN
(
SELECT W2.FSID,
W1.*
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.FENDDATE <= GETDATE()
) W1
JOIN T_AR_RECEIVABLEENTRY_LK W2
ON W1.FENTRYID = W2.FENTRYID
WHERE W2.FSTABLENAME = 'T_SAL_ORDERENTRY'
) H7
2025-08-12 10:13:15 +08:00
ON B.FENTRYID = H7.FSID {wheresql} ;
2025-08-14 11:22:33 +08:00
2025-08-14 18:31:06 +08:00
UPDATE #tempDaBiao SET NotShipmentsAmount=NotShipmentsAmount-ISNULL(k3.*(isnull(K3.,0)+isnull(K3.,0))*1.000,0)
2025-08-14 11:22:33 +08:00
FROM dbo.oldk3seorder0701 k3
WHERE F_K3SEQ=k3. AND #tempDaBiao.ContractNumber=k3.;
2025-08-16 18:06:48 +08:00
SELECT DISTINCT a.fid,b.F_SettlementAmount,jiashui
INTO #PLChongDianZhuangHeTong_yibiao
FROM #PLChongDianZhuangHeTong a
INNER JOIN (SELECT a.FID, SUM(B.F_SettlementAmount) AS F_SettlementAmount,SUM(B2.FTAXPRICE*C.FExchangeRate*b.FQTY) AS jiashui
FROM T_SAL_ORDERENTRY B --
LEFT JOIN T_SAL_ORDERENTRY_F B2 --_F表
ON B.FENTRYID = B2.FENTRYID
JOIN T_SAL_ORDER A --
ON A.FID = B.FID
JOIN T_SAL_ORDERFIN C --_财务表
ON A.FID = C.FID
LEFT JOIN
(
SELECT B.FNAME,
B.FSPECIFICATION,
A.*
FROM T_BD_MATERIAL A
JOIN T_BD_MATERIAL_L B
ON A.FMATERIALID = B.FMATERIALID
WHERE B.FLOCALEID = 2052
AND A.FDOCUMENTSTATUS = 'C'
AND A.FFORBIDSTATUS = 'A'
) G --
ON G.FMATERIALID = B.FMATERIALID
WHERE G.FNUMBER LIKE 'V%'
GROUP BY a.fid
) b
ON a.fid=b.fid
UPDATE #tempDaBiao SET TotalSpread= TotalSpread-b.jiashui +b.F_SettlementAmount
,CurrentSettledUpset2=CurrentSettledUpset2-b.F_SettlementAmount
FROM (SELECT fid,F_SettlementAmount ,jiashui FROM #PLChongDianZhuangHeTong_yibiao ) b
where TableName IN ('#PLChongDianZhuangHeTong') AND #tempDaBiao.FID=b.FID;
DELETE #tempDaBiao
WHERE TableName IN ('#PLChongDianZhuangHeTong') AND FID NOT IN (
SELECT a.fid FROM #tempDaBiao b INNER JOIN dbo.T_SAL_ORDER a
ON a.FID=b.FID
WHERE
(A.F_SpecialContracts = '是' OR a.F_GROSSMARGIN1='<35%' OR b.TotalSpread < 0 ) and (a.F_CancelSpecialContracts !='是' or a.F_CancelSpecialContracts is null )
);
2025-08-12 10:13:15 +08:00
";
2025-03-14 10:00:24 +08:00
2025-06-25 19:00:53 +08:00
//sql += $@"/*dialect*/
//Select
//*,
//ROW_NUMBER() OVER (ORDER BY FID DESC,FENTRYID) AS FIDENTITYID
//INTO {tableName}
//From
//(SELECT * FROM #tempDaBiao) A ";
sql += string.Format($@"/*dialect*/
2025-03-14 10:00:24 +08:00
Select
*,
2025-08-14 17:27:25 +08:00
ROW_NUMBER() OVER (ORDER BY Date desc,FID DESC ,[TableName],FENTRYID) AS FIDENTITYID
2025-06-25 19:00:53 +08:00
INTO {tableName}
2025-03-14 10:00:24 +08:00
From
2025-06-25 19:00:53 +08:00
(SELECT [TableName]
,[AFBILLNO]
,[F_ORDERTYPE]
,[Date]
,[Month]
,[Client]
,[Currency]
,[CreditType]
,[ContractNumber]
,[SizeModel]
,[Quantity]
,[TaxPrice]
,[AllAmount]
,[ProjectName]
,[SalerName]
,[SaleDeptName]
,[Supervisor]
,[SpecialCauseType]
,[CRMSpecialCause]
,[CurrentSettledUpset1]
2025-08-14 11:22:33 +08:00
,CurrentSettledUpsetJinE
,F_VRYF_Amount_yrr
2025-06-25 19:00:53 +08:00
,[CurrentSettledUpset2]
,[Difference]
2025-08-12 10:13:15 +08:00
,[TotalSpreadYiBiao]
2025-06-25 19:00:53 +08:00
,[TotalSpread]
,[PaymentMethods]
,[ProjectPhase]
,[OrderAllAmount]
,[NotShipmentsAmount]
,[ExpireUnpaidAmount]
,[ProductsCode]
,[FSALEORGID]
,[FENTRYID]
,[FID],1 Sort FROM #tempDaBiao
2025-08-12 10:13:15 +08:00
where Quantity<>0
2025-03-14 10:00:24 +08:00
UNION ALL
2025-06-25 19:00:53 +08:00
SELECT '',
2025-03-14 10:00:24 +08:00
'',
'',
'',
null,
'',
'',
'',
'',
'',
SUM(t1.Quantity),--
SUM(t1.TaxPrice),
SUM(t1.AllAmount),
'',
'',
'',
'',
'',
'',
SUM(t1.CurrentSettledUpset1),
2025-08-14 11:22:33 +08:00
SUM(CurrentSettledUpsetJinE)
,SUM(F_VRYF_Amount_yrr),
2025-03-14 10:00:24 +08:00
SUM(t1.CurrentSettledUpset2),
SUM(t1.Difference),
2025-08-12 10:13:15 +08:00
SUM(t1.TotalSpreadYiBiao),
2025-03-14 10:00:24 +08:00
SUM(t1.TotalSpread),
'',
'',
SUM(t1.OrderAllAmount),
SUM(t1.NotShipmentsAmount),
SUM(t1.ExpireUnpaidAmount),
2025-06-25 19:00:53 +08:00
'',0,0,999999,
2025-03-14 10:00:24 +08:00
0 Sort
2025-08-12 10:13:15 +08:00
FROM #tempDaBiao t1
where Quantity<>0
) t1
2025-08-12 14:33:43 +08:00
order by Sort desc,Date desc ,fid desc ,FIDENTITYID ", tableName);
2025-08-16 18:06:48 +08:00
Logger.Error("特价明细报表", sql, new Exception());
2025-03-14 10:00:24 +08:00
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;
2025-08-14 17:27:25 +08:00
2025-03-14 10:00:24 +08:00
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();
// 客户 FClient
var fClient = (customFilter["FClient"] as DynamicObject)?["Name"]?.ToString();
// 产品
var fChanPin = (customFilter["FChanPin"] as DynamicObject)?["Name"]?.ToString();
// 项目 FProject
var fProject = (customFilter["FProject"] as DynamicObject)?["Name"]?.ToString();
// 销售员
var fSalesman = (customFilter["FSalesman"] as DynamicObject)?["Name"]?.ToString();
//这里是报表页面的标识
reportTitles.AddTitle("FPaperContract", fPaperContract == null ? "" : fPaperContract);
reportTitles.AddTitle("FClient", fClient == null ? "" : fClient);
reportTitles.AddTitle("FChanPin", fChanPin == null ? "" : fChanPin);
reportTitles.AddTitle("FProject", fProject == null ? "" : fProject);
reportTitles.AddTitle("FSalesman", fSalesman == null ? "" : fSalesman);
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;
}
}
}