60 lines
2.7 KiB
Python
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✅ Сканирование завершено!") |