108 lines
2.7 KiB
Python
108 lines
2.7 KiB
Python
import psycopg2
|
|
import sys
|
|
|
|
# 数据库连接
|
|
try:
|
|
conn = psycopg2.connect(
|
|
host="192.168.0.61",
|
|
port=55432,
|
|
database="njts_acct",
|
|
user="njts_app",
|
|
password="njts_app2025"
|
|
)
|
|
except Exception as e:
|
|
print(f"数据库连接失败: {e}")
|
|
sys.exit(1)
|
|
|
|
cur = conn.cursor()
|
|
|
|
# 查询所有科目
|
|
try:
|
|
cur.execute("""
|
|
SELECT
|
|
account_id,
|
|
account_code,
|
|
account_name,
|
|
account_type
|
|
FROM accounts
|
|
ORDER BY CAST(account_code AS INTEGER)
|
|
""")
|
|
results = cur.fetchall()
|
|
except Exception as e:
|
|
print(f"查询失败: {e}")
|
|
sys.exit(1)
|
|
|
|
print("=" * 120)
|
|
print("全科目リスト - 科目代码范围分析")
|
|
print("=" * 120)
|
|
|
|
ranges = [
|
|
("100-199 (资产-现金预金)", 100, 199),
|
|
("200-299 (资产-应收账款)", 200, 299),
|
|
("300-399 (资产-有价证券)", 300, 399),
|
|
("400-499 (资产-固定资产)", 400, 499),
|
|
("500-599 (负债)", 500, 599),
|
|
("600-699 (纯资产)", 600, 699),
|
|
("700-799 (收益/收入)", 700, 799),
|
|
("800-899 (费用)", 800, 899),
|
|
("900-999 (其他)", 900, 999),
|
|
]
|
|
|
|
for label, min_code, max_code in ranges:
|
|
print(f"\n【{label}】")
|
|
|
|
filtered = [(id, code, name, typ) for id, code, name, typ in results
|
|
if min_code <= int(code) <= max_code]
|
|
|
|
if filtered:
|
|
for account_id, account_code, account_name, account_type in filtered:
|
|
print(f" {account_code:>3s} - {account_name:35s} (ID:{account_id:>3d}, Type:{account_type:10s})")
|
|
else:
|
|
print(" (无科目)")
|
|
|
|
# 打印按 account_type 的分类
|
|
print("\n" + "=" * 120)
|
|
print("按 account_type 分类")
|
|
print("=" * 120)
|
|
|
|
cur.execute("""
|
|
SELECT DISTINCT account_type
|
|
FROM accounts
|
|
ORDER BY account_type
|
|
""")
|
|
types = cur.fetchall()
|
|
|
|
for (acc_type,) in types:
|
|
print(f"\n【{acc_type}】")
|
|
|
|
filtered = [(id, code, name) for id, code, name, typ in results if typ == acc_type]
|
|
|
|
for account_id, account_code, account_name in filtered:
|
|
code_int = int(account_code)
|
|
if 700 <= code_int < 800:
|
|
category = "收益"
|
|
elif 800 <= code_int < 900:
|
|
category = "费用"
|
|
else:
|
|
category = "其他"
|
|
print(f" {account_code:>3s} - {account_name:35s} (ID:{account_id:>3d})")
|
|
|
|
print("\n" + "=" * 120)
|
|
print("科目代码范围统计")
|
|
print("=" * 120)
|
|
|
|
code_ranges = {
|
|
"700-799": (700, 799),
|
|
"800-899": (800, 899),
|
|
"505": (505, 505),
|
|
}
|
|
|
|
for label, (min_code, max_code) in code_ranges.items():
|
|
count = len([1 for _, code, _, _ in results if min_code <= int(code) <= max_code])
|
|
print(f"{label}: {count} 个科目")
|
|
|
|
cur.close()
|
|
conn.close()
|
|
|
|
print("\n✓ 查询完成")
|