NC正常推单流程:
生产报告->完工报检单->质检报告
生产报告->产成品入库
NC内置单据转换规则。
实际业务流程:(客户没上生产,所以通过)
完工报检单->质检报告->产成品入库
无转换规则 手动拼VO生单
// 完工报检单 推 产成品入库单
private void C001_TO_46(List<ApplyHeaderVO> list) {
ArrayList<FinProdInVO> arrayList = new ArrayList<FinProdInVO>();
// 产成品入VO
FinProdInVO finProdInVO = new FinProdInVO();
// 入库表头
FinProdInHeadVO head = new FinProdInHeadVO();
//当前时间
UFDateTime ufDateTime = new UFDateTime();
ApplyHeaderVO applyVO_Head=list.get(0);
//表头封装VO
head.setApprover("~");// 审批人
head.setBillmaker(applyVO_Head.getBillmaker());// 制单人
head.setCbizid("~");// 业务员
head.setCdptid(applyVO_Head.getPk_applydept());// 部门
head.setCdptvid(applyVO_Head.getPk_applydept_v());// 部门
FinanceOrgVO getCorpoid = NC.GetCorpoid(applyVO_Head.getPk_org());
head.setCorpoid(getCorpoid.getPk_financeorg());// 公司
head.setCorpvid(getCorpoid.getPk_vid());// 公司版本
head.setCprocalbodyoid(applyVO_Head.getPk_org()); // 生产库存组织最新版本
head.setCprocalbodyvid(applyVO_Head.getPk_org_v()); // 生产库存组织
head.setCprowarehouseid(applyVO_Head.getPk_stordoc()); // 生产仓库
head.setCreationtime(ufDateTime); // 创建时间
head.setCreator(applyVO_Head.getCreator()); // 创建人
//查询输入库类型
BilltypeVO selBillTypeBycode = NC.SelBillTypeBycode("46-01", applyVO_Head.getPk_group());
head.setCtrantypeid(selBillTypeBycode.getPk_billtypeid()); // 出入库类型 CTRANTYPEID
head.setCwarehouseid(applyVO_Head.getPk_stordoc()); // 仓库
head.setCwhsmanagerid("~"); // 库管员
head.setDbilldate(AppContext.getInstance().getBusiDate()); // 单据日期
head.setDmakedate(AppContext.getInstance().getBusiDate()); // 制单日期
head.setFbillflag(2);// 单据状态// 1=删除,2=自由,3=签字,4=审核,5=审核中,6=审核不通过,7=已调差状态,
head.setIprintcount(0);// 打印次数
//head.setNtotalnum(applyVO_Head.getNnum());// 总数量
head.setNtotalpiece(ValueUtils.getUFDouble(0));
head.setNtotalvolume(ValueUtils.getUFDouble(0));
head.setNtotalweight(ValueUtils.getUFDouble(0));
head.setPk_group(applyVO_Head.getPk_group());//
head.setPk_measware("~");
head.setPk_org(applyVO_Head.getPk_org());// 库存组织
head.setPk_org_v(applyVO_Head.getPk_org_v());// 库存组织
head.setTs(new UFDateTime());// 时间戳
head.setVtrantypecode("46-01");
//表体行数组
FinProdInBodyVO[] bodyVOs = new FinProdInBodyVO[list.size()];
UFDouble Nnum=ValueUtils.getUFDouble(0);
//质检报告
ReportItemVO itemVO=null;
for (int i=0;i<list.size();i++) {
ApplyHeaderVO applyVO=list.get(i);
// 入库表体
FinProdInBodyVO bvo = new FinProdInBodyVO();
//根据报检单 查询 质检报告 是否存在 改判物料
itemVO=(ReportItemVO)NC.Get_reportbillb_By_applybill(ReportItemVO.class, applyVO.getPk_applybill());
//将原完工报检单 产品信息 赋值为 改判后的物料信息
if(null!=itemVO && itemVO.getBchanged().booleanValue() && itemVO.getBeligible().booleanValue()==false){
applyVO.setPk_material(itemVO.getPk_chgmrl());//改判后的物料
applyVO.setCastunitid(itemVO.getCastunitid());//单位
applyVO.setVchangerate(itemVO.getVchangerate());//转换率
}
//计算表头总数量
Nnum.add(applyVO.getNnum());
bvo.setBbarcodeclose(UFBoolean.valueOf(false));// 单据行是否条码关闭
bvo.setBonroadflag(UFBoolean.valueOf(false));// 批次是否封存
bvo.setBreworkflag(UFBoolean.valueOf(false));// 是否在途
bvo.setCasscustid("~");// 返修
bvo.setCastunitid(applyVO.getCastunitid());// 单位
bvo.setCbodytranstypecode("46-01");// 出入库类型
bvo.setCbodywarehouseid(applyVO.getPk_stordoc());// 仓库
// bvo.setCcorrespondbid("~");//对应入库单表体主键
// bvo.setCcorrespondhid("~");
// bvo.setCcorrespondtranstype("~");
// bvo.setCcorrespondtype("~");
bvo.setCffileid("~");
// bvo.setCfirstbillbid("~");
// bvo.setCfirstbillhid("~");
// bvo.setCfirsttranstype("~");
// bvo.setCfirsttype("~");
bvo.setChandvoertranstype("~");//
bvo.setCioliabilityoid("~");//
bvo.setCioliabilityvid("~");//
// bvo.setClocationid("~");//货位
bvo.setCmaterialoid(applyVO.getPk_material());// 物料
bvo.setCmaterialvid(applyVO.getPk_material());// 物料
bvo.setCsourcebillbid(applyVO.getPk_applybill());// 来源单据表体主键
bvo.setCsourcebillhid(applyVO.getPk_applybill());// 来源单据主键
bvo.setCsrcmaterialoid(applyVO.getPk_material());// 来源单据物料
bvo.setCsourcematerialoid(applyVO.getPk_material());// 来源物料
bvo.setCsourcetranstype(applyVO.getCtrantypeid());// 来源交易类型
bvo.setCsourcetype(applyVO.getCtrantypeid());// 来源单据类型
bvo.setCsrcmaterialoid(applyVO.getPk_material());
bvo.setCsrcmaterialvid(applyVO.getPk_material());
bvo.setCmffileid("~");//
bvo.setCorpoid(head.getCorpoid());// 公司
bvo.setCorpvid(head.getCdptvid());// 公司
bvo.setCprodasscustid("~");//
bvo.setCprodproductorid("~");//
bvo.setCprodprojectid("~");//
bvo.setCproductid(applyVO.getPk_material());// 主产品
bvo.setCproductorid("~");//
bvo.setCprodvendorid("~");//
bvo.setCprojectid(applyVO.getCprojectid());// 项目号
bvo.setCrowno(((i+1)*10)+"");// -----------行号
bvo.setCunitid(applyVO.getCunitid());// 主单位
bvo.setDbizdate(head.getDmakedate());// 入库日期
bvo.setFlargess(UFBoolean.valueOf(false));// 赠品
bvo.setFproductclass(1);// 产品类型
bvo.setNshouldassistnum(applyVO.getNnum());//应收应收数量
bvo.setNshouldnum(applyVO.getNnum());//应收应收数量
bvo.setNassistnum(applyVO.getNnum());// 实收主数量
bvo.setNnum(applyVO.getNnum());// 实收数量
bvo.setNvolume(ValueUtils.getUFDouble(0));//
bvo.setNweight(ValueUtils.getUFDouble(0));//
// 根据批次号 查询批次档案->批次主键
//BatchcodeVO getPkByCode = NC.GetPkByCode(applyVO.getVbatchcode());
//bvo.setStatus(2);
//bvo.setPk_batchcode(applyVO.getVbatchcode());// 批次主键
bvo.setVbatchcode(applyVO.getVbatchcode());// 批次主键
bvo.setPk_group(head.getPk_group());//
bvo.setPk_measware("~");//
bvo.setPk_org(head.getPk_org());//
bvo.setPk_org_v(head.getPk_org_v());//
bvo.setVbatchcode(applyVO.getVbatchcode());// 物料批次号
bvo.setVchangerate(applyVO.getVchangerate());//转换率
bvo.setVfree1(applyVO.getVfree1());
bvo.setVfree2(applyVO.getVfree2());
bvo.setVfree3(applyVO.getVfree3());
bvo.setVfree4(applyVO.getVfree4());
bvo.setVsourcebillcode(applyVO.getVbillcode());// 来源单据号
//填充表体行数组
bodyVOs[i] = bvo;
}
head.setNtotalnum(Nnum);// 表头总数量
//入库单VO填充表头
finProdInVO.setParent(head);
//入库单VO填充表体行
finProdInVO.setChildren(FinProdInBodyVO.class, bodyVOs);
//入库单VO放入待转数组
arrayList.add(finProdInVO);
//ArrayList转为数组
FinProdInVO[] finProdInVOs = arrayList
.toArray(new FinProdInVO[arrayList.size()]);
IPFBusiAction baction = (IPFBusiAction) NCLocator.getInstance().lookup(
IPFBusiAction.class);
FinProdInVO[] myrtn = (FinProdInVO[]) baction.processBatch(
"PUSHSAVE", "46", finProdInVOs, null, null, null);
问题:产品批号
在拼装产成品入库单VO时,通过批次查询批次主键赋值 这里是错误的。
因为批次的建立 是在产成品入库时 才会对应的生成批次档案。
所有这里VO的赋值只赋值 Vbatchcode 非 Pk_batchcode。这里NC的生单逻辑会根据传入的批次CODE自动创建批次档案 并填充批次Pk_batchcode。
类路径: nc.bs.ic.general.rule.before.BatchAttributeCheck
public void process(E[] vos)
/* */ {
/* */ try
/* */ {
/* 66 */ List<BatchcodeVO> batches = new ArrayList();
/* 67 */ Map<String, String> newBatchMap = new HashMap();
/* 68 */ checkAttribute(vos);
/* 69 */ for (E vo : vos) {
/* 70 */ handleOutBatch(vo);
/* */ }
/* 72 */ newBatchMap = processNewBatch(vos);
/* 73 */ batches = getBatch(vos);
/* */
/* 75 */ new ICBSContext().setICBatchBefore(batches);
/* 76 */ new ICBSContext().setNewBatchMap(newBatchMap);
/* */ }
/* */ catch (BusinessException ex) {
/* 79 */ ExceptionUtils.wrappException(ex);
/* */ }
/* */ }