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:
File diff suppressed because it is too large
Load Diff
+35
-2
@@ -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 []),
|
||||
|
||||
Reference in New Issue
Block a user