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)
|
self.is_sphere_combo['values'] = [''] + _json.load(_f)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
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)
|
ttk.Label(main_frame, text="Тип объекта:").grid(row=2, column=0, sticky=tk.W, pady=2)
|
||||||
@@ -853,9 +862,10 @@ class DokoGenApp:
|
|||||||
try:
|
try:
|
||||||
_to = os.path.join(os.path.dirname(__file__), 'dictionaries', 'typical_objects.json')
|
_to = os.path.join(os.path.dirname(__file__), 'dictionaries', 'typical_objects.json')
|
||||||
with open(_to, encoding='utf-8') as _f:
|
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:
|
except Exception:
|
||||||
pass
|
self._typical_objects_all = ['']
|
||||||
|
self.is_typical_object_combo['values'] = self._typical_objects_all
|
||||||
|
|
||||||
main_frame.columnconfigure(1, weight=1)
|
main_frame.columnconfigure(1, weight=1)
|
||||||
|
|
||||||
@@ -1541,6 +1551,26 @@ class DokoGenApp:
|
|||||||
def _set_is_edit_state(self, enabled):
|
def _set_is_edit_state(self, enabled):
|
||||||
state = 'normal' if enabled else 'disabled'
|
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):
|
def _on_is_select(self, event=None):
|
||||||
sel = self.is_listbox.curselection()
|
sel = self.is_listbox.curselection()
|
||||||
if not sel:
|
if not sel:
|
||||||
@@ -1612,6 +1642,9 @@ class DokoGenApp:
|
|||||||
w.delete(0, tk.END)
|
w.delete(0, tk.END)
|
||||||
w.insert(0, val)
|
w.insert(0, val)
|
||||||
|
|
||||||
|
# Типовые отраслевые объекты — по сфере объекта (Распоряжение ПРФ № 360-р)
|
||||||
|
self._update_typical_objects_by_sphere()
|
||||||
|
|
||||||
# Списки
|
# Списки
|
||||||
for lb, items in [
|
for lb, items in [
|
||||||
(self.defense_tools_listbox, isys.defense_tools_list or []),
|
(self.defense_tools_listbox, isys.defense_tools_list or []),
|
||||||
|
|||||||
Reference in New Issue
Block a user