Как правильно обезличить базу 1С для тестирования: скрываем ФИО, суммы и чувствительные данные?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке и сопровождении систем 1С часто возникает задача передачи копии рабочей ("боевой") базы программистам для отладки, тестирования обновлений или воспроизведения ошибок. Однако передача реальных данных (персональные данные сотрудников, коммерческая тайна, суммы сделок) третьим лицам или даже внутренним разработчикам может быть недопустима с точки зрения безопасности и законодательства (например, 152-ФЗ). В этой статье мы подробно разберем, как грамотно "обезличить" базу, какие инструменты для этого существуют и какие подводные камни нас ожидают.

Зачем нужно обезличивание и почему нельзя просто удалить данные?

Простое удаление справочников или документов сделает базу непригодной для тестирования. Разработчику нужен "живой" объем данных, чтобы проверять производительность, и корректные связи между объектами, чтобы алгоритмы отрабатывали правильно. Если же перед вами стоит задача выборочного удаления лишней информации, может потребоваться универсальная очистка базы и удаление элементов справочников с контролем ссылочной целостности — для этого подойдёт универсальная очистка базы с контролем ссылок. Однако наша основная цель при обезличивании — заменить реальные значения на псевдослучайные (обфускация), сохранив при этом структуру данных.

Давайте рассмотрим основные способы решения этой задачи, от штатных средств до глубокой технической очистки.

Способ 1. Штатная обработка "Скрытие конфиденциальной информации"

В большинстве современных типовых конфигураций (ERP, КА, ЗУП, Бухгалтерия), построенных на базе Библиотеки Стандартных Подсистем (БСП), фирма 1С уже предусмотрела специальный инструмент. Это наиболее безопасный путь для тех, кто не хочет писать код самостоятельно.

Как это работает:

Обработка позволяет выбрать справочники (например, ФизическиеЛица, Контрагенты, Партнеры) и правила их обработки:

  1. Строковые поля: заменяются на случайный набор символов или GUID. Например, "Иванов Иван Иванович" превращается в нечитаемую строку вида "0c6299c688ab...".
  2. Числовые поля: можно задать правило изменения сумм (умножение на коэффициент, сдвиг на фиксированное число или рандомизация), чтобы скрыть реальные обороты компании.

Чтобы найти эту обработку, обычно нужно зайти в раздел Администрирование -> Обслуживание -> Корректировка данных (путь может отличаться в зависимости от конфигурации).

Плюсы:

Минусы:

Способ 2. Самописные алгоритмы и важные предостережения

Если штатная обработка недоступна или не устраивает по скорости, мы прибегаем к написанию собственных инструментов. Однако здесь кроется множество опасностей, которые мы должны разобрать.

Частая ошибка новичков — попытка перепроведения документов с новыми суммами.

Почему нельзя перепроводить базу при обезличивании?

  1. Это занимает колоссальное количество времени.
  2. Изменение сумм в документах может привести к нарушению контроля остатков. Документ, который провелся год назад, сейчас может не провестись из-за изменившейся логики или отрицательных остатков, возникших после рандомизации сумм.
  3. Нарушается последовательность партионного учета.

Поэтому правильный подход при самостоятельном изменении данных — это прямая запись или запись в режиме ОбменДанными.Загрузка = Истина, чтобы отключить проверки. Если же вам нужно массово скорректировать записи в регистрах, стоит использовать специализированное удаление и обработку записей регистров накопления, чтобы сохранить корректность структуры данных.

Пример логики для изменения ФИО сотрудников:


Выборка = Справочники.ФизическиеЛица.Выбрать();
Пока Выборка.Следующий() Цикл
    Объект = Выборка.ПолучитьОбъект();
    Объект.Наименование = "ФизЛицо_" + Объект.Код; 
    Объект.ФИО = "Хрюндель №" + Объект.Код; // Условно
    
    // Важно: отключаем проверки при записи
    Объект.ОбменДанными.Загрузка = Истина; 
    Объект.Записать();
КонецЦикла;

Способ 3. Глубокая очистка: о чем часто забывают

Просто переименовать контрагентов и сотрудников недостаточно. Если база передается внешней стороне, мы должны проверить скрытые места хранения информации. Давайте составим чек-лист "неочевидных" мест утечки данных.

1. Журнал регистрации и История данных

Даже если вы изменили фамилию "Иванов" на "User_1", в журнале регистрации (файлы .lgd или .lgf) останутся записи вида: "Пользователь Иванов изменил документ..." или старые представления объектов. Историю данных (версионирование) также необходимо очистить, используя, например, обработку для удаления неактуальных версий объектов.

Решение: Полностью очистить или удалить файлы журнала регистрации перед передачей базы.

2. Файлы и вложения (Двоичные данные)

В справочнике ПрисоединенныеФайлы могут храниться сканы паспортов, договоров с печатями и подписями. Обезличенная база со сканами реальных документов — это серьезная утечка.

Решение: Очистить регистры и справочники, хранящие файлы, либо заменить содержимое файлов на "заглушки" (пустые файлы).

3. Контактная информация (XML/JSON)

В современных конфигурациях адреса и телефоны хранятся в табличных частях в виде XML-строк (поле ЗначениеПолей). Простая замена представления адреса не удалит реальный адрес из структуры XML внутри поля.

4. Настройки обменов и пароли

Проанализируем регистры сведений, связанные с настройками обменов. Там часто хранятся пароли от почты, FTP, сервисов 1С-Отчетности и клиент-банков в открытом или слабо зашифрованном виде. Для очистки подобных данных удобно применять универсальную обработку регистров сведений, позволяющую заменять значения по фильтрам.

Что чистить:

5. Полнотекстовый поиск

После изменения данных старые значения (фамилии, адреса) остаются в индексах полнотекстового поиска. Если воспользоваться глобальным поиском, можно найти "удаленные" данные.

Решение: После обезличивания обязательно выполнить очистку индекса полнотекстового поиска: Администрирование -> Общие настройки -> Полнотекстовый поиск -> Очистить индекс.

6. Регламентные задания

Критически важный момент! Перед началом любых работ с копией базы мы должны заблокировать выполнение регламентных заданий. Иначе тестовая база может начать отправлять письма реальным клиентам или пытаться обменяться данными с сайтом/банком, создавая дубли заказов или проводя платежи.

В SQL-версии это можно сделать через очистку таблицы заданий или параметр запуска кластера -allowExecuteScheduledJobs -Off.

Способ 4. SQL-скрипты и внешние инструменты

Для очень больших баз (терабайты данных) использование обработок 1С может занять дни. В таких случаях профессионалы используют SQL-скрипты для обфускации (запутывания) данных напрямую в СУБД.

Этот метод требует высочайшей квалификации, так как:

Альтернативный подход: Выгрузка с конвертацией

Чтобы не "портить" полную копию базы, можно использовать механизм Конвертации данных (КД 2.0 / КД 3.0) или Универсальный обмен в формате XML — есть готовая обработка для переноса данных через XML. Для более гибкой работы часто применяется адаптивная выгрузка и загрузка данных XML, позволяющая производить обмен между не полностью идентичными конфигурациями.

Мы создаем правила обмена, где в обработчиках событий ПриВыгрузке прописываем логику подмены данных:


// Пример кода обработчика в правилах обмена
Значение = "Обезличено_" + Объект.Ссылка.УникальныйИдентификатор();

Затем мы выгружаем данные из рабочей базы в пустую. В файл выгрузки попадают уже измененные данные. Если же вы опасаетесь перехвата самого файла, стоит рассмотреть универсальную выгрузку документов и справочников с шифрованием. Загружая такой файл в чистую базу, мы получаем гарантированно безопасную среду без лишнего мусора, логов и двоичных данных.

Итоги

Обезличивание базы — это комплексная задача, выходящая за рамки простой замены фамилий. Чтобы спать спокойно, выполним следующую последовательность действий:

  1. Сделать копию базы и сразу заблокировать регламентные задания.
  2. Использовать штатную обработку "Скрытие конфиденциальной информации" для основных справочников.
  3. Очистить регистры с настройками обменов, паролями и почтой.
  4. Удалить или очистить присоединенные файлы (сканы).
  5. Полностью очистить журнал регистрации и историю данных.
  6. Очистить индекс полнотекстового поиска.

Только такой подход гарантирует, что ваши данные останутся в безопасности даже при передаче базы сторонним разработчикам.

← На главную