При разработке и сопровождении систем 1С часто возникает задача передачи копии рабочей ("боевой") базы программистам для отладки, тестирования обновлений или воспроизведения ошибок. Однако передача реальных данных (персональные данные сотрудников, коммерческая тайна, суммы сделок) третьим лицам или даже внутренним разработчикам может быть недопустима с точки зрения безопасности и законодательства (например, 152-ФЗ). В этой статье мы подробно разберем, как грамотно "обезличить" базу, какие инструменты для этого существуют и какие подводные камни нас ожидают.
Простое удаление справочников или документов сделает базу непригодной для тестирования. Разработчику нужен "живой" объем данных, чтобы проверять производительность, и корректные связи между объектами, чтобы алгоритмы отрабатывали правильно. Если же перед вами стоит задача выборочного удаления лишней информации, может потребоваться универсальная очистка базы и удаление элементов справочников с контролем ссылочной целостности — для этого подойдёт универсальная очистка базы с контролем ссылок. Однако наша основная цель при обезличивании — заменить реальные значения на псевдослучайные (обфускация), сохранив при этом структуру данных.
Давайте рассмотрим основные способы решения этой задачи, от штатных средств до глубокой технической очистки.
В большинстве современных типовых конфигураций (ERP, КА, ЗУП, Бухгалтерия), построенных на базе Библиотеки Стандартных Подсистем (БСП), фирма 1С уже предусмотрела специальный инструмент. Это наиболее безопасный путь для тех, кто не хочет писать код самостоятельно.
Как это работает:
Обработка позволяет выбрать справочники (например, ФизическиеЛица, Контрагенты, Партнеры) и правила их обработки:
Чтобы найти эту обработку, обычно нужно зайти в раздел Администрирование -> Обслуживание -> Корректировка данных (путь может отличаться в зависимости от конфигурации).
Плюсы:
Минусы:
Если штатная обработка недоступна или не устраивает по скорости, мы прибегаем к написанию собственных инструментов. Однако здесь кроется множество опасностей, которые мы должны разобрать.
Частая ошибка новичков — попытка перепроведения документов с новыми суммами.
Почему нельзя перепроводить базу при обезличивании?
Поэтому правильный подход при самостоятельном изменении данных — это прямая запись или запись в режиме ОбменДанными.Загрузка = Истина, чтобы отключить проверки. Если же вам нужно массово скорректировать записи в регистрах, стоит использовать специализированное удаление и обработку записей регистров накопления, чтобы сохранить корректность структуры данных.
Пример логики для изменения ФИО сотрудников:
Выборка = Справочники.ФизическиеЛица.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Объект.Наименование = "ФизЛицо_" + Объект.Код;
Объект.ФИО = "Хрюндель №" + Объект.Код; // Условно
// Важно: отключаем проверки при записи
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
КонецЦикла;
Просто переименовать контрагентов и сотрудников недостаточно. Если база передается внешней стороне, мы должны проверить скрытые места хранения информации. Давайте составим чек-лист "неочевидных" мест утечки данных.
Даже если вы изменили фамилию "Иванов" на "User_1", в журнале регистрации (файлы .lgd или .lgf) останутся записи вида: "Пользователь Иванов изменил документ..." или старые представления объектов. Историю данных (версионирование) также необходимо очистить, используя, например, обработку для удаления неактуальных версий объектов.
Решение: Полностью очистить или удалить файлы журнала регистрации перед передачей базы.
В справочнике ПрисоединенныеФайлы могут храниться сканы паспортов, договоров с печатями и подписями. Обезличенная база со сканами реальных документов — это серьезная утечка.
Решение: Очистить регистры и справочники, хранящие файлы, либо заменить содержимое файлов на "заглушки" (пустые файлы).
В современных конфигурациях адреса и телефоны хранятся в табличных частях в виде XML-строк (поле ЗначениеПолей). Простая замена представления адреса не удалит реальный адрес из структуры XML внутри поля.
Проанализируем регистры сведений, связанные с настройками обменов. Там часто хранятся пароли от почты, FTP, сервисов 1С-Отчетности и клиент-банков в открытом или слабо зашифрованном виде. Для очистки подобных данных удобно применять универсальную обработку регистров сведений, позволяющую заменять значения по фильтрам.
Что чистить:
УчетныеЗаписиЭлектроннойПочты.БезопасноеХранилищеДанных (здесь часто лежат токены и пароли).После изменения данных старые значения (фамилии, адреса) остаются в индексах полнотекстового поиска. Если воспользоваться глобальным поиском, можно найти "удаленные" данные.
Решение: После обезличивания обязательно выполнить очистку индекса полнотекстового поиска: Администрирование -> Общие настройки -> Полнотекстовый поиск -> Очистить индекс.
Критически важный момент! Перед началом любых работ с копией базы мы должны заблокировать выполнение регламентных заданий. Иначе тестовая база может начать отправлять письма реальным клиентам или пытаться обменяться данными с сайтом/банком, создавая дубли заказов или проводя платежи.
В SQL-версии это можно сделать через очистку таблицы заданий или параметр запуска кластера -allowExecuteScheduledJobs -Off.
Для очень больших баз (терабайты данных) использование обработок 1С может занять дни. В таких случаях профессионалы используют SQL-скрипты для обфускации (запутывания) данных напрямую в СУБД.
Этот метод требует высочайшей квалификации, так как:
Контрагенты — это таблица _Reference32, а поле Наименование — это _Description).Чтобы не "портить" полную копию базы, можно использовать механизм Конвертации данных (КД 2.0 / КД 3.0) или Универсальный обмен в формате XML — есть готовая обработка для переноса данных через XML. Для более гибкой работы часто применяется адаптивная выгрузка и загрузка данных XML, позволяющая производить обмен между не полностью идентичными конфигурациями.
Мы создаем правила обмена, где в обработчиках событий ПриВыгрузке прописываем логику подмены данных:
// Пример кода обработчика в правилах обмена
Значение = "Обезличено_" + Объект.Ссылка.УникальныйИдентификатор();
Затем мы выгружаем данные из рабочей базы в пустую. В файл выгрузки попадают уже измененные данные. Если же вы опасаетесь перехвата самого файла, стоит рассмотреть универсальную выгрузку документов и справочников с шифрованием. Загружая такой файл в чистую базу, мы получаем гарантированно безопасную среду без лишнего мусора, логов и двоичных данных.
Обезличивание базы — это комплексная задача, выходящая за рамки простой замены фамилий. Чтобы спать спокойно, выполним следующую последовательность действий:
Только такой подход гарантирует, что ваши данные останутся в безопасности даже при передаче базы сторонним разработчикам.