feat: типовые отраслевые объекты КИИ по сферам (Распоряжение ПРФ № 360-р от 26.02.2026)

- dictionaries/typical_industry_objects.json: 392 типовых отраслевых объекта
  по 14 сферам (здравоохранение 12, наука 9, транспорт 62, связь 12,
  энергетика 12, регистрация прав 1, банки 20, ТЭК 11, атомная 16,
  оборонная 39, ракетно-космическая 72, горнодобывающая 38,
  металлургическая 53, химическая 35), с процессами и ОКВЭД
- ui.py: логика привязки — при выборе сферы объекта КИИ список типовых
  отраслевых объектов заполняется из словаря этой сферы (360-р),
  иначе — общий словарь typical_objects.json
- _on_sphere_changed/_update_typical_objects_by_sphere; вызов при загрузке объекта
This commit is contained in:
2026-08-04 20:04:38 +04:00
parent 8438125bd1
commit 5bbd9313f5
2 changed files with 4775 additions and 2 deletions
File diff suppressed because it is too large Load Diff
+35 -2
View File
@@ -823,6 +823,15 @@ class DokoGenApp:
self.is_sphere_combo['values'] = [''] + _json.load(_f)
except Exception:
pass
# Словарь типовых отраслевых объектов по сферам (Распоряжение ПРФ № 360-р)
try:
import json as _json
_tio = os.path.join(os.path.dirname(__file__), 'dictionaries', 'typical_industry_objects.json')
with open(_tio, encoding='utf-8') as _f:
self._typical_industry = _json.load(_f)
except Exception:
self._typical_industry = {}
self.is_sphere_combo.bind('<<ComboboxSelected>>', self._on_sphere_changed)
# Тип объекта — словарик + выпадающий список
ttk.Label(main_frame, text="Тип объекта:").grid(row=2, column=0, sticky=tk.W, pady=2)
@@ -853,9 +862,10 @@ class DokoGenApp:
try:
_to = os.path.join(os.path.dirname(__file__), 'dictionaries', 'typical_objects.json')
with open(_to, encoding='utf-8') as _f:
self.is_typical_object_combo['values'] = [''] + _json.load(_f)
self._typical_objects_all = [''] + _json.load(_f)
except Exception:
pass
self._typical_objects_all = ['']
self.is_typical_object_combo['values'] = self._typical_objects_all
main_frame.columnconfigure(1, weight=1)
@@ -1541,6 +1551,26 @@ class DokoGenApp:
def _set_is_edit_state(self, enabled):
state = 'normal' if enabled else 'disabled'
def _on_sphere_changed(self, event=None):
"""При смене сферы объекта — подставляем типовые отраслевые объекты этой сферы (Распоряжение ПРФ № 360-р)."""
self._update_typical_objects_by_sphere()
def _update_typical_objects_by_sphere(self):
"""Обновляет список типовых отраслевых объектов по выбранной сфере объекта КИИ."""
try:
sphere = self.is_sphere_combo.get()
if sphere and hasattr(self, '_typical_industry') and sphere in self._typical_industry:
items = self._typical_industry[sphere]
if items:
values = [''] + [o['name'] for o in items]
self.is_typical_object_combo['values'] = values
return
# Сферы нет / словарь пуст — общий словарь типовых объектов
if hasattr(self, '_typical_objects_all'):
self.is_typical_object_combo['values'] = self._typical_objects_all
except Exception:
pass
def _on_is_select(self, event=None):
sel = self.is_listbox.curselection()
if not sel:
@@ -1612,6 +1642,9 @@ class DokoGenApp:
w.delete(0, tk.END)
w.insert(0, val)
# Типовые отраслевые объекты — по сфере объекта (Распоряжение ПРФ № 360-р)
self._update_typical_objects_by_sphere()
# Списки
for lb, items in [
(self.defense_tools_listbox, isys.defense_tools_list or []),