feat: вкладка «ПО» — многострочные поля (списки построчно, как в опроснике)
- hw_sw/os_sw/app_sw теперь tk.Text с прокруткой вместо однострочного Entry - импортёр сохраняет переносы строк (_clean_multiline), а не схлопывает в одну строку - _collect_is/_on_is_select поддержка Text-виджетов
This commit is contained in:
+21
-9
@@ -330,6 +330,14 @@ def _import_187_is_list(wb, data, settings, log_fn):
|
||||
return True
|
||||
return False
|
||||
|
||||
def _clean_multiline(text):
|
||||
"""Чистит многострочное значение, сохраняя переносы строк."""
|
||||
if text is None:
|
||||
return ''
|
||||
s = str(text).replace('\r\n', '\n').replace('\r', '\n')
|
||||
lines = [ln.strip() for ln in s.split('\n')]
|
||||
return '\n'.join(ln for ln in lines if ln)
|
||||
|
||||
def _split_entries(text):
|
||||
"""Разбивает список средств защиты на ОТДЕЛЬНЫЕ программы.
|
||||
|
||||
@@ -445,22 +453,26 @@ def _import_187_is_list(wb, data, settings, log_fn):
|
||||
if _set(field_lower, 'net_method', val_b):
|
||||
log_fn(f" Способ взаимодействия: {val_b[:60]}")
|
||||
continue
|
||||
# --- ПО и аппаратные средства ---
|
||||
# --- ПО и аппаратные средства (сохраняем переносы строк) ---
|
||||
if 'наименования программно-аппаратных средств' in field_lower:
|
||||
if _set(field_lower, 'hw_sw', val_b):
|
||||
log_fn(f" ПО/аппаратные средства: {val_b[:60]}")
|
||||
if raw_b and 'выбрать' not in field_lower and not _is_hint(raw_b):
|
||||
is_obj['hw_sw'] = _clean_multiline(raw_b)
|
||||
log_fn(f" ПО/аппаратные средства: {str(raw_b)[:60]}")
|
||||
continue
|
||||
if 'операционная' in field_lower and 'система' in field_lower:
|
||||
if _set(field_lower, 'os_sw', val_b):
|
||||
log_fn(f" ОС: {val_b[:60]}")
|
||||
if raw_b and 'выбрать' not in field_lower and not _is_hint(raw_b):
|
||||
is_obj['os_sw'] = _clean_multiline(raw_b)
|
||||
log_fn(f" ОС: {str(raw_b)[:60]}")
|
||||
continue
|
||||
if 'прикладные программы' in field_lower:
|
||||
if _set(field_lower, 'app_sw', val_b):
|
||||
log_fn(f" Прикладные программы: {val_b[:60]}")
|
||||
if raw_b and 'выбрать' not in field_lower and not _is_hint(raw_b):
|
||||
is_obj['app_sw'] = _clean_multiline(raw_b)
|
||||
log_fn(f" Прикладные программы: {str(raw_b)[:60]}")
|
||||
continue
|
||||
if 'общесистемн' in field_lower:
|
||||
if _set(field_lower, 'os_sw', val_b):
|
||||
log_fn(f" Общесистемное ПО: {val_b[:60]}")
|
||||
if raw_b and 'выбрать' not in field_lower and not _is_hint(raw_b):
|
||||
is_obj['os_sw'] = _clean_multiline(raw_b)
|
||||
log_fn(f" Общесистемное ПО: {str(raw_b)[:60]}")
|
||||
continue
|
||||
# --- Безопасность / 236 приказ ---
|
||||
if 'категория нарушителя' in field_lower:
|
||||
|
||||
Reference in New Issue
Block a user