基础算法实现金额分摊功能
欢迎使用X++语言
两个数据表两个GridView控件
代码如下
FWT_ShareSummaryTable curFWT_ShareSummary;
FWT_ShareDetailsTable curFWT_ShareDetailsTable;
int acout = 0;
str shareId;
real price = 0;
int numRecords=7;//确定循环次数
int LineCout=8;//确定行数
int roudNum=0;
int RecentlyNum=0;
// 获取汇总表中的数量和金额
select firstonly price from curFWT_ShareSummary;
price = curFWT_ShareSummary.Price;
四舍五入最近的整数值
//RecentlyNum = round(price, 0);
//金额除以整数值得到差值
if(price>0)
{
roudNum=price/LineCout;
}
// 生成新的 GUID
shareId = System.Guid::newGuid().toString();
// 插入一行数据到汇总表
ttsbegin;
curFWT_ShareSummary.clear();
curFWT_ShareSummary.Acout = acout;
curFWT_ShareSummary.Price = price;
curFWT_ShareSummary.ShareId = shareId;
curFWT_ShareSummary.insert();
ttscommit;
//计算出相差的值
int PhaseNum=roudNum*numRecords;
int AvgPrice=PhaseNum/numRecords;
//计算出尾数
int Remainder=price-PhaseNum;
// 插入分摊记录到明细表
ttsbegin;
for (int i = 1; i <= numRecords; i++)
{
curFWT_ShareDetailsTable.clear();
curFWT_ShareDetailsTable.Acout = acout;
curFWT_ShareDetailsTable.Price = AvgPrice;
curFWT_ShareDetailsTable.ShareId = shareId;
curFWT_ShareDetailsTable.insert();
}
curFWT_ShareDetailsTable.clear();
curFWT_ShareDetailsTable.Acout = acout;
curFWT_ShareDetailsTable.Price = Remainder; // 最后一次的金额
curFWT_ShareDetailsTable.ShareId = shareId;
curFWT_ShareDetailsTable.insert();
//最后的结果相加得到金额
int TotalPrice=PhaseNum+Remainder;
ttscommit;
info(strFmt("Inserted %1 records into ShareDetailsTable", numRecords));
FWT_ShareDetailsTable_ds.executeQuery();
FWT_ShareSummaryTable_ds.executeQuery();
第一次使用x++语言实现金额分摊的功能,这个语言比较冷门在网上找了很多教程都实现不了,很多语法都存在不同的差异,最终还还是结合ai和部分的思路实现了这个功能。