由于项目上的潜在需求,最近研究了一下系统中Purchase Contract的功能,在此与大家分享研究之心得。Purchase Contract,可以理解为采购协议/框架协议/采购合同,整体逻辑为通过Purchase Contract来确立用户与供应商之间对于Payment Terms支付条款和Item Price价格的协议签订,而后在Purchase Order上可指定所需要的采购协议。
在此,我们打算采用“2+3”战略方式完成准备工作与实践过程~
准备工作两步走:
- NetSuite中启用Purchase Contract功能;
- 从标准Form出发,自定义Purchase Contract的Form,且Permission中添加Purchase Contract的相关权限;
具体实践三步走:
- 创建Purchase Contract;
- 将创建的Purchase Contract应用至Purchase Order;
- 可再次返回刷新相应Purchase Contract查看Related Records,结束。
准备工作如下:
启用该功能,我们需按照Setup-Company-Enable Features路径找到Purchase Contract,勾选保存,具体可参考下图:
启用功能
紧接着,需要找到Standard Purchase Contract,自定义一个Purchase Contract Form,将其设置为相应角色的首选Form;
自定义Form,在对应角色前勾选首选
同时,需要在对应角色的Permission中添加Purchase Contract的相关权限,这里设置为Full;
Permissions——Transactions——Purchase Contract(Full)
准备工作至此全部结束~接下来我们就详细说说如何使用该功能并且将它应用至PO上吧~
以管理员的经典中心为例,路径为Transactions——Purchases——Enter Purchase Contracts,位置在平日输入采购订单的下方,点击后就进入了创建Purchase Contract的界面,整个界面和PO有点像,大家可不要看花了眼呀~
进入路径
要想创建一个Purchase Contract,我们先来了解下页面上有哪些信息是需要我们重点关注的。
Purchase Contract创建界面
先说Main Line的第一部分,
Effectivity Based On表示的是你想要该协议生效的日期基于哪个日期?下拉框中有两个选择,Expected Receipt Date代表基于期望收货的日期,Order Date代表基于采购订单的日期。
这里举一个简单的例子,假设协议生效日期为2022/11/22——2022/11/30,我在2022/11/22创建了PO,且Expected Receipt Date在2022/12/1,此时Order Date就在协议生效期之内,而Expected Receipt Date在协议生效期之外。
Start Date代表协议开始生效日期,End Date代表协议到期日。
Minimum Amount代表协议期间必须采购的最小总金额,但这里并非指一个订单的最小总金额;Maximum Amount则代表最大金额,超过金额可能会涉及到上级审批。但其实这两个字段在这里并无实际意义,因为我们和供应商的约定在前,所以这里只是帮我们有一个记录的作用。
第二部分,
Summary Box中的三个Amount值都是挂靠在此协议下的所有PO上已实现的总金额,不仅仅只计算一个PO的Amount(除非该协议只对应一个PO)。Purchased Amount表示所有相关PO的Amount,Received Amount表示所有已收货的Amount,Billed Amount表示供应商所有已开票的Amount。
第三部分,
Department,Location,Class的信息可根据需求进行填写,如果这里填写了,在PO上选择该协议时,系统将会自动带出LDC的相关信息。
界面上的其他的信息类似于Vendor/Employee等按照平时填写PO时填写即可。
再说说页面下方Detail的地方,在Item Sublist下是我们要填写的Item Line信息及分层定价规则,这里选择相应的Item名称后,该Item的Base Rate会根据之前维护的Item信息自动带出,当然这里是可以根据与供应商的商定来修改的,简单理解就是和供应商商量后确定的,数量为1且不给折扣时的单价。
接下来的重头戏则是这个带有小铅笔的Additional Pricing,是我们输入分层定价规则的部分。
在Calculate Quantity Discounts计算数量折扣部分,我们可以看到有三个不同的选项:
by Line Quantity,代表我们按照单个采购订单行的Item数量进行折扣计算,大家下面所看到PO就是我在协议中针对Item选择的是by Line Quantity的计算方式,所以当我的采购订单上写了25时,系统就按照25的数量进行计算,对应定价规则中的Price为19。
by Line Quantity计算数量折扣
by Overall Item Quantity, 这种方式代表按照总Item的数量进行折扣计算,即定价是基于同一个PO上相同Item所有采购订单行的总数。应用场景是在同一个采购订单上如果多次订购同一商品,则采购订单上所有行的Item总数量决定了我所能获得的数量折扣。在下面的截图中,大家能看到一个PO中包含两行同一个Item,因此在计算时它不会按照500和10分别去找对应的定价,而是会按照500+10=510来计算,所以这里的折扣单价也变为了18.
by Overall Item Quantity计算数量折扣
by Overall Contracted PO Item Quantity,这种方式则表明我们的定价是基于相同Item的所有协议采购订单行计算折扣。例如,如果同一个协议应用到多个PO上,且每个PO上都包含同一Item,那么所有这些采购订单的所有数量将被加和来计算定价。简单理解为用(甲订单中的A货品数量+乙订单的A货品数量+丙订单中的A货品数量)的总数量带入定价规则来计算折扣值。
在Input Using部分,选择Rate or Lot,则我们在行上输入Rate or Lot Price对应的是20/19/18的折扣价,系统帮我们计算折扣比率;若选择的是Percent,则我们在行上只能输入Percent Discount,类似-5%/-10%的折扣百分比,系统帮助我们计算折扣价,这个根据实际进行选择和填写即可。
Input Using选项
关于Price Using的3个选项,也需要说一下。大家可以看到某个协议中From Quantity部分是我对于数量的分层0——21——51,当选择Rate时,系统会使用单一的价格,0——20每件20元,21——50每件19元,51起每件18,在对应的数量范围内所有的Item都为同一个价格。假设我的数量是25,那对应的就是From QTY为21的那一行,所以我的25件Item全部都按照19的折扣价来计算。但是这里我想要举一个极端的例子,假设我的分层定价规则为0(1元)——100(0.5元)——500(0.4元),当我采购数量为99时,我的采购总价为99元,但是当我采购数量为101时,我的采购总价计算为101*0.5=50.5元,数量相差2,但是采购总价却相差几十元。
按照Rate计算
当选择第二种Marginal Rate时,计算方式则完全不同,它的计算方式有点类似于咱们个人所得税的计算方法,超额累进的计算方式。假设依旧是0——21——51的分层规则,这个时候如果我要购买的数量是25,那此时的计算方式则是20件*20元(不打折)+5件*19(5%折扣)求总和,而PO上的单价也会变成平均值(20*20+5*19)/25=19.8元,不再是25件同一个价格19,而是跨层进行累进计算。
第三种假设我还是购买25件Item,我们的Price对应的依旧是19 ,这时如果选择了Lot Rate计算Price,它的计算则是19的Amount/25=0.76,那么我的PO上对应Item行的Amount=19,Unit Price=0.76。
其实我们可以理解为前两种Price是我给系统提供数量和单价,系统帮我计算采购总金额,而第三种Price则是我提供给系统这一批Item的总金额和数量,19就代表这一批Item的总价是19,系统帮我计算每一件Item的平均单价。
以上就是Purchase Contract对于分层价格的协定,关于Payment Terms支付条款的协定在Terms的页签下,与供应商确定后,可在这里进行选择。
根据约定选择对应Payment Terms
另外这里还有一点是关于“折扣”的额外设置,这里可以看到我在Discount下多维护了一行,代表的意思就是当我的某个协议下所关联的PO最低Amount达到10000时,我们可以再额外让出1%的折扣。
Discount折扣维护
此时,根据与供应商的协定就完成了我们的Purchase Contract,接下来就是将创建的Purchase Contract应用至Purchase Order,也就是当我们新创建一个PO时,需要选择对应的协议,才能将协议上Item对应的折扣价与创建的PO进行挂钩。
创建PO界面
创建PO时,在表单头字段中选择对应Purchase Contract,PO与协议相关联的Location/Department/Class信息都可以从对应的协议上直接带过来,对应的Item行上的LDC信息也是默认的,协议的条款则适用于整个PO。另外,当我们编辑Item行的信息时你会发现我们只能对Quantity数量进行更改,而对于Unit Price单价来说,我们是不可以更改的,这一点也是Purchase Contract的限制点。
PO完成保存后,当我们再回到Purchase Contract,可刷新界面,在Related Records页签下,可以看到与该协议相关的所有PO已经存在,在Summary Box中的Amount也会自动更新,这就是所有的步骤。
最后,我们放一个完整的案例以供大家实践,参考:
新创建一个Purchase Contract#2,对应的3种Item在未得折扣时的Price均为20。
A货品的定价规则如上图,A货品将会出现在同一个PO上,存在多行,所以Calculated QTY Discounts方式为by Overall Item Quantity, 它需要计算同一个PO,挂了Purchase Contract#2的所有A货品的总数量;Price Using选择Rate说明Item确定了数量后,所有Item保持一个价格。
B货品的定价规则如上图,此货品将会出现在同一个PO上,存在多行,所以Calculated QTY Discounts方式为by Overall Item Quantity, 它需要计算同一个PO,挂了Purchase Contract#2的所有B货品的总数量;Price Using选择Marginal Rate说明数量确定后将采用累进的计算方式,根据数量跨层定价。
C货品的定价规则如上图,此货品将会出现在同一个PO上,存在多行,所以Calculated QTY Discounts方式为by Overall Item Quantity, 它需要计算同一个PO,挂了Purchase Contract#2的所有C货品的总数量;Price Using选择Lot Rate说明确定了Item数量后,会直接对应到这一批C货品的Amount,系统将计算单个C货品的价格。
此时创建PO,A/B/C货品均不止出现一行,我们只看Purchase Contract#2对应行:
A:计算总数量500+10=510,对应折扣单价为18,总额9180
B:数量500,对应折扣单价为(101*20+399*19)/500=19.202,总额9601
C:数量500,对应总额为19,则计算后单价为19/500=0.038
回到Purchase Contract#2,对应Purchased Amount应为9180+9601+19=18800
在Purchase Contract#2 Related Records下可看到对应PO及Amount信息,Summary Box中也有Purchased Amount。
分享到这里就结束啦,如果大家有新的补充,欢迎随时探讨~