Как безопасно удалить неиспользуемые объекты из базы 1С?

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

Часто в процессе развития и поддержки конфигурации накапливается множество устаревших объектов: документов, справочников, регистров и отчетов. Возникает логичная задача — очистить базу от «мусора». Однако просто взять и удалить объект метаданных из конфигуратора — большой риск. Рассмотрим подробнее, как максимально убедиться, что данный объект действительно больше нигде не используется, и разберем по шагам правильную методологию удаления.

Типовые средства контроля ссылочной целостности

В платформе 1С реализовано штатное удаление с контролем ссылочной целостности. Если мы попытаемся удалить объект метаданных, на который есть прямые ссылки в других объектах конфигурации (например, справочник указан в качестве типа реквизита в документе), система просто не даст этого сделать, выведя окно с указанием мест использования.

Кроме того, если речь идет о проверке данных в пользовательском режиме (наличие ссылок в существующих записях базы), проанализируем типовые конфигурации (на базе БСП: Розница, ЗУП, ERP, Бухгалтерия). В них встроен стандартный отчет Места использования ссылок. Выбираем нужный элемент или список элементов, запускаем отчет, и система покажет, в каких документах или регистрах остались записи с участием нашего объекта.

Анализ наличия данных с помощью программного кода

Если мы хотим быстро оценить масштабы использования документов определенного вида в базе (своеобразный «пузомер»), напишем небольшой скрипт. Посмотрим на пример кода, который перебирает метаданные документов и подсчитывает количество созданных документов каждого вида. Это поможет выявить документы, которые вообще не вводились пользователями.


Для Каждого ТекущийДокумент Из Метаданные.Документы Цикл
    Имя = "Документ." + ТекущийДокумент.Имя;
    Запрос = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(ТекДок.Ссылка) КАК Количество ИЗ " + Имя + " КАК ТекДок");
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        КоличествоДокументов = Выборка.Количество;
        // Здесь можно вывести данные в таблицу или сообщить пользователю
        // Строка.Имя = Имя;
        // Строка.Количество = КоличествоДокументов;
    КонецЕсли;
КонецЦикла;

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

Проверка неявных связей и использования в коде

Штатный контроль конфигуратора отслеживает только явные связи в структуре метаданных. Выясним причину многих ошибок: разработчики забывают про текстовые ссылки в программном коде. Обязательно выполним глобальный поиск по имени объекта в конфигурации. Имя удаляемого объекта может остаться:

  1. В текстах запросов программных модулей.
  2. В подписках на события.
  3. В ОпределяемыеТипы и ПланыВидовХарактеристик.
  4. В ролях и текстах ограничений доступа на уровне записей (RLS).

Если удалить объект, но не вычистить связанные с ним строки кода, база выдаст ошибки при компиляции или во время работы пользователей. Для более глубокого анализа часто применяют сторонние инструменты разработчика (различные подсистемы ИР) или переходят на разработку в 1C:EDT, которая проверяет битые ссылки в коде «на лету».

Интеграции, обмены данными и регламентные задания

Особое внимание уделим планам обмена (РИБ, Конвертация Данных, EnterpriseData). Если удалить объект в центральной базе, при миграции в подчиненные узлы система просто физически «грохнет» объект, и там уже не будет возможности корректно разобрать ссылочную целостность.

Перед удалением необходимо:

  1. Снять регистрацию изменений по этому объекту на всех узлах обмена.
  2. Исключить объект из состава планов обмена.
  3. Пересмотреть и скорректировать правила выгрузки и загрузки данных.

Также проанализируем фоновые задания. Если существует объект РегламентныеЗадания, который периодически обращается к удаляемому регистру, после реструктуризации это задание начнет стабильно падать с ошибкой, засоряя журнал регистрации.

Правильная методология: карантин объектов

Даже если мы провели все проверки, всегда остается риск, что что-то пойдет не так, или кому-то из пользователей внезапно понадобится «неиспользуемый» отчет. Поэтому опытные разработчики не удаляют объекты сразу. Рассмотрим идеальный алгоритм — метод карантина.

  1. Переименование. Добавляем к имени и синониму объекта префикс Удалить_. Например, документ становится Удалить_СтарыйДокументРасчета.
  2. Исключение из интерфейса. Убираем объект из всех подсистем, снимаем права на добавление и изменение у обычных ролей, скрываем из командного интерфейса. Это гарантирует, что пользователи не смогут создавать новые записи в период карантина.
  3. Проверка расширений. Обязательно проверяем, нет ли заимствования этого объекта или ссылок на него в подключенных расширениях.
  4. Ожидание. Оставляем систему работать в таком виде на длительный срок (от нескольких месяцев до года). Если за это время никто не пожаловался на пропажу данных и не возникло системных ошибок — объект действительно не нужен.
  5. Удаление и реструктуризация. Согласовываем время монопольного доступа, так как удаление таблиц или колонок на уровне СУБД (реструктуризация базы) может занять длительное время. Выполняем окончательное удаление из конфигуратора.

Такой многоступенчатый подход убережет вас от потери важных исторических данных и предотвратит обрушение обменов или интерфейса в перекроенной нетиповой конфигурации.

← На главную