Как анонимизировать (обезличить) базу данных 1С для разработки и тестирования

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

При передаче базы данных 1С сторонним разработчикам, помощникам или тестировщикам часто возникает необходимость скрыть конфиденциальную информацию. Это могут быть названия контрагентов, персональные данные сотрудников, цены, суммы сделок и контактная информация. В этой статье мы подробно разберем, как правильно провести процедуру анонимизации, какие инструменты для этого существуют и на что стоит обратить внимание, чтобы база осталась работоспособной, но при этом безопасной.

Использование стандартных инструментов: Библиотека стандартных подсистем (БСП)

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

Этот инструмент позволяет гибко настраивать правила обезличивания:

  1. Выбор объектов: Мы можем указать конкретные справочники и документы, которые подлежат обработке.
  2. Правила замены: Вместо удаления данных можно использовать замену на случайные значения, пустые строки или маски (например, заменить все ИНН на случайный набор цифр).
  3. Сохранение связей: Обработка корректно работает со ссылочной целостностью. Если мы меняем наименование контрагента, ссылка на него в документах сохраняется, но отображаемое имя становится вымышленным.
  4. Готовые шаблоны: Фирма 1С часто предоставляет готовые XML-файлы с правилами для типовых конфигураций. В них уже размечены поля, содержащие ФИО, паспортные данные и адреса.

Техническая реализация через перебор метаданных

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

Разберем по шагам примерный алгоритм работы такой обработки:

  1. Получаем список всех справочников и документов из метаданных.
  2. Перебираем реквизиты каждого объекта.
  3. Если тип реквизита — Строка, заменяем его содержимое.
  4. Для регистров сведений (особенно с контактной информацией) применяем полную очистку или замену.

Посмотрим на пример упрощенного кода для обхода справочников:


Для Каждого МетаСправочник Из Метаданные.Справочники Цикл
    // Исключаем классификаторы, которые не нужно трогать
    Если МетаСправочник.Имя = "Валюты" Или МетаСправочник.Имя = "КлассификаторЕдиницИзмерения" Тогда
        Продолжить;
    КонецЕсли;

    Выборка = Справочники[МетаСправочник.Имя].Выбрать();
    Пока Выборка.Следующий() Цикл
        Объект = Выборка.ПолучитьОбъект();
        Объект.ОбменДанными.Загрузка = Истина; // Отключаем проверки
        
        // Перебор реквизитов объекта
        Для Каждого Реквизит Из МетаСправочник.Реквизиты Цикл
            Если Реквизит.Тип.СодержитТип(Тип("Строка")) Тогда
                Объект[Реквизит.Имя] = "Обезличено_" + Объект.Ссылка.УникальныйИдентификатор();
            КонецЕсли;
        КонецЦикла;
        
        Попытка
            Объект.Записать();
        Исключение
            // Логируем ошибки записи, если они возникли
        КонецПопытки;
    КонецЦикла;
КонецЦикла;

Типы анонимизации: реалистичные данные против случайных строк

Простое затирание данных строкой «Обезличено» не всегда удобно для тестирования. Выясним причину: разработчику может быть важно видеть реалистичные данные для отладки интерфейсов и отчетов. В связи с этим выделяют два подхода:

  1. Детерминированное обезличивание: Одинаковые исходные значения всегда заменяются на одинаковые вымышленные. Это важно для сохранения смысла аналитических отчетов. Если «Контрагент А» стал «ООО Ромашка», то во всей базе он должен стать именно «ООО Ромашка», чтобы обороты по нему сходились.
  2. Генерация по словарям: Использование внешних словарей имен, фамилий и городов. Вместо ывапролдж программа запишет Петров Петр Петрович. Это делает работу с базой психологически комфортной и наглядной.

Скрытые места хранения данных, о которых часто забывают

Многие полагают, что достаточно «пробежаться» по справочникам Контрагенты и ФизическиеЛица. Однако проанализируем ситуацию глубже. Конфиденциальные данные могут скрываться в самых неожиданных местах:

Оптимизация производительности для больших баз

Если объем базы измеряется терабайтами, стандартный метод Объект.Записать() будет работать недопустимо долго. В таких случаях рассмотрим подробнее использование SQL-запросов напрямую к таблицам базы данных. Это на порядок быстрее, но требует глубокого понимания структуры таблиц 1С (сопоставление имен метаданных и имен таблиц в SQL). Для предварительного сопоставления объектов 1С с физическими таблицами можно использовать обработку просмотра метаданных. Она показывает структуру базы, но не обезличивает данные и не выполняет SQL-изменения.

Важный момент: При массовом изменении данных обязательно используйте свойство ОбменДанными.Загрузка = Истина. Это отключает выполнение кода в модулях объектов (проверки, заполнение связанных регистров), что критически важно для скорости и предотвращения блокировок по бизнес-логике (например, запрет редактирования закрытого периода).

Правовой аспект и 152-ФЗ

С точки зрения законодательства о персональных данных, процедура обезличивания должна гарантировать невозможность восстановления личности субъекта без использования дополнительной информации. Разберем, что это значит на практике: если в базе осталась уникальная сумма сделки и дата, по которым можно вычислить клиента, база может считаться не до конца обезличенной. Для полной безопасности рекомендуется также применять «зашумление» числовых данных (изменение сумм на случайный небольшой процент).

Подведем итог: Анонимизация — это комплексный процесс. Для типовых решений лучше всего использовать встроенную обработку БСП. Для уникальных задач — комбинировать скрипты по метаданным с очисткой служебных областей (версионирование, журналы, файлы). Правильный подход позволит вам безопасно передавать базу для разработки, соблюдая конфиденциальность ваших клиентов и сотрудников.

← На главную