fix: 6 замечаний по генератору

1) нормализация адреса: «Р-Н Крымский» → «р-н. Крымский»,
   «Г Крымск» → «г. Крымск», «УЛ» → «ул.», «Д.» → «д.»
2) убрана строчка «ПО» на вкладке ИС
3) СЗИ без категорий: «Kaspersky, КриптоПро» (через запятую)
4) кнопка «Выбрать из списка» в подвкладке «Пользователи ИС»
5) бумажные документы: «хранятся в сейфе» (авто-предлог+падеж)
6) незаполненные данные «—» подсвечиваются жёлтым (незаменённые
   переменные — красным, как было)
This commit is contained in:
2026-08-03 13:23:52 +04:00
parent 2f4a08b2e4
commit 9d2690e3e0
4 changed files with 138 additions and 31 deletions
+23 -7
View File
@@ -595,13 +595,6 @@ class DokoGenApp:
self.is_structure_entry = ttk.Entry(fields_frame, width=55)
self.is_structure_entry.grid(row=7, column=1, padx=10, sticky=tk.EW)
# Программное обеспечение
ttk.Label(fields_frame, text="ПО:").grid(row=8, column=0, sticky=tk.W, pady=2)
self.is_software_entry = ttk.Entry(fields_frame, width=55)
self.is_software_entry.grid(row=8, column=1, padx=10, sticky=tk.EW)
fields_frame.columnconfigure(1, weight=1)
# Вложенные списки
@@ -659,6 +652,7 @@ class DokoGenApp:
self.users_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
btnf = ttk.Frame(user_tab)
btnf.pack(pady=3)
ttk.Button(btnf, text="👥 Выбрать из списка", command=self._select_users_from_employees).pack(side=tk.LEFT, padx=2)
ttk.Button(btnf, text="+ Добавить", command=self._add_user_to_is).pack(side=tk.LEFT, padx=2)
ttk.Button(btnf, text="- Удалить", command=self._del_user_from_is).pack(side=tk.LEFT, padx=2)
@@ -1339,6 +1333,28 @@ class DokoGenApp:
if user:
self.users_listbox.insert(tk.END, user)
def _select_users_from_employees(self):
"""Выбор пользователей ИС из списка сотрудников организации (вкладка «Пользователи»)."""
names = []
for emp in self.model.employees_access:
fio = (emp.get('fio') or '').strip()
if fio and fio not in names:
names.append(fio)
# Дополнительно: пользователи из других ИС
for isys in self.model.information_systems:
for u in (isys.users_list or []):
u = u.strip()
if u and u not in names:
names.append(u)
if not names:
messagebox.showinfo(
"Выбор пользователей",
"Список пуст.\nЗаполните вкладку «Пользователи» (сотрудники с доступом к ПДн) "
"или добавьте пользователей в другой ИС."
)
return
self._select_from_dialog("Выбор пользователей ИС", names, self.users_listbox)
def _del_user_from_is(self):
sel = self.users_listbox.curselection()
if sel: