최근 이용자들은 회계기간+고객+수취거래의 탄력적 도메인 차원에 따라 발행되는 미수금 잔액을 확인할 필요가 있습니다.
초판
처음에는 아이디어가 비교적 단순했는데, AR 모듈은 매출채권 잔액과 관련된 세 부분으로 구성되어 있습니다.
- 미수금(표준 및 신용 송장 포함)
- 소득 상각 영수증
- 미수금 조정
따라서 다음 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';
세 번째 버전
사용자가 확인한 결과 두 가지 문제가 발견되었습니다.
- 대변 및 표준 송장을 상쇄할 때 두 번째 버전은 여전히 대변 항목의 가변필드를 추출하지만 실제로는 상쇄할 송장의 가변필드를 추출합니다.
- 결제 확인을 위한 판단이 되는 경우를 이용하여 차변 및 대변 금액을 부풀려 실제 업무와 차이가 있음
몇 가지 문서를 찾았고 다음 규칙을 찾았습니다. 상각 테이블의 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과 위 함수의 값을 사용하여 미수금 거래의 잔액을 가져옵니다.