feat: в выпадающем списке показателей — «—» (применим без категории) и «не применим»

- options показателя: пусто / «—» (показатель применим, но категория
  не присвоена) / «не применим» / III / II / I
- _selected различает «прочерк» и «не применим» (оба не влияют
  на категорию, но сохраняются в список показателей)
- список показателей: «применим, категория не присвоена (—)» /
  «не применим»
- авто-обоснование: прочерк — «применим, категория не присвоена»,
  не применим — текст из словаря сферы
This commit is contained in:
2026-08-04 20:55:03 +04:00
parent 972ff11b49
commit 7f70bb0792
+14 -5
View File
@@ -1935,9 +1935,9 @@ class DokoGenApp:
# Текст показателя # Текст показателя
lbl_name = ttk.Label(row, text=name, wraplength=640, justify=tk.LEFT) lbl_name = ttk.Label(row, text=name, wraplength=640, justify=tk.LEFT)
lbl_name.pack(side=tk.LEFT) lbl_name.pack(side=tk.LEFT)
# Выбор значения (категория) + вариант «не применим» # Выбор значения: пусто / «—» (применим, без категории) / «не применим» / категории
var = tk.StringVar(value='') var = tk.StringVar(value='')
options = ['', 'не применим'] options = ['', '', 'не применим']
for cat in ('III', 'II', 'I'): for cat in ('III', 'II', 'I'):
v = values.get(cat, '') v = values.get(cat, '')
if v: if v:
@@ -2005,6 +2005,9 @@ class DokoGenApp:
s = var.get().strip() s = var.get().strip()
if not s: if not s:
continue continue
if s == '':
out.append((num, name, '', 'прочерк')) # применим, категория не присвоена
continue
if s == 'не применим': if s == 'не применим':
out.append((num, name, '', 'не применим')) out.append((num, name, '', 'не применим'))
continue continue
@@ -2039,11 +2042,13 @@ class DokoGenApp:
def _save(): def _save():
selected = _selected() selected = _selected()
# Заполняем список показателей (включая «не применим») # Заполняем список показателей (включая «—» и «не применим»)
lines = [] lines = []
for num, name, cat, val in selected: for num, name, cat, val in selected:
if cat == '': if cat == '' and val == 'не применим':
lines.append(f"Показатель {num}. {name} — не применим") lines.append(f"Показатель {num}. {name} — не применим")
elif cat == '':
lines.append(f"Показатель {num}. {name} — применим, категория не присвоена (—)")
else: else:
lines.append(f"Показатель {num}. {name}{cat} категория: {val}") lines.append(f"Показатель {num}. {name}{cat} категория: {val}")
if hasattr(self, 'is_criteria_values_listbox'): if hasattr(self, 'is_criteria_values_listbox'):
@@ -2067,13 +2072,17 @@ class DokoGenApp:
f"Объект отнесён к {cat} категории значимости. Основания: " f"Объект отнесён к {cat} категории значимости. Основания: "
+ "; ".join(f"показатель {num} ({c} категория)" for num, _, c, _ in chosen) + "." + "; ".join(f"показатель {num} ({c} категория)" for num, _, c, _ in chosen) + "."
) )
for num, name, _, _ in not_applicable: for num, name, _, val in not_applicable:
if val == 'не применим':
base = f"Показатель {num}. {name} — не применим" base = f"Показатель {num}. {name} — не применим"
jtxt = _just_text(num) jtxt = _just_text(num)
if jtxt: if jtxt:
auto_parts.append(base + ": " + jtxt) auto_parts.append(base + ": " + jtxt)
else: else:
auto_parts.append(base + ".") auto_parts.append(base + ".")
else:
auto_parts.append(
f"Показатель {num}. {name} — применим, категория значимости не присвоена.")
if not_applicable and not chosen: if not_applicable and not chosen:
auto_parts.insert(0, "Категория значимости: не присвоена (показатели критериев значимости неприменимы к объекту).") auto_parts.insert(0, "Категория значимости: не присвоена (показатели критериев значимости неприменимы к объекту).")
auto_just = "\n".join(auto_parts) if auto_parts else "" auto_just = "\n".join(auto_parts) if auto_parts else ""