前言
之前的文章中,已經介紹過固定資產源碼的研究。這次要說的呢,就是基於上次的源碼研究,做的固定資產處置申請單。剛開始的需求呢是說,簡單的做個固定資產清理單仿照着系統標准產品的清理單,主要目的就是為了脫離固定資產清理業務系統。但是,這么簡單的需求,又怎么可能呢?於是乎!客戶又提出了,這個申請單要走工作流,單據上還有明細項的凈值和原值的合計。單據編號呢還要符合編碼規則自動生成。而且最最重要的是:這個申請單要能夠進行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應用服務器,然后重新生成子系統樹。(在思維導圖圖片中已經有提及介紹,這里不再贅述。)
