
# 问题描述
存货收发存汇总表excel打印,打印物料字段取出来的是内码,而不是需要的编码。

# 原因分析
excel打印取基础资料字段打印的就是内码,需要取基础资料.FNumber才是编码。
物料编码是基础资料取出来是内码,物料名称是基础资料属性取出来就是正常的

标准处理方案是报表上加基础资料属性字段,在过滤的显示隐藏列中也加入基础资料属性,打印时取新加的字段即可。
# 处理方案
大部分报表本身就有基础资料属性字段,或者都已经把基础资料属性映射到文本等类型的字段,所以直接取值都是正常的。
但是==部分报表的字段(比如存货收发存汇总表的物料)就是基础资料,并且没有基础资料属性对应的字段==。**本文针对这种场景做处理说明。**
已知:==excel打印可以直接取数据表的列名打印。==
1. 我们首先要取到物料编码的
列名。
(1)报表中添加一个按钮。

(2)配置表单插件,实现点击操作获取报表的表名。

```language
#引入clr运行库
import clr
#添加对cloud插件开发的常用组件的引用
clr.AddReference("mscorlib")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.ServiceHelper")
clr.AddReference("Kingdee.BOS.Core")
#导入cloud基础库中的常用实体对象(分命名空间导入,不会递归导入)
from System import *
from System.Collections.Generic import *
from Kingdee.BOS.Util import *
from Kingdee.BOS.ServiceHelper import FormMetaDataCache
def BarItemClick(e):
if (e.BarItemKey.Equals("tb_showTableName", StringComparison.OrdinalIgnoreCase)):
dataSource = this.View.Model.DataSource;
tableName = "" if dataSource == None else dataSource.TableName;
msg = "临时表名:"+tableName;
this.View.ShowMessage(msg);
```
**python脚本会有错误提示,忽略即可。**

(3)前台效果,获取表名

(4)数据库通过表名查找数据表对应字段的列名FMATERIALID。

2.
excel打印模板中绑定列名FMATERIALID。

# 打印效果
