Существует достаточно много обработок для обезличивания баз данных. Некоторые универсальны, некоторые ориентированы на конкретные объекты метаданных. Предлагаю простое, понятное и прозрачное, а главное - легко модифицируемое решение, которое универсально подходит для обезличивания любой базы и требует минимум навыков.
Речь идёт об использовании системы "Конвертация данных 2". Суть проста - всю черновую работу по чтению, записи, модификации данных берёт на себя штатный механизм, а разработчику остаётся только указать места, где требуется обезличивание. При этом всё управляемо и без подвохов - не нарушатся ссылки, логическая целостность, не пострадает функциональность. Главное - указать объекты и поля, которые обезличить. И весь инструментарий КД к нашим услугам.
Идея проста: создаём конвертацию, берём копию базы (ну или не копию), из неё выгружаем в файл и обратно в неё же загружаем этот файл, и готово. Итак:
1. Выгружаем описание нужной базы, создаём конвертацию, в качестве источника и приёмника указываем одну и ту же конфигурацию.
2. При необходимости, параметрами определяем объекты, подлежащие обезличиванию (опять же, их удобно будет указать в пользовательском режиме средствами отбора и периода в Универсальном обмене XML). Тут, очевидно, можно по-всякому - и через собственные произвольные выборки, и стандартными запросами, смотря по конкретике задачи. Хоть принудительно "ВыгрузитьДанныеПоПравилу", хоть как. Например, определив массив:
3. Поскольку база одна и та же, смело используем стыковку по GUID. Если под обезличивание попадают поля, уникально идентифицирующие элемент данных, то это единственный надёжный способ, поэтому флаг продолжения поиска выключаем (казалось бы - зачем? а затем, что битые ссылки иногда вынуждают КД продолжить поиск уже по ключевым полям).
4. Обезличиваем нужные реквизиты нужных объектов любым нравящимся способом - например, сделать наименования равными кодам:
С тем же успехом можно:
// для ФИО сотрудника
Значение="Иванов Иван Иванович";
// для цен и сумм
Значение=666;
// или
текДата=ТекущаяДата();
Значение=Год(текДата)-Месяц(текДата)+День(текДата);
Простор для фантазии)
Так же удобно обработать содержимое табличных частей через КоллекцияОбъектов или через ВходящиеДанные.
5. При необходимости обрабатываем не только справочники, документы и независимые регистры сведений, но и константы, если они простых типов:
6. Если в базе есть регистры и прочие вторичные данные, чьи поля простых типов зависят от неких операций (обычно от проведения документов), то перепроводим:
7. И только со значениями перечислений трудновато, разве что, исходя из точного понимания механизма, действительно аккуратно подменить на некое обезличенное значение, например:
Ещё можно перекидывать через ПараметрыОбъекта, тогда с любыми данными полная свобода манёвра, но больше хлопот.
Всё. Принцип я описал, конкретных реализаций возможна масса. При обезличивании проводящихся документов не забывайте отключать и затем включать итоги.
Логирование, отладка - всё уже есть штатно.
Замечу, что таким же образом можно шифровать и затем дешифровать содержимое баз. Достаточно сделать две конвертации - одна будет зашифровывать, хешировать, как-либо ещё преобразовывать данные, выгружая в файл. Затем файл передаём, хоть по незащищённому каналу. Затем вторая конвертация согласно принципам шифровки грузит из файла в базу.
Если баян, смело кидайте тухлыми помидорами)