From 470016f42857da0d4ef1c0406c054d7345059034 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=8B=97=E8=9B=8B?= <12086832+li-goudan233@user.noreply.gitee.com> Date: Tue, 3 Jun 2025 13:44:45 +0800 Subject: [PATCH] 1 --- DDWFHMX.cs | 9 +- GZ_LTHReportForms.csproj | 21 + YSKDZGongNeng_JY/LiteVersionPlugIn.cs | 467 +++++++++++++++ YSKDZGongNeng_JY/ProgramNumber.cs | 71 +++ YSKDZGongNeng_JY/YourDataPlugIn.cs | 115 ++++ YSZKDZBaoBiao/AccountsReceivableFiter.cs | 27 + YSZKDZBaoBiao/AccountsReceivablePlugIn.cs | 36 ++ YSZKDZBaoBiao/AccountsReceivableReport.cs | 344 +++++++++++ YSZKDZBaoBiao/AccountsReceivableReport2.cs | 396 ++++++++++++ YSZKDZGongNeng_MX/LiteVersionPlugIn2.cs | 562 ++++++++++++++++++ YSZKDZGongNeng_MX/YourDataPlugIn2.cs | 115 ++++ bin/Debug/GZ_LTHReportForms.dll | Bin 51200 -> 108032 bytes bin/Debug/GZ_LTHReportForms.pdb | Bin 62976 -> 138752 bytes 派诺报表SQL文件/应收对账表(明细创建).sql | 41 ++ 派诺报表SQL文件/应收对账表(明细创建SQL).sql | 31 + 派诺报表SQL文件/应收对账表(简易).sql | 42 ++ 派诺报表SQL文件/应收对账表(简易)更新数据.sql | 42 ++ 派诺报表SQL文件/应收对账表(简易创建).sql | 22 + .../订单未发货明细表创建表单sql.sql | 5 +- .../订单未发货明细表插入数据SQL.sql | 177 +++--- 20 files changed, 2428 insertions(+), 95 deletions(-) create mode 100644 YSKDZGongNeng_JY/LiteVersionPlugIn.cs create mode 100644 YSKDZGongNeng_JY/ProgramNumber.cs create mode 100644 YSKDZGongNeng_JY/YourDataPlugIn.cs create mode 100644 YSZKDZBaoBiao/AccountsReceivableFiter.cs create mode 100644 YSZKDZBaoBiao/AccountsReceivablePlugIn.cs create mode 100644 YSZKDZBaoBiao/AccountsReceivableReport.cs create mode 100644 YSZKDZBaoBiao/AccountsReceivableReport2.cs create mode 100644 YSZKDZGongNeng_MX/LiteVersionPlugIn2.cs create mode 100644 YSZKDZGongNeng_MX/YourDataPlugIn2.cs create mode 100644 派诺报表SQL文件/应收对账表(明细创建).sql create mode 100644 派诺报表SQL文件/应收对账表(明细创建SQL).sql create mode 100644 派诺报表SQL文件/应收对账表(简易).sql create mode 100644 派诺报表SQL文件/应收对账表(简易)更新数据.sql create mode 100644 派诺报表SQL文件/应收对账表(简易创建).sql diff --git a/DDWFHMX.cs b/DDWFHMX.cs index 2ddb5e8..79336a3 100644 --- a/DDWFHMX.cs +++ b/DDWFHMX.cs @@ -65,10 +65,11 @@ namespace GZ_LTHReportForms.ReporyDDWFH header.AddChild("客户", new LocaleValue("客户"), SqlStorageType.Sqlnvarchar); header.AddChild("项目名", new LocaleValue("项目名"), SqlStorageType.Sqlnvarchar); header.AddChild("物料编码", new LocaleValue("物料编码"), SqlStorageType.Sqlnvarchar); - header.AddChild("物料名称", new LocaleValue("物料编码"), SqlStorageType.Sqlnvarchar); + header.AddChild("物料名称", new LocaleValue("物料名称"), SqlStorageType.Sqlnvarchar); header.AddChild("规格型号", new LocaleValue("规格型号"), SqlStorageType.Sqlnvarchar); header.AddChild("数量", new LocaleValue("数量"), SqlStorageType.SqlDecimal); header.AddChild("含税单价", new LocaleValue("含税单价"), SqlStorageType.SqlDecimal); + header.AddChild("价税合计", new LocaleValue("价税合计"), SqlStorageType.SqlDecimal); header.AddChild("已发货数量", new LocaleValue("已发货数量"), SqlStorageType.SqlDecimal); header.AddChild("已发货金额", new LocaleValue("已发货金额"), SqlStorageType.SqlDecimal); header.AddChild("未发货数量", new LocaleValue("未发货数量"), SqlStorageType.SqlDecimal); @@ -107,6 +108,7 @@ namespace GZ_LTHReportForms.ReporyDDWFH * INTO {3} FROM GZ_DDWFHMX_TH + WHERE [未发货数量] <> 0 AND [未发货数量] > 0 ORDER BY [日期] ", FstartDate, FEndDate, FSaleOrgId, tableName); DBUtils.Execute(this.Context, sql); @@ -115,8 +117,9 @@ namespace GZ_LTHReportForms.ReporyDDWFH public override List GetSummaryColumnInfo(IRptParams filter) { var result = base.GetSummaryColumnInfo(filter); - result.Add(new SummaryField("数量", BOSEnums.Enu_SummaryType.SUM)); - result.Add(new SummaryField("含税单价", BOSEnums.Enu_SummaryType.SUM)); + //result.Add(new SummaryField("数量", BOSEnums.Enu_SummaryType.SUM)); + //result.Add(new SummaryField("含税单价", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("价税合计", BOSEnums.Enu_SummaryType.SUM)); result.Add(new SummaryField("已发货数量", BOSEnums.Enu_SummaryType.SUM)); result.Add(new SummaryField("已发货金额", BOSEnums.Enu_SummaryType.SUM)); result.Add(new SummaryField("未发货数量", BOSEnums.Enu_SummaryType.SUM)); diff --git a/GZ_LTHReportForms.csproj b/GZ_LTHReportForms.csproj index 4389381..8bfa4c7 100644 --- a/GZ_LTHReportForms.csproj +++ b/GZ_LTHReportForms.csproj @@ -46,6 +46,18 @@ ..\..\GZ_LTHYJZZHTH\bin\Debug\Kingdee.BOS.DataEntity.dll + + ..\..\派诺报表-裴豪\派诺报表\代码\Piolot_RepotForm\Pilot.Report.Exploitation\bin\Debug\NPOI.dll + + + ..\..\派诺报表-裴豪\派诺报表\代码\Piolot_RepotForm\Pilot.Report.Exploitation\bin\Debug\NPOI.OOXML.dll + + + ..\..\派诺报表-裴豪\派诺报表\代码\Piolot_RepotForm\Pilot.Report.Exploitation\bin\Debug\NPOI.OpenXml4Net.dll + + + ..\..\派诺报表-裴豪\派诺报表\代码\Piolot_RepotForm\Pilot.Report.Exploitation\bin\Debug\NPOI.OpenXmlFormats.dll + @@ -65,6 +77,15 @@ + + + + + + + + + diff --git a/YSKDZGongNeng_JY/LiteVersionPlugIn.cs b/YSKDZGongNeng_JY/LiteVersionPlugIn.cs new file mode 100644 index 0000000..8ea8c6b --- /dev/null +++ b/YSKDZGongNeng_JY/LiteVersionPlugIn.cs @@ -0,0 +1,467 @@ +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Report; +using Kingdee.BOS.Core.Report.PlugIn; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using NPOI.HSSF.Util; +using NPOI.SS.Formula.Functions; +using NPOI.SS.UserModel; +using NPOI.SS.Util; +using NPOI.XSSF.UserModel; +using System; +using System.ComponentModel; +using System.Data; +using System.IO; +using System.Linq; +using System.Security.Cryptography; + +namespace Pilot.Report.Exploitation.AccountsReceivable +{ + /// + /// 【表单插件】简易版-按钮触发 + /// + [Description("【表单插件】简易版-按钮触发-导出EXCEL"), HotUpdate] + public class LiteVersionPlugIn : AbstractSysReportPlugIn + { + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + // 判断 应收对账单【简易版】按钮 + if (e.BarItemKey == "Test_Button_1") + { + string FPath = "应收账款对账单【简易版】.xlsx"; + + // 在临时文件目录,生成一个完整的文件名: C:\Program Files\Kingdee\K3Cloud\WebSite\...\JD.xls + string filePath = PathUtils.GetPhysicalPath(KeyConst.TEMPFILEPATH, Path.GetFileName(FPath)); + // 生成一个供用户下载文件的url地址: http:\\localhost\K3Cloud\...\JD.xls + string fileUrl = PathUtils.GetServerPath(KeyConst.TEMPFILEPATH, Path.GetFileName(FPath)); + //打开文件下载界面 + DynamicFormShowParameter showParameter = new DynamicFormShowParameter(); + showParameter.FormId = "BOS_FileDownload"; + showParameter.OpenStyle.ShowType = ShowType.Modal; + showParameter.CustomComplexParams.Add("url", fileUrl); + //显示 + this.View.ShowForm(showParameter); + + var reportModel = this.SysReportModel; + + //单据头 + var rptTitles = reportModel.ReportTitles; + string fClient = rptTitles.FirstOrDefault(a => a.TitleKey == "FClient").TitleValue.ToString(); + string fDate = rptTitles.FirstOrDefault(a => a.TitleKey == "FDate").TitleValue.ToString(); + string fProject = rptTitles.FirstOrDefault(a => a.TitleKey == "FProject").TitleValue.ToString(); + string FState = rptTitles.FirstOrDefault(a => a.TitleKey == "FState").TitleValue.ToString(); + //单据体 + var list = reportModel.DataSource.Rows; + + string sqlTest = string.Format(@"/*dialect*/Select FAmount,FDate From MBBA_t_Cust100006 Where Month(FDATE) = Month(DATEADD(MONTH, -1, '{0}'))", fDate); + + var sqlTestList = DBUtils.ExecuteDynamicObject(Context, sqlTest); + + int Num = 0; + decimal fAmount = 0; + string fDate2 = ""; + if (sqlTestList.Count() > 0) + { + Num = 1; + fAmount = Math.Round(Convert.ToDecimal(sqlTestList[0]["FAmount"]),2); + fDate2 = sqlTestList[0]["FDate"].ToString().Split(' ')[0]; + } + + Main(filePath, fClient, fDate, fProject, list, Num, fAmount, fDate2, Context); + } + } + + /// + /// 赋值EXCEL + /// + static void Main(string outputFilePath, string fClient, string fDate, string fProject, DataRowCollection list, int Num, decimal fAmount,string fDate2, Kingdee.BOS.Context Context) + { + #region Excel代码 + + string filePath = @"D:\KingdeeModel\对账单模板.xlsx"; + FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read); + IWorkbook workbook = new XSSFWorkbook(file); + file.Close(); + + //获取工作簿中的第一个工作表(索引为0) + ISheet sheet = workbook.GetSheetAt(0); + + #endregion + + #region 单元格样式 + + // 创建一个单元格样式------------------------------- + ICellStyle cellStyle = workbook.CreateCellStyle(); + + // 设置边框样式 + cellStyle.BorderTop = BorderStyle.Thin; + cellStyle.BorderBottom = BorderStyle.Thin; + cellStyle.BorderLeft = BorderStyle.Thin; + cellStyle.BorderRight = BorderStyle.Thin; + // 设置水平居中对齐 + cellStyle.Alignment = HorizontalAlignment.Center; + // 设置垂直居中对齐 + cellStyle.VerticalAlignment = VerticalAlignment.Center; + + // 创建一个单元格样式--------------------------------- + ICellStyle cellStyle2 = workbook.CreateCellStyle(); + + // 设置边框样式 + cellStyle2.BorderTop = BorderStyle.Thin; + cellStyle2.BorderBottom = BorderStyle.Thin; + cellStyle2.BorderLeft = BorderStyle.Thin; + cellStyle2.BorderRight = BorderStyle.Thin; + + // 创建单元格样式--------------------------------------- + ICellStyle style = workbook.CreateCellStyle(); + + // 设置边框样式 + style.BorderTop = BorderStyle.Thin; + style.BorderBottom = BorderStyle.Thin; + style.BorderLeft = BorderStyle.Thin; + style.BorderRight = BorderStyle.Thin; + + // 创建字体并设置为加粗 + IFont font = workbook.CreateFont(); + font.IsBold = true; // 设置字体加粗 + + // 将字体应用到单元格样式 + style.SetFont(font); + + // 创建单元格样式--------------------------------------- + ICellStyle style2 = workbook.CreateCellStyle(); + + // 创建字体并设置为加粗 + IFont font2 = workbook.CreateFont(); + font2.IsBold = true; // 设置字体加粗 + + // 将字体应用到单元格样式 + style2.SetFont(font2); + + // 创建一个单元格样式------------------------------- + ICellStyle style3 = workbook.CreateCellStyle(); + + // 设置边框样式 + style3.BorderTop = BorderStyle.Thin; + style3.BorderBottom = BorderStyle.Thin; + style3.BorderLeft = BorderStyle.Thin; + style3.BorderRight = BorderStyle.Thin; + // 设置水平居中对齐 + style3.Alignment = HorizontalAlignment.Center; + // 设置垂直居中对齐 + style3.VerticalAlignment = VerticalAlignment.Center; + // 创建字体并设置为加粗 + IFont font3 = workbook.CreateFont(); + font3.IsBold = true; // 设置字体加粗 + // 将字体应用到单元格样式 + style3.SetFont(font3); + + #endregion + + #region 获取金额汇总数据 + + decimal YFHpriceSum = 0; + decimal YFPpriceSum = 0; + decimal priceSum = 0; + + for (var i = 0; i < list.Count; i++) + { + if (list[i]["Number"].ToString() == "合计") + { + YFHpriceSum = Math.Round(Convert.ToDecimal(list[i]["ShippedDebt"]), 2); + YFPpriceSum = Math.Round(Convert.ToDecimal(list[i]["InvoicedDebt"]), 2); + priceSum = Math.Round(Convert.ToDecimal(list[i]["ShippedDebt"]) + Convert.ToDecimal(list[i]["InvoicedDebt"]), 2); + } + } + + #endregion + + #region 四行一列修改/六行二列修改/十一行一列修改/十二行一列修改 + + IRow row = sheet.GetRow(3); + IRow row2 = sheet.GetRow(5); + IRow row22 = sheet.GetRow(6); + IRow ro = sheet.GetRow(11); + ICell cell = row.GetCell(0); + ICell cell2 = row2.GetCell(1); + ICell cell22 = row22.GetCell(8); + ICell cel3 = ro.GetCell(0); + IRow row3 = sheet.GetRow(10); + ICell cell3 = row3.GetCell(0); + //将新创建或获取的单元格的值修改 + cell22.SetCellValue(""); + var YFHpriceSumZW = ToChineseNumber(YFHpriceSum, Context); + cell3.SetCellValue("贵公司截至 " + fDate + " 共欠我公司货款金额为:" + YFHpriceSum + "元【等于已发货欠款总额】(大写:" + YFHpriceSumZW + ")"); + //将新创建或获取的单元格的值修改 + cell.SetCellValue("尊敬的 " + fClient + " 客户您好,我公司已根据合同/订单的要求向贵公司交付相关产品并请验收确认,鉴于我公司对贵公司已通知发货部分的交付义务已完成,"); + cell2.SetCellValue(fClient); + var fAmountZW = ToChineseNumber(fAmount, Context); + if (Num > 0) + { + cel3.SetCellValue("其中上期(截止" + fDate2 + "共欠我公司货款金额为:" + fAmount + "元(大写:" + fAmountZW + ")"); + } + else + { + cel3.SetCellValue(""); + } + #endregion + + #region 明细赋值 + + // 将字体应用到单元格样式 + style2.SetFont(font2); + int n = 14; + + for (var i = 0; i < list.Count; i++) + { + string date = string.IsNullOrWhiteSpace(list[i]["DATE"].ToString()) ? "" : list[i]["DATE"].ToString().Split(' ')[0]; + decimal OrderAmount = Math.Round(Convert.ToDecimal(list[i]["OrderAmount"]), 2); + decimal ShipmentsAmount = Math.Round(Convert.ToDecimal(list[i]["ShipmentsAmount"]), 2); + decimal FBillAllAmount = Math.Round(Convert.ToDecimal(list[i]["FBillAllAmount"]), 2); + decimal OrdeFALLAMOUNTFORrAmount = Math.Round(Convert.ToDecimal(list[i]["FALLAMOUNTFOR"]), 2); + decimal PaymentAmount = Math.Round(Convert.ToDecimal(list[i]["PaymentAmount"]), 2); + decimal ShippedDebt = Math.Round(Convert.ToDecimal(list[i]["ShippedDebt"]), 2); + decimal InvoicedDebt = Math.Round(Convert.ToDecimal(list[i]["InvoicedDebt"]), 2); + + IRow rowi = sheet.CreateRow(13 + i); + ICell c1 = rowi.CreateCell(0); c1.SetCellValue(list[i]["Number"].ToString()); c1.CellStyle = cellStyle; + ICell c2 = rowi.CreateCell(1); c2.SetCellValue(""+date+""); c2.CellStyle = cellStyle2; + ICell c3 = rowi.CreateCell(2); c3.SetCellValue(list[i]["CONTRACTNUMBER"].ToString()); c3.CellStyle = cellStyle2; + ICell c4 = rowi.CreateCell(3); c4.SetCellValue(list[i]["ProjectName"].ToString()); c4.CellStyle = cellStyle2; + ICell c5 = rowi.CreateCell(4); c5.SetCellValue(""+ OrderAmount + ""); c5.CellStyle = cellStyle; + ICell c6 = rowi.CreateCell(5); c6.SetCellValue("" + ShipmentsAmount + ""); c6.CellStyle = cellStyle; + ICell c7 = rowi.CreateCell(6); c7.SetCellValue("" + FBillAllAmount + ""); c7.CellStyle = cellStyle; + ICell c8 = rowi.CreateCell(7); c8.SetCellValue("" + OrdeFALLAMOUNTFORrAmount + ""); c8.CellStyle = cellStyle; + ICell c9 = rowi.CreateCell(8); c9.SetCellValue("" + PaymentAmount + ""); c9.CellStyle = cellStyle; + ICell c10 = rowi.CreateCell(9); c10.SetCellValue("" + ShippedDebt + ""); c10.CellStyle = cellStyle; + ICell c11 = rowi.CreateCell(10); c11.SetCellValue("" + InvoicedDebt + ""); c11.CellStyle = cellStyle; + ICell c12 = rowi.CreateCell(11); c12.SetCellValue(list[i]["IsEnded"].ToString()); c12.CellStyle = cellStyle; + ICell c13 = rowi.CreateCell(12); c13.SetCellValue(list[i]["Remark"].ToString()); c13.CellStyle = cellStyle2; + n++; + if(list[i]["Number"].ToString() == "合计") + { + c1.CellStyle = style3; + c2.CellStyle = style3; + c3.CellStyle = style3; + c4.CellStyle = style3; + c5.CellStyle = style3; + c6.CellStyle = style3; + c7.CellStyle = style3; + c8.CellStyle = style3; + c9.CellStyle = style3; + c10.CellStyle = style3; + c11.CellStyle = style3; + c12.CellStyle = style3; + c13.CellStyle = style3; + } + } + + #endregion + + #region 赋值汇总数据行 + + //获取工作簿中的第一个工作表(索引为1) + ISheet sheet2 = workbook.GetSheetAt(1); + IRow rr1 = sheet2.GetRow(15); + IRow rr2 = sheet2.GetRow(16); + IRow rr3 = sheet2.GetRow(17); + ICell cc1 = rr1.GetCell(6); + ICell cc2 = rr2.GetCell(6); + ICell cc3 = rr3.GetCell(6); + cc1.SetCellValue("" + YFHpriceSum + ""); + cc2.SetCellValue("" + YFPpriceSum + ""); + cc3.SetCellValue("" + priceSum + ""); + + #endregion + + #region 明细行后模板赋值 + + IRow R1 = sheet2.GetRow(15); + IRow R2 = sheet2.GetRow(16); + IRow R3 = sheet2.GetRow(17); + IRow R4 = sheet2.GetRow(18); + IRow R5 = sheet2.GetRow(19); + IRow R6 = sheet2.GetRow(20); + IRow R7 = sheet2.GetRow(21); + + IRow r1 = sheet.CreateRow(n); + IRow r2 = sheet.CreateRow(n + 1); + IRow r3 = sheet.CreateRow(n + 2); + IRow r4 = sheet.CreateRow(n + 3); + IRow r5 = sheet.CreateRow(n + 4); + IRow r6 = sheet.CreateRow(n + 5); + IRow r7 = sheet.CreateRow(n + 6); + + //第一行 + for (int i = 0; i < R1.LastCellNum; i++) + { + var test1 = ""; + if (R1.GetCell(i) != null) + { + test1 = R1.GetCell(i).ToString(); + } + ICell CR1 = r1.CreateCell(i); + CR1.SetCellValue(test1); + if (i == 4 || i == 5 || i == 6 || i == 7 || i == 8 || i == 9) + { + CR1.CellStyle = style; + } + else + { + CR1.CellStyle = style2; + } + } + + //第二行 + for (int i = 0; i < R2.LastCellNum; i++) + { + var test1 = ""; + if (R2.GetCell(i) != null) + { + test1 = R2.GetCell(i).ToString(); + } + ICell CR1 = r2.CreateCell(i); + CR1.SetCellValue(test1); + if (i == 4 || i == 5 || i == 6 || i == 7 || i == 8 || i == 9) + { + CR1.CellStyle = style; + } + else + { + CR1.CellStyle = style2; + } + } + + //第三行 + for (int i = 0; i < R3.LastCellNum; i++) + { + var test1 = ""; + if (R3.GetCell(i) != null) + { + test1 = R3.GetCell(i).ToString(); + } + ICell CR1 = r3.CreateCell(i); + CR1.SetCellValue(test1); + if (i == 4 || i == 5 || i == 6 || i == 7 || i == 8 || i == 9) + { + CR1.CellStyle = style; + } + else + { + CR1.CellStyle = style2; + } + } + + //第四行 + for (int i = 0; i < R4.LastCellNum; i++) + { + var test1 = ""; + if (R4.GetCell(i) != null) + { + test1 = R4.GetCell(i).ToString(); + } + ICell CR1 = r4.CreateCell(i); + CR1.SetCellValue(test1); + CR1.CellStyle = style2; + } + + //第五行 + for (int i = 0; i < R5.LastCellNum; i++) + { + var test1 = ""; + if (R5.GetCell(i) != null) + { + test1 = R5.GetCell(i).ToString(); + } + ICell CR1 = r5.CreateCell(i); + CR1.SetCellValue(test1); + if (i >= 4) + { + CR1.CellStyle = style2; + } + } + + //第六行 + for (int i = 0; i < R6.LastCellNum; i++) + { + var test1 = ""; + if (R6.GetCell(i) != null) + { + test1 = R6.GetCell(i).ToString(); + } + ICell CR1 = r6.CreateCell(i); + CR1.SetCellValue(test1); + if (i >= 4) + { + CR1.CellStyle = style2; + } + } + + //第七行 + for (int i = 0; i < R7.LastCellNum; i++) + { + var test1 = ""; + if (R7.GetCell(i) != null) + { + test1 = R7.GetCell(i).ToString(); + } + ICell CR1 = r7.CreateCell(i); + CR1.SetCellValue(test1); + if (i >= 4) + { + CR1.CellStyle = style2; + } + } + + //合并单元格 + for (int i = 0; i < 7; i++) + { + // 合并单元格的起始行、结束行、起始列和结束列 + int firstRow = n + i; // 比如第一行 + int lastRow = n + i; // 合并到第三行(0-based index) + int firstCol = 4; // 比如第一列 + int firstCol2 = 7; // 比如第一列 + int firstCol3 = 0; // 比如第一列 + int lastCol = 5; // 合并到第三列(0-based index) + int lastCol2 = 9; // 合并到第三列(0-based index) + int lastCol3 = 3; // 合并到第三列(0-based index) + // 创建CellRangeAddress对象 + CellRangeAddress cellRangeAddress = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol); + CellRangeAddress cellRangeAddress2 = new CellRangeAddress(firstRow, lastRow, firstCol2, lastCol2); + CellRangeAddress cellRangeAddress3 = new CellRangeAddress(firstRow, lastRow, firstCol3, lastCol3); + // 合并单元格 + sheet.AddMergedRegion(cellRangeAddress); + sheet.AddMergedRegion(cellRangeAddress2); + sheet.AddMergedRegion(cellRangeAddress3); + } + + #endregion + + #region Excel代码2 + + string folderPath = Path.GetDirectoryName(outputFilePath); + if (!Directory.Exists(folderPath)) + { + Directory.CreateDirectory(folderPath); + } + FileStream exportFile = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); + workbook.Write(exportFile); + exportFile.Close(); + + #endregion + + } + + public static string ToChineseNumber(decimal number, Kingdee.BOS.Context Context) + { + //Select top 1 dbo.ConvertAmountToChineseWords(12345.14) as 'PriceText' From T_SAL_ORDER + string sql = string.Format(@"/*dialect*/Select top 1 dbo.ConvertAmountToChineseWords({0}) as 'PriceText' From T_SAL_ORDER", number); + var list = DBUtils.ExecuteDynamicObject(Context, sql); + return list[0]["PriceText"].ToString(); + } + } +} diff --git a/YSKDZGongNeng_JY/ProgramNumber.cs b/YSKDZGongNeng_JY/ProgramNumber.cs new file mode 100644 index 0000000..a23d76d --- /dev/null +++ b/YSKDZGongNeng_JY/ProgramNumber.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pilot.Report.Exploitation.AccountsReceivable +{ + public class ProgramNumber + { + public static void Main() + { + decimal number = 1234567.89m; + string chineseNumber = ToChineseNumber(number); + Console.WriteLine($"数字 {number} 的中文大写数字是:{chineseNumber}"); + } + + public static string ToChineseNumber(decimal number) + { + // 定义数字和单位 + string[] digits = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; + string[] units = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿" }; + + // 将数字转换为整数和小数部分 + string numberStr = number.ToString("N2").Replace(",", ""); // 去掉千分位分隔符 + string[] parts = numberStr.Split('.'); + string integerPart = parts[0]; + string decimalPart = parts.Length > 1 ? parts[1] : "00"; + + // 处理整数部分 + string result = ""; + for (int i = 0; i < integerPart.Length; i++) + { + int digit = int.Parse(integerPart[integerPart.Length - i - 1].ToString()); + int unitIndex = integerPart.Length - i - 1; + + if (digit != 0) + { + result = digits[digit] + units[unitIndex] + result; + } + else + { + result = "零" + result; + } + } + + // 处理小数部分 + if (decimalPart != "00") + { + result += "点"; + foreach (char c in decimalPart) + { + result += digits[int.Parse(c.ToString())]; + } + } + + // 去掉多余的零 + result = result.Replace("零零", "零").Replace("零万", "万").Replace("零亿", "亿"); + if (result.StartsWith("零")) + { + result = result.Substring(1); + } + if (result.EndsWith("零")) + { + result = result.Substring(0, result.Length - 1); + } + + return result; + } + } +} diff --git a/YSKDZGongNeng_JY/YourDataPlugIn.cs b/YSKDZGongNeng_JY/YourDataPlugIn.cs new file mode 100644 index 0000000..37e1516 --- /dev/null +++ b/YSKDZGongNeng_JY/YourDataPlugIn.cs @@ -0,0 +1,115 @@ +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.Report.PlugIn; +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.App.Data; + +namespace Pilot.Report.Exploitation.AccountsReceivable +{ + /// + /// 【表单插件】简易版-确认按钮 + /// + [Description("【表单插件】简易版-确认按钮-添加数据库"), HotUpdate] + public class YourDataPlugIn: AbstractSysReportPlugIn + { + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + // 判断 应收对账单【简易版】确认生成单据按钮 + if (e.BarItemKey == "Test_Button_2") + { + + #region 应收账款对账单数据添加 + + var reportModel = this.SysReportModel; + + //单据头 + var rptTitles = reportModel.ReportTitles; + string fClient = rptTitles.FirstOrDefault(a => a.TitleKey == "FClient").TitleValue.ToString(); + string fDate = rptTitles.FirstOrDefault(a => a.TitleKey == "FDate").TitleValue.ToString(); + int creatorId = Convert.ToInt32(this.Context.UserId); + DateTime fDate2 = DateTime.Now; + //单据体 + var list = reportModel.DataSource.Rows; + + string sqlKH = string.Format(@"/*dialect*/Select FCUSTID From T_BD_CUSTOMER_L Where FNAME = '{0}'", fClient); + + var sqlKHList = DBUtils.ExecuteDynamicObject(Context, sqlKH); + + int fClientId = Convert.ToInt32(sqlKHList[0]["FCUSTID"]); + + string sqlTest = string.Format(@"/*dialect*/Select * From MBBA_t_Cust100006 Where FClient = '{0}' AND Month(FDATE) = Month('{1}')", fClientId, fDate); + + var sqlTestList = DBUtils.ExecuteDynamicObject(Context, sqlTest); + + if (sqlTestList.Count() == 0) + { + decimal YFHpriceSum = 0; + + for (var i = 0; i < list.Count; i++) + { + if (list[i]["Number"].ToString() == "合计") + { + YFHpriceSum = Math.Round(Convert.ToDecimal(list[i]["ShippedDebt"]), 2); + } + } + + string sqlSelect = string.Format(@"/*dialect*/Select top 1 FId,FBillNo From MBBA_t_Cust100006 Order By FID DESC"); + + var sqlSelectList = DBUtils.ExecuteDynamicObject(Context, sqlSelect); + + int FId = 1; + string FBillNo = "YSDZ0001"; + string FBillNoSplit = ""; + + if (sqlSelectList.Count > 0) + { + FId = sqlSelectList[0]["FId"].Long2Int(); + FId = FId + 1; + FBillNoSplit = sqlSelectList[0]["FBillNo"].ToString(); + int n = Convert.ToInt32(FBillNoSplit.Split('Z')[1]); + if (n < 1000) + { + FBillNo = "YSDZ" + "0" + (n + 1); + } + else if (n < 100) + { + FBillNo = "YSDZ" + "00" + (n + 1); + } + else if (n < 10) + { + FBillNo = "YSDZ" + "000" + (n + 1); + } + } + + string sql = string.Format(@"Insert into MBBA_t_Cust100006 Values('{5}','{6}','A','{3}','{4}','',null,'{0}','{1}','{2}')", + fClientId, fDate, YFHpriceSum, creatorId, fDate2, FId, FBillNo); + + int num = DBUtils.Execute(Context, sql); + + if (num > 0) + { + this.View.ShowMessage("应收账款对账单生成完毕,已存储数据库!"); + } + else + { + this.View.ShowErrMessage("数据添加失败!"); + } + } + else + { + this.View.ShowErrMessage("数据添加失败,已存在相同客户相同期间的对账单!"); + } + + #endregion + + } + } + } +} diff --git a/YSZKDZBaoBiao/AccountsReceivableFiter.cs b/YSZKDZBaoBiao/AccountsReceivableFiter.cs new file mode 100644 index 0000000..db54c91 --- /dev/null +++ b/YSZKDZBaoBiao/AccountsReceivableFiter.cs @@ -0,0 +1,27 @@ +using Kingdee.BOS.App.Data; +using Kingdee.BOS; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; +using Kingdee.BOS.Core.Metadata.FieldElement; +using Kingdee.BOS.Core.Metadata; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pilot.Report.Exploitation.AccountsReceivableStatements +{ + [Description("【过滤表单插件】应收收款对账报表【默认全部订单】"), HotUpdate] + public class AccountsReceivableFiter: AbstractDynamicFormPlugIn + { + public override void AfterBindData(EventArgs e) + { + base.AfterBindData(e); + + this.View.Model.SetValue("F_ALL_GROUP", 1); + } + } +} diff --git a/YSZKDZBaoBiao/AccountsReceivablePlugIn.cs b/YSZKDZBaoBiao/AccountsReceivablePlugIn.cs new file mode 100644 index 0000000..fd3d63f --- /dev/null +++ b/YSZKDZBaoBiao/AccountsReceivablePlugIn.cs @@ -0,0 +1,36 @@ +using Kingdee.BOS.Core.Report.PlugIn; +using Kingdee.BOS.Core.Report.PlugIn.Args; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Pilot.Report.Exploitation.AccountsReceivableStatements +{ + [Description("【报表表单插件】应收账款对账报表【简易版】插件"), HotUpdate] + public class AccountsReceivablePlugIn: AbstractSysReportPlugIn + { + public override void FormatCellValue(FormatCellValueArgs args) + { + // 格式化日期 + base.FormatCellValue(args); + if (args.Header.ColType == Kingdee.BOS.SqlStorageType.SqlDatetime) + { + DateTime value = Convert.ToDateTime(args.FormateValue); + string afterValue = value.ToString("yyyy-MM-dd"); + args.FormateValue = afterValue; + } + // 格式化金额 汇率不格式化 + if (args.Header.ColType == Kingdee.BOS.SqlStorageType.SqlDecimal) + { + decimal value = decimal.Parse(args.FormateValue); + // 千分位 + string afterValue = value.ToString("N"); + args.FormateValue = afterValue; + } + } + } +} diff --git a/YSZKDZBaoBiao/AccountsReceivableReport.cs b/YSZKDZBaoBiao/AccountsReceivableReport.cs new file mode 100644 index 0000000..1929231 --- /dev/null +++ b/YSZKDZBaoBiao/AccountsReceivableReport.cs @@ -0,0 +1,344 @@ +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 +{ + /// + /// 应收账款对账报表【简易版】 + /// + [Description("【服务插件】应收账款对账报表【简易版】取数"), HotUpdate] + public class AccountsReceivableReport: SysReportBaseService + { + /// + /// 初始化 + /// + public override void Initialize() + { + base.Initialize(); + this.ReportProperty.ReportName = new LocaleValue("应收账款对账单【简易版】", base.Context.UserLocale.LCID); + this.ReportProperty.IsUIDesignerColumns = false; + // 简单账表类型:普通、树形、分页 + this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL; + this.IsCreateTempTableByPlugin = true; + // + this.IsCreateTempTableByPlugin = true; + // + this.ReportProperty.IsGroupSummary = true; + // + this.ReportProperty.SimpleAllCols = false; + // 单据主键:两行FID相同,则为同一单的两条分录,单据编号可以不重复显示 + this.ReportProperty.PrimaryKeyFieldName = "FID"; + // + this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true; + + // 设置精度控制 + var list = new List + { + new DecimalControlField("FDECIMALS", "OrigInvoiceAmount"), + new DecimalControlField("FDECIMALS", "ExchangeRate"), + new DecimalControlField("FDECIMALS", "InvoiceAmountTHB"), + new DecimalControlField("FDECIMALS", "MonthEndExRate"), + new DecimalControlField("FDECIMALS", "RevaluationAountInTHB"), + new DecimalControlField("FDECIMALS", "UnrealizedGainLoss"), + }; + this.ReportProperty.DecimalControlFieldList = list; + } + + /// + /// 报表列表头 + /// + /// + /// + public override ReportHeader GetReportHeaders(IRptParams filter) + { + base.GetReportHeaders(filter); + + ReportHeader header = new ReportHeader(); + + header.AddChild("Number", new LocaleValue("序号"), SqlStorageType.Sqlvarchar); + header.AddChild("DATE", new LocaleValue("签订日期"), SqlStorageType.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; + } + + /// + /// 显示报表数据 + /// + /// + /// + 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); + } + + /// + /// 获取前端组件转换过滤条件 + /// + /// + /// + 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 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; + } + } +} diff --git a/YSZKDZBaoBiao/AccountsReceivableReport2.cs b/YSZKDZBaoBiao/AccountsReceivableReport2.cs new file mode 100644 index 0000000..170b9f0 --- /dev/null +++ b/YSZKDZBaoBiao/AccountsReceivableReport2.cs @@ -0,0 +1,396 @@ +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; + +namespace Pilot.Report.Exploitation.AccountsReceivableStatements +{ + /// + /// 应收账款对账报表【明细版】 + /// + [Description("[服务插件] 应收账款对账报表【明细版】取数"), HotUpdate] + public class AccountsReceivableReport2 : SysReportBaseService + { + /// + /// 初始化 + /// + public override void Initialize() + { + base.Initialize(); + this.ReportProperty.ReportName = new LocaleValue("应收账款对账单【明细版】", base.Context.UserLocale.LCID); + this.ReportProperty.IsUIDesignerColumns = false; + // 简单账表类型:普通、树形、分页 + this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL; + this.IsCreateTempTableByPlugin = true; + // + this.IsCreateTempTableByPlugin = true; + // + this.ReportProperty.IsGroupSummary = true; + // + this.ReportProperty.SimpleAllCols = false; + // 单据主键:两行FID相同,则为同一单的两条分录,单据编号可以不重复显示 + this.ReportProperty.PrimaryKeyFieldName = "FID"; + // + this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true; + + // 设置精度控制 + var list = new List + { + new DecimalControlField("FDECIMALS", "OrigInvoiceAmount"), + new DecimalControlField("FDECIMALS", "ExchangeRate"), + new DecimalControlField("FDECIMALS", "InvoiceAmountTHB"), + new DecimalControlField("FDECIMALS", "MonthEndExRate"), + new DecimalControlField("FDECIMALS", "RevaluationAountInTHB"), + new DecimalControlField("FDECIMALS", "UnrealizedGainLoss"), + }; + this.ReportProperty.DecimalControlFieldList = list; + } + + /// + /// 报表列表头 + /// + /// + /// + public override ReportHeader GetReportHeaders(IRptParams filter) + { + base.GetReportHeaders(filter); + + ReportHeader header = new ReportHeader(); + + header.AddChild("DATE", new LocaleValue("签订日期"), SqlStorageType.SqlDatetime); + header.AddChild("CONTRACTNUMBER", new LocaleValue("订单号"), SqlStorageType.Sqlvarchar); + header.AddChild("ProjectName", new LocaleValue("项目名称"), SqlStorageType.Sqlvarchar); + header.AddChild("SizeModel", new LocaleValue("规格型号"), SqlStorageType.Sqlvarchar); + header.AddChild("FQty", new LocaleValue("数量/台"), SqlStorageType.SqlInt); + header.AddChild("FTaxPrice", new LocaleValue("单价"), SqlStorageType.SqlDecimal); + header.AddChild("FAllAmount", new LocaleValue("价税合计"), SqlStorageType.SqlDecimal); + header.AddChild("OrderAmount", new LocaleValue("订单金额"), SqlStorageType.SqlDecimal); + header.AddChild("ShipmentsDate", new LocaleValue("发货日期"), SqlStorageType.Sqlvarchar); + header.AddChild("ShipmentsNum", new LocaleValue("发货数量"), SqlStorageType.SqlInt); + header.AddChild("ShipmentsAmount", new LocaleValue("发货金额"), SqlStorageType.SqlDecimal); + header.AddChild("ReturnDate", new LocaleValue("退货日期"), SqlStorageType.Sqlvarchar); + 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); + header.AddChild("Remark", new LocaleValue("备注"), SqlStorageType.Sqlvarchar); + + foreach (var item in header.GetChilds()) + { + item.Width = 160; + } + return header; + } + + /// + /// 显示报表数据 + /// + /// + /// + 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 fGROUP = customFilter["F_ALL_GROUP"]?.ToString(); + //开始对账日期 + var FSDate = customFilter["FSDate"]?.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 + A.FDATE, + CAST(ROW_NUMBER() OVER (ORDER BY A.FDate DESC) as nvarchar(MAX)) AS Number, + CASE WHEN B.FSEQ != 1 THEN null + ELSE A.FDate END as 'DATE', --签订日期 + CASE WHEN B.FSEQ != 1 THEN '' + ELSE A.F_CONTRACTNUMBER END as 'CONTRACTNUMBER', --订单号 + CASE WHEN B.FSEQ != 1 THEN '' + ELSE ISNULL(H.FNAME,'') END as 'ProjectName', --项目名称 + ISNULL(G.FSpecification,'') as 'SizeModel', --规格型号 + B.FQty, --数量/台 + B2.FTaxPrice, --单价 + B2.FAllAmount_LC, --价税合计 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(A2.FBILLALLAMOUNT,0) END as 'OrderAmount', --订单金额 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(H2.FDate,'') END as 'ShipmentsDate', --发货日期 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(H2.FPRICEBASEQTY,0) END as 'ShipmentsNum', --发货数量 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(H2.FALLAMOUNT,0) END as 'ShipmentsAmount', --发货金额 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(H3.FDate,'') END as 'ReturnDate', --退货日期 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(H3.FRETNOTICEQTY,0) END as 'ReturnNum', --退货数量 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(H3.FBillAllAmount,0) END as 'ReturnAmount',--退货金额 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(H4.FDate,'') END as 'BillingDate', --开票日期 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(H4.FALLAMOUNTFOR,0) END as 'BillingAmount', --开票金额 + CASE WHEN B.FSEQ != 1 THEN null + ELSE (Select STRING_AGG((CONVERT(nvarchar,aa1.FDATE,23)),',') as 'FDate' + From T_AR_RECEIVEBILL aa1 JOIN T_SEC_USER aa2 on aa1.FCREATORID = aa2.FUSERID + Where FBILLNO in (Select FBILLNO3 From T_AutoWrireRecordEntry a1 JOIN T_AutoWrireRecordEntry2 a2 + on a1.FID = a2.FID Where FBILLNO2 = A.FBILLNO)) + END as 'PaymentDate', --回款日期 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(A.F_AMOUNT,0) END as 'PaymentAmount', --回款金额 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(H2.FALLAMOUNT,0)-ISNULL(H3.FBillAllAmount,0) -ISNULL(E.FWRITTENOFFAMOUNTFOR,0) END as 'ShippedDebt', --已出货欠款 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL(H4.FALLAMOUNTFOR,0) -ISNULL(E.FWRITTENOFFAMOUNTFOR,0) END as 'InvoicedDebt', --已开票欠款 + CASE WHEN B.FSEQ != 1 THEN null + ELSE ISNULL((ISNULL(H2.FALLAMOUNT,0)-ISNULL(H3.FBillAllAmount,0) -0)-(ISNULL(H4.FALLAMOUNTFOR,0) -0),0) + END as 'OwedTickets', --欠票 + CASE WHEN B.FSEQ != 1 THEN '' + 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', --是否已完结 + CASE WHEN B.FSEQ != 1 THEN '' + ELSE A.FNOTE END as 'Remark' --备注 + INTO #TEMPTABLE1 --临时表 + From + T_SAL_ORDER A + JOIN + T_SAL_ORDERFIN AA + on A.FID = AA.FID + JOIN + T_SAL_ORDERFIN A2 + on A.FID = A2.FID + JOIN + T_SAL_ORDERENTRY B + on A.FID = B.FID + JOIN + T_SAL_ORDERENTRY_F B2 + on B.FENTRYID = B2.FENTRYID + 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',SUM(W1.FPRICEBASEQTY) as 'FPRICEBASEQTY', + STRING_AGG(CONVERT(nvarchar,W1.FDATE, 23), ',') as 'FDate' FROM + (Select q2.FAllAmount,q2.FENTRYID,q2.FPriceBaseQty,q1.FDate 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 W2.FSBILLID,STRING_AGG(CONVERT(nvarchar,W1.FDATE, 23), ',') as 'FDate',SUM(W1.FPriceUnitQty) as 'FRETNOTICEQTY',SUM(W1.FALLAMOUNT) as 'FBillAllAmount' FROM + (Select q1.FDATE,q3.FSID,q2.FAllAmount,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) H3 --退货订单表 + on A.FID = H3.FSBILLID + LEFT JOIN + (SELECT W2.FSBILLID,SUM(W1.FALLAMOUNTFOR) as 'FALLAMOUNTFOR',STRING_AGG(CONVERT(nvarchar,W1.FDATE,23),',') as 'FDate' FROM + (Select B.FALLAMOUNTFOR,B.FENTRYID,B.FOPENAMOUNTFOR,A.FDATE 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 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 a1.FID,a1.F_CONTRACTNUMBER,STRING_AGG(CONVERT(nvarchar,a1.FDATE, 23), ',') as 'FDate',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) E on E.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(@" + TRUNCATE TABLE YingShouZhanKuanMX + + INSERT INTO YingShouZhanKuanMX([DATE],CONTRACTNUMBER,ProjectName,SizeModel,FQty,FTaxPrice,FAllAmount,OrderAmount,ShipmentsDate,ShipmentsNum, + ShipmentsAmount,ReturnDate,ReturnNum,ReturnAmount,PaymentDate,PaymentAmount,OwedTickets,IsEnded,Remark) + SELECT [DATE],CONTRACTNUMBER,ProjectName,SizeModel,FQty,FTaxPrice,FAllAmount_LC,OrderAmount,ShipmentsDate,ShipmentsNum, + ShipmentsAmount,ReturnDate,ReturnNum,ReturnAmount,PaymentDate,PaymentAmount,OwedTickets,IsEnded,Remark + From #TEMPTABLE2 + + EXEC UpdateYSDZBMX_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 + YingShouZhanKuanMX + ORDERY BY CONTRACTNUMBER + ", tableName); + + DBUtils.Execute(this.Context, sql); + } + + /// + /// 获取前端组件转换过滤条件 + /// + /// + /// + public override ReportTitles GetReportTitles(IRptParams filter) + { + ReportTitles reportTitles = new ReportTitles(); + DynamicObject customFilter = filter.FilterParameter.CustomFilter; + + if (customFilter != null) + { + // 客户 + var fClientList = (customFilter["FClient"] as DynamicObject)?["Name"]?.ToString(); + // 工程项目名称 + var fProjectList = (customFilter["FProject"] as DynamicObjectCollection)?.Select(n => (n["FProject"] as DynamicObject)["Name"].ToString()).ToList(); + // 截止对账日期 + var fDate = customFilter["FDate"]?.ToString(); + //开始对账日期 + var FSDate = customFilter["FSDate"]?.ToString(); + // 订单状态 + var fGROUP = customFilter["F_ALL_GROUP"]?.ToString(); + //纸质合同号 + var ZZHTH = customFilter["F_ZZHTH"]?.ToString(); + //销售员 + var 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 GetSummaryColumnInfo(IRptParams filter) + { + + var result = base.GetSummaryColumnInfo(filter); + result.Add(new SummaryField("FQty", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("FAllAmount", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("OrderAmount", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("ShipmentsNum", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("ShipmentsAmount", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("ReturnNum", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("ReturnAmount", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("PPBillingAmount", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("ZPBillingAmount", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("BillingAmount", BOSEnums.Enu_SummaryType.SUM)); + result.Add(new SummaryField("PaymentAmount", BOSEnums.Enu_SummaryType.SUM)); + return result; + } + } +} diff --git a/YSZKDZGongNeng_MX/LiteVersionPlugIn2.cs b/YSZKDZGongNeng_MX/LiteVersionPlugIn2.cs new file mode 100644 index 0000000..2fda297 --- /dev/null +++ b/YSZKDZGongNeng_MX/LiteVersionPlugIn2.cs @@ -0,0 +1,562 @@ +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.CommonFilter.ConditionVariableAnalysis; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.Metadata.FormElement; +using Kingdee.BOS.Core.Report; +using Kingdee.BOS.Core.Report.PlugIn; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using NPOI.HSSF.Util; +using NPOI.SS.Formula.Functions; +using NPOI.SS.UserModel; +using NPOI.SS.Util; +using NPOI.XSSF.UserModel; +using System; +using System.ComponentModel; +using System.Data; +using System.IO; +using System.Linq; +using System.Security.Cryptography; + +namespace Pilot.Report.Exploitation.AccountsReceivable +{ + /// + /// 【表单插件】明细版-按钮触发 + /// + [Description("【表单插件】明细版-按钮触发-导出EXCEL"), HotUpdate] + public class LiteVersionPlugIn2 : AbstractSysReportPlugIn + { + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + // 判断 应收对账单【明细版】按钮 + if (e.BarItemKey == "Test_Button_1") + { + string FPath = "应收账款对账单【明细版】.xlsx"; + + // 在临时文件目录,生成一个完整的文件名: C:\Program Files\Kingdee\K3Cloud\WebSite\...\JD.xls + string filePath = PathUtils.GetPhysicalPath(KeyConst.TEMPFILEPATH, Path.GetFileName(FPath)); + // 生成一个供用户下载文件的url地址: http:\\localhost\K3Cloud\...\JD.xls + string fileUrl = PathUtils.GetServerPath(KeyConst.TEMPFILEPATH, Path.GetFileName(FPath)); + //打开文件下载界面 + DynamicFormShowParameter showParameter = new DynamicFormShowParameter(); + showParameter.FormId = "BOS_FileDownload"; + showParameter.OpenStyle.ShowType = ShowType.Modal; + showParameter.CustomComplexParams.Add("url", fileUrl); + //显示 + this.View.ShowForm(showParameter); + + var reportModel = this.SysReportModel; + + //单据头 + var rptTitles = reportModel.ReportTitles; + string fClient = rptTitles.FirstOrDefault(a => a.TitleKey == "FClient").TitleValue.ToString(); + string fDate = rptTitles.FirstOrDefault(a => a.TitleKey == "FDate").TitleValue.ToString(); + string fProject = rptTitles.FirstOrDefault(a => a.TitleKey == "FProject").TitleValue.ToString(); + string FState = rptTitles.FirstOrDefault(a => a.TitleKey == "FState").TitleValue.ToString(); + //单据体 + var list = reportModel.DataSource.Rows; + + string sqlTest = string.Format(@"/*dialect*/Select FAmount,FDate From MBBA_t_Cust100006 Where Month(FDATE) = Month(DATEADD(MONTH, -1, '{0}'))", fDate); + + var sqlTestList = DBUtils.ExecuteDynamicObject(Context, sqlTest); + + int Num = 0; + decimal fAmount = 0; + string fDate2 = ""; + if (sqlTestList.Count() > 0) + { + Num = 1; + fAmount = Math.Round(Convert.ToDecimal(sqlTestList[0]["FAmount"]),2); + fDate2 = sqlTestList[0]["FDate"].ToString().Split(' ')[0]; + } + + Main(filePath, fClient, fDate, fProject, list, Num, fAmount, fDate2, Context); + } + } + + /// + /// 赋值EXCEL + /// + static void Main(string outputFilePath, string fClient, string fDate, string fProject, DataRowCollection list, int Num, decimal fAmount,string fDate2,Kingdee.BOS.Context Context) + { + #region Excel代码 + + string filePath = @"D:\KingdeeModel\对账单模板2.xlsx"; + FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read); + IWorkbook workbook = new XSSFWorkbook(file); + file.Close(); + + //获取工作簿中的第一个工作表(索引为0) + ISheet sheet = workbook.GetSheetAt(0); + + #endregion + + #region 单元格样式 + + // 创建一个单元格样式------------------------------- + ICellStyle cellStyle = workbook.CreateCellStyle(); + + // 设置边框样式 + cellStyle.BorderTop = BorderStyle.Thin; + cellStyle.BorderBottom = BorderStyle.Thin; + cellStyle.BorderLeft = BorderStyle.Thin; + cellStyle.BorderRight = BorderStyle.Thin; + // 设置水平居中对齐 + cellStyle.Alignment = HorizontalAlignment.Center; + // 设置垂直居中对齐 + cellStyle.VerticalAlignment = VerticalAlignment.Center; + + // 创建一个单元格样式--------------------------------- + ICellStyle cellStyle2 = workbook.CreateCellStyle(); + + // 设置边框样式 + cellStyle2.BorderTop = BorderStyle.Thin; + cellStyle2.BorderBottom = BorderStyle.Thin; + cellStyle2.BorderLeft = BorderStyle.Thin; + cellStyle2.BorderRight = BorderStyle.Thin; + + // 创建单元格样式--------------------------------------- + ICellStyle style = workbook.CreateCellStyle(); + + // 设置边框样式 + style.BorderTop = BorderStyle.Thin; + style.BorderBottom = BorderStyle.Thin; + style.BorderLeft = BorderStyle.Thin; + style.BorderRight = BorderStyle.Thin; + + // 创建字体并设置为加粗 + IFont font = workbook.CreateFont(); + font.IsBold = true; // 设置字体加粗 + + // 将字体应用到单元格样式 + style.SetFont(font); + + // 创建单元格样式--------------------------------------- + ICellStyle style2 = workbook.CreateCellStyle(); + + // 创建字体并设置为加粗 + IFont font2 = workbook.CreateFont(); + font2.IsBold = true; // 设置字体加粗 + + // 将字体应用到单元格样式 + style2.SetFont(font2); + + // 创建一个单元格样式------------------------------- + ICellStyle style3 = workbook.CreateCellStyle(); + + // 设置边框样式 + style3.BorderTop = BorderStyle.Thin; + style3.BorderBottom = BorderStyle.Thin; + style3.BorderLeft = BorderStyle.Thin; + style3.BorderRight = BorderStyle.Thin; + // 设置水平居中对齐 + style3.Alignment = HorizontalAlignment.Center; + // 设置垂直居中对齐 + style3.VerticalAlignment = VerticalAlignment.Center; + // 创建字体并设置为加粗 + IFont font3 = workbook.CreateFont(); + font3.IsBold = true; // 设置字体加粗 + // 将字体应用到单元格样式 + style3.SetFont(font3); + + #endregion + + #region 获取金额汇总数据 + + decimal YFHpriceSum = 0; + decimal YFPpriceSum = 0; + decimal priceSum = 0; + + for (var i = 0; i < list.Count; i++) + { + if (list[i]["Number"].ToString() == "合计") + { + YFHpriceSum = Math.Round(Convert.ToDecimal(list[i]["ShippedDebt"]), 2); + YFPpriceSum = Math.Round(Convert.ToDecimal(list[i]["InvoicedDebt"]), 2); + priceSum = Math.Round(Convert.ToDecimal(list[i]["ShippedDebt"]) + Convert.ToDecimal(list[i]["InvoicedDebt"]), 2); + } + } + + #endregion + + #region 四行一列修改/六行二列修改/十一行一列修改/十二行一列修改 + + IRow row = sheet.GetRow(3); + IRow row2 = sheet.GetRow(5); + IRow row22 = sheet.GetRow(6); + IRow ro = sheet.GetRow(11); + ICell cell = row.GetCell(0); + ICell cell2 = row2.GetCell(1); + ICell cell22 = row22.GetCell(8); + ICell cel3 = ro.GetCell(0); + IRow row3 = sheet.GetRow(10); + ICell cell3 = row3.GetCell(0); + //将新创建或获取的单元格的值修改 + cell22.SetCellValue(""); + var YFHpriceSumZW = ToChineseNumber(YFHpriceSum, Context); + cell3.SetCellValue("贵公司截至 " + fDate + " 共欠我公司货款金额为:" + YFHpriceSum + "元【等于已发货欠款总额】(大写:"+ YFHpriceSumZW + ")"); + //将新创建或获取的单元格的值修改 + cell.SetCellValue("尊敬的 " + fClient + " 客户您好,我公司已根据合同/订单的要求向贵公司交付相关产品并请验收确认,鉴于我公司对贵公司已通知发货部分的交付义务已完成,"); + cell2.SetCellValue(fClient); + var fAmountZW = ToChineseNumber(fAmount, Context); + if (Num > 0) + { + cel3.SetCellValue("其中上期(截止" + fDate2 + "共欠我公司货款金额为:" + fAmount + "元(大写:"+ fAmountZW + ")"); + } + else + { + cel3.SetCellValue(""); + } + #endregion + + #region 明细赋值 + + // 将字体应用到单元格样式 + style2.SetFont(font2); + int n = 14; + + for (var i = 0; i < list.Count; i++) + { + string date = string.IsNullOrWhiteSpace(list[i]["DATE"].ToString()) ? "" : list[i]["DATE"].ToString().Split(' ')[0]; + string ShipmentsDate = string.IsNullOrWhiteSpace(list[i]["ShipmentsDate"].ToString()) ? "" : list[i]["ShipmentsDate"].ToString().Split(' ')[0]; + string PaymentDate = string.IsNullOrWhiteSpace(list[i]["PaymentDate"].ToString()) ? "" : list[i]["PaymentDate"].ToString().Split(' ')[0]; + string BillingDate = string.IsNullOrWhiteSpace(list[i]["BillingDate"].ToString()) ? "" : list[i]["BillingDate"].ToString().Split(' ')[0]; + string ReturnDate = string.IsNullOrWhiteSpace(list[i]["ReturnDate"].ToString()) ? "" : list[i]["ReturnDate"].ToString().Split(' ')[0]; + + IRow rowi = sheet.CreateRow(13 + i); + ICell c1 = rowi.CreateCell(0); c1.SetCellValue(list[i]["Number"].ToString()); c1.CellStyle = cellStyle; + ICell c2 = rowi.CreateCell(1); c2.SetCellValue(""+date+""); c2.CellStyle = cellStyle2; + ICell c3 = rowi.CreateCell(2); c3.SetCellValue(list[i]["CONTRACTNUMBER"].ToString()); c3.CellStyle = cellStyle2; + ICell c4 = rowi.CreateCell(3); c4.SetCellValue(list[i]["ProjectName"].ToString()); c4.CellStyle = cellStyle2; + ICell c5 = rowi.CreateCell(4); c5.SetCellValue(list[i]["SizeModel"].ToString()); c5.CellStyle = cellStyle2; + + ICell c6 = rowi.CreateCell(5); c6.SetCellValue(""); c6.CellStyle = cellStyle; //数量 + if(!string.IsNullOrWhiteSpace(list[i]["FQty"].ToString())) + { + int FQty = Convert.ToInt32(list[i]["FQty"]); + c6.SetCellValue("" + FQty + ""); c6.CellStyle = cellStyle; //数量 + } + + ICell c7 = rowi.CreateCell(6); c7.SetCellValue(""); c7.CellStyle = cellStyle; + if(!string.IsNullOrWhiteSpace(list[i]["FTaxPrice"].ToString())) + { + decimal FTaxPrice = Math.Round(Convert.ToDecimal(list[i]["FTaxPrice"]), 2); + c7.SetCellValue("" + FTaxPrice + ""); c7.CellStyle = cellStyle; + } + + ICell c8 = rowi.CreateCell(7); c8.SetCellValue(""); c8.CellStyle = cellStyle; + if(!string.IsNullOrWhiteSpace(list[i]["FAllAmount"].ToString())) + { + decimal FAllAmount = Math.Round(Convert.ToDecimal(list[i]["FAllAmount"]), 2); + c8.SetCellValue("" + FAllAmount + ""); c8.CellStyle = cellStyle; + } + + ICell c9 = rowi.CreateCell(8); c9.SetCellValue(""); c9.CellStyle = cellStyle; + if (!string.IsNullOrWhiteSpace(list[i]["OrderAmount"].ToString())) + { + decimal OrderAmount = Math.Round(Convert.ToDecimal(list[i]["OrderAmount"]), 2); + c9.SetCellValue("" + OrderAmount + ""); c9.CellStyle = cellStyle; + + } + + ICell c11 = rowi.CreateCell(10); c11.SetCellValue(""); c11.CellStyle = cellStyle; + if (!string.IsNullOrWhiteSpace(list[i]["ShipmentsNum"].ToString())) + { + int ShipmentsNum = Convert.ToInt32(list[i]["ShipmentsNum"]); + c11.SetCellValue("" + ShipmentsNum + ""); c11.CellStyle = cellStyle; + } + + ICell c12 = rowi.CreateCell(11); c12.SetCellValue(""); c12.CellStyle = cellStyle; + if (!string.IsNullOrWhiteSpace(list[i]["ShipmentsAmount"].ToString())) + { + decimal ShipmentsAmount = Math.Round(Convert.ToDecimal(list[i]["ShipmentsAmount"]), 2); + c12.SetCellValue("" + ShipmentsAmount + ""); c12.CellStyle = cellStyle; + } + + ICell c14 = rowi.CreateCell(13); c14.SetCellValue(""); c14.CellStyle = cellStyle; + if (!string.IsNullOrWhiteSpace(list[i]["ReturnNum"].ToString())) + { + int ReturnNum = Convert.ToInt32(list[i]["ReturnNum"]); + c14.SetCellValue("" + ReturnNum + ""); c14.CellStyle = cellStyle; + } + + ICell c15 = rowi.CreateCell(14); c15.SetCellValue(""); c15.CellStyle = cellStyle; + if (!string.IsNullOrWhiteSpace(list[i]["ReturnAmount"].ToString())) + { + decimal ReturnAmount = Math.Round(Convert.ToDecimal(list[i]["ReturnAmount"]), 2); + c15.SetCellValue("" + ReturnAmount + ""); c15.CellStyle = cellStyle; + } + + ICell c19 = rowi.CreateCell(18); c19.SetCellValue(""); c19.CellStyle = cellStyle; + if (!string.IsNullOrWhiteSpace(list[i]["PaymentAmount"].ToString())) + { + + decimal PaymentAmount = Math.Round(Convert.ToDecimal(list[i]["PaymentAmount"]), 2); + c19.SetCellValue("" + PaymentAmount + ""); c19.CellStyle = cellStyle; + } + + ICell c20 = rowi.CreateCell(19); c20.SetCellValue(""); c20.CellStyle = cellStyle; + if (!string.IsNullOrWhiteSpace(list[i]["ShippedDebt"].ToString())) + { + decimal ShippedDebt = Math.Round(Convert.ToDecimal(list[i]["ShippedDebt"]), 2); + c20.SetCellValue("" + ShippedDebt + ""); c20.CellStyle = cellStyle; + } + + ICell c21 = rowi.CreateCell(20); c21.SetCellValue(""); c21.CellStyle = cellStyle; + if (!string.IsNullOrWhiteSpace(list[i]["InvoicedDebt"].ToString())) + { + decimal InvoicedDebt = Math.Round(Convert.ToDecimal(list[i]["InvoicedDebt"]), 2); + c21.SetCellValue("" + InvoicedDebt + ""); c21.CellStyle = cellStyle; + } + + ICell c17 = rowi.CreateCell(16); c17.SetCellValue(""); c17.CellStyle = cellStyle; + if (!string.IsNullOrWhiteSpace(list[i]["BillingAmount"].ToString())) + { + + decimal BillingAmount = Math.Round(Convert.ToDecimal(list[i]["BillingAmount"]), 2); + c17.SetCellValue("" + BillingAmount + ""); c17.CellStyle = cellStyle; + } + + ICell c10 = rowi.CreateCell(9); c10.SetCellValue(ShipmentsDate); c10.CellStyle = cellStyle2;//发货日期 + ICell c13 = rowi.CreateCell(12); c13.SetCellValue(ReturnDate); c13.CellStyle = cellStyle2;//退货日期 + ICell c16 = rowi.CreateCell(15); c16.SetCellValue(BillingDate); c16.CellStyle = cellStyle2; //开票日期 + ICell c18 = rowi.CreateCell(17); c18.SetCellValue(PaymentDate); c18.CellStyle = cellStyle2;//回款日期 + ICell c22 = rowi.CreateCell(21); c22.SetCellValue(list[i]["IsEnded"].ToString()); c22.CellStyle = cellStyle2; + ICell c23 = rowi.CreateCell(22); c23.SetCellValue(list[i]["Remark"].ToString()); c23.CellStyle = cellStyle2; + n++; + if(list[i]["Number"].ToString() == "合计") + { + c1.CellStyle = style3; + c2.CellStyle = style3; + c3.CellStyle = style3; + c4.CellStyle = style3; + c5.CellStyle = style3; + c6.CellStyle = style3; + c7.CellStyle = style3; + c8.CellStyle = style3; + c9.CellStyle = style3; + c10.CellStyle = style3; + c11.CellStyle = style3; + c12.CellStyle = style3; + c13.CellStyle = style3; + c14.CellStyle = style3; + c15.CellStyle = style3; + c16.CellStyle = style3; + c17.CellStyle = style3; + c18.CellStyle = style3; + c19.CellStyle = style3; + c20.CellStyle = style3; + c21.CellStyle = style3; + c22.CellStyle = style3; + c23.CellStyle = style3; + } + } + + #endregion + + #region 赋值汇总数据行 + + //获取工作簿中的第一个工作表(索引为1) + ISheet sheet2 = workbook.GetSheetAt(1); + IRow rr1 = sheet2.GetRow(15); + IRow rr2 = sheet2.GetRow(16); + IRow rr3 = sheet2.GetRow(17); + ICell cc1 = rr1.GetCell(6); + ICell cc2 = rr2.GetCell(6); + ICell cc3 = rr3.GetCell(6); + cc1.SetCellValue("" + YFHpriceSum + ""); + cc2.SetCellValue("" + YFPpriceSum + ""); + cc3.SetCellValue("" + priceSum + ""); + + #endregion + + #region 明细行后模板赋值 + + IRow R1 = sheet2.GetRow(15); + IRow R2 = sheet2.GetRow(16); + IRow R3 = sheet2.GetRow(17); + IRow R4 = sheet2.GetRow(18); + IRow R5 = sheet2.GetRow(19); + IRow R6 = sheet2.GetRow(20); + IRow R7 = sheet2.GetRow(21); + + IRow r1 = sheet.CreateRow(n); + IRow r2 = sheet.CreateRow(n + 1); + IRow r3 = sheet.CreateRow(n + 2); + IRow r4 = sheet.CreateRow(n + 3); + IRow r5 = sheet.CreateRow(n + 4); + IRow r6 = sheet.CreateRow(n + 5); + IRow r7 = sheet.CreateRow(n + 6); + + //第一行 + for (int i = 0; i < R1.LastCellNum; i++) + { + var test1 = ""; + if (R1.GetCell(i) != null) + { + test1 = R1.GetCell(i).ToString(); + } + ICell CR1 = r1.CreateCell(i); + CR1.SetCellValue(test1); + if (i == 4 || i == 5 || i == 6 || i == 7 || i == 8 || i == 9) + { + CR1.CellStyle = style; + } + else + { + CR1.CellStyle = style2; + } + } + + //第二行 + for (int i = 0; i < R2.LastCellNum; i++) + { + var test1 = ""; + if (R2.GetCell(i) != null) + { + test1 = R2.GetCell(i).ToString(); + } + ICell CR1 = r2.CreateCell(i); + CR1.SetCellValue(test1); + if (i == 4 || i == 5 || i == 6 || i == 7 || i == 8 || i == 9) + { + CR1.CellStyle = style; + } + else + { + CR1.CellStyle = style2; + } + } + + //第三行 + for (int i = 0; i < R3.LastCellNum; i++) + { + var test1 = ""; + if (R3.GetCell(i) != null) + { + test1 = R3.GetCell(i).ToString(); + } + ICell CR1 = r3.CreateCell(i); + CR1.SetCellValue(test1); + if (i == 4 || i == 5 || i == 6 || i == 7 || i == 8 || i == 9) + { + CR1.CellStyle = style; + } + else + { + CR1.CellStyle = style2; + } + } + + //第四行 + for (int i = 0; i < R4.LastCellNum; i++) + { + var test1 = ""; + if (R4.GetCell(i) != null) + { + test1 = R4.GetCell(i).ToString(); + } + ICell CR1 = r4.CreateCell(i); + CR1.SetCellValue(test1); + CR1.CellStyle = style2; + } + + //第五行 + for (int i = 0; i < R5.LastCellNum; i++) + { + var test1 = ""; + if (R5.GetCell(i) != null) + { + test1 = R5.GetCell(i).ToString(); + } + ICell CR1 = r5.CreateCell(i); + CR1.SetCellValue(test1); + if (i >= 4) + { + CR1.CellStyle = style2; + } + } + + //第六行 + for (int i = 0; i < R6.LastCellNum; i++) + { + var test1 = ""; + if (R6.GetCell(i) != null) + { + test1 = R6.GetCell(i).ToString(); + } + ICell CR1 = r6.CreateCell(i); + CR1.SetCellValue(test1); + if (i >= 4) + { + CR1.CellStyle = style2; + } + } + + //第七行 + for (int i = 0; i < R7.LastCellNum; i++) + { + var test1 = ""; + if (R7.GetCell(i) != null) + { + test1 = R7.GetCell(i).ToString(); + } + ICell CR1 = r7.CreateCell(i); + CR1.SetCellValue(test1); + if (i >= 4) + { + CR1.CellStyle = style2; + } + } + + //合并单元格 + for (int i = 0; i < 7; i++) + { + // 合并单元格的起始行、结束行、起始列和结束列 + int firstRow = n + i; // 比如第一行 + int lastRow = n + i; // 合并到第三行(0-based index) + int firstCol = 4; // 比如第一列 + int firstCol2 = 7; // 比如第一列 + int firstCol3 = 0; // 比如第一列 + int lastCol = 5; // 合并到第三列(0-based index) + int lastCol2 = 9; // 合并到第三列(0-based index) + int lastCol3 = 3; // 合并到第三列(0-based index) + // 创建CellRangeAddress对象 + CellRangeAddress cellRangeAddress = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol); + CellRangeAddress cellRangeAddress2 = new CellRangeAddress(firstRow, lastRow, firstCol2, lastCol2); + CellRangeAddress cellRangeAddress3 = new CellRangeAddress(firstRow, lastRow, firstCol3, lastCol3); + // 合并单元格 + sheet.AddMergedRegion(cellRangeAddress); + sheet.AddMergedRegion(cellRangeAddress2); + sheet.AddMergedRegion(cellRangeAddress3); + } + + #endregion + + #region Excel代码2 + + string folderPath = Path.GetDirectoryName(outputFilePath); + if (!Directory.Exists(folderPath)) + { + Directory.CreateDirectory(folderPath); + } + FileStream exportFile = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); + workbook.Write(exportFile); + exportFile.Close(); + + #endregion + + } + + public static string ToChineseNumber(decimal number, Kingdee.BOS.Context Context) + { + //Select top 1 dbo.ConvertAmountToChineseWords(12345.14) as 'PriceText' From T_SAL_ORDER + string sql = string.Format(@"/*dialect*/Select top 1 dbo.ConvertAmountToChineseWords({0}) as 'PriceText' From T_SAL_ORDER", number); + var list = DBUtils.ExecuteDynamicObject(Context, sql); + return list[0]["PriceText"].ToString(); + } + } +} diff --git a/YSZKDZGongNeng_MX/YourDataPlugIn2.cs b/YSZKDZGongNeng_MX/YourDataPlugIn2.cs new file mode 100644 index 0000000..1a9cbbb --- /dev/null +++ b/YSZKDZGongNeng_MX/YourDataPlugIn2.cs @@ -0,0 +1,115 @@ +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.DynamicForm; +using Kingdee.BOS.Core.Report.PlugIn; +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.App.Data; + +namespace Pilot.Report.Exploitation.AccountsReceivable +{ + /// + /// 【表单插件】明细版-确认按钮 + /// + [Description("【表单插件】明细版-确认按钮-添加数据库"), HotUpdate] + public class YourDataPlugIn2: AbstractSysReportPlugIn + { + public override void BarItemClick(BarItemClickEventArgs e) + { + base.BarItemClick(e); + // 判断 应收对账单【明细版】确认生成单据按钮 + if (e.BarItemKey == "Test_Button_2") + { + + #region 应收账款对账单数据添加 + + var reportModel = this.SysReportModel; + + //单据头 + var rptTitles = reportModel.ReportTitles; + string fClient = rptTitles.FirstOrDefault(a => a.TitleKey == "FClient").TitleValue.ToString(); + string fDate = rptTitles.FirstOrDefault(a => a.TitleKey == "FDate").TitleValue.ToString(); + int creatorId = Convert.ToInt32(this.Context.UserId); + DateTime fDate2 = DateTime.Now; + //单据体 + var list = reportModel.DataSource.Rows; + + string sqlKH = string.Format(@"/*dialect*/Select FCUSTID From T_BD_CUSTOMER_L Where FNAME = '{0}'", fClient); + + var sqlKHList = DBUtils.ExecuteDynamicObject(Context, sqlKH); + + int fClientId = Convert.ToInt32(sqlKHList[0]["FCUSTID"]); + + string sqlTest = string.Format(@"/*dialect*/Select * From MBBA_t_Cust100006 Where FClient = '{0}' AND Month(FDATE) = Month('{1}')", fClientId, fDate); + + var sqlTestList = DBUtils.ExecuteDynamicObject(Context, sqlTest); + + if (sqlTestList.Count() == 0) + { + decimal YFHpriceSum = 0; + + for (var i = 0; i < list.Count; i++) + { + if (list[i]["Number"].ToString() == "合计") + { + YFHpriceSum = Math.Round(Convert.ToDecimal(list[i]["ShippedDebt"]), 2); + } + } + + string sqlSelect = string.Format(@"/*dialect*/Select top 1 FId,FBillNo From MBBA_t_Cust100006 Order By FID DESC"); + + var sqlSelectList = DBUtils.ExecuteDynamicObject(Context, sqlSelect); + + int FId = 1; + string FBillNo = "YSDZ0001"; + string FBillNoSplit = ""; + + if (sqlSelectList.Count > 0) + { + FId = sqlSelectList[0]["FId"].Long2Int(); + FId = FId + 1; + FBillNoSplit = sqlSelectList[0]["FBillNo"].ToString(); + int n = Convert.ToInt32(FBillNoSplit.Split('Z')[1]); + if (n < 1000) + { + FBillNo = "YSDZ" + "0" + (n + 1); + } + else if (n < 100) + { + FBillNo = "YSDZ" + "00" + (n + 1); + } + else if (n < 10) + { + FBillNo = "YSDZ" + "000" + (n + 1); + } + } + + string sql = string.Format(@"Insert into MBBA_t_Cust100006 Values('{5}','{6}','A','{3}','{4}','',null,'{0}','{1}','{2}')", + fClientId, fDate, YFHpriceSum, creatorId, fDate2, FId, FBillNo); + + int num = DBUtils.Execute(Context, sql); + + if (num > 0) + { + this.View.ShowMessage("应收账款对账单生成完毕,已存储数据库!"); + } + else + { + this.View.ShowErrMessage("数据添加失败!"); + } + } + else + { + this.View.ShowErrMessage("数据添加失败,已存在相同客户相同期间的对账单!"); + } + + #endregion + + } + } + } +} diff --git a/bin/Debug/GZ_LTHReportForms.dll b/bin/Debug/GZ_LTHReportForms.dll index e139cc3da14de8252222d3e5aaf5250d4a9c569a..ea1aa6a4874cd7f30dd6685767245e2cefc47238 100644 GIT binary patch literal 108032 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 literal 51200 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≀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 QUB`)Kx3fJQP`&DZ0r9!<2LJ#7 diff --git a/派诺报表SQL文件/应收对账表(明细创建).sql b/派诺报表SQL文件/应收对账表(明细创建).sql new file mode 100644 index 0000000..41bbb09 --- /dev/null +++ b/派诺报表SQL文件/应收对账表(明细创建).sql @@ -0,0 +1,41 @@ +CREATE PROCEDURE UpdateYSDZBMX_GZTH +AS +BEGIN +--ֵ˰Ʊѯ +SELECT B.CONTRACTNUMBER AS '',SUM(A.FAFTERTOTALTAX) AS '˰ϼƱλ',A.FDATE AS 'רƱ' +INTO #TEMP1 +FROM T_IV_SALESIC A +INNER JOIN YingShouZhanKuanMX B ON A.F_PaperNumber = B.CONTRACTNUMBER +WHERE A.FDOCUMENTSTATUS = 'C' +AND A.FBillTypeID = '50ea4e69b6144f69961d2e9b44820929' +GROUP BY B.CONTRACTNUMBER,A.FDATE + +--Ʊѯ +SELECT B.CONTRACTNUMBER AS '',SUM(A.FAFTERTOTALTAX) AS '˰ϼƱλ',A.FDATE AS 'Ʊ' +INTO #TEMP2 +FROM T_IV_SALESIC A +INNER JOIN YingShouZhanKuanMX B ON A.F_PaperNumber = B.CONTRACTNUMBER +WHERE A.FDOCUMENTSTATUS = 'C' +AND A.FBillTypeID = '1cab58bc33d24e27826be02249f4edac' +GROUP BY B.CONTRACTNUMBER,A.FDATE + +--ƱƱڣƱƱ +UPDATE A +SET A.PPBillingDate = B.[Ʊ],A.PPBillingAmount = A.PPBillingAmount + B.˰ϼƱλ +FROM YingShouZhanKuanMX A +INNER JOIN #TEMP2 B ON B.[] = A.CONTRACTNUMBER + +--רƱƱڣרƱƱ +update A +SET A.ZPBillingDate = B.[רƱ],A.ZPBillingAmount = A.ZPBillingAmount + B.˰ϼƱλ +FROM YingShouZhanKuanMX A +INNER JOIN #TEMP1 B ON B.[] = A.CONTRACTNUMBER +END; + +--¿ƱƱ+רƱ +update YingShouZhanKuanMX +SET BillingAmount = PPBillingAmount + ZPBillingAmount + + + + diff --git a/派诺报表SQL文件/应收对账表(明细创建SQL).sql b/派诺报表SQL文件/应收对账表(明细创建SQL).sql new file mode 100644 index 0000000..4d6a60e --- /dev/null +++ b/派诺报表SQL文件/应收对账表(明细创建SQL).sql @@ -0,0 +1,31 @@ +CREATE TABLE YingShouZhanKuanMX ( + [DATE] NVARCHAR(3000), -- ǩ + CONTRACTNUMBER NVARCHAR(3000), -- + ProjectName NVARCHAR(3000), -- Ŀ + SizeModel NVARCHAR(3000), -- ͺ + FQty DECIMAL(23, 10), -- /̨ + FTaxPrice DECIMAL(23, 10), -- + FAllAmount DECIMAL(23, 10), -- ˰ϼ + OrderAmount DECIMAL(23, 10), -- + ShipmentsDate NVARCHAR(3000), -- + ShipmentsNum DECIMAL(23, 10), -- + ShipmentsAmount DECIMAL(23, 10), -- + ReturnDate NVARCHAR(3000), -- ˻ + ReturnNum DECIMAL(23, 10), -- ˻ + ReturnAmount DECIMAL(23, 10), -- ˻ + ZPBillingDate NVARCHAR(3000), -- רƱƱ + ZPBillingAmount DECIMAL(23, 10), -- רƱƱ + PPBillingDate NVARCHAR(3000), --ƱƱ + PPBillingAmount DECIMAL(23, 10), -- ƱƱ + BillingAmount DECIMAL(23, 10), -- Ʊ + PaymentDate NVARCHAR(3000), -- ؿ + PaymentAmount DECIMAL(23, 10), -- ؿ + ShippedDebt DECIMAL(23, 10), -- ѳǷ + InvoicedDebt DECIMAL(23, 10), -- ѿƱǷ + OwedTickets DECIMAL(23, 10), -- ǷƱ + IsEnded NVARCHAR(3000), -- Ƿ + Remark NVARCHAR(3000) -- ע +); + + +DROP TABLE YingShouZhanKuanMX \ No newline at end of file diff --git a/派诺报表SQL文件/应收对账表(简易).sql b/派诺报表SQL文件/应收对账表(简易).sql new file mode 100644 index 0000000..219587f --- /dev/null +++ b/派诺报表SQL文件/应收对账表(简易).sql @@ -0,0 +1,42 @@ +ALTER PROCEDURE UpdateYSDZBJY_GZTH +AS +BEGIN +--ֵ˰Ʊѯ +SELECT B.CONTRACTNUMBER AS '',SUM(A.FAFTERTOTALTAX) AS '˰ϼƱλ',A.FDATE AS 'רƱ' +INTO #TEMP1 +FROM T_IV_SALESIC A +INNER JOIN YingShouZhanKuanJY B ON A.F_PaperNumber = B.CONTRACTNUMBER +WHERE A.FDOCUMENTSTATUS = 'C' +AND A.FBillTypeID = '50ea4e69b6144f69961d2e9b44820929' +GROUP BY B.CONTRACTNUMBER,A.FDATE + +--Ʊѯ +SELECT B.CONTRACTNUMBER AS '',SUM(A.FAFTERTOTALTAX) AS '˰ϼƱλ',A.FDATE AS 'Ʊ' +INTO #TEMP2 +FROM T_IV_SALESIC A +INNER JOIN YingShouZhanKuanJY B ON A.F_PaperNumber = B.CONTRACTNUMBER +WHERE A.FDOCUMENTSTATUS = 'C' +AND A.FBillTypeID = '1cab58bc33d24e27826be02249f4edac' +GROUP BY B.CONTRACTNUMBER,A.FDATE + +--ƱƱڣƱƱ +UPDATE A +SET A.PPBillingDate = B.[Ʊ],A.PPBillingAmount = A.PPBillingAmount + B.˰ϼƱλ +FROM YingShouZhanKuanJY A +INNER JOIN #TEMP2 B ON B.[] = A.CONTRACTNUMBER + +--רƱƱڣרƱƱ +update A +SET A.ZPBillingDate = B.[רƱ],A.ZPBillingAmount = A.ZPBillingAmount + B.˰ϼƱλ +FROM YingShouZhanKuanJY A +INNER JOIN #TEMP1 B ON B.[] = A.CONTRACTNUMBER +END; + +--¿ƱƱ+רƱ +update YingShouZhanKuanJY +SET FALLAmountFor = PPFALLAmountFor + ZPFALLAmountFor + + + + + diff --git a/派诺报表SQL文件/应收对账表(简易)更新数据.sql b/派诺报表SQL文件/应收对账表(简易)更新数据.sql new file mode 100644 index 0000000..a80e1d4 --- /dev/null +++ b/派诺报表SQL文件/应收对账表(简易)更新数据.sql @@ -0,0 +1,42 @@ +CREATE PROCEDURE UpdateYSDZBJY_GZTH +AS +BEGIN +--ֵ˰Ʊѯ +SELECT B.CONTRACTNUMBER AS '',SUM(A.FAFTERTOTALTAX) AS '˰ϼƱλ',A.FDATE AS 'רƱ' +INTO #TEMP1 +FROM T_IV_SALESIC A +INNER JOIN YingShouZhanKuanJY B ON A.F_PaperNumber = B.CONTRACTNUMBER +WHERE A.FDOCUMENTSTATUS = 'C' +AND A.FBillTypeID = '50ea4e69b6144f69961d2e9b44820929' +GROUP BY B.CONTRACTNUMBER,A.FDATE + +--Ʊѯ +SELECT B.CONTRACTNUMBER AS '',SUM(A.FAFTERTOTALTAX) AS '˰ϼƱλ',A.FDATE AS 'Ʊ' +INTO #TEMP2 +FROM T_IV_SALESIC A +INNER JOIN YingShouZhanKuanJY B ON A.F_PaperNumber = B.CONTRACTNUMBER +WHERE A.FDOCUMENTSTATUS = 'C' +AND A.FBillTypeID = '1cab58bc33d24e27826be02249f4edac' +GROUP BY B.CONTRACTNUMBER,A.FDATE + +--ƱƱڣƱƱ +UPDATE A +SET A.PPBillingDate = B.[Ʊ],A.PPFALLAmountFor = A.PPFALLAmountFor + B.˰ϼƱλ +FROM YingShouZhanKuanJY A +INNER JOIN #TEMP2 B ON B.[] = A.CONTRACTNUMBER + +--רƱƱڣרƱƱ +update A +SET A.ZPBillingDate = B.[רƱ],A.ZPFALLAmountFor = A.ZPFALLAmountFor + B.˰ϼƱλ +FROM YingShouZhanKuanJY A +INNER JOIN #TEMP1 B ON B.[] = A.CONTRACTNUMBER +END; + +--¿ƱƱ+רƱ +update YingShouZhanKuanJY +SET FALLAmountFor = PPFALLAmountFor + ZPFALLAmountFor + + + + + \ No newline at end of file diff --git a/派诺报表SQL文件/应收对账表(简易创建).sql b/派诺报表SQL文件/应收对账表(简易创建).sql new file mode 100644 index 0000000..cd831ec --- /dev/null +++ b/派诺报表SQL文件/应收对账表(简易创建).sql @@ -0,0 +1,22 @@ +CREATE TABLE YingShouZhanKuanJY( + Number nvarchar(MAX),-- + Date VARCHAR(2000), -- ǩ + ContractNumber VARCHAR(2000), -- + ProjectName VARCHAR(2000), -- Ŀ + OrderAmount DECIMAL(23, 10), -- + ShipmentsAmount DECIMAL(23, 10), -- + FBillAllAmount DECIMAL(23, 10), -- ˻ + PPBillingDate VARCHAR(2000), --ƱƱʱ + PPFALLAmountFor DECIMAL(23, 10), -- ƱƱ + ZPBillingDate VARCHAR(2000), --רƱƱʱ + ZPFALLAmountFor DECIMAL(23, 10), -- רƱƱ + FALLAmountFor DECIMAL(23, 10), -- Ʊ + PaymentAmount DECIMAL(23, 10), -- ؿ + ShippedDebt DECIMAL(23, 10), -- ѳǷ + InvoicedDebt DECIMAL(23, 10), -- ѿƱǷ + OwedTickets VARCHAR(2000), -- ǷƱ + IsEnded VARCHAR(2000), -- Ƿ + Remark VARCHAR(2000) -- ע +); + +DROP TABLE YingShouZhanKuanJY; \ No newline at end of file diff --git a/派诺报表SQL文件/订单未发货明细表创建表单sql.sql b/派诺报表SQL文件/订单未发货明细表创建表单sql.sql index 7600948..62668a6 100644 --- a/派诺报表SQL文件/订单未发货明细表创建表单sql.sql +++ b/派诺报表SQL文件/订单未发货明细表创建表单sql.sql @@ -13,6 +13,7 @@ CREATE TABLE GZ_DDWFHMX_TH ( ͺ VARCHAR(5000), DECIMAL(23, 10), ˰ DECIMAL(23, 10), + ˰ϼ DECIMAL(23, 10), ѷ DECIMAL(23, 10), ѷ DECIMAL(23, 10), δ DECIMAL(23, 10), @@ -21,4 +22,6 @@ CREATE TABLE GZ_DDWFHMX_TH ( VARCHAR(5000) ); ---DROP TABLE GZ_DDWFHMX_TH \ No newline at end of file +--DROP TABLE GZ_DDWFHMX_TH + +SELECT SUM([˰ϼ]) FROM GZ_DDWFHMX_TH \ No newline at end of file diff --git a/派诺报表SQL文件/订单未发货明细表插入数据SQL.sql b/派诺报表SQL文件/订单未发货明细表插入数据SQL.sql index 3876807..dbaa455 100644 --- a/派诺报表SQL文件/订单未发货明细表插入数据SQL.sql +++ b/派诺报表SQL文件/订单未发货明细表插入数据SQL.sql @@ -1,91 +1,86 @@ -ALTER PROCEDURE GZTH_DDWFHMXB - @FSDate nvarchar(1000), - @FEDate nvarchar(1000), - @FSaleOrgId nvarchar(1000) -AS -BEGIN - DECLARE @ConvertedDate DATE; - - SET @ConvertedDate = CONVERT(DATE, @FEDate, 120); - -- ϼһ - SET @ConvertedDate = DATEADD(DAY, 1, @ConvertedDate); - - TRUNCATE TABLE GZ_DDWFHMX_TH - - SELECT - A.FID AS FID, - AE.FENTRYID AS FENTRYID, - A.FApproveDate AS '', - B.FNAME AS 'Ƶ', - CASE WHEN ISNULL(E.FNAME,'') = '' THEN ACG. - ELSE ACE. END AS '', - CASE WHEN ISNULL(E.FNAME,'') = '' THEN G.FNAME - ELSE E.FNAME END AS 'ҵԱ', - A.F_contractnumber AS 'ͬ', - F.FNAME AS 'ͻ', - H.FNAME AS 'Ŀ', - WL.FNUMBER AS 'ϱ', - WL_L.FNAME AS '', - WL_L.FSpecification AS 'ͺ', - AE.FQTY AS '', - AE_F.FTaxPrice AS '˰', - HT_L.FDATAVALUE AS 'ͬ', - A.F_Deliveryconditions AS '' - INTO #TEMP1 - FROM T_SAL_ORDER A - INNER JOIN T_SEC_USER B ON A.FCreatorId = B.FUSERID --û - INNER JOIN V_BD_SALESMAN_L G ON G.FID = A.FSALERID -- Ա۶ - LEFT JOIN T_PerformanceSharing C ON C.FSOURCEBILLNO = A.FBILLNO AND C.FDOCUMENTSTATUS = 'C' --ҵ̯ - LEFT JOIN T_PerformanceSharingEntry D ON C.FID=D.FID --ҵ̯ϸ - LEFT JOIN V_BD_SALESMAN_L E ON E.fid= D.FSaleId --Ա,ҵ̯ - LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACE ON ACE.=E.FNAME --ҵ̯Ա - LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACG ON ACG.=G.FNAME --۶ҵԱ - INNER JOIN T_BD_CUSTOMER_L F ON F.FCUSTID = A.FCustId --ͻ - INNER JOIN T_BAS_PREBDONE_L H ON H.FID = A.F_projectname --ĿƱ - INNER JOIN T_SAL_ORDERENTRY AE ON AE.FID = A.FID --۶ϸ - INNER JOIN T_BD_MATERIAL WL ON WL.FMATERIALID = AE.FMaterialId --ϱ - INNER JOIN T_BD_MATERIAL_L WL_L ON WL_L.FMATERIALID = WL.FMATERIALID --_L - INNER JOIN T_SAL_ORDERENTRY_F AE_F ON AE_F.FENTRYID = AE.FENTRYID --۶ϸ- - INNER JOIN T_BAS_ASSISTANTDATAENTRY_L HT_L On A.F_Ordercategory = HT_L.FENTRYID --ͬ͸_L - WHERE A.FDocumentStatus = 'C' - AND (ISNULL(@FSaleOrgId,'') = '' OR A.FSaleOrgId = @FSaleOrgId) - AND (ISNULL(@FSDate,'') = '' OR A.FAPPROVEDATE >= @FSDate) - AND (ISNULL(@FEDate,'') = '' OR A.FAPPROVEDATE < @ConvertedDate) - - INSERT INTO GZ_DDWFHMX_TH([FId],[FENTRYID],[],[Ƶ],[],[ҵԱ],[ͬ],[ͻ],[Ŀ], - [ϱ],[],[ͺ],[],[˰],[ͬ],[]) - SELECT * FROM #TEMP1 - - - SELECT - E.FID AS FID, - D.FENTRYID AS FENTRYID, - SUM(B.FQTY) AS 'ѷ', - SUM(BF.FAllAmount_LC) AS 'ѷ' - INTO #TEMP2 - FROM T_SAL_DELIVERYNOTICE A - INNER JOIN T_SAL_DELIVERYNOTICEENTRY B ON A.FID = B.FID - INNER JOIN T_SAL_DELIVERYNOTICEENTRY_F BF ON BF.FENTRYID = B.FENTRYID - INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK C ON B.FENTRYID = C.FENTRYID AND C.FSTABLENAME = 'T_SAL_ORDERENTRY' - INNEr JOIN T_SAL_ORDERENTRY D ON C.FSID = D.FENTRYID - INNER JOIN T_SAL_ORDER E ON D.FID = E.FID - WHERE - A.FDOCUMENTSTATUS = 'C' - AND (ISNULL(@FSaleOrgId,'') = '' OR E.FSaleOrgId = @FSaleOrgId) - AND(ISNULL(@FSDate,'') = '' OR E.FAPPROVEDATE >= @FSDate) - AND (ISNULL(@FEDate,'') = '' OR E.FAPPROVEDATE <= @ConvertedDate) - GROUP BY E.FID,D.FENTRYID - - UPDATE A - SET A.[ѷ] = B.[ѷ],A.[ѷ] = B.[ѷ] - FROM GZ_DDWFHMX_TH A - INNER JOIN #TEMP2 B ON A.FId = B.FID AND A.FENTRYID = B.FENTRYID - - UPDATE A - SET A.[δ] = ISNULL(A.[],0) - ISNULL(A.[ѷ],0),A.[δ] = B.FALLAMOUNT_LC - ISNULL(A.[ѷ],0) - FROM GZ_DDWFHMX_TH A - INNER JOIN T_SAL_ORDERENTRY_F B ON A.FENTRYID = B.FENTRYID - - DROP TABLE #TEMP1,#TEMP2 -END; - +CREATE PROCEDURE GZTH_DDWFHMXB + @FSDate nvarchar(1000), + @FEDate nvarchar(1000), + @FSaleOrgId nvarchar(1000) +AS +BEGIN + DECLARE @ConvertedDate DATE; + + SET @ConvertedDate = CONVERT(DATE, @FEDate, 120); + -- ϼһ + SET @ConvertedDate = DATEADD(DAY, 1, @ConvertedDate); + + TRUNCATE TABLE GZ_DDWFHMX_TH + + SELECT + A.FID AS FID, + AE.FENTRYID AS FENTRYID, + A.FApproveDate AS '', + B.FNAME AS 'Ƶ', + ACG. AS '', + G.FNAME AS 'ҵԱ', + A.F_contractnumber AS 'ͬ', + F.FNAME AS 'ͻ', + H.FNAME AS 'Ŀ', + WL.FNUMBER AS 'ϱ', + WL_L.FNAME AS '', + WL_L.FSpecification AS 'ͺ', + AE.FQTY AS '', + AE_F.FTaxPrice AS '˰', + AE_F.FALLAMOUNT_LC AS '˰ϼ', + HT_L.FDATAVALUE AS 'ͬ', + A.F_Deliveryconditions AS '' + INTO #TEMP1 + FROM T_SAL_ORDER A + INNER JOIN T_SEC_USER B ON A.FCreatorId = B.FUSERID --û + INNER JOIN V_BD_SALESMAN_L G ON G.FID = A.FSALERID -- Ա۶ + LEFT JOIN ERPTOHR.HYHRV3.dbo.v_erp_empinfo ACG ON ACG.=G.FNAME --۶ҵԱ + INNER JOIN T_BD_CUSTOMER_L F ON F.FCUSTID = A.FCustId --ͻ + INNER JOIN T_BAS_PREBDONE_L H ON H.FID = A.F_projectname --ĿƱ + INNER JOIN T_SAL_ORDERENTRY AE ON AE.FID = A.FID --۶ϸ + INNER JOIN T_BD_MATERIAL WL ON WL.FMATERIALID = AE.FMaterialId --ϱ + INNER JOIN T_BD_MATERIAL_L WL_L ON WL_L.FMATERIALID = WL.FMATERIALID --_L + INNER JOIN T_SAL_ORDERENTRY_F AE_F ON AE_F.FENTRYID = AE.FENTRYID --۶ϸ- + INNER JOIN T_BAS_ASSISTANTDATAENTRY_L HT_L On A.F_Ordercategory = HT_L.FENTRYID --ͬ͸_L + WHERE A.FDocumentStatus = 'C' + AND (ISNULL(@FSaleOrgId,'') = '' OR A.FSaleOrgId = @FSaleOrgId) + AND (ISNULL(@FSDate,'') = '' OR A.FAPPROVEDATE >= @FSDate) + AND (ISNULL(@FEDate,'') = '' OR A.FAPPROVEDATE < @ConvertedDate) + + INSERT INTO GZ_DDWFHMX_TH([FId],[FENTRYID],[],[Ƶ],[],[ҵԱ],[ͬ],[ͻ],[Ŀ], + [ϱ],[],[ͺ],[],[˰],[˰ϼ],[ͬ],[]) + SELECT * FROM #TEMP1 + + + SELECT + E.FID AS FID, + D.FENTRYID AS FENTRYID, + SUM(B.FQTY) AS 'ѷ', + SUM(BF.FAllAmount_LC) AS 'ѷ' + INTO #TEMP2 + FROM T_SAL_DELIVERYNOTICE A + INNER JOIN T_SAL_DELIVERYNOTICEENTRY B ON A.FID = B.FID + INNER JOIN T_SAL_DELIVERYNOTICEENTRY_F BF ON BF.FENTRYID = B.FENTRYID + INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK C ON B.FENTRYID = C.FENTRYID AND C.FSTABLENAME = 'T_SAL_ORDERENTRY' + INNEr JOIN T_SAL_ORDERENTRY D ON C.FSID = D.FENTRYID + INNER JOIN T_SAL_ORDER E ON D.FID = E.FID + WHERE + A.FDOCUMENTSTATUS = 'C' + AND (ISNULL(@FSaleOrgId,'') = '' OR E.FSaleOrgId = @FSaleOrgId) + AND(ISNULL(@FSDate,'') = '' OR E.FAPPROVEDATE >= @FSDate) + AND (ISNULL(@FEDate,'') = '' OR E.FAPPROVEDATE <= @ConvertedDate) + GROUP BY E.FID,D.FENTRYID + + UPDATE A + SET A.[ѷ] = B.[ѷ],A.[ѷ] = B.[ѷ] + FROM GZ_DDWFHMX_TH A + INNER JOIN #TEMP2 B ON A.FId = B.FID AND A.FENTRYID = B.FENTRYID + + UPDATE A + SET A.[δ] = ISNULL(A.[],0) - ISNULL(A.[ѷ],0),A.[δ] = B.FALLAMOUNT_LC - ISNULL(A.[ѷ],0) + FROM GZ_DDWFHMX_TH A + INNER JOIN T_SAL_ORDERENTRY_F B ON A.FENTRYID = B.FENTRYID + + DROP TABLE #TEMP1,#TEMP2 +END; + \ No newline at end of file