本文介绍了如何在单据处理中根据物料分组选择不同编码规则生成单据编号的方法。一般通过默认编码规则生成编号,但可通过插件实现根据物料分组使用不同编码规则。示例中展示了如何通过表单插件,在物料分组为特定值时,采用特定的编码规则生成单据编号,否则使用默认规则。
一般而言,一个单据存在一个默认的编码规则,保存时通过默认编码规则来生成单据编号。目前每个单据可以定义多个编码规则。一般的使用场景是,通过单据类型修改绑定不同的编码规则。然后每种单据类型来通过对应的编码规则来生成单据编号。但是某些用户提出能不能在基础资料通过插件来实现类似场景,这里我来写一个简单的示例。
对于基础资料,一般只能通过默认编码规则来生成编号,如果需要根据具体的数据分类不同,使用不同的编码规则生成编号,就需要通过插件来实现了。这里,我写了一个简单示例,通过表单插件的方式来实现物料通过不同的编码规则生成编号。
首先通过编码规则的名称来查询具体FRULEID的值
以下是我的示例名称,具体需要修改成自己对应的编码规则名称
select FRULEID from T_BAS_BILLCODERULE_L t where t.fname ='插件调用编码规则';
2.具体演示的需要是这样的,如果物料的分组编码是“SpeCodeRule”,就采用“插件调用编码规则”这个编码规则来生成单据编号,其他情况,使用默认编码规则来生成单据编号。
以下是我写的插件示例,请根据自己具体的需求来修改,编译好插件以后,在单据上添加编写的插件:
using Kingdee.BOS.App.Core;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Bill.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using System.ComponentModel;
namespace GalaxyPlugin.Bill
{
[Description("按照不同编码规则生成编号插件")]
public class BillCodeRulePlugin : AbstractBillPlugIn
{
public override void BeforeSave(BeforeSaveEventArgs e)
{
base.BeforeSave(e);
//获取物料分组是否是特定编码规则分组
var groupData = this.Model.DataObject["MaterialGroup"];
if (groupData != null && groupData is DynamicObject)
{
const string specifiedGroupNum = "SpeCodeRule";
var groupNum = ((DynamicObject)groupData)["Number"];
if (groupNum != null && groupNum.ToString().Equals(specifiedGroupNum))
{
//满足特定分组使用自定义编码规则生成单据编号
GenerateBillNoById();
}
}
}
private void GenerateBillNoById()
{
/*
* 通过下面语句查询到FRULEID的值,得到 FRULEID=5c48033be79374
* select * from T_BAS_BILLCODERULE_L t where t.fname ='插件调用编码规则';
*/
BusinessDataService dataService = new BusinessDataService();
var businInfo = View.BillBusinessInfo;
var dataObjs = new DynamicObject[] { this.Model.DataObject };
bool isUpdateMax = true;
const string specifiedRuleId = "5c48033be79374";
var billNoList = dataService.GetBillNo(Context, businInfo, dataObjs, isUpdateMax, specifiedRuleId);
this.Model.SetValue(businInfo.GetBillNoField().Key, billNoList[0].BillNo);
}
}
}
以下演示绑定插件后的效果:
在不选择SpeCodeRule情况下,使用默认编码规则生成单据编号,如下:
选择SpeCodeRule分组以后,使用了特定的编码规则生成编号:
推荐阅读