多组织即时库存规格型号及物料属性错误显示为主组织解决办法
问题:多组织时,即时库存、即时库存明细查询时,规格型号以及基础资料属性都显示成主组织的。
原因:即时库存的数据表:[T_STK_INVENTORY]中,存储的物料id,是物料的masterid,也就是主组织的物料内码。所以最终物料的属性都是显示成主组织的。
解决办法:用列表插件,把相关字段的值重写。
代码实现:
c#
using Kingdee.BOS;
using Kingdee.BOS.App;
using Kingdee.BOS.Core.List.PlugIn.Args;
using Kingdee.BOS.Util;
using Kingdee.K3.SCM.Stock.Business.PlugIn;
using System.ComponentModel;
using System.Data;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.App.Data;
using System.Linq;
namespace LCNR.Kingdee.BOS.STK_InvSumQueryListEx
{
[Description("即时库存列表插件"), HotUpdate]
public class InvSumQueryListEx : InvSumQueryList
{
public override void FormatCellValue(FormatCellValueArgs args)
{
base.FormatCellValue(args);
string sql;
if (args.Header.FieldName.Equals("FModel"))
{
string org = args.DataRow["FSTOCKORGID"].ToString();
//获取主组织下的物料masterid
string masterid = args.DataRow["FMaterialId_Id"].ToString();
//根据masterid查到多个组织的物料记录,再根据库存组织id,拿到正确的物料记录
sql = string.Format(@"/*dialect*/select b.FSPECIFICATION from T_BD_MATERIAL a INNER JOIN T_BD_MATERIAL_L b ON a.FMATERIALID=b.FMATERIALID where a.FMASTERID={0} and a.FUSEORGID={1}", masterid, org);
DynamicObject dyobj = DBUtils.ExecuteDynamicObject(this.Context, sql).First();
//这个就是规格型号
args.FormateValue = dyobj["FSPECIFICATION"];
}
}
}
}
python:
import clr
clr.AddReference('System')
clr.AddReference('System.Data')
clr.AddReference('Kingdee.BOS')
clr.AddReference('Kingdee.BOS.Core')
clr.AddReference('Kingdee.BOS.App')
from Kingdee.BOS import *
from Kingdee.BOS.Core import *
from Kingdee.BOS.Core.List import*
from Kingdee.BOS.Core.List.PlugIn import *
from System import *
from System.Data import *
from Kingdee.BOS.App.Data import *
def FormatCellValue(args):
if (args.Header.FieldName=="FModel"):
org = args.DataRow["FSTOCKORGID"].ToString();
masterid = args.DataRow["FMaterialId_Id"].ToString();
sql = "/*dialect*/select b.FSPECIFICATION from T_BD_MATERIAL a INNER JOIN T_BD_MATERIAL_L b ON a.FMATERIALID=b.FMATERIALID where a.FMASTERID={0} and a.FUSEORGID={1}".format(masterid, org);
dyobj = DBUtils.ExecuteDynamicObject(this.Context, sql);
args.FormateValue = dyobj[0]["FSPECIFICATION"];
插件注册后放在原有插件之前,不停用原有插件。
LCNR信息部 2022.12.29
多组织即时库存规格型号及物料属性错误显示为主组织解决办法
本文2024-09-16 18:34:01发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-22986.html