二开案例-【C#】如何获取物料清单成本查询结果

【应用场景】
需要根据指定bom获取物料清单成本查询结果,并将结果在其他场景使用。
【注意事项】
该实现方案实现已指定bom内码实现,相关参数都设置为默认,演示通过按钮触发,开发者可根据自身需求将代码封装自定义WebAPI接口。
星空版本不能低于PT-154002 [8.2.0.20240104]版本
【案例演示】
点击按钮,指定bom版本,获取物料清单成本查询结果。
【实现步骤】
需要引用组件
Kingdee.BOS
Kingdee.BOS.Core
Kingdee.BOS.Orm
Kingdee.K3.BD.ServiceHelper
Kingdee.K3.Core
Kingdee.K3.MFG.ServiceHelper
Kingdee.BOS.ServiceHelper
<1>编写表单插件,代码如下。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using Kingdee.BOS;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.SqlBuilder;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Kingdee.K3.BD.ServiceHelper;
using Kingdee.K3.Core.BD;
using Kingdee.K3.Core.BD.ServiceArgs;
using Kingdee.K3.Core.MFG.ENG.BomCost;
using Kingdee.K3.Core.MFG.ENG.BomExpand;
using Kingdee.K3.Core.MFG.ENG.ParamOption;
using Kingdee.K3.MFG.ServiceHelper;
using Kingdee.K3.MFG.ServiceHelper.ENG;
namespace ITIBB.App.ServicePlugIn.Business.PlugIn
{
/// <summary>
/// 自定义按钮 通过传递bom获取物料清单成本查询结果
/// </summary>
[Description("物料清单成本查询按钮调用")]
public class CustomExtBomQueryCost : AbstractDynamicFormPlugIn
{
public override void ButtonClick(ButtonClickEventArgs e)
{
base.ButtonClick(e);
if (e.Key.EqualsIgnoreCase("FButton_qtr"))
{
//传递参数,指定bom内码
List<long> bomIds = new List<long>();
bomIds.Add(144259);
bomIds.Add(144290);
//获取bom展开结果
List<DynamicObject> bomExpandData = this.ExtFillBomChildData(this.View.Context, bomIds);
//物料清单成本查询相关参数设置
BomCostArgs bomCostArgs = this.ExtGetQueryViewOption(this.View.Context);
//调用物料清单成本查询取价接口
IOperationResult funcResult = BomQueryCostServiceHelper.GetQueryBomPrice(this.Context, bomCostArgs, bomExpandData);
if (funcResult.IsSuccess)
{
//物料清单成本查询数据包
List<DynamicObject> resultBomDataLst = (List<DynamicObject>)funcResult.FuncResult;
}
}
}
/// <summary>
/// 构建价格查询参数
/// </summary>
/// <param name="ctx">上下文</param>
private BomCostArgs ExtGetQueryViewOption(Context ctx)
{
BomCostArgs bomCostArgs = new BomCostArgs();
DynamicObject viewDatas = this.View.Model.DataObject;
//需求数量,默认是1
bomCostArgs.NeetQty = 1;
//成本计算方式,默认是1
bomCostArgs.CostType = "1";
//取价截止日期,默认当前时间
bomCostArgs.ExpirationDate = DateTime.Now;
//排除供应商,默认为空
List<long> excSuppliers = new List<long>();
bomCostArgs.ExcSupplierMul = excSuppliers;
//包含委外加工费,默认false
bomCostArgs.IsSubProcessFee = false;
//外购件BOM子项不参与卷算,默认false
bomCostArgs.IsWgCost = false;
//取折后价,默认false
bomCostArgs.IsDiscountedPrice = false;
//bom使用组织,默认当前登录组织
long bomUseOrgId = this.Context.CurrentOrganizationInfo.ID;
bomCostArgs.BomUseOrgId = bomUseOrgId;
//有采购业务优先取采购价格,默认false
bomCostArgs.PurPriceCheck = false;
//以下参数均来自工程数据参数-物料清单成本查询
//取价范围、 优先取使用组织下,使用组织下没有,则取管理中心级别
long takeDays = MFGServiceHelper.GetSystemProfile<long>(this.Context, bomUseOrgId, "MFG_EngParameter", "DateScope", 0);
if (takeDays == 0)
{
//管理中心取不到,则默认180天
takeDays = MFGServiceHelper.GetSystemProfile<long>(this.Context, 0, "MFG_EngParameter", "DateScope", 180);
}
bomCostArgs.TakeDays = takeDays;
//单据来源
string priceSourceBill = MFGServiceHelper.GetSystemProfile<string>(this.Context, bomUseOrgId, "MFG_EngParameter", "SourceBill", "");
if (priceSourceBill.IsNullOrEmptyOrWhiteSpace())
{
//管理中心取不到,则默认采购订单返回
priceSourceBill = MFGServiceHelper.GetSystemProfile<string>(this.Context, 0, "MFG_EngParameter", "SourceBill", "ORDER");
}
bomCostArgs.PriceSourceBill = priceSourceBill;
//单价金额用量
string costQtyParam = MFGServiceHelper.GetSystemProfile<string>(this.Context, bomUseOrgId, "MFG_EngParameter", "CostQtyParam");
if (costQtyParam.IsNullOrEmptyOrWhiteSpace())
{
//管理中心取不到,则默认实际用量返回
costQtyParam = MFGServiceHelper.GetSystemProfile<string>(this.Context, 0, "MFG_EngParameter", "CostQtyParam", "1");
}
bomCostArgs.CostQtyParam = costQtyParam;
//价目表及参考成本汇率来源
string sourceRate = MFGServiceHelper.GetSystemProfile<string>(this.Context, bomUseOrgId, "MFG_EngParameter", "SourceRate");
if (sourceRate.IsNullOrEmptyOrWhiteSpace())
{
//管理中心取不到,则默认即期汇率返回
sourceRate = MFGServiceHelper.GetSystemProfile<string>(this.Context, 0, "MFG_EngParameter", "SourceRate", "SPOT");
}
bomCostArgs.SourceRate = sourceRate;
//取价范围、 优先取使用组织下,使用组织下没有,则取管理中心级别
string excSetAccountTpye = MFGServiceHelper.GetSystemProfile<string>(this.Context, bomUseOrgId, "MFG_EngParameter", "ExcSetAccountTpye'", "0");
bomCostArgs.ExcSetAccountTpye = excSetAccountTpye;
//日期排序
string orderByDateField = MFGServiceHelper.GetSystemProfile<string>(this.Context, bomUseOrgId, "MFG_EngParameter", "OrderByDateField", "2");
bomCostArgs.OrderByField = orderByDateField;
//其他扩展选项
bomCostArgs.Option = OperateOption.Create();
return bomCostArgs;
}
private List<DynamicObject> ExtFillBomChildData(Context ctx, List<long> bomIds)
{
List<DynamicObject> bomExpandData = new List<DynamicObject>();
//设置bom展开参数
MemBomExpandOption_ForPSV memBomExpandOption = this.ExtBomQueryExpandOption();
//设置展开数据源
List<DynamicObject> lstExpandSource = this.ExtBuildBomExpandSourceData(ctx, bomIds);
//调用物料清单成本查询bom展开
bomExpandData = BomQueryServiceHelper.GetBomQueryForwardResult(this.Context, lstExpandSource, memBomExpandOption);
//展开结果加载引用属性
FormMetadata formMetadata = (FormMetadata)Kingdee.BOS.ServiceHelper.MetaDataServiceHelper.Load(ctx, "ENG_BomQueryCost", true);
EntryEntity childEntity = formMetadata.BusinessInfo.GetEntryEntity("FBottomEntity");
DBServiceHelper.LoadReferenceObject(this.View.Context, bomExpandData.ToArray(), childEntity.DynamicObjectType, false);
return bomExpandData;
}
/// <summary>
/// 构建bom展开参数,以下参数的设置尽量保持一致
/// </summary>
/// <returns></returns>
private MemBomExpandOption_ForPSV ExtBomQueryExpandOption()
{
//初始化BOM展开选项
MemBomExpandOption_ForPSV memBomExpandOption = new MemBomExpandOption_ForPSV();
//BOM展开层级数 默认30层
memBomExpandOption.ExpandLevelTo = 30;
//是否要展开虚拟物料
memBomExpandOption.ExpandVirtualMaterial = false;
//不要删除虚拟件,否则会造成BOM树表层级中断,个别子项不显示
memBomExpandOption.DeleteVirtualMaterial = false;
//是否删除跳层行
memBomExpandOption.DeleteSkipRow = false;
//是否展开跳层行
memBomExpandOption.ExpandSkipRow = false;
//只显示采购件需指定为false,因为默认值是true
memBomExpandOption.IsShowOutSource = false;
//本次展开GUID
memBomExpandOption.BomExpandId = SequentialGuid.NewGuid().ToString();
//BOM展开的第一层是否考虑成品率 默认为FALSE
memBomExpandOption.ParentCsdYieldRate = true;
//BOM展开的子项是否考虑成品率 默认为FALSE
memBomExpandOption.ChildCsdYieldRate = true;
//展开结果处理方式:采用内存方式不需要保存进数据库
memBomExpandOption.Mode = Kingdee.K3.Core.MFG.EnumConst.Enums.BomExpand.Enu_BomExpandMode.KdMemoryOnly;
//BOM子项生效失效区间内需求日期 此处用当前电脑时间,可以自由指定,标准产品是需求日期
memBomExpandOption.ValidDate = DateTime.Now;
//获取工程数据参数【kdBySystemProfile:取系统参数 kdByPrecisonCal:采用精确计 kdByToleran二开案例-【C#】如何获取物料清单成本查询结果
【应用场景】需要根据指定bom获取物料清单成本查询结果,并将结果在其他场景使用。【注意事项】该实现方案实现已指定bom内码实现,相关参数...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



