金蝶二开代码片段-获取物料清单最高版本BOM子项物料信息
一、应用场景
自定义单据录入物料实现和标准产品一样携带默认最高BOM版本的逻辑,类似生产订单、物料清单正查录入物料默认携带最高BOM版本
二、服务接口说明
1 2 3 4 5 6 7 | /// <summary> /// 获取最高版本BOM,支持辅助属性 /// </summary> /// <param name="ctx"></param> /// <param name="lstMasterOrgId">物料MasterId,使用组织,辅助属性的三值集合</param> /// <returns></returns> IEnumerable<DynamicObject> GetHightVersionBom(Context ctx, List<Tuple< long , long , long >> lstMasterOrgId); |
参数说明:
ctx:上下文;
lstMasterOrgId:分别是物料MasterId,使用组织Id,辅助属性Id的三值集合;(若无辅助属性,可以直接给0,另外两个必录)
三、调用方式
<1>客户端调用:例如表单插件、账表插件(需要引用组件Kingdee.K3.MFG.ServiceHelper.dll)
1 2 3 | List<Tuple< long , long , long >> dicMasterOrgIds = new List<Tuple< long , long , long >>(); dicMasterOrgIds.Add( new Tuple< long , long , long >(msterId, useOrgId, auxPropId)); List<DynamicObject> highVersionBomDatas = BOMServiceHelper.GetHightVersionBom( this .Context, dicMasterOrgIds).ToList(); |
<2>服务端调用:例如操作插件(需要引用组件Kingdee.K3.MFG.App.dll)
1 2 3 | List<Tuple< long , long , long >> dicMasterOrgIds = new List<Tuple< long , long , long >>(); dicMasterOrgIds.Add( new Tuple< long , long , long >(msterId, useOrgId, auxPropId)); List<DynamicObject> highVersionBomDatas=AppServiceContext.GetService<IBOMService>().GetHightVersionBom(ctx, dicMasterOrgIds ).ToList(); |
<3>SQL查询方式
select bom.FMATERIALID as wl ,bomc.FMATERIALID as zwl,bom.FUSEORGID,bomc.FBASENUMERATOR,bomc.FBASEDENOMINATOR
from T_ENG_BOM bom
left join T_ENG_BOMCHILD bomc on bom.FID =bomc.FID
left join T_BD_MATERIAL tbm on bomc.FMATERIALID =tbm.FMATERIALID
where bom.FDOCUMENTSTATUS ='C' AND bom.FFORBIDSTATUS ='A' and bom.FNUMBER in (select MAX(FNUMBER) from T_ENG_BOM group by FMATERIALID)
四、接口验证
手工在【物料清单正查】录入物料是否自动带出最高BOM版本,与接口返回内码保持一致。
五、最高BOM介绍
一个物料存在多个BOM的情况下,BOM版本携带的优先级判断规则:
按BOM版本从左到右一个字符一个字符进行比较,汉字>字母>数字,字母A-Z,Z最高;数字0-9 , 9最高;汉字拼音a-z , z最高。
六、示例代码片段
//存储成品物料
Dictionary<long, long> lstMasterOrgId = new Dictionary<long, long>();
DynamicObjectCollection entryCols = TbObj["FEntity"] as DynamicObjectCollection;
//循环成品明细
foreach (var entryObj in entryCols)
{
DynamicObject material_CP = entryObj[F_QYCM_MATERIAL_CP] as DynamicObject;
if (!material_CP.IsNullOrEmptyOrWhiteSpace())
{
if (!lstMasterOrgId.ContainsKey(Convert.ToInt64(material_CP["msterID"])))
{
lstMasterOrgId.Add(Convert.ToInt64(material_CP["msterID"]), orgid);
}
}
}
//查询物料对应物料清单BOM
IBOMService service = MFGServiceFactory.GetService<IBOMService>(this.Context);
//获取最高版本BOM数据
IEnumerable<DynamicObject> bomCols = service.GetHightVersionBom(this.Context, lstMasterOrgId);
物料清单,有个字段,【FISDEFAULT|是否新版本】,可以用这个字段,作为最高版本的判断吗?写SQL的时候
金蝶二开代码片段-获取物料清单最高版本BOM子项物料信息
本文2024-09-16 17:10:39发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14027.html