NC6在删除单据时 自动编码退号,此处是已供应商为例。以下方法位于 供应商基本信息后台服务实现类 “nc.impl.bd.supplier.baseinfo.SupplierBaseInfoImpl” 中
private IBillcodeManage getBillcodeManage() {
if (this.billcodeManage == null) {
this.billcodeManage = NCLocator.getInstance().lookup(IBillcodeManage.class);
}
return this.billcodeManage;
}
@Override
public void deleteSupplierVO(SupplierVO supplierVO) throws BusinessException {
CustbankVO[] svos = supplierVO.getSupbankacc();
Set<String> pk_bankaccbasSet = new HashSet<String>();
if (!ArrayUtils.isEmpty(svos)) {
for (CustbankVO svo : svos) {
pk_bankaccbasSet.add(svo.getPk_bankaccbas());
}
}
this.deleteVO(supplierVO);
// 删除客商银行账户中对应的银行账户的数据
if (!pk_bankaccbasSet.isEmpty()) {
getBankaccBaseService().deleteCustSupBankAccbasVOs(pk_bankaccbasSet.toArray(new String[0]));
}
// 自动编码退号
BillCodeContext billCodeContext = this.getBillcodeManage().getBillCodeContext(ISupplierConst.SUPPLIER_NBCRCODE,
supplierVO.getPk_group(), supplierVO.getPk_org());
// 存在编码规则时,退号
if (billCodeContext != null && !BDDistTransResourceSaveUtil.isBDDistData()) {
this.getBillcodeManage().returnBillCodeOnDelete(ISupplierConst.SUPPLIER_NBCRCODE, supplierVO.getPk_group(),
supplierVO.getPk_org(), supplierVO.getCode(), supplierVO);
}
}
NC6 单据编号相关类:
nc.pub.billcode.impl.BillCode
nc.pub.billcode.impl.BillCodeManageImpl
nc.pub.billcode.impl.BillCodeMemoryManager:单据号申请请求级内存管理类
nc.pub.billcode.impl.BillCodeRegion:新申请单据号存放的内存区域类
nc.pub.billcode.impl.BillcodeRuleImpl:编码规则服务实现类
nc.pub.billcode.impl.BillCodeRuleOperationConst:编码规则业务操作的元数据id
nc.pub.billcode.impl.BillcodeRuleQryImpl
nc.pub.billcode.impl.BillCodeServiceComponent
nc.pub.billcode.impl.InnerBillcodeMangeImpl:获取编码的内部事务类,因为原事务,在解锁后存在未提交数据库情况,这时多线程访问取号,可能存在重号。
nc.pub.billcode.impl.LeveledBillCodeManageImp:按单据类型定制规则取编码号的类,其中各个取号的方法都调用nc.pub.billcode.itf.IBillcodeManage中的方法和事务,本类不直接操作BillCodeMemoryManager
nc.pub.billcode.impl.NBCRServiceImpl
NC6 批量操作的后台服务的基类
//NC分层后批处理服务
nc.bs.bd.baseservice.md.BDBatchBaseService<T extends SuperVO> extends nc.bs.bd.baseservice.md.BatchBaseService<T extends SuperVO>
NC6 单个操作的后台服务的基类
//NC分层后单个处理服务
nc.bs.bd.baseservice.md.BDSingleBaseService<T extends SuperVO> extends nc.bs.bd.baseservice.md.SingleBaseService<T extends SuperVO>
以下的是转发,原文链接:https://blog.csdn.net/u010890857/article/details/51276371
nc 调用后台接口 生成单据编码可以使用下列方法:
1.
IBillcodeManage iBillcodeManage = (IBillcodeManage) NCLocator.getInstance().lookup(IBillcodeManage.class.getName());
String standardCode = null;
standardCode = iBillcodeManage.getBillCode_RequiresNew("bx","000199100000000002DC", "000188100000000R1Z6Q",new BXHeaderVO());
2.
new HYPubBO().getBillNo(单据类型, 组织, null, null);
3.
new BillcodeGenerater ().getBillCode (单据类型, 组织,null,null);
4.
IUifService service = ((IUifService) NCLocator.getInstance().lookup(IUifService.class.getName()));
standardCode = service.getBillNo("HZ03", "000188100000000R1Z6Q","000199100000000002DC", null);
个人觉得,第一种方法比较靠谱,报销单单据编号配置在集团下,调用的单据类型是bx,见下截图:
第一种方法最后一个参数随便传一个带有单据编号的SurperVO即可。
例如:通过编码规则生成物料编码。
需求:客户在维护物料分类、物料名称、规则型号等 后不维护物料编码,而是通过NC编码规则生成物料编码 用来区别物料编码的不重复及唯一性。
思路分析:通过编码规则定义-全局 了解到物料编码的生成规则基于流水号的形式
比如规则定义:物料分类编码+流水号 (5+7)
( 物料分类为5位 已后补位0的形式在展现 那样编码就会做到唯一性)
举例来说:
1 钢材类 那么 物料编码为10000 0000001;
2 五金类 那么 物料编码为 20000 0000001;
内容如下:
单据基于元数据模型:
IBillcodeManage.getBatchBillCodes_RequiresNew (String billTypeCode, String pk_group,String pk_org, billvo vo,int num)
参数说明:billTypeCode 单据类型
pk_group 集团主键
pk_org 组织主键
billvo 编码实体数据需编码的单据是基于元数据的,billvo为单据vo,
num 批取编码的数量
代码实现:
IBillcodeManage codemanage = (IBillcodeManage) NCLocator.getInstance().lookup(IBillcodeManage.class);//调用接口
MaterialVO vo = new MaterialVO();//物料vo
vo.setPk_marbasclass(wlfl);//物料分类主键 用来取得物料分类下的物料编码
String[] wlbms= codemanage.getBatchBillCodes_RequiresNew("material",pk_group,pk_group,vo,1);
String wlbm= wlbms[0];//物料编码
//vo.setPk_group("001");//集团
//vo.setPk_org("001");//公司
//vo.setCode(code);//物料编号
//vo.setName(wlname);//物料名称