关于Python的动态字段用法和中文的示例
金蝶云社区-从晴朗的朝色泛起之际开始
从晴朗的朝色泛起之际开始
3人赞赏了该文章 2,292次浏览 未经作者许可,禁止转载编辑于2018年05月28日 13:51:55

需求背景:
需要在销售出库的套打上获取每一行物料的毛重和净重信息

由于是简单的需求,我们就采用Python的方式来实现

效果图:

以下是示例代码和截图
其中以下代码段是让python2支持中文
reload(sys)
sys.setdefaultencoding('utf-8')

使用用法

示例代码
#-*- coding: utf-8 -*-
import clr
clr.AddReference("System")
clr.AddReference("System.Core")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.DataEntity")
clr.AddReference("Kingdee.BOS.ServiceHelper")
import sys
from System import *
from System.Collections.Generic import *
from System.Threading import *
from Kingdee.BOS.Log import *
from Kingdee.BOS.Core.Log import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.KDThread import *
from Kingdee.BOS.DataEntity import *
from Kingdee.BOS.Orm.DataEntity import *
from Kingdee.BOS.ServiceHelper import *
from Kingdee.BOS.Core.Metadata import SelectorItemInfo ##字段选择实体类
from Kingdee.BOS.Core.SqlBuilder import QueryBuilderParemeter ##查询参数实体类
#修改默认编码为utf8
reload(sys)
sys.setdefaultencoding('utf-8')

def OnPrepareNotePrintData(e):

if e.DataSourceId.Equals("FEntity", StringComparison.OrdinalIgnoreCase):
_MEMO=''
_FGROSSWEIGHT=''
_FNETWEIGHT=''
_FUNITNAME=''
_count = e.DataObjects.Count
entity = this.Model.BillBusinessInfo.GetEntity("FEntity")
dot = e.DataObjects[0].DynamicObjectType
dot.RegisterSimpleProperty("F_V_MEMO", str)
for i in range(0,_count):
obj = DynamicObject(dot)
for p in e.DataObjects[i].DynamicObjectType.Properties:
obj[p] = e.DataObjects[i][p]
_MEMO=this.Model.GetEntityDataObject(entity, i)["Note"]

sql="select FGROSSWEIGHT,FNETWEIGHT,b.FNAME from T_BD_MATERIALBASE as a left join T_BD_UNIT_L as b on b.FUNITID=a.FWEIGHTUNITID where FMATERIALID="+str(this.Model.GetEntityDataObject(entity, i)["MaterialID"]['id'])
PriceListObj = DBServiceHelper.ExecuteDynamicObject(this.Context, sql)
if PriceListObj.Count ==1:
_FGROSSWEIGHT=float(PriceListObj[0]['FGROSSWEIGHT'])
_FNETWEIGHT=float(PriceListObj[0]['FNETWEIGHT'])
_FUNITNAME=PriceListObj[0]['FNAME']


obj["F_V_MEMO"]=_MEMO+'\n毛重:'+str(_FGROSSWEIGHT)+' '+_FUNITNAME+'\n净重:'+str(_FNETWEIGHT)+' '+_FUNITNAME

e.DataObjects[i] = obj[/i][/i][/i]