
@[TOC](目录)
### 背景
物料在系统中存在多单位,在采购订单上录入的计价单位为A单位,在其他单据例如采购入库单上录入的计价单位为B单位,想在采购入库单上获取该物料在采购订单上基于A单位的最新价格,然后需要换算成B单位的价格使用
### 步骤
1. 在采购入库单上新增两对单位和单价字段(【取价单位】、【取价单位单价】、【目标单位】、【目标单位单价】)!

2. 在取价单位字段上配置获取采购参考价服务

3. 表单插件注册python脚本,通过值更新事件获取物料转换率并计算【目标单位单价】

### Python脚本
```python
import clr
clr.AddReference('mscorlib')
clr.AddReference('Kingdee.K3.Core')
clr.AddReference('Kingdee.K3.BD.ServiceHelper')
from System import *
from Kingdee.K3.BD.ServiceHelper import *
from Kingdee.K3.Core.BD.ServiceArgs import *
def DataChanged(e):
#判断是否【取价单位】、【取价单价】、【目标单位】三个中的任意一个字段发生改变
if e.Field.Key == "F_SXIM_UnitID" or e.Field.Key == "F_SXIM_Price" or e.Field.Key == "F_SXIM_UnitID1":
mate = this.View.Model.GetValue("FMaterialId",e.Row)#物料编码
un1 = this.View.Model.GetValue("F_SXIM_UnitID",e.Row)#取价单位
un1P = this.View.Model.GetValue("F_SXIM_Price",e.Row)#取价单位单价
un2 = this.View.Model.GetValue("F_SXIM_UnitID1",e.Row)#目标单位
#判断上述4个字段是否都不为空
if mate != None and un1 != None and un1P > 0 and un2 != None:
mate_id = mate["Id"]#物料Id
un1_id = un1["Id"]#取价单位Id
un2_id = un2["Id"]#目标单位Id
#获取单位换算后的目标单位单价
un2P = getConvertRate(mate_id,un2_id,un1_id,un1P)
this.View.Model.SetValue("F_SXIM_Pric