Как включить интерактивное удаление в 1С и правильно очистить справочник «Версии расширений»?

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

В процессе администрирования систем на базе 1С:Предприятие 8.3, таких как ЗКГУ или ЗУП, специалисты часто сталкиваются с необходимостью быстрой очистки базы от ненужных данных. Одной из таких задач является удаление записей из справочника ВерсииРасширений. В этой статье мы подробно разберем, как включить права на интерактивное удаление, почему это может быть опасно и как правильно использовать штатные механизмы системы для очистки системных данных.

Понятие интерактивного удаления и настройка прав

Интерактивное удаление — это возможность пользователя удалить объект из базы данных без предварительной установки пометки на удаление и последующего контроля ссылочной целостности. В типовых конфигурациях 1С это право по умолчанию отключено практически для всех ролей, чтобы избежать появления «битых ссылок».

Разберем по шагам, как предоставить право на непосредственное удаление объекта в конфигураторе:

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

Важное замечание: При работе с ролями в конфигураторе мы часто видим кнопки «Установить все права» или «Снять все права». Проанализируем ситуацию: использование этих функций крайне нежелательно. Установка всех прав для роли значительно увеличивает объем метаданных конфигурации, что ведет к росту «веса» файла 1Cv8.cf и замедлению процесса обновления базы. Правильнее предоставлять права точечно только на необходимые объекты.

Особенности справочника «Версии расширений»

Справочник ВерсииРасширений является системным и входит в состав Библиотеки стандартных подсистем (БСП). Он хранит информацию о комбинациях расширений, которые были активны в системе в разные периоды времени. Это необходимо для работы механизма разделения данных и корректной десериализации объектов.

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

Механизм автоматической очистки через регламентные задания

Вместо того чтобы прибегать к опасному интерактивному удалению, рассмотрим штатный механизм очистки, заложенный разработчиками БСП. За этот процесс отвечают два ключевых регламентных задания:

  1. Удаление устаревших параметров работы версий расширений: Это задание анализирует справочник и связанные с ним регистры (например, ПараметрыРаботыВерсийРасширений). Оно подготавливает данные к удалению, очищая зависимости.
  2. Удаление помеченных объектов: Стандартное задание, которое физически удаляет объекты, помеченные на удаление, если на них больше нет активных ссылок.

Рассмотрим алгоритм правильной очистки справочника:

  1. Зайдем в раздел Обслуживание — Регламентные и фоновые задания.
  2. Найдем задание УдалениеУстаревшихПараметровРаботыВерсийРасширений и запустим его вручную.
  3. После успешного завершения первого задания запустим УдалениеПомеченныхОбъектов.

Проанализируем ситуацию, если объекты всё равно не удаляются. Это часто происходит из-за того, что ссылки на версию расширения сохраняются в журнале регистрации или в кэше метаданных. В таких случаях система безопасности 1С блокирует удаление для предотвращения логических ошибок.

Использование программных методов удаления

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


Процедура УдалитьОбъектПрограммно(СсылкаНаОбъект)
    Попытка
        Объект = СсылкаНаОбъект.ПолучитьОбъект();
        Если Объект <> Неопределено Тогда
            // Удаляем объект непосредственно из базы данных
            Объект.Удалить();
            Сообщить("Объект успешно удален: " + СсылкаНаОбъект);
        КонецЕсли;
    Исключение
        Инфо = ИнформацияОбОшибке();
        Сообщить("Не удалось удалить объект: " + КраткоеПредставлениеОшибки(Инфо));
    КонецПопытки;
КонецПроцедуры

При использовании метода Удалить() следует быть предельно осторожными. В отличие от метода УстановитьПометкуУдаления(), данный метод не проверяет наличие ссылок на объект в других таблицах базы данных. Это может привести к появлению записей вида <Объект не найден...> в связанных документах или регистрах.

Почему не стоит удалять «Версии расширений» вручную?

Посмотрим на ситуацию с точки зрения стабильности системы. Записи в справочнике ВерсииРасширений весят крайне мало и практически не влияют на производительность базы данных. Если они помечены на удаление, но не уходят через стандартную обработку «Удаление помеченных объектов», значит, система считает их важными для сохранения целостности данных о прошлых сеансах.

Рекомендации по безопасной работе:

Подведем итог: включение права на интерактивное удаление в 1С технически осуществляется через настройку ролей в конфигураторе, однако для системных справочников, таких как ВерсииРасширений, правильным путем является использование регламентных заданий БСП. Это гарантирует отсутствие ошибок в будущем и стабильную работу программы при обновлении релизов.

← На главную