Oracle EBS AR 应收模块取应收余额及期间发生额(事务维度)

这篇具有很好参考价值的文章主要介绍了Oracle EBS AR 应收模块取应收余额及期间发生额(事务维度)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近用户有个看应收余额的需求,按照会计期间+客户+应收事务上的弹性域 维度出具。

第一版

刚开始想法比较简单,从应收模块穿透到子分类账去取,AR模块跟应收账款余额相关的有三部分

  1. 应收事务(含标准及贷项发票)
  2. 收款去核销收入
  3. 应收事务调整

于是就同通过下面的sql来进行取

SELECT
/*+ leading(l,h)  use_hash(l,h) */
 CT.ORG_ID,
 ct.doc_sequence_value,
 CT.BILL_TO_CUSTOMER_ID,
 h.accounting_date      gl_date,
 h.period_name,
 l.entered_dr,
 l.entered_cr,
 l.accounted_dr,
 l.accounted_cr,
 l.code_combination_id,
 ct.attribute1,
 ct.attribute2,
 'TRANSACTIONS' entity_code,
 h.ledger_id,
 ct.customer_trx_id     bill_id
  FROM xla.xla_ae_headers           h,
       xla.xla_ae_lines             l,
       xla.xla_events               e,
       xla.xla_transaction_entities te,
       ra_customer_trx_all          ct
 WHERE h.application_id = l.application_id
       AND h.ae_header_id = l.ae_header_id
       AND h.application_id = e.application_id
       AND h.event_id = e.event_id
       AND h.application_id = te.application_id
       AND h.entity_id = te.entity_id
       AND te.application_id = 222
       AND te.entity_code = 'TRANSACTIONS'
       AND nvl(te.source_id_int_1, (-99)) = ct.customer_trx_id
       AND h.gl_transfer_status_code = 'Y'

UNION ALL
-- 收款、核销、杂项收款
SELECT
/*+ leading(l,h)  use_hash(l,h) */
 CR.ORG_ID,
 cr.doc_sequence_value,
 /* hca.cust_account_id,*/
 cr.pay_from_customer,
 h.accounting_date gl_date,
 h.period_name,
 l.entered_dr,
 l.entered_cr,
 l.accounted_dr,
 l.accounted_cr,
 l.code_combination_id,
 cr.attribute1,
 cr.attribute2,
 'APP',
 h.ledger_id,
 cr.cash_receipt_id
  FROM xla.xla_ae_headers h,
       xla.xla_ae_lines l,
       xla.xla_events e,
       xla.xla_transaction_entities te,
       ar_cash_receipts_all cr
 WHERE h.application_id = l.application_id
       AND h.ae_header_id = l.ae_header_id
       AND h.application_id = e.application_id
       AND h.event_id = e.event_id
       AND h.application_id = te.application_id
       AND h.entity_id = te.entity_id
       AND te.application_id = 222
       AND te.ledger_id = 2022
       AND te.entity_code = 'RECEIPTS'
       AND nvl(te.source_id_int_1, -99) = cr.cash_receipt_id      
       AND h.gl_transfer_status_code = 'Y'
UNION ALL
-- ADJUSTMENTS
SELECT /*+ leading(l,h)  use_hash(l,h) */
 ADJ.ORG_ID,
 ct.doc_sequence_value,
 ct.bill_to_customer_id,
 h.accounting_date gl_date,
 h.period_name,
 l.entered_dr,
 l.entered_cr,
 l.accounted_dr,
 l.accounted_cr,
 l.code_combination_id,
 ct.attribute1,
 ct.attribute2,
 'ADJUSTMENTS',
 h.ledger_id,
 ct.customer_trx_id
  FROM xla.xla_ae_headers           h,
       xla.xla_ae_lines             l,
       xla.xla_events               e,
       xla.xla_transaction_entities te,
       ar_adjustments_all           adj,
       ra_customer_trx_all          ct
 WHERE h.application_id = l.application_id
       AND h.ae_header_id = l.ae_header_id
       AND h.application_id = e.application_id
       AND h.event_id = e.event_id
       AND h.application_id = te.application_id
       AND h.entity_id = te.entity_id
       AND te.application_id = 222
       AND te.entity_code = 'ADJUSTMENTS'
       AND nvl(te.source_id_int_1, (-99)) = adj.adjustment_id
       AND adj.customer_trx_id = ct.customer_trx_id
       AND h.gl_transfer_status_code = 'Y'

初版测试后这个视图是能和总账余额表核对上的,但是用户想要以事务的弹性域维度进行统计,不想要收款上的弹性域,会产生干扰。那只能通过核销表去追溯事务了。
收款和收入的核销是多对多的关系。一笔收入可以被多个收款核销,一笔收款可以去核销多笔收入。

第二版

因为这个地方还需要统计指定期间范围内,借方发生多少,贷方发生多少,刚开始通过核销表上的event_id关联到子分类账的xla.xla_events,然后关联到子分类账上的凭证行,这样就能单独取到借方和贷方发生了,但是因为收款和事务的核销是多对多的关系,一笔收款去核销多个事务处理时,贷方应收账款分类上产生的是一个汇总的分录,关联后产生了重复,导致统计不准确。
只能舍弃子分类账层,从核销表取数了,核销表上status是’APP’表示是核销记录,其中amount_applied 字段是去冲减应收的,放到贷方,但是如果此字段是负数的话,不会产生一个贷方负数的分录,而是产生一个借方正数的分录,于是就加入了一个用case when判断来实现对借贷方赋值的操作,如下为完整sql

SELECT
/*+ leading(l,h)  use_hash(l,h) */
 CT.ORG_ID,
 to_char(ct.doc_sequence_value) doc_sequence_value,
 CT.BILL_TO_CUSTOMER_ID,
 h.accounting_date gl_date,
 h.period_name,
 l.accounted_dr,
 l.accounted_cr,
 l.code_combination_id,
 ct.attribute1,
 ct.attribute2,
 'TRANSACTIONS' ENTITY_CODE,
 h.ledger_id,
 ct.customer_trx_id
  FROM xla.xla_ae_headers           h,
       xla.xla_ae_lines             l,
       xla.xla_events               e,
       xla.xla_transaction_entities te,
       ra_customer_trx_all          ct
 WHERE h.application_id = l.application_id
       AND h.ae_header_id = l.ae_header_id
       AND h.application_id = e.application_id
       AND h.event_id = e.event_id
       AND h.application_id = te.application_id
       AND h.entity_id = te.entity_id
       AND te.application_id = 222
       AND te.entity_code = 'TRANSACTIONS'
       AND nvl(te.source_id_int_1, (-99)) = ct.customer_trx_id
       AND h.gl_transfer_status_code = 'Y'
UNION ALL
-- 核销
SELECT a.org_id,
       to_char(t.doc_sequence_value) doc_sequence_value,
       t.bill_to_customer_id,
       a.gl_date,
       substr(to_char(a.gl_date, 'YYYY-MM-DD'), 1, 7) period_name,
       CASE
          WHEN a.amount_applied < 0 THEN
           -a.amount_applied
          WHEN a.amount_applied > 0 THEN
           0
          WHEN a.amount_applied = 0 THEN
           0
       END accounted_dr,
       CASE
          WHEN a.amount_applied < 0 THEN
           0
          WHEN a.amount_applied > 0 THEN
           a.amount_applied
          WHEN a.amount_applied = 0 THEN
           0
       END accounted_cr,
       a.code_combination_id,
       t.attribute1,
       t.attribute2,
       'APP_RECEIPT',
       a.set_of_books_id,
       t.customer_trx_id
  FROM ar_receivable_applications_all a, ra_customer_trx_all t
 WHERE a.applied_customer_trx_id = t.customer_trx_id
       AND a.cash_receipt_id IS NOT NULL
       AND a.status = 'APP'
UNION ALL
-- ADJUSTMENTS
SELECT /*+ leading(l,h)  use_hash(l,h) */
 ADJ.ORG_ID,
 to_char(ct.doc_sequence_value) doc_sequence_value,
 ct.bill_to_customer_id,
 h.accounting_date gl_date,
 h.period_name,
 l.accounted_dr,
 l.accounted_cr,
 l.code_combination_id,
 ct.attribute1,
 ct.attribute2,
 'ADJUSTMENTS',
 h.ledger_id,
 ct.customer_trx_id
  FROM xla.xla_ae_headers           h,
       xla.xla_ae_lines             l,
       xla.xla_events               e,
       xla.xla_transaction_entities te,
       ar_adjustments_all           adj,
       ra_customer_trx_all          ct
 WHERE h.application_id = l.application_id
       AND h.ae_header_id = l.ae_header_id
       AND h.application_id = e.application_id
       AND h.event_id = e.event_id
       AND h.application_id = te.application_id
       AND h.entity_id = te.entity_id
       AND te.application_id = 222
       AND te.entity_code = 'ADJUSTMENTS'
       AND nvl(te.source_id_int_1, (-99)) = adj.adjustment_id
       AND adj.customer_trx_id = ct.customer_trx_id
       AND h.gl_transfer_status_code = 'Y';

第三版

经过用户核对后,还发现2个问题:

  1. 贷项和标准发票核销的时候,第2版还是抽的贷项的弹性域,其实应该抽被核销发票的弹性域
  2. 付款核销用case when 判断会虚增借方和贷方的发生额,导致和实际业务有差异

找了几个单据,发现如下规律:核销表ar_receivable_applications_all中 amount_applied字段:对于贷项去核销标准发票,
则生成如下分录
借-应收账款 -amount_applied
贷-主营收入 --amount_applied

对于收款去核销标准发票则生成如下分类
借: 预付账款 amount_applied
贷: 应收账款 amount_applied
所以改造后sql如下:

SELECT
/*+ leading(l,h)  use_hash(l,h) */
 CT.ORG_ID,
 to_char(ct.doc_sequence_value) doc_sequence_value,
 CT.BILL_TO_CUSTOMER_ID,
 h.accounting_date gl_date,
 h.period_name,
 l.accounted_dr,
 l.accounted_cr,
 l.code_combination_id,
 ct.attribute1,
 ct.attribute2,
 'TRANSACTIONS' ENTITY_CODE,
 h.ledger_id,
 ct.customer_trx_id,
 NULL cash_doc_sequence_value,
 ct.attribute6 income_date
  FROM xla.xla_ae_headers           h,
       xla.xla_ae_lines             l,
       xla.xla_events               e,
       xla.xla_transaction_entities te,
       ra_customer_trx_all          ct
 WHERE h.application_id = l.application_id
       AND h.ae_header_id = l.ae_header_id
       AND h.application_id = e.application_id
       AND h.event_id = e.event_id
       AND h.application_id = te.application_id
       AND h.entity_id = te.entity_id
       AND te.application_id = 222
       AND te.entity_code = 'TRANSACTIONS'
       AND nvl(te.source_id_int_1, (-99)) = ct.customer_trx_id
       AND h.gl_transfer_status_code = 'Y'
       AND NOT EXISTS (SELECT 1
          FROM ar_receivable_applications_all a
         WHERE a.customer_trx_id = ct.customer_trx_id)
UNION ALL
--贷项
SELECT a.org_id,
       to_char(t.doc_sequence_value) doc_sequence_value,
       t.bill_to_customer_id,
       a.gl_date,
       substr(to_char(a.gl_date, 'YYYY-MM-DD'), 1, 7) period_name,
       -a.amount_applied  accounted_dr,
       0 accounted_cr,
       a.code_combination_id,
       t.attribute1,
       t.attribute2,
       'APP_CM',
       a.set_of_books_id,
       t.customer_trx_id,
       (SELECT to_char(cash.doc_sequence_value)
          FROM ar_cash_receipts_all cash
         WHERE cash.cash_receipt_id = a.cash_receipt_id),
       t.attribute6 income_date
  FROM ar_receivable_applications_all a, ra_customer_trx_all t
 WHERE a.Applied_Customer_Trx_Id = t.customer_trx_id
       AND a.cash_receipt_id IS NULL
       AND A.CUSTOMER_TRX_ID IS NOT NULL
       AND a.status = 'APP'
UNION ALL
-- 收款、核销、杂项收款
SELECT a.org_id,
       to_char(t.doc_sequence_value) doc_sequence_value,
       t.bill_to_customer_id,
       a.gl_date,
       substr(to_char(a.gl_date, 'YYYY-MM-DD'), 1, 7) period_name,
       0 accounted_dr,
       a.amount_applied accounted_cr,
       a.code_combination_id,
       t.attribute1,
       t.attribute2,
       'APP_RECEIPT',
       a.set_of_books_id,
       t.customer_trx_id,
       (SELECT to_char(cash.doc_sequence_value)
          FROM ar_cash_receipts_all cash
         WHERE cash.cash_receipt_id = a.cash_receipt_id),
       t.attribute6 income_date
  FROM ar_receivable_applications_all a, ra_customer_trx_all t /*, ra_cust_trx_types_all ctt*/
 WHERE a.applied_customer_trx_id = t.customer_trx_id
       AND a.cash_receipt_id IS NOT NULL
       AND A.CUSTOMER_TRX_ID IS NULL
       AND a.status = 'APP'
UNION ALL
-- ADJUSTMENTS
SELECT /*+ leading(l,h)  use_hash(l,h) */
 ADJ.ORG_ID,
 to_char(ct.doc_sequence_value) doc_sequence_value,
 ct.bill_to_customer_id,
 h.accounting_date gl_date,
 h.period_name,
 l.accounted_dr,
 l.accounted_cr,
 l.code_combination_id,
 ct.attribute1,
 ct.attribute2,
 'ADJUSTMENTS',
 h.ledger_id,
 ct.customer_trx_id,
 NULL,
 ct.attribute6 income_date
  FROM xla.xla_ae_headers           h,
       xla.xla_ae_lines             l,
       xla.xla_events               e,
       xla.xla_transaction_entities te,
       ar_adjustments_all           adj,
       ra_customer_trx_all          ct /*,
       ra_cust_trx_types_all        ctt*/
 WHERE h.application_id = l.application_id
       AND h.ae_header_id = l.ae_header_id
       AND h.application_id = e.application_id
       AND h.event_id = e.event_id
       AND h.application_id = te.application_id
       AND h.entity_id = te.entity_id
       AND te.application_id = 222
       AND te.entity_code = 'ADJUSTMENTS'
       AND nvl(te.source_id_int_1, (-99)) = adj.adjustment_id
       AND adj.customer_trx_id = ct.customer_trx_id
       AND h.gl_transfer_status_code = 'Y'
/* AND ct.cust_trx_type_id = ctt.cust_trx_type_id*/

其他

如果不从比较细的粒度统计应收余额不关注借贷发生的话,还可以用如下sql去取:

 FUNCTION get_adjust_amount(p_customer_trx_id NUMBER) RETURN NUMBER IS
      l_output NUMBER;
   BEGIN
      SELECT nvl(SUM(a.amount), 0)
        INTO l_output
        FROM (SELECT adj.amount
                FROM ar_adjustments_all adj
               WHERE adj.customer_trx_id = p_customer_trx_id
                     AND adj.gl_date <= g_end_date
              UNION ALL
              SELECT ara.amount_applied amount
                FROM ar_receivable_applications_all ara
               WHERE ara.customer_trx_id = p_customer_trx_id
                     AND ara.gl_date <= g_end_date
              UNION ALL
              SELECT -ara.amount_applied amount
                FROM ar_receivable_applications_all ara
               WHERE ara.applied_customer_trx_id = p_customer_trx_id
                     AND ara.gl_date <= g_end_date) a;
      RETURN l_output;
   EXCEPTION
      WHEN OTHERS THEN
         RETURN 0;
   END get_adjust_amount;

通过应收事务上的customer_trx_id字段去关联付款计划ar_payment_schedules_all 表,然后用后者的amount_due_original加上上面函数的值就是应收事务的余额了。文章来源地址https://www.toymoban.com/news/detail-595394.html

到了这里,关于Oracle EBS AR 应收模块取应收余额及期间发生额(事务维度)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 键盘敲入 A 字母时,操作系统期间发生了什么?

    关于8.1 键盘敲入 A 字母时,操作系统期间发生了什么?的总结,前面都介绍了,但是在最后总结操作系统发生了什么的时候,我觉得有点不详细,于是写一写自己的补充和理解,不一定正确。 键盘敲击之后, 键盘控制器根据敲击的键生成扫描码,写入寄存器 。 同时通过中

    2024年02月11日
    浏览(29)
  • MySQL执行流程_执行一条select语句,期间发生了什么

    MySQL执行流程 server层负责建立连接、分析和执行SQL 包括连接器、查询缓存、解析器、预处理器、优化器、执行器等,所有内置函数和所有跨存储引擎的功能在该层实现 存储引擎层负责数据的存储和提取 索引数据结构就是由存储引擎层实现,不同的存储引擎支持的索引类型也

    2024年02月04日
    浏览(40)
  • 【操作系统】键盘敲入字母时,操作系统期间发生了什么?

    参考资料: 键盘敲入 A 字母时,操作系统期间发生了什么? 【操作系统】浅谈 Linux 中的中断机制 键盘可以说是我们最常使用的输入硬件设备了,但身为程序员的你,你知道「 键盘敲入字母时,操作系统期间发生了什么吗 」? 那要想知道这个发生的过程,我们得先了解了解

    2024年02月16日
    浏览(29)
  • ORACLE EBS系统应用基础概述(2)

    六、弹性域( Flexfield ) 所谓“弹性域”技术是人们每当提及 ORACLE 产品技术的先进性时总会首先想到的一个东西,也是很多初学者(尤其是“业务出身”的人)开始接触时可能会感到有点“发怵”的东西,原因之一是它的技术味比较浓。但实际上,如果从应用的角度去理解

    2023年04月10日
    浏览(23)
  • ORACLE EBS 系统主数据管理(2)

    ORACLE EBS 系统主数据管理 五、结语 (三) Item 的类别( Category ) 上面所讲到的Item编码中的分类(UNSPSC),一般来说还不是系统(各应用功能模块)中真正使用到的类别,原因是编码中的分类所基于的分类基准(或用途)主要考虑的是“工程”目的,而各应用模块例如INV、

    2024年02月04日
    浏览(21)
  • Oracle EBS R12 DBA(二)

    Overview of Oracle E-Business Suite An integrated suite of applications for e-business Applications Technology Financials HRMS   CRM Supply Chain Manufacturing Projects                      Public Sector Stored in an Oracle Database and a File System Business Data   Product Files Oracle E-Business Suite Home Page HTML Interface Forms I

    2024年02月06日
    浏览(44)
  • 前台处理:FI-AP/AR-财务应付和应收行项目浏览器<FBL1H/FBL5H>

    一、背景:我们前面录入了应收和应付凭证,现在需要通过报表去查询到该科目或供应商(客户)下的往来明细及余额情况; PS:因为SAP设置的几个应收和应付的报表查询界面基本是一致的,只要弄懂其中一个代码,另一个就融会贯通了。 二、事务代码: FBL5H 会计核算 - 财务

    2024年04月14日
    浏览(31)
  • Oracle_EBS_核心功能(MFG)(1)

    INV: Items 参考《深入浅出Oracle EBS之核心功能(DIS)》。canca INV: Transactions基本库存事务处理 参考《深入浅出Oracle EBS之核心功能(DIS)》。canca BOM: Bills of Material物料清单 应用:Bills of Material 职责:Bills of Material 基础业务学习 总体说明 BOM(物料清单)最终解决的问题是生产过

    2023年04月11日
    浏览(22)
  • ORACLE Apex: EBS多组织结构 理解与配置

    ORACLE EBS :多组织结构 理解与配置 Oracle APEX中文社区|Oracle APEX资源|Oracle APEX学习|EBS开发|EBS INTERFACE|Oracle EBS开发|Oracle数据库开发|EBS API| 多组织结构 多组织结构 ORACLE EBS一个很大的卖点是它的多组织结构.ORACLE EBS的文档资料里面解释呈现这样一个树型图:     ​   实际上, OR

    2024年02月08日
    浏览(24)
  • SQL Server :已成功与服务器建立连接,但是在登录前的握手期间发生错误。

    学习sqlserver的时候,默认的身份验证是windows的身份验证。 而在进一步学习的时候希望改成sqlserver的身份验证。操作流程无非就是选中服务器——》右击属性 再按如下图选择,当然sqlserver有默认的身份验证账号,sa,操作教程也有,这里不谈。我也是按如此操作的 当然我画蛇

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包