Files
scud_orion_ai_v2/zup_scanner.py
T

60 lines
2.7 KiB
Python

import pyodbc
from config import ZUP_SQL_CONFIG
print("="*60)
print("🔍 ЗАПУСК СКАНЕРА СТРУКТУРЫ 1С:ЗУП 3.1")
print("="*60)
conn_str = (
f"DRIVER={ZUP_SQL_CONFIG['driver']};"
f"SERVER={ZUP_SQL_CONFIG['server']};"
f"DATABASE={ZUP_SQL_CONFIG['database']};"
f"UID={ZUP_SQL_CONFIG['user']};"
f"PWD={ZUP_SQL_CONFIG['password']};"
f"TrustServerCertificate=yes;"
f"Encrypt=no;"
)
with pyodbc.connect(conn_str) as conn:
cursor = conn.cursor()
print("⏳ Анализ справочников...")
cursor.execute("SELECT name FROM sys.tables WHERE name LIKE '_Reference%'")
for row in cursor.fetchall():
t = row[0]
try:
cursor.execute(f"SELECT TOP 5 CAST(_Description AS NVARCHAR(255)) FROM {t} WITH (NOLOCK) WHERE _Description <> ''")
vals = [r[0].strip() for r in cursor.fetchall() if r[0]]
if not vals: continue
text = " ".join(vals).lower()
# Ищем сотрудников (исключая физлиц _Reference299)
if t != '_Reference299' and any(w in text for w in ["александров", "иванов", "смирнов", "петрова", "сергеев"]):
print(f"👤 СОТРУДНИКИ ({t}): {vals[:3]}")
# Ищем должности
elif any(w in text for w in ["инженер", "специалист", "директор", "уборщик"]):
print(f"💼 ДОЛЖНОСТИ ({t}): {vals[:3]}")
# Ищем подразделения
elif any(w in text for w in ["отдел", "управление", "служба"]):
print(f"🏢 ПОДРАЗДЕЛЕНИЯ ({t}): {vals[:3]}")
except:
pass
print("\n⏳ Анализ регистров кадровой истории...")
cursor.execute("SELECT name FROM sys.tables WHERE name LIKE '_InfoRg%'")
for row in cursor.fetchall():
t = row[0]
try:
# Ищем широкие регистры (Текущие кадровые данные имеют много колонок)
cursor.execute(f"SELECT COUNT(*) FROM sys.columns WHERE object_id = OBJECT_ID('{t}')")
col_count = cursor.fetchone()[0]
cursor.execute(f"SELECT COUNT(*) FROM {t} WITH (NOLOCK)")
row_count = cursor.fetchone()[0]
if col_count > 15 and row_count > 500:
print(f"📋 ШИРОКИЙ РЕГИСТР КАДРОВ ({t}) -> Колонок: {col_count}, Строк: {row_count}")
except:
pass
print("\n✅ Сканирование завершено!")