This commit is contained in:
李狗蛋 2025-06-03 13:44:45 +08:00
parent c9a8a895d3
commit 470016f428
20 changed files with 2428 additions and 95 deletions

View File

@ -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<SummaryField> 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));

View File

@ -46,6 +46,18 @@
<Reference Include="Kingdee.BOS.DataEntity">
<HintPath>..\..\GZ_LTHYJZZHTH\bin\Debug\Kingdee.BOS.DataEntity.dll</HintPath>
</Reference>
<Reference Include="NPOI">
<HintPath>..\..\派诺报表-裴豪\派诺报表\代码\Piolot_RepotForm\Pilot.Report.Exploitation\bin\Debug\NPOI.dll</HintPath>
</Reference>
<Reference Include="NPOI.OOXML">
<HintPath>..\..\派诺报表-裴豪\派诺报表\代码\Piolot_RepotForm\Pilot.Report.Exploitation\bin\Debug\NPOI.OOXML.dll</HintPath>
</Reference>
<Reference Include="NPOI.OpenXml4Net">
<HintPath>..\..\派诺报表-裴豪\派诺报表\代码\Piolot_RepotForm\Pilot.Report.Exploitation\bin\Debug\NPOI.OpenXml4Net.dll</HintPath>
</Reference>
<Reference Include="NPOI.OpenXmlFormats">
<HintPath>..\..\派诺报表-裴豪\派诺报表\代码\Piolot_RepotForm\Pilot.Report.Exploitation\bin\Debug\NPOI.OpenXmlFormats.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
@ -65,6 +77,15 @@
<Compile Include="YingShouBaoBiao\YingShouQDNF.cs" />
<Compile Include="YingShouBaoBiao\YingShouSBU.cs" />
<Compile Include="YingShouBaoBiao\YingShouQKBiao.cs" />
<Compile Include="YSKDZGongNeng_JY\LiteVersionPlugIn.cs" />
<Compile Include="YSKDZGongNeng_JY\ProgramNumber.cs" />
<Compile Include="YSKDZGongNeng_JY\YourDataPlugIn.cs" />
<Compile Include="YSZKDZBaoBiao\AccountsReceivableFiter.cs" />
<Compile Include="YSZKDZBaoBiao\AccountsReceivablePlugIn.cs" />
<Compile Include="YSZKDZBaoBiao\AccountsReceivableReport.cs" />
<Compile Include="YSZKDZBaoBiao\AccountsReceivableReport2.cs" />
<Compile Include="YSZKDZGongNeng_MX\LiteVersionPlugIn2.cs" />
<Compile Include="YSZKDZGongNeng_MX\YourDataPlugIn2.cs" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

View File

@ -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
{
/// <summary>
/// 【表单插件】简易版-按钮触发
/// </summary>
[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);
}
}
/// <summary>
/// 赋值EXCEL
/// </summary>
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();
}
}
}

View File

@ -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;
}
}
}

View File

@ -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
{
/// <summary>
/// 【表单插件】简易版-确认按钮
/// </summary>
[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
}
}
}
}

View File

@ -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);
}
}
}

View File

@ -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;
}
}
}
}

View File

@ -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
{
/// <summary>
/// 应收账款对账报表【简易版】
/// </summary>
[Description("【服务插件】应收账款对账报表【简易版】取数"), HotUpdate]
public class AccountsReceivableReport: SysReportBaseService
{
/// <summary>
/// 初始化
/// </summary>
public override void Initialize()
{
base.Initialize();
this.ReportProperty.ReportName = new LocaleValue("应收账款对账单【简易版】", base.Context.UserLocale.LCID);
this.ReportProperty.IsUIDesignerColumns = false;
// 简单账表类型:普通、树形、分页
this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL;
this.IsCreateTempTableByPlugin = true;
//
this.IsCreateTempTableByPlugin = true;
//
this.ReportProperty.IsGroupSummary = true;
//
this.ReportProperty.SimpleAllCols = false;
// 单据主键两行FID相同则为同一单的两条分录单据编号可以不重复显示
this.ReportProperty.PrimaryKeyFieldName = "FID";
//
this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true;
// 设置精度控制
var list = new List<DecimalControlField>
{
new DecimalControlField("FDECIMALS", "OrigInvoiceAmount"),
new DecimalControlField("FDECIMALS", "ExchangeRate"),
new DecimalControlField("FDECIMALS", "InvoiceAmountTHB"),
new DecimalControlField("FDECIMALS", "MonthEndExRate"),
new DecimalControlField("FDECIMALS", "RevaluationAountInTHB"),
new DecimalControlField("FDECIMALS", "UnrealizedGainLoss"),
};
this.ReportProperty.DecimalControlFieldList = list;
}
/// <summary>
/// 报表列表头
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public override ReportHeader GetReportHeaders(IRptParams filter)
{
base.GetReportHeaders(filter);
ReportHeader header = new ReportHeader();
header.AddChild("Number", new LocaleValue("序号"), SqlStorageType.Sqlvarchar);
header.AddChild("DATE", new LocaleValue("签订日期"), SqlStorageType.SqlDatetime);
header.AddChild("CONTRACTNUMBER", new LocaleValue("订单号"), SqlStorageType.Sqlvarchar);
header.AddChild("ProjectName", new LocaleValue("项目名称"), SqlStorageType.Sqlvarchar);
header.AddChild("OrderAmount", new LocaleValue("订单金额"), SqlStorageType.SqlDecimal);
header.AddChild("ShipmentsAmount", new LocaleValue("发货金额"), SqlStorageType.SqlDecimal);
header.AddChild("FBillAllAmount", new LocaleValue("退货金额"), SqlStorageType.SqlDecimal);
header.AddChild("PPBillingDate", new LocaleValue("普票开票时间"), SqlStorageType.Sqlvarchar);
header.AddChild("PPFALLAmountFor", new LocaleValue("普票开票金额"), SqlStorageType.SqlDecimal);
header.AddChild("ZPBillingDate", new LocaleValue("专票开票时间"), SqlStorageType.Sqlvarchar);
header.AddChild("ZPFALLAmountFor", new LocaleValue("专票开票金额"), SqlStorageType.SqlDecimal);
header.AddChild("FALLAMOUNTFOR", new LocaleValue("开票金额"), SqlStorageType.SqlDecimal);
header.AddChild("PaymentAmount", new LocaleValue("回款金额"), SqlStorageType.SqlDecimal);
header.AddChild("ShippedDebt", new LocaleValue("已出货欠款"), SqlStorageType.SqlDecimal);
header.AddChild("InvoicedDebt", new LocaleValue("已开票欠款"), SqlStorageType.SqlDecimal);
header.AddChild("OwedTickets", new LocaleValue("欠票"), SqlStorageType.Sqlvarchar);
header.AddChild("IsEnded", new LocaleValue("是否已完结"), SqlStorageType.Sqlvarchar);
header.AddChild("Remark", new LocaleValue("备注"), SqlStorageType.Sqlvarchar);
foreach (var item in header.GetChilds())
{
item.Width = 160;
}
return header;
}
/// <summary>
/// 显示报表数据
/// </summary>
/// <param name="filter"></param>
/// <param name="tableName"></param>
public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
{
DynamicObject customFilter = filter.FilterParameter.CustomFilter;
// 客户
string fClient = customFilter["FClient_Id"]?.ToString();
// 工程项目名称
var fProjectList = (customFilter["FProject"] as DynamicObjectCollection)?.Select(n => (n["FProject"] as DynamicObject)["ID"].ToString()).ToList();
// 截止对账日期
var fDate = customFilter["FDate"]?.ToString();
//开始对账日期
var FSDate = customFilter["FSDate"]?.ToString();
// 订单状态
var fGROUP = customFilter["F_ALL_GROUP"]?.ToString();
//纸质合同号
var ZZHTH = customFilter["F_ZZHTH"].ToString();
//销售员
var XSYFID = (customFilter["F_XSY"] as DynamicObject)["Id"].ToString();
var fProject = fProjectList == null ? "" : (string.Join(",", fProjectList));
base.BuilderReportSqlAndTempTable(filter, tableName);
string sql = string.Format(@"/*dialect*/
Select * INTO #TABLEXYX From
(Select A.FID From View_Table_Temp2 A JOIN View_Table_Temp3 B
on A.FCONTRACTNUMBER=B.FCONTRACTNUMBER AND A.FCREATEDATE = B.FCREATEDATE
UNION ALL
Select * From View_Table_Temp1) W
Select
CAST(ROW_NUMBER() OVER (ORDER BY A.FDate DESC) as nvarchar(MAX)) AS 'Number',
A.FDate as 'DATE', --
A.F_CONTRACTNUMBER as 'CONTRACTNUMBER', --
ISNULL(H.FNAME,'') as 'ProjectName', --
ISNULL(AA.FBillAllAmount_LC,0) as 'OrderAmount', --
ISNULL(H2.FALLAMOUNT,0) as 'ShipmentsAmount', --
ISNULL(H3.FBillAllAmount,0) as 'FBillAllAmount', --退
ISNULL(H4.FALLAMOUNTFOR,0) as 'FALLAMOUNTFOR', --
ISNULL(A.F_AMOUNT,0) as 'PaymentAmount', --
ISNULL(H2.FALLAMOUNT,0)-ISNULL(H3.FBillAllAmount,0) -ISNULL(H6.FWRITTENOFFAMOUNTFOR,0) as 'ShippedDebt', --
ISNULL(H4.FALLAMOUNTFOR,0) -ISNULL(H6.FWRITTENOFFAMOUNTFOR,0) as 'InvoicedDebt', --
ISNULL((ISNULL(H2.FALLAMOUNT,0)-ISNULL(H3.FBillAllAmount,0) -0)-(ISNULL(H4.FALLAMOUNTFOR,0) -0),0) as 'OwedTickets', --
CASE WHEN (ISNULL(AA.FBillAllAmount,0)-ISNULL(H3.FBillAllAmount,0)) = ISNULL(H2.FALLAMOUNT,0)
AND (ISNULL(AA.FBillAllAmount,0)-ISNULL(H3.FBillAllAmount,0)) = ISNULL(H4.FALLAMOUNTFOR,0)
AND (ISNULL(AA.FBillAllAmount,0)-ISNULL(H3.FBillAllAmount,0)) = ISNULL(H5.FREALRECAMOUNTFOR,0)
THEN ''
ELSE ''
END as 'IsEnded', --
A.FNOTE as 'Remark' --
INTO #TEMPTABLE1 --
From
T_SAL_ORDER A
JOIN
T_SAL_ORDERFIN AA
on A.FID = AA.FID
LEFT JOIN
(Select q2.FNAME,q1.* From
T_BAS_PREBDONE q1
JOIN
T_BAS_PREBDONE_L q2
on q1.FID = q2.FID
Where q2.FLocaleID = 2052
AND q1.FDocumentStatus = 'C'
AND q1.FForbidStatus = 'A') H --1
on H.FID = A.F_projectname
LEFT JOIN
(SELECT W2.FSBILLID,SUM(W1.FALLAMOUNT) as 'FALLAMOUNT' FROM
(Select q2.FAllAmount,q2.FENTRYID From T_SAL_DELIVERYNOTICE q1
JOIN T_SAL_DELIVERYNOTICEENTRY_F q2
on q1.FID = q2.FID Where q1.FDocumentStatus = 'C'
AND q1.FCancelStatus = 'A') W1
JOIN T_SAL_DELIVERYNOTICEENTRY_LK W2 on W1.FENTRYID = W2.FENTRYID
Where W2.FSTABLENAME = 'T_SAL_ORDERENTRY' GROUP BY W2.FSBILLID) H2 --
on A.FID = H2.FSBILLID
LEFT JOIN
(SELECT A1.FSBILLID,SUM(A2.FRetNoticeQty*A3.FTaxPrice) as 'FBillAllAmount' FROM
(SELECT W2.FSBILLID,W1.FENTRYID FROM
(Select q1.* From
T_SAL_ORDERENTRY q1
JOIN
T_SAL_ORDER q2
on q1.FID = q2.FID
Where q2.FBusinessType = 'RETURNSO'
AND q2.FDocumentStatus = 'C') W1
JOIN T_SAL_ORDERENTRY_LK W2 on W1.FENTRYID = W2.FENTRYID) A1
JOIN T_SAL_ORDERENTRY_R A2 on A1.FENTRYID = A2.FENTRYID JOIN
T_SAL_ORDERENTRY_F A3 on A2.FENTRYID = A3.FENTRYID GROUP BY A1.FSBILLID) H3 --退
on A.FID = H3.FSBILLID
LEFT JOIN
(SELECT W2.FSBILLID,SUM(W1.FALLAMOUNTFOR) as 'FALLAMOUNTFOR' FROM
(Select B.FALLAMOUNTFOR,B.FENTRYID From T_AR_RECEIVABLE A
JOIN T_AR_RECEIVABLEENTRY B on A.FID = B.FID Where A.FDocumentStatus = 'C'
AND B.FORDERNUMBER !='' AND A.F_GeneralInvoice != 'Y') W1
JOIN T_AR_RECEIVABLEENTRY_LK W2 on W1.FENTRYID = W2.FENTRYID
Where W2.FSTABLENAME = 'T_SAL_ORDERENTRY' GROUP BY W2.FSBILLID) H4 --
on A.FID = H4.FSBILLID
LEFT JOIN
(Select q2.FSALEORDERNO,SUM(q1.FREALRECAMOUNTFOR) as 'FREALRECAMOUNTFOR' From T_AR_RECEIVEBILL q1
JOIN T_AR_RECEIVEBILLENTRY q2 on q1.FID = q2.FID Where q1.FDOCUMENTSTATUS = 'C'
AND q1.FCancelStatus = 'A' AND q2.FSALEORDERNO != '' GROUP BY q2.FSALEORDERNO) H5 --
on A.FBILLNO = H5.FSALEORDERNO
LEFT JOIN
(Select a1.FID,a1.F_CONTRACTNUMBER,SUM(a2.FWRITTENOFFAMOUNTFOR) as 'FWRITTENOFFAMOUNTFOR' From T_AR_RECEIVEBILL a1 JOIN T_AR_RECEIVEBILLENTRY a2 on a1.FID = a2.FID
WHere a1.F_CONTRACTNUMBER!='' GROUP BY a1.FID,a1.F_CONTRACTNUMBER) H6
on H6.F_CONTRACTNUMBER = A.F_CONTRACTNUMBER
Where A.FDocumentStatus = 'C' AND A.FBusinessType = 'NORMAL' AND A.FID in (Select * From #TABLEXYX)");
if (!string.IsNullOrEmpty(fClient) && fClient != "0")
{
sql += string.Format(@" AND A.FCustId in ({0})", fClient);
}
if (!string.IsNullOrEmpty(fProject))
{
sql += string.Format(@" AND A.F_projectname in ({0})", fProject);
}
if (!string.IsNullOrEmpty(fDate))
{
sql += string.Format(@" AND A.FAPPROVEDATE <= EOMONTH('{0}')", fDate);
}
if (!string.IsNullOrEmpty(FSDate))
{
sql += string.Format(@" AND A.FAPPROVEDATE >= EOMONTH('{0}')", FSDate);
}
if (!string.IsNullOrEmpty(ZZHTH))
{
sql += string.Format(@"AND A.F_contractnumber = '{0}'", ZZHTH);
}
if (!string.IsNullOrEmpty(XSYFID))
{
sql += string.Format(@"AND A.FSalerId = '{0}'",XSYFID);
}
sql += string.Format(@";");
sql += string.Format(@"/*dialect*/
Select * INTO #TEMPTABLE2 From #TEMPTABLE1
Where 1=1");
if (!string.IsNullOrEmpty(fGROUP) && fGROUP == "2")
{
sql += string.Format(@" AND IsEnded = '否'");
}
sql += string.Format(@";");
sql += string.Format(@"/*dialect*/
Select * INTO #TEMPTABLE3 From
#TEMPTABLE1");
sql += string.Format(@"/*dialect*/
--
TRUNCATE TABLE YingShouZhanKuanJY
INSERT INTO YingShouZhanKuanJY(Number,[Date],ContractNumber,ProjectName,OrderAmount,ShipmentsAmount,
FBillAllAmount,FALLAmountFor,PaymentAmount,ShippedDebt,InvoicedDebt,OwedTickets,IsEnded,Remark)
SELECT *
FROM #TEMPTABLE3");
sql += string.Format(@"/*dialect*/
EXEC UpdateYSDZBJY_GZTH");
sql += string.Format(@"/*dialect*/
Select
*,
ROW_NUMBER() OVER (ORDER BY Date DESC) AS FID,
ROW_NUMBER() OVER (ORDER BY Date DESC) AS FIDENTITYID
INTO {0}
From
YingShouZhanKuanJY
ORDER BY [ContractNumber]
", tableName);
DBUtils.Execute(this.Context, sql);
}
/// <summary>
/// 获取前端组件转换过滤条件
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public override ReportTitles GetReportTitles(IRptParams filter)
{
ReportTitles reportTitles = new ReportTitles();
DynamicObject customFilter = filter.FilterParameter.CustomFilter;
if (customFilter != null)
{
// 客户
var fClientList = (customFilter["FClient"] as DynamicObject)?["Name"]?.ToString();
// 工程项目名称
var fProjectList = (customFilter["FProject"] as DynamicObjectCollection)?.Select(n => (n["FProject"] as DynamicObject)["Name"].ToString()).ToList();
// 截止对账日期
var fDate = customFilter["FDate"]?.ToString();
//开始对账日期
var FSDate = customFilter["FSDate"]?.ToString();
// 订单状态
var fGROUP = customFilter["F_ALL_GROUP"]?.ToString();
//纸质合同号
var ZZHTH = customFilter["F_ZZHTH"]?.ToString();
//销售员
var XSYFID = (customFilter["F_XSY"] as DynamicObject)["Id"].ToString();
string fState = "";
if (fGROUP == "1")
{
fState = "全部订单";
}
if (fGROUP == "2")
{
fState = "未完结订单";
}
//这里是报表页面的标识
reportTitles.AddTitle("FState", fGROUP == null ? "" : fState);
reportTitles.AddTitle("FClient", fClientList == null ? "" : fClientList);
reportTitles.AddTitle("FDate", fDate == null ? "" : Convert.ToDateTime(fDate).ToString("yyyy-MM-dd"));
reportTitles.AddTitle("FSDate", fDate == null ? "" : Convert.ToDateTime(FSDate).ToString("yyyy-MM-dd"));
reportTitles.AddTitle("FProject", fProjectList == null ? "" : string.Join(",", fProjectList));
reportTitles.AddTitle("F_ZZHTH", ZZHTH == null ? "" : ZZHTH);
reportTitles.AddTitle("F_XSY", XSYFID == null ? "" : XSYFID);
}
return reportTitles;
}
//设计报表合计列
public override List<SummaryField> GetSummaryColumnInfo(IRptParams filter)
{
var result = base.GetSummaryColumnInfo(filter);
result.Add(new SummaryField("OrderAmount", BOSEnums.Enu_SummaryType.SUM));
result.Add(new SummaryField("ShipmentsAmount", BOSEnums.Enu_SummaryType.SUM));
result.Add(new SummaryField("FBillAllAmount", BOSEnums.Enu_SummaryType.SUM));
result.Add(new SummaryField("PPFALLAmountFor", BOSEnums.Enu_SummaryType.SUM));
result.Add(new SummaryField("ZPFALLAmountFor", BOSEnums.Enu_SummaryType.SUM));
result.Add(new SummaryField("FALLAMOUNTFOR", BOSEnums.Enu_SummaryType.SUM));
result.Add(new SummaryField("PaymentAmount", BOSEnums.Enu_SummaryType.SUM));
result.Add(new SummaryField("ShippedDebt", BOSEnums.Enu_SummaryType.SUM));
result.Add(new SummaryField("InvoicedDebt", BOSEnums.Enu_SummaryType.SUM));
return result;
}
}
}

View File

@ -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
{
/// <summary>
/// 应收账款对账报表【明细版】
/// </summary>
[Description("[服务插件] "), HotUpdate]
public class AccountsReceivableReport2 : SysReportBaseService
{
/// <summary>
/// 初始化
/// </summary>
public override void Initialize()
{
base.Initialize();
this.ReportProperty.ReportName = new LocaleValue("应收账款对账单【明细版】", base.Context.UserLocale.LCID);
this.ReportProperty.IsUIDesignerColumns = false;
// 简单账表类型:普通、树形、分页
this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL;
this.IsCreateTempTableByPlugin = true;
//
this.IsCreateTempTableByPlugin = true;
//
this.ReportProperty.IsGroupSummary = true;
//
this.ReportProperty.SimpleAllCols = false;
// 单据主键两行FID相同则为同一单的两条分录单据编号可以不重复显示
this.ReportProperty.PrimaryKeyFieldName = "FID";
//
this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true;
// 设置精度控制
var list = new List<DecimalControlField>
{
new DecimalControlField("FDECIMALS", "OrigInvoiceAmount"),
new DecimalControlField("FDECIMALS", "ExchangeRate"),
new DecimalControlField("FDECIMALS", "InvoiceAmountTHB"),
new DecimalControlField("FDECIMALS", "MonthEndExRate"),
new DecimalControlField("FDECIMALS", "RevaluationAountInTHB"),
new DecimalControlField("FDECIMALS", "UnrealizedGainLoss"),
};
this.ReportProperty.DecimalControlFieldList = list;
}
/// <summary>
/// 报表列表头
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public override ReportHeader GetReportHeaders(IRptParams filter)
{
base.GetReportHeaders(filter);
ReportHeader header = new ReportHeader();
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;
}
/// <summary>
/// 显示报表数据
/// </summary>
/// <param name="filter"></param>
/// <param name="tableName"></param>
public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
{
DynamicObject customFilter = filter.FilterParameter.CustomFilter;
// 客户
string fClient = customFilter["FClient_Id"]?.ToString();
// 工程项目名称
var fProjectList = (customFilter["FProject"] as DynamicObjectCollection)?.Select(n => (n["FProject"] as DynamicObject)["ID"].ToString()).ToList();
// 截止对账日期
var fDate = customFilter["FDate"]?.ToString();
// 订单状态
var 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);
}
/// <summary>
/// 获取前端组件转换过滤条件
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public override ReportTitles GetReportTitles(IRptParams filter)
{
ReportTitles reportTitles = new ReportTitles();
DynamicObject customFilter = filter.FilterParameter.CustomFilter;
if (customFilter != null)
{
// 客户
var fClientList = (customFilter["FClient"] as DynamicObject)?["Name"]?.ToString();
// 工程项目名称
var fProjectList = (customFilter["FProject"] as DynamicObjectCollection)?.Select(n => (n["FProject"] as DynamicObject)["Name"].ToString()).ToList();
// 截止对账日期
var fDate = customFilter["FDate"]?.ToString();
//开始对账日期
var FSDate = customFilter["FSDate"]?.ToString();
// 订单状态
var fGROUP = customFilter["F_ALL_GROUP"]?.ToString();
//纸质合同号
var ZZHTH = customFilter["F_ZZHTH"]?.ToString();
//销售员
var XSYFID = (customFilter["F_XSY"] as DynamicObject)["Id"].ToString();
string fState = "";
if (fGROUP == "1")
{
fState = "全部订单";
}
if (fGROUP == "2")
{
fState = "未完结订单";
}
//这里是报表页面的标识
reportTitles.AddTitle("FState", fGROUP == null ? "" : fState);
reportTitles.AddTitle("FClient", fClientList == null ? "" : fClientList);
reportTitles.AddTitle("FDate", fDate == null ? "" : Convert.ToDateTime(fDate).ToString("yyyy-MM-dd"));
reportTitles.AddTitle("FSDate", fDate == null ? "" : Convert.ToDateTime(FSDate).ToString("yyyy-MM-dd"));
reportTitles.AddTitle("FProject", fProjectList == null ? "" : string.Join(",", fProjectList));
reportTitles.AddTitle("F_ZZHTH", ZZHTH == null ? "" : ZZHTH);
reportTitles.AddTitle("F_XSY", XSYFID == null ? "" : XSYFID);
}
return reportTitles;
}
//设计报表合计列
public override List<SummaryField> GetSummaryColumnInfo(IRptParams filter)
{
var result = base.GetSummaryColumnInfo(filter);
result.Add(new SummaryField("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;
}
}
}

View File

@ -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
{
/// <summary>
/// 【表单插件】明细版-按钮触发
/// </summary>
[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);
}
}
/// <summary>
/// 赋值EXCEL
/// </summary>
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();
}
}
}

View File

@ -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
{
/// <summary>
/// 【表单插件】明细版-确认按钮
/// </summary>
[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
}
}
}
}

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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
--DROP TABLE GZ_DDWFHMX_TH
SELECT SUM([]) FROM GZ_DDWFHMX_TH

View File

@ -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;