本贴的讨论源于救火的财软联盟(http://www.fs119.net/)论坛上,ilikesap11朋友的一篇贴子《价格政策的问题,有谁能解决呀!!》
原贴在此:http://www.fs119.net/bbs/read.php?tid=1382
在继续讨论之前,先作一下声明,以下操作涉及到对账套数据库,特别是金蝶账套的单据模板、选单模板等表数据的修改,存在较大的数据风险。
如果你对金蝶K3系列产品的数据结构不熟悉,请切莫要随意操作。望三思而后行!!!
一、需求
ilikesap11 朋友在原贴中写道:
-------------------------------------------------------
价格政策的问题,有谁能解决呀!!
由于现在市场上原材料的价格浮动比较厉害,所有我想通过这种方式来解决:
1、在“物料”基础资料中,增加一个自定义字段:固定比率,这是是我们企业定义好的,是手工输入的。
2、在采购定单中,自定义了两个字段,一个是:铜基价,用来定义企业价格政策时的,原材料的价格,这个也是手工输入的,不过一般都是一年才变动一次,假设能实现固定值最好。当然,在修改的时候,还应该是可以修改的。另一个字段是:当前铜价格,这个就是根据市场行情输入的。
3、我们的实际成交金额是=A×[1+(当前铜价格-铜基价)×固定比率],其中A就是系统里面该货品的价格政策里面的报价。
4、问题是:通过以上的分析,上面的公式非常符合我们系统里面的折扣率的定义,我想利用系统中的折扣率,问题是,能否将“(当前铜价格-铜基价)×固定比率”通过什么方式,自动填写到定单中的折扣率字段,假设能填写上,就非常方便了,也能解决我们的大问题了。这样我们只要输入“当前铜价格”就能自动的计算出采购定单的金额了。
-------------------------------------------------------
二、我的第一次分析
-------------------------------------------------------
需求解决方式:直接通过修改单据模板,在GUI单据上解决,尽量不用触发器
需要分析基于环境:K3 10.4
需求解析:
这是一个典型的个性采购计价解决需求,并非我们单据常规的 数量×单价=金额 的计算方式。
1、关于“物料”基础资料中增加一个自定义字段“固定比率”,供手工输入的问题,这个通过金蝶K3的核算项目属性自定义字段,直接可以做得到。这里我暂把这个字段命名为“价格系数”。
2、关于《采购订单》自定义字段“铜基价”的问题,从ilikesap11所表述的问字来看,其要求是从采购价格资料中携带过来,并允许修改。对于这个问题,我从两方面来分析:
(1)、如果这个“铜基价”是对每一个供应商的每个物料的,每个供应商提供的铜基价都不同或大多不同、但又在一年内较固定的话,基于这种需求的话,通过采购价格资料来解决是最佳,但要说明的是,目前截止K3 10.4止,《采购订单》还是工业老单,不是BOS系统单据,不能像BOS单据那样可以携带价格资料(我也没有收集金蝶关于工业老单关于解决此方面需求的资料,有关价格资料的携带应该是通过GUI控件而不是单据模板),所以,要想走字段获取采购价格资料的路子,目前只能还是从“单价”字段考虑,在这里可以考虑把“单价”字段作为“基价”考虑,然后修改单价、金额、税额等字段的Action去解决需求。
(2)、如果这个“铜基价”是对物料的、且在一年内较固定的话,基于这种需求,我认为这种需求走新增物料基础资料自定义字段、然后再通过物料字段属性携带到单据的路子,要简单得多,而且走这条路子,对单据原有系统字段的Action修改,相对要少些,利用系统以后的升级和维护。
出于范例的简单性考虑,我选择后一种思路。
3、关于《采购订单》自定义字段“当前铜价格”的问题,这个直接通过《采购订单》单据自定义新增字段就行了,不过,考虑到其是参与金额的运算条件之一,其要对金额等字段产生值更新,但目前金蝶的单据自定义模块的方面的功能限制,其也在此方面的解决也不如BOS,所以在新增字段之后,也需要修改Action
4、关于“实际成交金额=A×[1+(当前铜价格-铜基价)×固定比率]”公式的问题,这个“实际成交金额”应该是“实际成交单价”吧,实际成交金额的公式应当考虑数量。
5、关于能否将“(当前铜价格-铜基价)×固定比率”通过什么方式,自动填写到定单中的折扣率字段的问题,这个可以应该可以做得到,修改ACtion,不过,这种需求是基于用户没有使用折扣管理的条件下。
我的解决方式:
1、首先,在物料上在新增”价格系数“字段,即ilikesap11提出的”固定比率“。
2、在物料上新增“基价”字段,用于录入物料的采购基价。
3、在采购订单上新增“基价”字段,新增单据或选单时,均来源于物料基础资料的“基价”字段,实现可以修改。本步操作要修改Action,样例,可以参考我的贴子《采购订单的“品质要求”字段可随基础资料带出并可修改的实现方式》。
4、在采购订单上新增“价格比率”字段,新增单据或选单时,均来源于物料基础资料的“价格比率”字段,按ilikesap11的要求,不可以修改。
5、在采购订单上新增“当前市场价格”字段,用于录入ilikesap11提出的“当前铜价格”。
6、修改金额、单价、数量等字段的Action
要说明的是,此种方案舍弃了采购价格方案和单据的单价字段
-------------------------------------------------------
三、ilikesap11 对于分析一提出的疑问
-------------------------------------------------------
非常感谢你的分析,我发现了这样的一个问题,就是最好你说的“舍弃了采购价格方案和单据的单价字段”,这句话我不是很明白,假设真的是舍弃了采购价格方案的话,物料的基价就只能再物料属性里面设置了,为什么不能通过价格政策呢?还是单据中的单价字段舍弃了,我感觉再以后的成本计算中,是不是会出现问题呢。
-------------------------------------------------------
我的回答:
-------------------------------------------------------
1、关于自定义字段不能获取价格资料的问题
我在前面说了,目前 工业单据的自定义 不同于 BOS 单据 ,价格资料是带不到自定义字段的中来的,金蝶的单价携带是通过 GUI 控件获取实现的,而不是单据模板中可以设置的。
另外,金蝶的 BOS 单据能获取价格资料,严格上说都是 10.4 才实现。之前的那个 10.3 的 PT3775 补丁(记不清了)实际上是个半成品,当时金蝶提单回答我,那个补丁是供演示用的,千万不能用在用户账套上,但当时我已经用了,当时还根本不能获取价格资料。
2、关于单价的问题,我指的是不能用传统的 数量×单价=金额
3、还有一个问题,我一直没有弄懂你的那个“实际成交金额=A×[1+(当前铜价格-铜基价)×固定比率]”,你的铜价格、铜基价是指的吨铜价格吧?而固定比率,是物料相对吨铜的比率?
-------------------------------------------------------
四、ilikesap11明确需求:
-------------------------------------------------------
铜基价是指我当时制定价格政策事依据的铜的价格,比如我的采购物料A ,制定的价格政策是21元,这个价格是在铜65000/吨和供应商一起制定出来的,铜价格是当日的采购时铜的价格,比如,今天我要采购A,今天网上铜价格时70000,那么,我们的采购价格就是21×(1+5%),其中5%=(70000-65000)×0.1%,这个0.1%所有的物料基本一致。
-------------------------------------------------------
五、我的第二次分析及解决方式:
-------------------------------------------------------
1、需求:
实际成交单价A=价格管理中物料单位报价B×[1+(当前吨铜市场价格C-年初吨铜基价D)×物料相对吨铜折算系数E]
2、解决方式(以下应用及设置基于K3V10.4或KIS专业版V9.0的《采购订单》):
(1)、能保证采购价格管理资料的应用,简单点说,采购订单单价可来源于价格资料。
(2)在物料上在新增“标铜基价”字段(数据库字段名FStandardPrice),用于录入企业在初与供应商先前确认的吨铜基价,即双方事先谈判时的吨铜价格。
在物料上在新增“市场基价”字段(数据库字段名FMarketPrice),供企业录入近期与供应商确认的吨铜基价。
在物料上在新增“折算系数”字段(数据库字段名FConversionRate),供企业维护各物料相对于吨铜的折算系数。
3、在采购订单上新增“标铜基价”字段(数据库字段名FstandardPrice),新增单据时,来源于物料基础资料的“标铜基价”字段,不可以修改,但需要保存数据到数据表。本步操作要修改Action。
新增字段,假定后台新增字段名为FstandardPrice。
在新增单据自定义后执行如下脚本:
Update ICTemplateEntry set FRelationID='FItemID',FAction='.,FstandardPrice'', where FID=’P02’ And FFieldName='FstandardPrice'
在采购订单上新增“市场基价”字段(数据库字段名FMarketPrice),新增单据,数据可来源于物料基础资料的“标铜基价”字段,录入单据时可根据实际情况修改,需要保存数据到数据表。本步操作要修改Action。
新增字段,假定后台新增字段名为FMarketPrice。
在新增单据自定义后执行如下脚本:
Update ICTemplateEntry set FRelationID='FItemID',FAction='., FMarketPrice', where FID=’P02’ And FFieldName='FMarketPrice'
在采购订单上新增“折算系数”字段(数据库字段名FConversionRate),新增单据时,来源于物料基础资料的“折算系数”字段,不可以修改,但需要保存数据到数据表。本步操作要修改Action。
新增字段,假定后台新增字段名为FConversionRate。
在新增单据自定义后执行如下脚本:
Update ICTemplateEntry set FRelationID='FItemID',FAction='., FConversionRate', where FID=’P02’ And FFieldName='FMarketPrice'
在采购订单上新增“常用单位实际单价”字段(数据库字段名FActualPrice),不可以修改,但需要保存数据到数据表,数据计算由公式“实际成交单价A=价格管理中物料单位报价B×[1+(当前吨铜市场价格C-年初吨铜基价D)×物料相对吨铜折算系数E]”自动计算。本步操作要修改Action。
新增字段,假定后台新增字段名为FConversionRate。
在新增单据自定义后执行如下脚本:
UPDATE ICTemplateEntry SET
FRelationID='FAuxTaxPrice,FAuxQty,FAuxPrice,FCess,FStandardPrice,FMarketPrice,FConversionRate',FAction='Cal,A=B*(1+(C-D)*E/100),FAuxPrice,FMarketPrice,FStandardPrice,FConversionRate'
WHERE FID='P02' AND FFieldName='FActualPrice'
4、更新采购订单的原系统常用单位“单价”为“单位报价”,并修定由金额反算时应考虑吨铜换算系数。
UPDATE ICTemplateEntry SET FHeadCaption='单位报价',
FRelationID='FItemID,FAuxTaxPrice,FUnitID,FAmount,FStandardPrice,FMarketPrice,FConversionRate',
FAction='.,FItemID&FPlanPrice;Cal,FAuxTaxPrice|FAmount&A=B/C/(1+(D-E)*F/100),FAmount,FAuxQty,FMarketPrice,FStandardPrice,FConversionRate;Cal,FAuxTaxPrice&A=B*100/(100+C),FAuxTaxPrice,FCess'
WHERE FID='P02' AND FFieldName='FAuxprice'
修改基本单位单价,原理同上。不过若是专业版,其实际是通过AuxQty_POOrder触发器来影响的,故修触发器。
ALTER TRIGGER AuxQty_POOrder ON [POOrderEntry]
FOR INSERT,Update
AS
Update t1 set
t1.FQty=CAST(t2.FAuxQty AS DECIMAL(28,16))*CAST((isnull(t3.FCoefficient,1)+isnull(t3.FScale,0)) AS DECIMAL(28,16)),
t1.FPrice=t2.FActualPrice/(isnull(t3.FCoefficient,1)+isnull(t3.FScale,0))
From POOrderEntry t1,Inserted t2,t_MeasureUnit t3
Where t1.FInterID=t2.FInterID and t1.FEntryID=t2.FEntryID and t3.FItemID=t2.FUnitID
此外,采购订单的的含税单价、实际含税单价也需要修改,这里不再贴出。
5、设置采购订单的“金额”由公式“金额=数量×单位报价×[1+(市场基价-年初吨标铜基价)×折算系数]”计算得出。
UPDATE ICTemplateEntry SET
FRelationID='FAuxTaxPrice,FTaxRate,FAuxQty,FAuxPrice,FCess,FStandardPrice,FMarketPrice,FConversionRate',
FAction='Cal,A=B*C*(100-D)/(100+E)*(1+(F-G)*H/100),FAuxQty,FAuxTaxPrice,FTaxRate,FCess,FMarketPrice,FStandardPrice,FConversionRate'
WHERE FID='P02' AND FFieldName='FAmount'
此外,采购订单的折扣额、税额、价税合计也需要修改,这里不再贴出。
6、选单关系修改,由采购订单下推生成外购入库单、采购发票都需要修改相应字段的Action,这里不再贴出。
六、效果图:
图一

图二
七、应用价值:
从上述例子中,我们可以明显地看到金蝶K3、KIS专业版产品的灵活性,即不通过编程仍可能解决用户的个性化需求。
之所以能这样做,是因为金蝶将数据关系是放在账套的单据模板表、选单关系模板等数据表中的,这比用非得要通过编程、要通过控制来实现效果的软件灵活得多,从这个方面,就可以证明其软件构架的灵活性。
当然,这些设置放到各自的账套中,也会带来两个弊病,一个是可能各自账套设置不一定、可能会增加维护人员对问题的及时、准确判断及处理,二是,这种个性化设置可能会被软件升级所替代,这都需要维护人员引起必要的重视。
本文所应用的实例是相对工业老单的处理方式而言,大家可能觉得软件在工业老单单据自定义的操作应用上,还不够简便、易用和上手。实际上,这正是因为早期,金蝶可能是出于对软件产品稳定和安全性的考虑,没有作过多披露这方面的资料,没有作过多这方面的软件功能设置。现在这些设计、设置,从初看到的K3V11.0产品介绍资料来,在BOS系统中均已经实现,大家可以翘目以待。
工业老单,从目前金蝶产品的发展趋势来说,将逐渐被BOS单据替代。但作为产品线的分化,工业老单在K3及专业版中的存在,可能还有一些时日,适当的学些这方面的维护知识,还是有必要的。
这,就算给做维护兄弟们的圣诞礼物吧!
本文档从金蝶社区和QQ群4362985散发。若要转载,请注明出处。谢谢。