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'

테스트 1차 버전 이후 이 뷰는 총계정원장의 대차대조표로 확인할 수 있지만 사용자는 트랜잭션의 엘라스틱 필드 차원을 기반으로 통계를 만들고 싶어하고 결제에 엘라스틱 필드를 원하지 않고, 간섭을 일으킬 것입니다. 이는 상각 테이블을 통해서만 추적할 수 있습니다.
징수 및 수입의 상각은 다대다 관계입니다. 하나의 소득은 여러 소득으로 상각될 수 있고 하나의 소득은 여러 소득으로 상각될 수 있습니다.

두번째 버전

이 곳도 지정된 기간 내 차변 및 대변의 수를 계산해야 하기 때문에 처음에는 상각 테이블의 event_id를 보조원장의 xla.xla_events와 연결한 다음 보조원장의 전표 라인과 연결합니다. 차변과 대변은 따로 따도 되지만 추심과 거래 상각은 다대다 관계이기 때문에 하나의 추심이 여러 거래를 상각할 때 외상매출금 분류는 A요약항목으로 연결 후 중복되어 부정확한 통계가 발생합니다.
보조원장 레이어는 폐기만 가능하며 번호는 상각 테이블에서 가져옴 상각 테이블의 상태는 'APP'로 상각 레코드임을 의미함 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
  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';

세 번째 버전

사용자가 확인한 결과 두 가지 문제가 발견되었습니다.

  1. 대변 ​​및 표준 송장을 상쇄할 때 두 번째 버전은 여전히 ​​대변 항목의 가변필드를 추출하지만 실제로는 상쇄할 송장의 가변필드를 추출합니다.
  2. 결제 확인을 위한 판단이 되는 경우를 이용하여 차변 및 대변 금액을 부풀려 실제 업무와 차이가 있음

몇 가지 문서를 찾았고 다음 규칙을 찾았습니다. 상각 테이블의 amount_applied 필드 ar_receivable_applications_all: 표준 송장을 상각하기 위한 크레딧의 경우 다음 항목
이 생성됩니다 .

수집이 표준 송장 상각을 위해 다음 분류가 생성됩니다
차변: 선불 계정 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과 위 함수의 값을 사용하여 미수금 거래의 잔액을 가져옵니다.

Supongo que te gusta

Origin blog.csdn.net/x6_9x/article/details/131581893
Recomendado
Clasificación