Обезличивание персональных данных в копии базы 1С: от карты полей до проверки результата
Содержание
Чтобы обезличить базу 1С, работают только с копией: выгружают .dt и загружают его в новую базу, отключают в ней обмены и регламентные задания, заменяют ФИО, ИНН, СНИЛС, паспорта, контакты и счета на условные значения, затем чистят историю — версии объектов, журнал регистрации, присоединённые файлы. Рабочую базу не трогают никогда.
Способов три. Готовая внешняя обработка — быстро, если она знает вашу конфигурацию. Своя обработка на встроенном языке — надёжно и проходит через объектную модель. Прямой UPDATE в SQL — самый быстрый для баз на сотни тысяч записей, но идёт мимо платформы и требует точной карты таблиц. На практике их комбинируют: справочники меняют обработкой, тяжёлые регистры — запросом к СУБД.
Что закон считает обезличиванием и зачем оно в 1С
По 152-ФЗ обезличивание — это действия, после которых нельзя определить, кому принадлежат данные, без дополнительной информации. Ключевое слово — «нельзя». Если в копии остались СНИЛС и дата рождения, а ФИО заменены на «Сотрудник 15», человек по-прежнему вычисляется. Такая база обезличенной не считается.
Зачем это нужно на практике:
- 🧑💻 Передача базы подрядчику. Разработчик, тестировщик или аудитор получает копию. Без обезличивания это передача персональных данных третьему лицу: нужен договор поручения обработки и основание.
- 🧪 Тестовый контур. Копия для обучения, демонстраций, нагрузочного тестирования живёт месяцами на чужих ноутбуках.
- 📦 Обращение в поддержку. Сопровождающая фирма просит базу, чтобы воспроизвести ошибку.
- 🗄️ Архив после ухода сотрудников. Иногда данные нужны для статистики, а не для идентификации.
Методы обезличивания Роскомнадзор перечислял в своём приказе № 996 «Об утверждении требований и методов по обезличиванию персональных данных». Перед юридически значимым решением сверьтесь с действующей редакцией. Для базы 1С подходят четыре метода:
| Метод | Как выглядит в 1С | Когда выбирать |
|---|---|---|
| Введение идентификаторов | ФИО → «Сотрудник 0042», таблица соответствия хранится отдельно | Нужно потом вернуться к реальным людям |
| Изменение состава или смысла | Дата рождения → 01.01 того же года, адрес → только регион | Нужна статистика по возрасту и регионам |
| Декомпозиция | Паспорт и ФИО разносятся по разным выгрузкам | Редко, для аналитики вне 1С |
| Перемешивание | Оклады переставлены между сотрудниками | Нагрузочные тесты, где важны реальные суммы |
Таблица соответствия «реальное ФИО → идентификатор» сама является персональными данными. Не кладите её в ту же копию и не отправляйте подрядчику.
Работник имеет право на защиту своих данных по главе 14 ТК РФ. Утечка тестовой копии — такая же утечка, как утечка рабочей базы.
Подготовка копии базы к обезличиванию
Первый шаг одинаковый для всех способов.
- В Конфигураторе рабочей базы:
Администрирование → Выгрузить информационную базу→ файл.dt. Делайте её вне рабочего времени, когда пользователи не вносят данные. - Создайте новую пустую базу и загрузите в неё
.dtчерезАдминистрирование → Загрузить информационную базу. Для серверной базы — новая база в кластере и новая база данных в СУБД. - При первом запуске копии в режиме 1С:Предприятие типовые конфигурации на БСП обнаруживают, что база перемещена, и предлагают заблокировать работу с внешними ресурсами. Выберите блокировку: иначе копия отправит письма, документы в ЭДО и выгрузки в банк от имени организации.
- Отключите регламентные задания в свойствах базы в кластере (флажок «Блокировка регламентных заданий включена»).
- Удалите из копии планы обмена с узлами реальных баз или хотя бы отключите синхронизацию.
Сразу переименуйте копию в списке баз, например «ТЕСТ_обезличено». Путаница «какая из двух открыта» — главный источник аварий при таких работах.
Где в базе 1С лежат персональные данные
Самая частая ошибка — поменять ФИО в справочнике «Физические лица» и считать дело сделанным. Данные человека разбросаны по десяткам объектов.
Справочники:
- 👤 «Физические лица» — ФИО, ИНН, СНИЛС, дата и место рождения.
- 🪪 «Сотрудники» (ЗУП, КА, ERP) — своё наименование, дублирующее ФИО.
- 🏢 «Контрагенты» — ИП с ФИО в наименовании, ИНН, паспортные данные.
- 👥 «Контактные лица», «Пользователи» — ФИО, телефоны, почта.
- 🏦 «Банковские счета» — лицевые счета сотрудников для зарплатного проекта.
Табличная часть «Контактная информация» у справочников: там адреса и телефоны лежат сразу в нескольких колонках — представление строкой, XML или JSON со структурой адреса. Менять надо все колонки, иначе в форме покажется подменённый адрес, а в данных останется реальный.
Регистры сведений с историей. В ЗУП ФИО, документы и адреса хранятся периодически: смена фамилии после брака лежит отдельной записью. Чистить нужно всю историю, а не только актуальный срез.
Скрытые места:
- 📜 версии объектов (регистр сведений с версиями при включённом версионировании) — там старые значения всех реквизитов;
- 🕘 история данных платформы, если она включена для объектов;
- 📎 присоединённые файлы — сканы паспортов, трудовых договоров, заявлений; лежат в базе или в томах на диске;
- ✉️ «Взаимодействия» — письма и их вложения;
- 📒 журнал регистрации — комментарии и представления данных;
- 🔐 безопасное хранилище — логины и пароли интернет-поддержки, банк-клиента, ЭДО;
- 📑 регламентированные отчёты — 6-НДФЛ, ЕФС-1, персонифицированные сведения содержат ФИО и СНИЛС в теле отчёта.
Как составить карту полей штатно. Получить имена таблиц и полей в СУБД помогает метод ПолучитьСтруктуруХраненияБазыДанных(). Его вызывают из консоли кода или своей обработки — он возвращает таблицу соответствия метаданных и таблиц базы данных. Для массовой замены одного реквизита в типовых конфигурациях на БСП есть обработка «Групповое изменение реквизитов» (Администрирование → Обслуживание → Корректировка данных). Она подходит для простых полей, но не умеет генерировать уникальные значения и не трогает регистры.
Готовые обработки обезличивания: что проверить до запуска
Внешних обработок обезличивания много — на отраслевых форумах, у франчайзи, в составе инструментов разработчика. Конкретную не рекомендую: качество разное, а проверить обязаны вы.
Перед запуском чужой обработки:
- Откройте код. Обработка получает полный доступ к базе. Посмотрите, что она меняет и не отправляет ли что-то по сети (
HTTPСоединение,ИнтернетПочтовоеСообщение). - Проверьте список объектов. Сверьте его с картой из предыдущего раздела. Обычно обработки забывают версии объектов, файлы и регламентированные отчёты.
- Узнайте, пишет ли она через
ОбменДанными.Загрузка = Истина. Без этого флага каждая запись запускает проверки и подписки конфигурации: обработка идёт в десятки раз медленнее и падает на проверке заполнения. - Посмотрите на генерацию значений. Одинаковое значение ИНН у всех лиц сломает контроль уникальности и отчёты. Случайный ИНН без контрольной суммы даст ошибки в отчётности.
- Прогоните на маленькой копии, а уже потом на полной.
Своя обработка обезличивания: алгоритм и пример кода
Своя обработка нужна, когда конфигурация доработана или готовая не закрывает всё. Порядок:
- Составьте карту: объект → реквизит → правило замены.
- Для каждого справочника выберите все элементы запросом, без форм.
- Генерируйте значения детерминированно: одному физлицу — одно и то же новое ФИО во всех местах. Удобно строить его от порядкового номера.
- Пишите в режиме загрузки, порциями, с транзакцией на порцию.
- Отдельно очистите регистры с историей и версии объектов.
- Логируйте количество изменённых записей по каждому объекту.
Пример для справочника «Физические лица». Имена реквизитов сверьте в Конфигураторе: в разных конфигурациях и релизах они различаются.
&НаСервере
Процедура ОбезличитьФизическиеЛицаНаСервере()
// Если справочник иерархический, добавьте условие НЕ ФЛ.ЭтоГруппа
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ФЛ.Ссылка КАК Ссылка
|ИЗ
| Справочник.ФизическиеЛица КАК ФЛ
|УПОРЯДОЧИТЬ ПО
| ФЛ.Код");
Выборка = Запрос.Выполнить().Выбрать();
Номер = 0;
НачатьТранзакцию();
Пока Выборка.Следующий() Цикл
Номер = Номер + 1;
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Наименование = СтрШаблон("Сотрудник %1", Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0"));
Объект.ИНН = "";
Объект.СтраховойНомерПФР = "";
Если ЗначениеЗаполнено(Объект.ДатаРождения) Тогда
Объект.ДатаРождения = Дата(Год(Объект.ДатаРождения), 1, 1);
КонецЕсли;
Объект.КонтактнаяИнформация.Очистить();
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
// Фиксируем порциями по 500 элементов
Если Номер % 500 = 0 Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Сообщить(СтрШаблон("Обезличено физических лиц: %1", Формат(Номер, "ЧГ=0")));
КонецПроцедуры
Что здесь сделано осознанно:
- 🔢 Номер с ведущими нулями («Сотрудник 000042») — списки сортируются так же, как в рабочей базе.
- 📅 Дата рождения сводится к 1 января того же года: возраст для статистики остаётся, точная дата исчезает.
- 🧹 ИНН и СНИЛС очищаются, а не заменяются: пустое поле честнее случайного набора цифр.
Если тестам нужны заполненные ИНН и СНИЛС (например, проверяют выгрузку отчётов), генерируйте значения с корректной контрольной суммой. Для СНИЛС: первые 9 цифр умножают на веса от 9 до 1 и складывают. Сумма меньше 100 — это и есть контрольное число; 100 или 101 — контрольное «00»; больше 101 — берут остаток от деления на 101 и применяют те же правила.
Пример: номер 112-233-445. Сумма: 1×9 + 1×8 + 2×7 + 2×6 + 3×5 + 3×4 + 4×3 + 4×2 + 5×1 = 9 + 8 + 14 + 12 + 15 + 12 + 12 + 8 + 5 = 95. Контрольное число — 95.
В ЗУП после справочника обработайте регистры сведений с ФИО и документами физлиц: иначе в кадровых документах и отчётах всплывут прежние фамилии. Их записывают через наборы записей регистра с тем же флагом загрузки.
Версии объектов в копии проще удалить целиком, чем обезличивать: для тестов история изменений обычно не нужна.
Обезличивание напрямую в SQL Server и PostgreSQL
Для серверных баз объёмом в десятки гигабайт обработка может идти часами. UPDATE в СУБД выполняется за минуты. Цена — работа в обход платформы: нет проверок, нет подписок, легко испортить ссылочную целостность.
Правила безопасности:
- Только на копии и только при остановленных сеансах этой копии. Перед запуском завершите сеансы и заблокируйте вход в базу в консоли кластера. После правок перезапустите сеансы, чтобы платформа не показывала старые значения из кэша.
- Имена таблиц берите только из
ПолучитьСтруктуруХраненияБазыДанных(). Номер вроде_Reference123уникален для каждой базы. - Меняйте только строковые поля и даты. Ссылки (
_IDRRef, поля_Fld…RRef) не трогайте. - Фирма 1С не поддерживает изменение данных средствами СУБД — ответственность на вас.
MS SQL Server. Имена в смешанном регистре, строки — nvarchar:
WITH t AS (
SELECT _Description,
ROW_NUMBER() OVER (ORDER BY _IDRRef) AS n
FROM dbo._Reference123
)
UPDATE t
SET _Description = N'Сотрудник ' + CAST(n AS nvarchar(10));
PostgreSQL. Имена таблиц и полей в нижнем регистре, строковые поля 1С хранит в собственном типе mvarchar, поэтому значение явно приводят:
UPDATE _reference123 r
SET _description = ('Сотрудник ' || t.n)::mvarchar
FROM (
SELECT _idrref, row_number() OVER (ORDER BY _idrref) AS n
FROM _reference123
) t
WHERE r._idrref = t._idrref;
Номер реквизита, например ИНН (_Fld456), подставляется так же. Табличная часть контактной информации лежит в отдельной таблице вида _Reference123_VT789 — её строки удобнее удалить целиком.
Сравнение способов по скорости на одной и той же базе легко сделать самому: засеките обработку на 1000 элементов и умножьте. Если выходит больше часа — переходите на SQL для этого объекта.
Файловую базу
SQL-запросом не обработать. Либо используйте обработку, либо загрузите .dt во временную серверную базу
, обезличьте там и выгрузите обратно.
Проверка обезличенной копии перед передачей
Обезличивание считается законченным, когда вы проверили результат, а не когда обработка дописала «Готово».
Как проверить быстро:
- Поиск по фамилиям. Возьмите несколько редких реальных фамилий и поищите их через полнотекстовый поиск копии. Перед этим обновите индекс: старый может хранить прежние значения.
- Журнал регистрации. В Конфигураторе:
Администрирование → Настройка журнала регистрации, кнопка «Сократить» — удалите записи до текущей даты. - Пользователи.
Администрирование → Пользователив Конфигураторе: замените имена на роли («Бухгалтер1»), сбросьте пароли. Справочник «Пользователи» в режиме Предприятия тоже содержит ФИО. - Финальная выгрузка. Выгрузите проверенную копию в новый
.dt— его и передавайте. Папку с файлами томов отдельно не прикладывайте.
Частые вопросы
Можно ли обезличить данные прямо в рабочей базе?
Нужно ли обезличивать контрагентов-юрлиц?
Хватит ли заменить только ФИО?
Сохраняются ли суммы начислений после обезличивания?
Нужно ли согласие сотрудников на обезличивание?
Источники
- Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных»
- Трудовой кодекс РФ, глава 14 «Защита персональных данных работника»