2015年3月22日 星期日

現金及內部控制

現金(cash), 是企業作為交易的媒介與支付的工具, 必須是企業可以隨時支配運用, 未指定用途, 亦沒有受到法令或其他約定之限制.

未具貨幣型態(即紙幣及硬幣)而被視為現金之項目, 包括旅行支票、銀行活期存款、支票存款、定期存款、即期支票、即期票據(本票及匯票)、銀行本票(可隨時向銀行要求兌現)及郵政匯票等.

約當現金(cash equivalent)是指隨時可轉換成定額現金且即將到期而其利率變動對其價值影響甚少之投資, 包括自投資日起3個月內到期之短期票券及附賣回條件之票券等.

現金是企業所有資產中流動性(變現性)最高的資產, 因為現金不需要經過任何變現程序, 就可以用來購買資產、支付費用及償還債務.

良好的現金管理, 應該要能達到下列目標:
1.所有的現金收支交易與保管, 均應確實依照規定程序處理
2.對於即將到期的債務, 有足夠的現金可以償還
3.避免持有過多的閒置現金
4.防止因竊盜或舞弊而造成現金之損失
5.迅速且正確提供現金收支資料, 使企業能有效進行資金調度與運用

內部控制(internal control): 主要在提高會計記錄的正確性與可靠性, 並保護資產的安全.
現金管理通則:
1.現金保管與會計記錄工作應由不同人負責擔任
2.任何交易應避免由一人或一部門負責完成, 以利相互核對勾稽
3.盡可能地集中現金作業的收取或支付, 且收付現金立即適當地記入帳冊
4.銀行存款調節表應定期由出納與處理現金帳務以外之人員編製或覆核

零用金(petty cash fund)制度應採定額零用金制, 即一開始時先提撥一固定現數額交給零用金保管員, 領用人檢具原始憑證並經適當層級主管核准後, 才可以向零用金保管員串請付款.

找零金(change fund)是企業、百貨公司或便利商店等, 為方便出納人員找零之用, 而將一筆零公存放在收銀機處, 一般也將它列入現金之一部分.

銀行存款調節表(bank reconciliation): 分析公司帳載與銀行記錄間差異金額與原因的工具

差異原因:
1.公司已記帳, 銀行尚未記帳:
(1)公司已記帳,銀行尚未記帳: 例如將即期支票存入銀行, 但因票據交換導致銀行未能即時入帳, 或企業收到現金, 因趕不及於當日銀行之營業時間內存入, 而導致銀行未記帳, 此情形稱為在途存款(deposit on transit)
(2)公司已記存款減少, 銀行尚未記載: 例如已簽發即期支票, 但支票尚未交給廠商, 或已交付給廠商, 但廠商尚未存入銀行請求支付, 這類就是所謂的未兌現支票(outstanding check).
2.銀行已記帳, 公司尚未記帳
(1)銀行已記錄存款增加, 公司尚未記載: 例如銀行代公司收取票據等款項
(2)銀行已記存款減少, 公司尚未記載: 例如銀行代公司支付電話費、水電費和稅款等
3.公司或銀行發生記帳錯誤

銀行存款調節表之格式:
1.調節至正確餘額
2.以公司帳載餘額為準
3.以銀行記錄餘額為準

IFRS解釋對存款期間超過3個月以上之定存不應歸類為約當現金.

2015年3月6日 星期五

Oracle EBS workflow: WF_ENGINE.AbortProcess

針對已過很久都未結束的workflow, 可用WF_ENGINE.AbortProcess來處理, 以讓資料符合被purge的條件.

測試時覺得OK,資料筆數真的減少了, 但在正式區有個問題, 對PO的workflow作abort時, 會發通知信給廠商, 說明原先的作業已終止(例如原先有由系統發信要求廠商回應), 而且標題是以Cancelled開頭, 造成廠商感到困惑而詢問, 採購也來問是什麼問題. 還好只先作了兩萬筆.

程式可參考以下:



declare
  cursor c1 is
  select item_type, item_key
    from wf_items
   where begin_date < (sysdate - 1000)
     and end_date is null;

  v_count number:=0;    
begin
  dbms_output.put_line('Begin: '||to_char(sysdate,'yyyymmdd hh24:mi:ss'));
  for c_rec in C1 loop
    WF_ENGINE.AbortProcess(c_rec.item_type, c_rec.item_key);
   
    if v_count<50 then
      v_count := v_count+1;
    else
      v_count := 1 ;
      wf_purge.total;
      commit;
    end if; 
  end loop;
  dbms_output.put_line('End:   '||to_char(sysdate,'yyyymmdd hh24:mi:ss'));

end;