From 7f70bb079264ad12d1d91bd847b8eac3f4275796 Mon Sep 17 00:00:00 2001 From: prog1764 Date: Tue, 4 Aug 2026 20:55:03 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B2=20=D0=B2=D1=8B=D0=BF=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D1=8E=D1=89=D0=B5=D0=BC=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=D0=B9=20=E2=80=94=20=C2=AB=E2=80=94=C2=BB=20(=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D0=B8=D0=BC=20=D0=B1=D0=B5=D0=B7?= =?UTF-8?q?=20=D0=BA=D0=B0=D1=82=D0=B5=D0=B3=D0=BE=D1=80=D0=B8=D0=B8)=20?= =?UTF-8?q?=D0=B8=20=C2=AB=D0=BD=D0=B5=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=BC=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - options показателя: пусто / «—» (показатель применим, но категория не присвоена) / «не применим» / III / II / I - _selected различает «прочерк» и «не применим» (оба не влияют на категорию, но сохраняются в список показателей) - список показателей: «применим, категория не присвоена (—)» / «не применим» - авто-обоснование: прочерк — «применим, категория не присвоена», не применим — текст из словаря сферы --- dokogen/ui.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/dokogen/ui.py b/dokogen/ui.py index 8d9cd85..feea876 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -1935,9 +1935,9 @@ class DokoGenApp: # Текст показателя lbl_name = ttk.Label(row, text=name, wraplength=640, justify=tk.LEFT) lbl_name.pack(side=tk.LEFT) - # Выбор значения (категория) + вариант «не применим» + # Выбор значения: пусто / «—» (применим, без категории) / «не применим» / категории var = tk.StringVar(value='') - options = ['', 'не применим'] + options = ['', '—', 'не применим'] for cat in ('III', 'II', 'I'): v = values.get(cat, '') if v: @@ -2005,6 +2005,9 @@ class DokoGenApp: s = var.get().strip() if not s: continue + if s == '—': + out.append((num, name, '—', 'прочерк')) # применим, категория не присвоена + continue if s == 'не применим': out.append((num, name, '—', 'не применим')) continue @@ -2039,11 +2042,13 @@ class DokoGenApp: def _save(): selected = _selected() - # Заполняем список показателей (включая «не применим») + # Заполняем список показателей (включая «—» и «не применим») lines = [] for num, name, cat, val in selected: - if cat == '—': + if cat == '—' and val == 'не применим': lines.append(f"Показатель {num}. {name} — не применим") + elif cat == '—': + lines.append(f"Показатель {num}. {name} — применим, категория не присвоена (—)") else: lines.append(f"Показатель {num}. {name} — {cat} категория: {val}") if hasattr(self, 'is_criteria_values_listbox'): @@ -2067,13 +2072,17 @@ class DokoGenApp: f"Объект отнесён к {cat} категории значимости. Основания: " + "; ".join(f"показатель {num} ({c} категория)" for num, _, c, _ in chosen) + "." ) - for num, name, _, _ in not_applicable: - base = f"Показатель {num}. {name} — не применим" - jtxt = _just_text(num) - if jtxt: - auto_parts.append(base + ": " + jtxt) + for num, name, _, val in not_applicable: + if val == 'не применим': + base = f"Показатель {num}. {name} — не применим" + jtxt = _just_text(num) + if jtxt: + auto_parts.append(base + ": " + jtxt) + else: + auto_parts.append(base + ".") else: - auto_parts.append(base + ".") + auto_parts.append( + f"Показатель {num}. {name} — применим, категория значимости не присвоена.") if not_applicable and not chosen: auto_parts.insert(0, "Категория значимости: не присвоена (показатели критериев значимости неприменимы к объекту).") auto_just = "\n".join(auto_parts) if auto_parts else ""