Обезличивание персональных данных в копии базы 1С: от карты полей до проверки результата

· 10 мин

Содержание

Чтобы обезличить базу 1С, работают только с копией: выгружают .dt и загружают его в новую базу, отключают в ней обмены и регламентные задания, заменяют ФИО, ИНН, СНИЛС, паспорта, контакты и счета на условные значения, затем чистят историю — версии объектов, журнал регистрации, присоединённые файлы. Рабочую базу не трогают никогда.

Способов три. Готовая внешняя обработка — быстро, если она знает вашу конфигурацию. Своя обработка на встроенном языке — надёжно и проходит через объектную модель. Прямой UPDATE в SQL — самый быстрый для баз на сотни тысяч записей, но идёт мимо платформы и требует точной карты таблиц. На практике их комбинируют: справочники меняют обработкой, тяжёлые регистры — запросом к СУБД.

Что закон считает обезличиванием и зачем оно в 1С

По 152-ФЗ обезличивание — это действия, после которых нельзя определить, кому принадлежат данные, без дополнительной информации. Ключевое слово — «нельзя». Если в копии остались СНИЛС и дата рождения, а ФИО заменены на «Сотрудник 15», человек по-прежнему вычисляется. Такая база обезличенной не считается.

Зачем это нужно на практике:

  • 🧑‍💻 Передача базы подрядчику. Разработчик, тестировщик или аудитор получает копию. Без обезличивания это передача персональных данных третьему лицу: нужен договор поручения обработки и основание.
  • 🧪 Тестовый контур. Копия для обучения, демонстраций, нагрузочного тестирования живёт месяцами на чужих ноутбуках.
  • 📦 Обращение в поддержку. Сопровождающая фирма просит базу, чтобы воспроизвести ошибку.
  • 🗄️ Архив после ухода сотрудников. Иногда данные нужны для статистики, а не для идентификации.

Методы обезличивания Роскомнадзор перечислял в своём приказе № 996 «Об утверждении требований и методов по обезличиванию персональных данных». Перед юридически значимым решением сверьтесь с действующей редакцией. Для базы 1С подходят четыре метода:

МетодКак выглядит в 1СКогда выбирать
Введение идентификаторовФИО → «Сотрудник 0042», таблица соответствия хранится отдельноНужно потом вернуться к реальным людям
Изменение состава или смыслаДата рождения → 01.01 того же года, адрес → только регионНужна статистика по возрасту и регионам
ДекомпозицияПаспорт и ФИО разносятся по разным выгрузкамРедко, для аналитики вне 1С
ПеремешиваниеОклады переставлены между сотрудникамиНагрузочные тесты, где важны реальные суммы

Таблица соответствия «реальное ФИО → идентификатор» сама является персональными данными. Не кладите её в ту же копию и не отправляйте подрядчику.

Работник имеет право на защиту своих данных по главе 14 ТК РФ. Утечка тестовой копии — такая же утечка, как утечка рабочей базы.

Подготовка копии базы к обезличиванию

Первый шаг одинаковый для всех способов.

  1. В Конфигураторе рабочей базы: Администрирование → Выгрузить информационную базу → файл .dt. Делайте её вне рабочего времени, когда пользователи не вносят данные.
  2. Создайте новую пустую базу и загрузите в неё .dt через Администрирование → Загрузить информационную базу. Для серверной базы — новая база в кластере и новая база данных в СУБД.
  3. При первом запуске копии в режиме 1С:Предприятие типовые конфигурации на БСП обнаруживают, что база перемещена, и предлагают заблокировать работу с внешними ресурсами. Выберите блокировку: иначе копия отправит письма, документы в ЭДО и выгрузки в банк от имени организации.
  4. Отключите регламентные задания в свойствах базы в кластере (флажок «Блокировка регламентных заданий включена»).
  5. Удалите из копии планы обмена с узлами реальных баз или хотя бы отключите синхронизацию.

Сразу переименуйте копию в списке баз, например «ТЕСТ_обезличено». Путаница «какая из двух открыта» — главный источник аварий при таких работах.

Где в базе 1С лежат персональные данные

Самая частая ошибка — поменять ФИО в справочнике «Физические лица» и считать дело сделанным. Данные человека разбросаны по десяткам объектов.

Справочники:

  • 👤 «Физические лица» — ФИО, ИНН, СНИЛС, дата и место рождения.
  • 🪪 «Сотрудники» (ЗУП, КА, ERP) — своё наименование, дублирующее ФИО.
  • 🏢 «Контрагенты» — ИП с ФИО в наименовании, ИНН, паспортные данные.
  • 👥 «Контактные лица», «Пользователи» — ФИО, телефоны, почта.
  • 🏦 «Банковские счета» — лицевые счета сотрудников для зарплатного проекта.

Табличная часть «Контактная информация» у справочников: там адреса и телефоны лежат сразу в нескольких колонках — представление строкой, XML или JSON со структурой адреса. Менять надо все колонки, иначе в форме покажется подменённый адрес, а в данных останется реальный.

Регистры сведений с историей. В ЗУП ФИО, документы и адреса хранятся периодически: смена фамилии после брака лежит отдельной записью. Чистить нужно всю историю, а не только актуальный срез.

Скрытые места:

  • 📜 версии объектов (регистр сведений с версиями при включённом версионировании) — там старые значения всех реквизитов;
  • 🕘 история данных платформы, если она включена для объектов;
  • 📎 присоединённые файлы — сканы паспортов, трудовых договоров, заявлений; лежат в базе или в томах на диске;
  • ✉️ «Взаимодействия» — письма и их вложения;
  • 📒 журнал регистрации — комментарии и представления данных;
  • 🔐 безопасное хранилище — логины и пароли интернет-поддержки, банк-клиента, ЭДО;
  • 📑 регламентированные отчёты — 6-НДФЛ, ЕФС-1, персонифицированные сведения содержат ФИО и СНИЛС в теле отчёта.

Как составить карту полей штатно. Получить имена таблиц и полей в СУБД помогает метод ПолучитьСтруктуруХраненияБазыДанных(). Его вызывают из консоли кода или своей обработки — он возвращает таблицу соответствия метаданных и таблиц базы данных. Для массовой замены одного реквизита в типовых конфигурациях на БСП есть обработка «Групповое изменение реквизитов» (Администрирование → Обслуживание → Корректировка данных). Она подходит для простых полей, но не умеет генерировать уникальные значения и не трогает регистры.

Готовые обработки обезличивания: что проверить до запуска

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

Перед запуском чужой обработки:

  1. Откройте код. Обработка получает полный доступ к базе. Посмотрите, что она меняет и не отправляет ли что-то по сети (HTTPСоединение, ИнтернетПочтовоеСообщение).
  2. Проверьте список объектов. Сверьте его с картой из предыдущего раздела. Обычно обработки забывают версии объектов, файлы и регламентированные отчёты.
  3. Узнайте, пишет ли она через ОбменДанными.Загрузка = Истина. Без этого флага каждая запись запускает проверки и подписки конфигурации: обработка идёт в десятки раз медленнее и падает на проверке заполнения.
  4. Посмотрите на генерацию значений. Одинаковое значение ИНН у всех лиц сломает контроль уникальности и отчёты. Случайный ИНН без контрольной суммы даст ошибки в отчётности.
  5. Прогоните на маленькой копии, а уже потом на полной.

Своя обработка обезличивания: алгоритм и пример кода

Своя обработка нужна, когда конфигурация доработана или готовая не закрывает всё. Порядок:

  1. Составьте карту: объект → реквизит → правило замены.
  2. Для каждого справочника выберите все элементы запросом, без форм.
  3. Генерируйте значения детерминированно: одному физлицу — одно и то же новое ФИО во всех местах. Удобно строить его от порядкового номера.
  4. Пишите в режиме загрузки, порциями, с транзакцией на порцию.
  5. Отдельно очистите регистры с историей и версии объектов.
  6. Логируйте количество изменённых записей по каждому объекту.

Пример для справочника «Физические лица». Имена реквизитов сверьте в Конфигураторе: в разных конфигурациях и релизах они различаются.

&НаСервере
Процедура ОбезличитьФизическиеЛицаНаСервере()

	// Если справочник иерархический, добавьте условие НЕ ФЛ.ЭтоГруппа
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ФЛ.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.ФизическиеЛица КАК ФЛ
	|УПОРЯДОЧИТЬ ПО
	|	ФЛ.Код");

	Выборка = Запрос.Выполнить().Выбрать();
	Номер = 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 во временную серверную базу , обезличьте там и выгрузите обратно.

Проверка обезличенной копии перед передачей

Обезличивание считается законченным, когда вы проверили результат, а не когда обработка дописала «Готово».

Аудит обезличенной копии
Выполнено: 0 / 10

Как проверить быстро:

  1. Поиск по фамилиям. Возьмите несколько редких реальных фамилий и поищите их через полнотекстовый поиск копии. Перед этим обновите индекс: старый может хранить прежние значения.
  2. Журнал регистрации. В Конфигураторе: Администрирование → Настройка журнала регистрации, кнопка «Сократить» — удалите записи до текущей даты.
  3. Пользователи. Администрирование → Пользователи в Конфигураторе: замените имена на роли («Бухгалтер1»), сбросьте пароли. Справочник «Пользователи» в режиме Предприятия тоже содержит ФИО.
  4. Финальная выгрузка. Выгрузите проверенную копию в новый .dt — его и передавайте. Папку с файлами томов отдельно не прикладывайте.

Частые вопросы

Можно ли обезличить данные прямо в рабочей базе?
Нет. Замена необратима, а рабочая база продолжает вести учёт и сдавать отчётность. Обезличивают только копию.
Нужно ли обезличивать контрагентов-юрлиц?
Наименование и ИНН организации — не персональные данные. Обезличивают ИП, физлиц-контрагентов и контактных лиц, а также ФИО руководителей в карточках контрагентов.
Хватит ли заменить только ФИО?
Нет. Если остались СНИЛС, ИНН, дата рождения или адрес, человек вычисляется по ним. Такая база не считается обезличенной.
Сохраняются ли суммы начислений после обезличивания?
Да, если не перемешивать их специально. Для тестов расчёта зарплаты суммы обычно оставляют: без ФИО и документов они не указывают на человека.
Нужно ли согласие сотрудников на обезличивание?
Обезличивание — один из видов обработки по 152-ФЗ, его выполняют в рамках уже имеющихся оснований. Решение о передаче копии подрядчику всё равно оформите внутренним документом.

Источники

  • Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных»
  • Трудовой кодекс РФ, глава 14 «Защита персональных данных работника»