子模塊和GL之間關聯的變化
12i在功能模塊上的變化很多,比如,基本每個模塊都啟用了MOAC特性,新增加了子帳模塊,稅模塊等等很多新的模 塊,OPM庫存和離散庫存集成了。不過這些變化中,大部分不是我們需要重點關注的,不過有一個東西需要重點關注那就是子帳模塊。子帳模塊功能非常強大,現 在所有的子模塊會計分錄都可以使用特定的公式配置出來。但是對技術而言,我們不太關心如何配置生成會計分錄,我們只關心子模塊的會計分錄和GL的會計分路 之間的關聯性,以方便我們做子模塊和GL的對應報表。然而,現在如果你要做對應報表,你就必須要了解子帳。因此,在這里重點只介紹子帳。
子帳的概念——SLA(SubledgerAccounting)
概念
子帳是子分類帳會計的簡稱,字面上的含義就是子分類帳會計分錄,但是這東西到底用來干嗎的呢?!
通俗的說:
1、子分類帳會計其實就是連接子模塊會計和GL憑證之間的橋梁,更簡單的說,就是子模塊和GL之間的橋梁。所有子模塊(包括FA)產生的會計分錄都是使用SLA產生的,存放在SLA的表中,然后通過過帳程序過帳到GL。有點類gl_interface表的功能。
2、子分類帳會計的第二層意思:在各個子模塊都有一套獨立的會計分錄,看起來跟GL其實沒太大區別,這就意味着在子模塊其實就可以計算科目余額了。只是可惜,到目前為止我還沒有類似gl_balance的表來存放科目余額。
3、 各子模塊目前還是可以有自己的分配帳戶(就是以前查看會計科目看到的東西),分別存放在自己的分配表中,比如,AP還是存放在ap_invoices_distributions中,引入SLA后,把這個功能稱為“事物處理會計”,和子分類帳會計的不同點在於,事物處理會計是通 過自動會計或分配產生,而子分類帳會計是根據定義會計事件等公式產生的,分別存於不同的地方。
子帳架構
解釋:
1、 子分類帳的產生有兩種方式,一種方式是直接從子模塊的事物處理會計,一種是直接從子模塊的事物處理上取得。
2、 子模塊的事物處理會計和子分類帳會計是兩個不同的東西,一定要區別對待,傳送到GL的是子分類帳會計,並非事物處理會計。
3、 由於子分類帳會計的來源可能是事物處理,也可能是事物處理會計,因此很可能存在差異,這是SLA目前的缺陷。
子分類帳帶來的益處
1、 靈活的定義會計分錄的產生規則,包括摘要,借方和貸方
2、 一個事物處理可以過帳到多個ledger(就是11i的帳簿),這給跨國集團管理多個帳簿帶來很大的好處
3、 統一了子模塊會計分錄的存放和產生規則,也就是說,各個子模塊都可以根據自身的情況設置會計規則,但是這些規則產生的會計分錄都回存放在SLA的表中。
4、 利於擴展,ORACLE委托外包的子模塊產生的會計分錄更容易集成到EBS
SLA的幾個重要關鍵詞
SLA 的關鍵詞有很多,不過和我們寫程序密切相關的應該是下面幾個關鍵詞。這幾個關鍵詞是我們弄清楚子模塊和GL之間的關鍵。如果理解了這幾關鍵詞在SLA中的 具體位置以及作用,加上SLA的的架構圖,很容易的就理解了SLA作為子模塊和GL的橋梁作用,對過帳程序具有深刻的理解,便於我們以后編寫追溯程序以及 追溯報表。
會計事件(accountevent)
會計事件,就是一個事物處理的不同事件類型產生的記錄,它結合了主要分類帳,事件類 型,事件分類。一個事物處理可能會有多個會計時間,因為一個事物處理可能發生多種動作,而每個動作都需要產生相應的會計憑證。因此,我們可以把一個會計事 件看成是一張完整的憑證,我們把這張憑證錄入到子模塊的會計分錄表里就形成了完整的會計分錄。所以,我對會計事件的理解通俗歸納為以下幾點:
1、 會計事件就相當於一張憑證,錄入到GL就是一對會計分錄
2、 同一個事物處理,比如收款可能會對應多個會計事件,因為收款創建會產生會計事件,收款核銷也是一個會計事件。
查看路徑:子模塊超級用戶/查詢/會計事件
主要分類帳(leadger)
分類帳的概念在12i中表示的是帳簿,也就是11i的SOB,主要分類帳決定了過帳到哪個SOB
事件實體(EVENTENTITY)
事 件實體決定了會計分錄來源,以應收為例子,事件實體決定了到底是從 “應收事物處理”過來的還是從“收款”過來的。存放在表:xla_entity_types_vl中,會計分錄和事物處理關聯的表是是xla_transaction_entities ,事件實體同時定義了關聯的標識是哪個字段,存放在xla_entity_id_mappings,下面我會詳細介紹怎么做關聯。
設置路徑路徑:子模塊超級用戶/設置/會計/子分類帳會計/事件/事件模型
事件分類(EVENTCLASS)
事件分類是根據事件實體進一步區分會計分錄的方法。比如,收款分為“收款”和“雜項收款”,事件分類的表為:xla_event_classes_v,屬於xla_transaction_entities的子表。
設置路徑路徑:子模塊超級用戶/設置/會計/子分類帳會計/事件/事件模型
事件類型(EVENTTYPE)
事件類型是比事件分類更小的事件划分方法,每個事件分類會細分成多個事件類型。比如:收款會分成:收款已核銷,收款未核銷,收款已更新等等類型。存放在表:xla_event_types_vl中。
設置路徑路徑:子模塊超級用戶/設置/會計/子分類帳會計/事件/事件模型
SLA&GL關系模型
關聯模型中,實際參與的表很多,我們只拿最重要的表來描述,以便大家入門,不至於摸不着頭腦,力求簡單。
基礎事件關系圖
xla_entity_types_vl(事件實體)
|――xla_entity_id_mappings(實體ID對應表)
|――xla_event_classes_v(事件分類)
|――xla_event_types_vl(事件類型)
子分類帳關系圖
xla_transaction_entities(會計事物處理實體)
|――xla_events(會計事件)
|――xla_ae_headers(子帳頭)
|――xla_ae_lines(子帳行)
|――xla_distribution_links(關聯事物處理信息)
子模塊和GL關系圖
gl_import_references(總帳參考)
|(gl_sl_link_id,gl_sl_link_table)
xla_ae_lines(子帳行)
說明:GL和子模塊之間的關聯是通過gl_import_reference實現的,關鍵字段是gl_sl_link_id,gl_sl_link_table。
GL->子模塊追溯
偽代碼
begin
--根據GL信息找到相關的ae_header_id,ae_line_num,je_source
--特別注意,這里可能存在一對多關系
--一對多在業務上表現為匯總過帳
select xal.ae_header_id,xal.ae_line_num,jh.je_source
from gl_je_lines jl,
gl_je_headers jh,
gl_import_references gir,
xla_ae_lines xal
where jl.je_header_id=gir.je_header_id
and jh.je_header_id=jl.je_header_id
and jl.je_line_num=gir.je_line_num
andgir.gl_sl_link_id=xal.gl_sl_link_id
andgir.gl_sl_link_table=xal.gl_sl_link_table
and jl.je_header_id=:1
and jl.je_line_num=:2
--根據je_header_id找到相應的會計實體,主要是需要實體代碼和幾個source_id
--通過source_id....和entity_code的組合判斷,可以准確的追溯到具體的事物處理
select xte.entity_code
,xte.source_id_int_1
,......
,xte.source_id_char_1
,......
,xte.security_id_int_1
,xte.security_id_int_2
......
from xla.xla_transaction_entities xte,
xla_ae_headers xah
where xah.ae_header_id=:1
and xte.entity_id=xah.entity_id
andxte.application_id=xah.application_id
--根據日記帳來源查詢xla_subledgers表獲得drilldown的程序
--由於這部分是寫死的,因此,對程序員來說,只能做參考
--至於怎么寫的靈活和通用,還需要參考琢磨寫成一個通用的動態SQL
select xs.drilldown_procedure_name
from xla.xla_subledgers xs
where xs.je_source_name=:je_source_name
and xs.application_id=:application_id
--上面的信息查詢出來后,組合成一個動態SQL,返回一個准確的結果集
--當然,通常情況下,我們都沒有考慮寫成通用程序,因此可以寫死是
--哪些會計事件,會計實體代碼
END;
一個簡單的列子(收款和總帳憑證對應報表,簡單寫死事件實體)
SELECT CR.CASH_RECEIPT_ID CASH_RECEIPT_ID,
CR.DOCUMENT_NUMBER GATHER_NUM,
JH.DOC_SEQUENCE_VALUE DOC_SEQUENCE_VALUE,
CR.CUSTOMER_NAME CUSTOMER_NAME,
CR.REMIT_BANK_BRANCH BANK_NAME,
CR.REMIT_BANK_ACCOUNT BANK_ACCOUNT,
CR.RECEIPT_NUMBER RECEIPT_NUMBER,
CR.AMOUNT AMOUNT,
CR.STATE_DSP STATE_DSP,
H.EVENT_TYPE_CODE EVENT_TYPE_CODE
FROMXLA_AE_LINES L,
XLA_AE_HEADERS H,
XLA.XLA_TRANSACTION_ENTITIES TE,
GL_IMPORT_REFERENCES IR,
GL_JE_HEADERS JH,
AR_CASH_RECEIPTS_V CR
WHERE CR.CASH_RECEIPT_ID = TE.SOURCE_ID_INT_1(+)
AND CR.CURRENCY_CODE = P_CURRENCY
AND TE.ENTITY_CODE(+) = 'RECEIPTS'
AND TE.ENTITY_ID = H.ENTITY_ID(+)
AND TE.APPLICATION_ID = H.APPLICATION_ID(+)
AND H.AE_HEADER_ID = L.AE_HEADER_ID(+)
AND H.APPLICATION_ID = L.APPLICATION_ID(+)
AND L.GL_SL_LINK_TABLE = IR.GL_SL_LINK_TABLE(+)
AND L.GL_SL_LINK_ID = IR.GL_SL_LINK_ID(+)
AND IR.JE_HEADER_ID = JH.JE_HEADER_ID(+)
AND L.AE_LINE_NUM(+) = 1
AND H.ACCOUNTING_ENTRY_STATUS_CODE(+) = 'F'
AND H.ACCOUNTING_DATE BETWEEN TRUNC(P_START_DATE) AND(TRUNC(P_END_DATE) + 86399 / 86400)
SLA總結
通過上面的介紹,我們現在應該至少了解到了如下知識點:
1、SLA的簡單架構,在12i中SLA扮演什么角色?
2、SLA的幾個關鍵詞,並且知道如何從界面上找到他們?
3、SLA幾個表的關系模型,以及和GL的關系模型?怎樣從子模塊找到GL的憑證,怎樣從GL追溯到子模塊?
由於SLA非常復雜,因此在這里這點篇幅不能全部介紹完,我只是站在技術的角度來看SLA,看我們到底要做些什么變化