Files
njts-accounting-core/check_leftjoin_effect.py
2026-02-20 15:47:27 +09:00

83 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
sys.path.insert(0, 'backend')
os.environ['DB_HOST'] = '192.168.0.61'
os.environ['DB_NAME'] = 'njts_acct'
os.environ['DB_USER'] = 'njts_app'
os.environ['DB_PASSWORD'] = 'njts_app2025'
os.environ['DB_PORT'] = '55432'
from app.core.database import get_connection
with get_connection() as conn:
with conn.cursor() as cur:
print('\n【 按照service.py中的确切SQL查询 】')
# 从accounts表获取account_id
cur.execute("SELECT account_id FROM accounts WHERE account_code = '701'")
aid_row = cur.fetchone()
if aid_row:
aid = aid_row['account_id']
print(f"account_code='701' 的 account_id = {aid}")
# 当期增减date_from date_to
# 修正された仕訳(親となった仕訳)は除外
cur.execute("""
SELECT
COALESCE(SUM(l.debit), 0) AS debit,
COALESCE(SUM(l.credit), 0) AS credit
FROM journal_lines l
JOIN journal_entries j
ON j.journal_entry_id = l.journal_entry_id
LEFT JOIN journal_entries child
ON child.parent_entry_id = j.journal_entry_id
WHERE l.account_id = %s
AND j.entry_date BETWEEN %s AND %s
AND j.is_deleted = false
AND child.journal_entry_id IS NULL
""", (aid, '2025-06-01', '2025-06-30'))
row = cur.fetchone()
print(f"\nSQL查询结果:")
print(f" debit = {row['debit']}")
print(f" credit = {row['credit']}")
print(f"\n试算表显示的期末残高credit: 5,482,728")
print(f"SQL查询结果credit: {row['credit']}")
if row['credit'] != 5482728:
print(f"\n⚠️ 不匹配!差异 = {5482728 - row['credit']}")
# 查看所有被LEFT JOIN排除的记录
print(f"\n【 被LEFT JOIN排除的记录 (has child) 】")
cur.execute("""
SELECT
j.journal_entry_id,
j.entry_date,
j.description,
l.debit,
l.credit,
COUNT(child.journal_entry_id) as child_count
FROM journal_lines l
JOIN journal_entries j
ON j.journal_entry_id = l.journal_entry_id
LEFT JOIN journal_entries child
ON child.parent_entry_id = j.journal_entry_id
WHERE l.account_id = %s
AND j.entry_date BETWEEN %s AND %s
AND j.is_deleted = false
GROUP BY j.journal_entry_id, j.entry_date, j.description, l.debit, l.credit
HAVING COUNT(child.journal_entry_id) > 0
ORDER BY j.entry_date
""", (aid, '2025-06-01', '2025-06-30'))
excluded_credit = 0
for row in cur.fetchall():
print(f" Entry#{row['journal_entry_id']:>3} {row['entry_date']} | Credit={row['credit']:>10} | Children={row['child_count']} | {row['description'][:40]}")
excluded_credit += row['credit']
print(f"\n被排除的credit合计: {excluded_credit}")