Удаление данных по конкретной организации — это сложная задача, требующая понимания структуры ссылочной целостности платформы «1С:Предприятие 8». Простое удаление элемента из справочника Организации невозможно, пока на него ссылается хотя бы один документ или запись в регистре. В рамках данной статьи мы разберем основные методики очистки базы, проанализируем риски и выберем наиболее эффективные инструменты для решения этой задачи.
Начнем с самого очевидного, но трудоемкого способа. Рассмотрим, как работает стандартная логика платформы. Если мы пометим организацию на удаление, система позволит окончательно стереть её только после того, как будут удалены все связанные с ней объекты.
Алгоритм действий следующий:
Организация указано целевое значение, и устанавливаем им пометку на удаление.Проанализируем ситуацию: этот метод хорош для небольших баз, но в крупных конфигурациях (например, ERP или КА) количество связей может исчисляться тысячами, и ручная очистка превратится в бесконечный процесс. Поэтому перейдем к более технологичным решениям.
Одним из самых надежных способов, упомянутых экспертами, является использование Распределенных Информационных Баз (РИБ). Вместо того чтобы пытаться «вырезать» данные из текущей базы, мы создадим новую базу, в которую перенесем только то, что нам нужно.
Разберем по шагам этот процесс:
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
В результате мы получаем полноценную рабочую базу, в которой изначально отсутствуют данные ненужной организации. Это исключает появление «битых» ссылок и хвостов в регистрах.
Если настройка РИБ кажется избыточной, рассмотрим альтернативу — использование обработки УниверсальныйОбменДаннымиXML. Этот метод во многом схож с предыдущим, но дает больше гибкости.
Проанализируем преимущества:
Организация для всех типов документов.Важно помнить, что при таком подходе независимые РегистрыСведений, не имеющие в измерениях организацию (но содержащие её в ресурсах или реквизитах), могут потребовать дополнительного внимания и ручного переноса.
Для автоматизации процесса удаления можно написать скрипт, который будет программно искать упоминания организации во всей базе. Это особенно актуально для очистки независимых регистров, которые не всегда очищаются стандартными средствами.
Рассмотрим логику работы такого скрипта:
Программа должна обойти коллекцию Метаданные и для каждого объекта проверить наличие реквизита с типом СправочникСсылка.Организации. Ниже приведен пример логики поиска документов:
ВыбраннаяОрганизация = Справочники.Организации.НайтиПоНаименованию("Ненужная фирма");
Для Каждого МетаДокумент Из Метаданные.Документы Цикл
ИмяДокумента = МетаДокумент.Имя;
Если МетаДокумент.Реквизиты.Найти("Организация") <> Неопределено Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ." + ИмяДокумента + " ГДЕ Организация = &Орг";
Запрос.УстановитьПараметр("Орг", ВыбраннаяОрганизация);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектДок = Выборка.Ссылка.ПолучитьОбъект();
ОбъектДок.УстановитьПометкуУдаления(Истина);
КонецЦикла;
КонецЕсли;
КонецЦикла;
После пометки всех объектов необходимо запустить стандартное удаление. Особое внимание уделим регистрам сведений. Для независимых регистров потребуется очистка наборов записей:
Набор = РегистрыСведений.МойНезависимыйРегистр.СоздатьНаборЗаписей();
Набор.Отбор.Организация.Установить(ВыбраннаяОрганизация);
Набор.Записать(); // Записываем пустой набор, тем самым удаляя данные
Важно понимать, что записи в РегистрыНакопления и РегистрыБухгалтерии (проводки) являются производными от документов. Как только мы удалим сам документ-регистратор, его движения исчезнут автоматически. Однако, если документ нельзя удалить из-за связей в других местах, движения останутся и будут искажать отчетность. Поэтому правильная последовательность всегда начинается с разпроведения документов, затем идет их пометка на удаление, и только в конце — физическое стирание.
После массового удаления данных, особенно в больших масштабах, база данных может начать вести себя нестабильно. Выясним основные причины:
.1CD) после удаления данных размер файла не уменьшится автоматически. Необходимо выполнить операцию «Сжатие таблиц» в утилите chdbfl.exe или через тестирование и исправление.Shrink на стороне SQL-сервера, чтобы вернуть освободившееся место операционной системе.Подводя итог, наиболее «чистым» и профессиональным методом является создание новой базы через РИБ или XML-выгрузку. Это гарантирует, что в новую информационную систему не попадут мусорные записи, а ссылочная целостность будет проверена еще на этапе миграции. Если же база небольшая и данных немного, можно воспользоваться стандартной обработкой пометки и удаления объектов, предварительно сделав полную резервную копию.