套打.二开案例.套打分组打印按照分组出现顺序排序
# 【应用场景】
套打时,默认是按照分组字段做升序或降序排序,如物料编码;
部分场景下按照对应物料对应的序号号排序,利用表单插件做数据排序实现此功能 [套打插件排序](https://vip.kingdee.com/article/171152)
# 【案例】
在销售报价单中,实现按照物料的序号列进行分组顺序输出
# 【演示数据】
正常情况下,按照物料编码升序如下图所示
![Image_20220323141948.webp](/download/010029eca024ccdc4ad6b9dd89e45e0b06d0.webp)
# 【脚本插件干预排序】
利用插件记录所在行物料对应的首序号,按照首序号做排序
![Image_20220323142137.webp](/download/0100a56a2cb2c5ae4bdfbe1dc49799fa1667.webp)
```python
from System import *
from Kingdee.BOS import *
from Kingdee.BOS.DataEntity import *
def OnPrepareNotePrintData(e):
if e.NotePrintTplId.Equals("e02063aa-b4b6-4095-8a9d-f569bdf3f90a"):
if e.DataSourceId.Equals("FQUOTATIONENTRY",StringComparison.OrdinalIgnoreCase):
seqKey = "FQUOTATIONENTRY" + "_" + "FSeq";
materialKey = "FMaterialId_FNumber";
if e.DataObjects == None or e.DataObjects.Length <= 0 or not e.DataObjects[0].DynamicObjectType.Properties.ContainsKey(materialKey):
return;
rowMaterialSeq = {};
for index in range(len(e.DataObjects)):
material = e.DataObjects[index][materialKey];
if not rowMaterialSeq.has_key(material):
rowMaterialSeq[material] = e.DataObjects[index][seqKey];
tempList = sorted(e.DataObjects,key =lambda x:(rowMaterialSeq[x[materialKey]], x[seqKey]));
for index in range(len(tempList)):
e.DataObjects[index] = tempList[index];
```
NotePrintTplId——套打模板ID(e02063aa-b4b6-4095-8a9d-f569bdf3f90a)
materialKey——对应模板的分组字段(FMaterialId_FNumber)
seqKey——对应单据体的序号字段(FQUOTATIONENTRY_FSeq)
# 【演示效果】
按照对应物料的首次出现的顺序排序
![Image_20220323142513.webp](/download/0100e9a8fd783d3940e284105a4d1e05feef.webp)
套打.二开案例.套打分组打印按照分组出现顺序排序
# 【应用场景】套打时,默认是按照分组字段做升序或降序排序,如物料编码;部分场景下按照对应物料对应的序号号排序,利用表单插件做数据...
点击下载文档
本文2024-09-23 04:13:04发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-163882.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章