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