Фикс UnboundLocalError в окне авторасчёта ПП-127
Причина: внутри _calc() в ветках стояли импорты 'from .variables import CRITERION_QUANT_THRESHOLDS...' — Python считает эти имена локальными для всей функции, а условие 'if (num in CRITERION_QUANT_THRESHOLDS ...)' в начале _calc обращалось к ним до присваивания → UnboundLocalError при любом расчёте. Исправление: все импорты из .variables вынесены на уровень _open_calc_dialog (начало функции); внутренние импорты из _calc() и дубликаты в теле окна убраны.
This commit is contained in:
+2
-8
@@ -2205,7 +2205,8 @@ class DokoGenApp:
|
||||
и предлагает категорию как рекомендацию."""
|
||||
import re as _re2
|
||||
from .variables import (CRITERION_QUANT_THRESHOLDS, CRITERION_CHOICE_INDICATORS,
|
||||
CRITERION_QUANT_UNITS)
|
||||
CRITERION_QUANT_UNITS, _calc_criterion_other,
|
||||
_calc_criterion_13_opk, _criterion_10_cat)
|
||||
|
||||
# Сфера ОПК — для показателей 8/13а/13б используются формулы ПП РФ № 796
|
||||
_sphere_opk = False
|
||||
@@ -2304,8 +2305,6 @@ class DokoGenApp:
|
||||
elif (num in CRITERION_QUANT_THRESHOLDS or num in CRITERION_CHOICE_INDICATORS):
|
||||
# Остальные показатели (1–7, 11–14): количественные — ввод значения,
|
||||
# качественные — выбор варианта (III/II/I) из справочника ПП-127
|
||||
from .variables import (CRITERION_QUANT_THRESHOLDS, CRITERION_CHOICE_INDICATORS,
|
||||
CRITERION_QUANT_UNITS)
|
||||
is_choice = num in CRITERION_CHOICE_INDICATORS
|
||||
ttk.Label(frm, text=f"Показатель {num} — по порогам ПП-127",
|
||||
font=('Arial', 10, 'bold')).pack(anchor=tk.W)
|
||||
@@ -2567,7 +2566,6 @@ class DokoGenApp:
|
||||
def _calc():
|
||||
lines = []
|
||||
if num in ('13а', '13б') and _sphere_opk:
|
||||
from .variables import _calc_criterion_13_opk
|
||||
# Сохраняем введённые составляющие формулы в criterion_input (для шаблона)
|
||||
if isys:
|
||||
_ci = dict(getattr(isys, 'criterion_input', None) or {})
|
||||
@@ -2590,8 +2588,6 @@ class DokoGenApp:
|
||||
else:
|
||||
lines.append("Категория значимости: — (значение ниже порога III)")
|
||||
elif (num in CRITERION_QUANT_THRESHOLDS or num in CRITERION_CHOICE_INDICATORS):
|
||||
from .variables import (CRITERION_QUANT_THRESHOLDS, CRITERION_CHOICE_INDICATORS,
|
||||
CRITERION_QUANT_UNITS, _calc_criterion_other)
|
||||
is_choice = num in CRITERION_CHOICE_INDICATORS
|
||||
if is_choice:
|
||||
choice = e_choice.get().strip()
|
||||
@@ -2613,7 +2609,6 @@ class DokoGenApp:
|
||||
else:
|
||||
lines.append("Категория значимости: — (значение ниже порога III)")
|
||||
elif num == '10' or str(num).startswith('10.'):
|
||||
from .variables import _criterion_10_cat
|
||||
if str(num) == '10':
|
||||
ops = _num(e_ops.get())
|
||||
days = _num(e_days.get())
|
||||
@@ -2841,7 +2836,6 @@ class DokoGenApp:
|
||||
|
||||
# Кнопка «🧮» — авторасчёт показателя:
|
||||
# 8/9/10 — экономические формулы; остальные (1–7, 11–14) — по порогам ПП-127
|
||||
from .variables import (CRITERION_QUANT_THRESHOLDS, CRITERION_CHOICE_INDICATORS)
|
||||
if (grp_num in ('8', '9', '10')
|
||||
or num in CRITERION_QUANT_THRESHOLDS
|
||||
or num in CRITERION_CHOICE_INDICATORS):
|
||||
|
||||
Reference in New Issue
Block a user