При передаче базы данных 1С сторонним разработчикам, помощникам или тестировщикам часто возникает необходимость скрыть конфиденциальную информацию. Это могут быть названия контрагентов, персональные данные сотрудников, цены, суммы сделок и контактная информация. В этой статье мы подробно разберем, как правильно провести процедуру анонимизации, какие инструменты для этого существуют и на что стоит обратить внимание, чтобы база осталась работоспособной, но при этом безопасной.
Прежде чем приступать к написанию собственного кода, рассмотрим возможности, которые уже заложены в современные конфигурации 1С. В составе Библиотеки стандартных подсистем (БСП) существует специализированная обработка «Изменение конфиденциальной информации». Она встроена в большинство типовых решений (ERP, БП 3.0, ЗУП 3, КА). В качестве готового внешнего решения можно использовать обработку для изменения конфиденциальной информации.
Этот инструмент позволяет гибко настраивать правила обезличивания:
Если нам требуется специфическое решение или мы работаем с самописной конфигурацией, проанализируем вариант создания собственной обработки. Основная идея заключается в обходе всех метаданных и изменении строковых реквизитов.
Разберем по шагам примерный алгоритм работы такой обработки:
Строка, заменяем его содержимое.Посмотрим на пример упрощенного кода для обхода справочников:
Для Каждого МетаСправочник Из Метаданные.Справочники Цикл
// Исключаем классификаторы, которые не нужно трогать
Если МетаСправочник.Имя = "Валюты" Или МетаСправочник.Имя = "КлассификаторЕдиницИзмерения" Тогда
Продолжить;
КонецЕсли;
Выборка = Справочники[МетаСправочник.Имя].Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Объект.ОбменДанными.Загрузка = Истина; // Отключаем проверки
// Перебор реквизитов объекта
Для Каждого Реквизит Из МетаСправочник.Реквизиты Цикл
Если Реквизит.Тип.СодержитТип(Тип("Строка")) Тогда
Объект[Реквизит.Имя] = "Обезличено_" + Объект.Ссылка.УникальныйИдентификатор();
КонецЕсли;
КонецЦикла;
Попытка
Объект.Записать();
Исключение
// Логируем ошибки записи, если они возникли
КонецПопытки;
КонецЦикла;
КонецЦикла;
Простое затирание данных строкой «Обезличено» не всегда удобно для тестирования. Выясним причину: разработчику может быть важно видеть реалистичные данные для отладки интерфейсов и отчетов. В связи с этим выделяют два подхода:
ывапролдж программа запишет Петров Петр Петрович. Это делает работу с базой психологически комфортной и наглядной.Многие полагают, что достаточно «пробежаться» по справочникам Контрагенты и ФизическиеЛица. Однако проанализируем ситуацию глубже. Конфиденциальные данные могут скрываться в самых неожиданных местах:
КонтактнаяИнформация. Данные там часто упакованы в формат XML или JSON. Нужно не просто очищать поле, а корректно парсить строку, чтобы не нарушить структуру адреса..lgf или в базе SQL хранятся записи о том, кто и когда заходил в систему, а также ФИО пользователей. При передаче базы журнал регистрации следует очищать полностью.Если объем базы измеряется терабайтами, стандартный метод Объект.Записать() будет работать недопустимо долго. В таких случаях рассмотрим подробнее использование SQL-запросов напрямую к таблицам базы данных. Это на порядок быстрее, но требует глубокого понимания структуры таблиц 1С (сопоставление имен метаданных и имен таблиц в SQL). Для предварительного сопоставления объектов 1С с физическими таблицами можно использовать обработку просмотра метаданных. Она показывает структуру базы, но не обезличивает данные и не выполняет SQL-изменения.
Важный момент: При массовом изменении данных обязательно используйте свойство ОбменДанными.Загрузка = Истина. Это отключает выполнение кода в модулях объектов (проверки, заполнение связанных регистров), что критически важно для скорости и предотвращения блокировок по бизнес-логике (например, запрет редактирования закрытого периода).
С точки зрения законодательства о персональных данных, процедура обезличивания должна гарантировать невозможность восстановления личности субъекта без использования дополнительной информации. Разберем, что это значит на практике: если в базе осталась уникальная сумма сделки и дата, по которым можно вычислить клиента, база может считаться не до конца обезличенной. Для полной безопасности рекомендуется также применять «зашумление» числовых данных (изменение сумм на случайный небольшой процент).
Подведем итог: Анонимизация — это комплексный процесс. Для типовых решений лучше всего использовать встроенную обработку БСП. Для уникальных задач — комбинировать скрипты по метаданным с очисткой служебных областей (версионирование, журналы, файлы). Правильный подход позволит вам безопасно передавать базу для разработки, соблюдая конфиденциальность ваших клиентов и сотрудников.