Python校验销售订单的BOM不是供应组织下的BOM

【问题描述】
当物料清单被分配到多个组织后,销售订单分录上的'BOM版本'字段默认是会使用供应组织下的BOM(插件会控制当供应组织修改时,自动切换Bom版本ID)。但在某些情况下客户账套数据可能存在BOM版本不是供应组织下的BOM,如下图1-1所示:

图1-1
从数据库中查询可以发现,T_SAL_ORDERENTRY 表中的FBOMID字段的值是其它组织下的BOMID,如图1-2所示:

图1-2
这种异常数据在走销售流程时其实影响不大,因为到了发货通知或者销售出库单时,下游单据上的BOM版本字段是会自动根据使用组织正确切换,因此即使在销售订单上有异常,客户一般也不容易发现,但是当在销售订单上使用制造领域的预留功能时就可能会报错,如下图1-3所示:

图1-3
【解决方案】
如果遇到上图1-3的预留问题,可通过一个Python案例来校验当BOM字段有异常数据时,拦截住不让保存,首先扩展销售订单,在保存操作上添加如下图2-1所示的Python插件:

图2-1
Python代码如下所示(注意复制此脚本可能存在空格转义问题导致Python失败,建议复制代码后手工清空空格及换行然后再再输入空格及换行或者使用附件中的文本):
# -*- coding: utf-8 -*-
#校验2023年前销售订单BOM不是供应组织下的问题
import clr
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
from System import *
from System.Collections.Generic import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.App.Data import *
from System.Data import *
def BeginOperationTransaction(e):
if e.DataEntitys is not None and e.DataEntitys.Length > 0:
listItems = {};
bomIds = [];
orgIds = [];
for billData in e.DataEntitys:
entryDatas = billData["SaleOrderEntry"];
if entryDatas is not None and entryDatas.Count > 0:
for entryData in entryDatas:
orgIds.append(Convert.ToString(entry
Python校验销售订单的BOM不是供应组织下的BOM
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



