From 5aed863b83e3dde20c2f02e1bb6a7c132dd292db Mon Sep 17 00:00:00 2001 From: prog1764 Date: Tue, 4 Aug 2026 22:57:26 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BC=D0=B0=D0=BA=D1=81=D0=B8=D0=BC?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D0=B0=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D1=82=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=9F?= =?UTF-8?q?=D0=9F=20127?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - после автозаполнения категория пересчитывается сразу (по наивысшей из выбранных) - подсказка для ΔДоходов: балансовая стоимость объекта как ориентир - итоговое сообщение показывает, какие показатели остались незаполненными (нет данных для расчёта) — оператор видит, что именно добить вручную --- dokogen/ui.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/dokogen/ui.py b/dokogen/ui.py index 3eb63b6..ab2e98a 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -2368,10 +2368,16 @@ class DokoGenApp: profit = _num2(getattr(self.model, 'profit', '') or '') tax = _num2(getattr(self.model, 'profit_tax', '') or '') if profit and tax: + # Подсказка: балансовая стоимость объекта как ориентир для ΔДоходов + _hint = '' + _bv = getattr(isys, 'balance_value', '') or '' + _bvn = _num2(_bv) + if _bvn: + _hint = f"\n(балансовая стоимость объекта: {_bvn:,.0f} руб. — можно использовать как ориентир)" dincome = simpledialog.askfloat( "Показатель 9 — ущерб бюджетам", "Снижение уровня доходов субъекта КИИ ΔДоходов (руб.):\n" - "(наихудший сценарий компьютерной атаки на объект)", + "(наихудший сценарий компьютерной атаки на объект)" + _hint, parent=dialog, minvalue=0) if dincome is None: continue @@ -2411,12 +2417,19 @@ class DokoGenApp: else: justify_txt.insert('1.0', full) filled.append(f"п. {num}: №9 = {val:.6f}% → {cat or '—'}") + # Что осталось незаполненным (применимые, без значения) + left = [] + for num, name, values, var, applicable_here in rows: + if applicable_here and not var.get().strip(): + left.append(num) + _calc() # пересчитать категорию сразу messagebox.showinfo( "⚡ Автозаполнение ПП 127", "Заполнено автоматически (рекомендации):\n" + ("\n".join(filled) if filled else "— нет") + - "\n\nОстальные применимые показатели заполните вручную.\n" - "Категория объекта будет рассчитана по наивысшей из выбранных.") + (f"\n\nОсталось заполнить вручную (нет данных для расчёта): {', '.join(left)}" + if left else "\n\nВсе применимые показатели заполнены!") + + "\n\nКатегория объекта пересчитана по наивысшей из выбранных.") def _open_calc_dialog(num, name, var, combo): """Авторасчёт показателя 8 или 9 по «Рекомендациям по оценке показателей