fix: импортёр отбрасывает текст-подсказки из примечаний; выпадающие списки только для выбора

- importer: фильтр HINT_MARKERS — значения вида «Формулировка должна строиться...», «Например...», «Выберите из...» и т.п. не импортируются в поля объекта
- ui: все Combobox (сфера, тип, архитектура, типовой объект, категория/цель/способ сети) — state='readonly', нельзя редактировать вручную
This commit is contained in:
2026-08-04 15:52:56 +04:00
parent 9489e6a37d
commit cf2a80c470
2 changed files with 24 additions and 9 deletions
+17 -2
View File
@@ -308,9 +308,24 @@ def _import_187_is_list(wb, data, settings, log_fn):
'гарантирован': 'Доверенная загрузка', 'гарантирован': 'Доверенная загрузка',
} }
HINT_MARKERS = [
'формулировка должна', 'например', 'пример:', 'формат:', 'выберите из',
'если не используются', 'при необходимости можно', 'указать', 'вписать',
'если адресов несколько', 'по логике', 'произвольное описание',
]
def _is_hint(text):
"""True, если значение похоже на подсказку/образец из примечания."""
low = (text or '').lower()
for m in HINT_MARKERS:
if m in low:
return True
return False
def _set(field_lower, key, val): def _set(field_lower, key, val):
"""Записать значение, если ключевое слово найдено в вопросе.""" """Записать значение, если ключевое слово найдено в вопросе
if val and 'выбрать' not in field_lower: и значение не является подсказкой из примечания."""
if val and 'выбрать' not in field_lower and not _is_hint(val):
is_obj[key] = val is_obj[key] = val
return True return True
return False return False
+7 -7
View File
@@ -795,7 +795,7 @@ class DokoGenApp:
# Сфера деятельности — словарик + выпадающий список # Сфера деятельности — словарик + выпадающий список
ttk.Label(main_frame, text="Сфера деятельности:").grid(row=1, column=0, sticky=tk.W, pady=2) ttk.Label(main_frame, text="Сфера деятельности:").grid(row=1, column=0, sticky=tk.W, pady=2)
self.is_sphere_combo = ttk.Combobox(main_frame, width=68) self.is_sphere_combo = ttk.Combobox(main_frame, width=68, state='readonly')
self.is_sphere_combo.grid(row=1, column=1, padx=8, sticky=tk.EW, pady=1) self.is_sphere_combo.grid(row=1, column=1, padx=8, sticky=tk.EW, pady=1)
try: try:
import json as _json import json as _json
@@ -807,7 +807,7 @@ class DokoGenApp:
# Тип объекта — словарик + выпадающий список # Тип объекта — словарик + выпадающий список
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)
self.is_object_type_combo = ttk.Combobox(main_frame, width=68) self.is_object_type_combo = ttk.Combobox(main_frame, width=68, state='readonly')
self.is_object_type_combo.grid(row=2, column=1, padx=8, sticky=tk.EW, pady=1) self.is_object_type_combo.grid(row=2, column=1, padx=8, sticky=tk.EW, pady=1)
try: try:
_ot = os.path.join(os.path.dirname(__file__), 'dictionaries', 'object_types.json') _ot = os.path.join(os.path.dirname(__file__), 'dictionaries', 'object_types.json')
@@ -818,7 +818,7 @@ class DokoGenApp:
# Архитектура объекта — словарик + выпадающий список # Архитектура объекта — словарик + выпадающий список
ttk.Label(main_frame, text="Архитектура объекта:").grid(row=3, column=0, sticky=tk.W, pady=2) ttk.Label(main_frame, text="Архитектура объекта:").grid(row=3, column=0, sticky=tk.W, pady=2)
self.is_architecture_combo = ttk.Combobox(main_frame, width=68) self.is_architecture_combo = ttk.Combobox(main_frame, width=68, state='readonly')
self.is_architecture_combo.grid(row=3, column=1, padx=8, sticky=tk.EW, pady=1) self.is_architecture_combo.grid(row=3, column=1, padx=8, sticky=tk.EW, pady=1)
try: try:
_ar = os.path.join(os.path.dirname(__file__), 'dictionaries', 'architectures.json') _ar = os.path.join(os.path.dirname(__file__), 'dictionaries', 'architectures.json')
@@ -829,7 +829,7 @@ class DokoGenApp:
# Типовой отраслевой объект КИИ — словарик + выпадающий список # Типовой отраслевой объект КИИ — словарик + выпадающий список
ttk.Label(main_frame, text="Типовой отраслевой объект КИИ:").grid(row=4, column=0, sticky=tk.W, pady=2) ttk.Label(main_frame, text="Типовой отраслевой объект КИИ:").grid(row=4, column=0, sticky=tk.W, pady=2)
self.is_typical_object_combo = ttk.Combobox(main_frame, width=68) self.is_typical_object_combo = ttk.Combobox(main_frame, width=68, state='readonly')
self.is_typical_object_combo.grid(row=4, column=1, padx=8, sticky=tk.EW, pady=1) self.is_typical_object_combo.grid(row=4, column=1, padx=8, sticky=tk.EW, pady=1)
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')
@@ -875,7 +875,7 @@ class DokoGenApp:
# Категория сети — словарик # Категория сети — словарик
ttk.Label(net_frame, text="Категория сети электросвязи:").grid(row=1, column=0, sticky=tk.W, pady=2) ttk.Label(net_frame, text="Категория сети электросвязи:").grid(row=1, column=0, sticky=tk.W, pady=2)
self.is_net_category_combo = ttk.Combobox(net_frame, width=68) self.is_net_category_combo = ttk.Combobox(net_frame, width=68, state='readonly')
self.is_net_category_combo.grid(row=1, column=1, padx=8, sticky=tk.EW, pady=1) self.is_net_category_combo.grid(row=1, column=1, padx=8, sticky=tk.EW, pady=1)
try: try:
import json as _json import json as _json
@@ -892,7 +892,7 @@ class DokoGenApp:
# Цель взаимодействия — словарик # Цель взаимодействия — словарик
ttk.Label(net_frame, text="Цель взаимодействия с сетью электросвязи:").grid(row=3, column=0, sticky=tk.W, pady=2) ttk.Label(net_frame, text="Цель взаимодействия с сетью электросвязи:").grid(row=3, column=0, sticky=tk.W, pady=2)
self.is_net_purpose_combo = ttk.Combobox(net_frame, width=68) self.is_net_purpose_combo = ttk.Combobox(net_frame, width=68, state='readonly')
self.is_net_purpose_combo.grid(row=3, column=1, padx=8, sticky=tk.EW, pady=1) self.is_net_purpose_combo.grid(row=3, column=1, padx=8, sticky=tk.EW, pady=1)
try: try:
_np = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_purposes.json') _np = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_purposes.json')
@@ -903,7 +903,7 @@ class DokoGenApp:
# Способ взаимодействия — словарик # Способ взаимодействия — словарик
ttk.Label(net_frame, text="Способ взаимодействия (тип доступа):").grid(row=4, column=0, sticky=tk.W, pady=2) ttk.Label(net_frame, text="Способ взаимодействия (тип доступа):").grid(row=4, column=0, sticky=tk.W, pady=2)
self.is_net_method_combo = ttk.Combobox(net_frame, width=68) self.is_net_method_combo = ttk.Combobox(net_frame, width=68, state='readonly')
self.is_net_method_combo.grid(row=4, column=1, padx=8, sticky=tk.EW, pady=1) self.is_net_method_combo.grid(row=4, column=1, padx=8, sticky=tk.EW, pady=1)
try: try:
_nm = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_methods.json') _nm = os.path.join(os.path.dirname(__file__), 'dictionaries', 'net_methods.json')