feat: настройки импорта вынесены в текстовый файл-словарь

- import_settings.json рядом с программой (создаётся автоматически):
  что импортировать (var), откуда (cell: 'Общие сведения'!B2 или
  keywords: регэксп поиска по колонке A)
- importer.py читает словарь: сначала конкретная ячейка, потом ключевые слова
- листы общих сведений/сотрудников/ИС тоже настраиваются (ключевые слова)
- UI: меню «Генерация → Файл настроек импорта…» — выбор пути к словарю
- при сборке .exe файл остаётся редактируемым без пересборки
This commit is contained in:
2026-08-03 12:09:13 +04:00
parent 9998410dd6
commit 79952bf735
4 changed files with 484 additions and 60 deletions
+20 -1
View File
@@ -38,6 +38,10 @@ class DokoGenApp:
'.autosave', 'autosave_152.json'
)
# Путь к файлу настроек импорта (словарь «что и откуда брать»)
# None = import_settings.json рядом с программой (создаётся автоматически)
self.import_settings_path: Optional[str] = None
# Переменные
self.doc_number_var = tk.StringVar(value="")
self.doc_date_var = tk.StringVar(value="")
@@ -83,6 +87,7 @@ class DokoGenApp:
gen_menu = tk.Menu(menubar, tearoff=0)
menubar.add_cascade(label="Генерация", menu=gen_menu)
gen_menu.add_command(label="Импорт из опросника", command=self.import_from_survey)
gen_menu.add_command(label="Файл настроек импорта…", command=self.select_import_settings)
gen_menu.add_separator()
gen_menu.add_command(label="Сгенерировать всё", command=self.generate_all)
@@ -1267,6 +1272,20 @@ class DokoGenApp:
self.log("✅ Склонения краткого названия обновлены")
# ==================== ИМПОРТ ====================
def select_import_settings(self):
"""Выбор файла настроек импорта (JSON-словарь)."""
from .import_settings import default_import_settings_path, ensure_default_file
path = filedialog.askopenfilename(
title="Файл настроек импорта (что и откуда брать)",
filetypes=[("Настройки импорта", "*.json")]
)
if not path:
self.log(f"Настройки импорта: по умолчанию ({default_import_settings_path()})")
self.import_settings_path = None
return
self.import_settings_path = path
self.log(f"Настройки импорта: {path}")
def import_from_survey(self):
path = filedialog.askopenfilename(
title="Выберите опросный лист (152-ФЗ)",
@@ -1280,7 +1299,7 @@ class DokoGenApp:
def _run():
try:
from .importer import import_152fz
data = import_152fz(path, self.log)
data = import_152fz(path, self.log, settings_path=self.import_settings_path)
if data:
self._apply_imported_data(data)
except ImportError: