这是东南沿海某省伙伴提出的需求,具体描述如下:
用户在做销售单时,针对整单做个折扣,然后分摊到单据体各行。例如,某销售单销售A、B、C、D、E...N种商品,合计销售金额100000元,整体优惠2000元,相当于本次销售金额为98000元。要求系统能够自动将这2000元分摊到各行,自动计算相应的折扣率和折扣金额,同时调增销售金额、税额、税价合计,调整后的数据还要与应收数据相吻合。
本例中,将单据头自定义字段1修改为“整单折扣”,调整单据模板使其显示为数值,分摊运算则由插件实现。
插件运算原理:
1、获取单据状态billStatus(1=新增;2=查看/编辑)
2、设置重算标识变量iFlag(1=需要计算;2=不需计算)
单据为新增,iFlag=1;单据为查看/编辑,但关键字段值发生变化,iFlag=1;关键字段未变化,iFlag=2
if billStatus=1
{iFlag=1}
else
if KeyValueChanged
{iFlag=1}
else
{iFlag=2}
3、如果需要计算,则
3.1、读取整单折扣额TotalDiscount。
3.2、读取单据发票类型voiceType。
3.3、读取分摊标准apt(1=按数量分摊;2=按金额分摊;3=平均分摊);读取税率taxRate。
3.4、根据apt值计算统计单据合计金额/合计数量/行数。
3.5、逐行读取数量Qty和单价Price,计算金额Amount=Qty*Price。
3.6、逐行计算分摊率aptRate。
3.7、逐行计算折扣额并写入单据折扣字段discount=TotalDiscount*aptRate。
3.8、逐行计算折扣率并写入单据折扣率字段dscRate=(Amount-discount)/Amount。
3.9、逐行计算金额并更新单据金额字段NewAmount=Amount-discount。
3.10、逐行计算税额并更新单据税额字段tax=NewAmount*taxRate。
3.11、逐行计算税价合计并更新单据税价合计字段taxAmount=Amount*(1+taxRate)。
3.12、写入单据头合计金额字段sum(taxAmount)。
3.13、读取本次收款金额thisMoney,计算应收余额=sum(taxAmount)-thisMoney并写入单据。
整体效果图:
录入一张销售单。
输入整单折扣金额,然后点击【保存】按钮。
如系第一次运行本插件,则自动弹出【整单折扣分摊标准设定】窗口,选择分摊标准。本参数为全局设置,任意客户端设置后,其他所有客户端均按该参数执行分摊计算过程,无需重复设置。
不支持每台客户端自定义分摊标准。
点击【确定】按钮,系统自动分摊折扣到每一行。如下图所示:
本例是按照数量进行分摊,我们发现,【折扣额】合计为100.01,和【整单折扣】100有0.01元的差异。同时还发现,【金额】+【税额】=3572.58,和【税价合计】3572.61有0.03元的差异。
按金额分摊或平均分摊同样存在差异。
出现差异的原因,是因为在金蝶KIS商贸版中,数据精度默认是小数点后2位,虽然我的插件是以Double精度进行计算,但计算的数据写入到单据后,单据自动进行四舍五入,从而出现了差异。
折扣额差异的解决方法是要靠手工调整某行的折扣额和金额。如本例中,可将第6行折扣额修改为21.97,将金额修改为828.03。后续我将考虑如何用插件自动消除这个差异。
税价合计的差异需要调整计算方法。为了保证精度,税价合计字段我是从原始数据开始计算,即Qty*Price*(1-aptRate)*(1+taxRate),本来按照Double精度计算,这些数值非常精确,但是单据自动四舍五入保存两位小数,导致出现了较大的差异。要消除这个差异,只能调整计算方法,从单据上获取【金额】和【税额】,然后两者相加写入【税价合计】。
此插件为商贸版通用插件。适用于KIS商贸标准版、高级版,数据库支持SQL2000,2005,2008等。
此插件采用服务器授权方式销售,价位合适,欢迎全国伙伴咨询。
服务器授权:插件只需在任意客户端或服务器上注册(注册信息保存在服务器中),即可不受任何限制的使用。只要不更换服务器,注册码永远有效。更换服务器,则需要更换注册码。
咨询QQ:287634334
咨询电话:13525178050