固定资产处置申请单
前言
之前的文章中,已经介绍过固定资产源码的研究。这次要说的呢,就是基于上次的源码研究,做的固定资产处置申请单。刚开始的需求呢是说,简单的做个固定资产清理单仿照着系统标准产品的清理单,主要目的就是为了脱离固定资产清理业务系统。但是,这么简单的需求,又怎么可能呢?于是乎!客户又提出了,这个申请单要走工作流,单据上还有明细项的净值和原值的合计。单据编号呢还要符合编码规则自动生成。而且最最重要的是:这个申请单要能够进行BOTP单据转换,下推生成固定资产清理单!无不在印证着一句真理:稳定的需求是软件开发中的圣杯!(神圣的圣杯的背后就是意味着很难得到!)既然需求出来了,逃避不了,那就理清逻辑思路,规划实现流程。撸起袖子就是干!Just do it !
思维导图Xmind:http://pan.baidu.com/s/1c1C9fpQ
处理分录中去掉原有自动生成的按钮 新增分录 插入分录 删除分录
在 EditUI.java 中的 onShow()中添加如下代码即可去掉 DetailPanle 生成的上述三个按钮:
1 /* 2 * 去掉 分录中的自带的按钮(新增分录 插入分录 删除分录) 3 */ 4 Component c = getDetailTable().getParent().getParent(); 5 if (c instanceof DetailPanel) { 6 DetailPanel panel = (DetailPanel) c; 7 // 获取btn 8 Component[] components = panel.getComponents(); 9 for (int i = 0; i < components.length; i++) { 10 Component component = components[i]; 11 if (component instanceof KDPanel) { 12 KDPanel kdPanel = (KDPanel) component; 13 if ("controlPanel".equals(kdPanel.getName())) { 14 panel.remove(kdPanel); 15 } 16 } 17 } 18 }
审核时锁定单据 不允许修改单据 点击反审核以后 才可以修改单据
在审核按钮上 控制单据锁定 反审核按钮方法中 解除单据锁定
1 @Override 2 public void actionAudit_actionPerformed(ActionEvent e) throws Exception { 3 super.actionAudit_actionPerformed(e); 4 this.btnEdit.setEnabled(false); 5 this.btnAudit.setEnabled(false); 6 this.btnUnAudit.setEnabled(true); 7 this.prmtAuditor.setText(SysContext.getSysContext().getCurrentUserInfo().getName()); 8 9 // 锁定单据 不允许编辑 10 super.lockUIForViewStatus(); 11 }
1 @Override 2 public void actionUnAudit_actionPerformed(ActionEvent e) throws Exception { 3 // TODO Auto-generated method stub 4 super.actionUnAudit_actionPerformed(e); 5 this.btnEdit.setEnabled(true); 6 this.btnAudit.setEnabled(true); 7 this.btnUnAudit.setEnabled(false); 8 // 解除单据锁定 允许编辑 9 super.unLockUI(); 10 }
分录计算某列合计值赋值给指定 合计字段
遍历分录中的所有行,将指定列的值进行累加 得出的合计值 赋值给 合计字段
注意:有一个注意的点,在删除分录方法中,要重新调用 统计合计值方法。
1 /** 2 * 3 * <p> 4 * Title: calcTotalAmount 5 * </p> 6 * <p> 7 * Description: 8 * </p> 9 * 计算清理单账面的 原值以及净值合计 10 */ 11 private void totalAmount() { 12 BigDecimal clrAssetValue = ZERO; 13 BigDecimal clrNeatValue = ZERO; 14 BigDecimal clrAccuDepr = ZERO; 15 for (int i = 0; i < getDetailTable().getRowCount(); ++i) { 16 IRow row = getDetailTable().getRow(i); 17 BigDecimal cellAssetValue = (row.getCell("emValue").getValue() == null) ? ZERO 18 : (BigDecimal) row.getCell("emValue").getValue(); 19 BigDecimal cellInitEvalValue = (row.getCell("emNetValue") 20 .getValue() == null) ? ZERO : (BigDecimal) row.getCell( 21 "emNetValue").getValue(); 22 23 clrAssetValue = clrAssetValue.add(cellAssetValue); 24 clrNeatValue = clrNeatValue.add(cellInitEvalValue); 25 26 } 27 // 原值合计 28 this.assetValueTotal.setValue(clrAssetValue); 29 // 净值合计 30 this.neatValueTotal.setValue(clrNeatValue); 31 /* 32 * this.txtAssetValue.setText(FaClientUtils.formatDecimal(clrAssetValue, 33 * this.currencyScale)); 34 * this.txtNeatValue.setText(FaClientUtils.formatDecimal(clrNeatValue, 35 * this.currencyScale)); 36 */ 37 } 38 39 / 40 * 获取分录 kdtEntrys 41 * 42 * @return kdtEntrys 43 * @see com.kingdee.eas.custom.fixedassetclean.client.AbstractFaClearEditUI#getDetailTable() 44 */ 45 protected KDTable getDetailTable() { 46 return this.kdtEntrys; 47 }
编码规则
编码规则这部分,每个单据都会有一个单据编号。有两种方式来生成单据编号:一种是在代码中进行控制,页面初始化时 就给单据编号进行初始化赋值;一种是使用EAS中的编码规则 选中单据进行设置编码规则即可。
单据转换(BOTP)
单据转换也是利用EAS中的单据转换进行配置。其中需要注意的是,转换的目标单据分录中 每个属性都要支持 isForMapping = true (是否支持单据属性映射) 。这里有个小插曲就是,申请单转换清理单的时候,分录配置的时候看不到内容。原因就是因为 清理单 的 属性isForMapping 默认是false 。一直以为是我自定义的单据配置的有问题,浪费了很多精力。不懂规则,就是在做无用功!如果在BOTP里的EAS系统树种看不到自定义的单据,需要配置 子系统树配置文件,停掉EAS应用服务器,然后重新生成子系统树。(在思维导图图片中已经有提及介绍,这里不再赘述。)