Удаление объектов в 1С 8.3: от метаданных до записей в базе

· 10 мин

Содержание

Объект метаданных удаляют в Конфигураторе: сначала убирают все ссылки на него, затем удаляют из дерева и выполняют Конфигурация → Обновить конфигурацию базы данных (F7). Данные пользователей удаляют в два шага: пометка на удаление, затем обработка Удаление помеченных объектов, которая проверяет ссылки. Прямое удаление кодом через Удалить() ссылок не проверяет и оставляет в базе «битые» значения.

Типичная ситуация: в доработанной конфигурации висит старый справочник «Склады_Старые», и разработчик хочет его убрать. Если просто нажать Del в дереве, вместе с объектом при реструктуризации исчезнет таблица со всеми данными, а реквизиты других объектов, которые на неё ссылались, потеряют тип. Удалять объекты в 1С нужно по уровням: метаданные, данные, служебные хвосты — и на каждом свои правила.

Перед любым удалением метаданных и массовым удалением данных выгрузите информационную базу в .dt или сделайте резервную копию средствами СУБД. Удалённую таблицу и физически удалённые записи вернуть можно только из копии.

Удаление объекта метаданных в Конфигураторе

Объект метаданных — это справочник, документ, регистр, реквизит, табличная часть, общий модуль и так далее. Удаляется он из основной конфигурации, а в базу изменение попадает только после обновления конфигурации БД.

Порядок действий

  1. Откройте конфигурацию: Конфигурация → Открыть конфигурацию.
  2. Если конфигурация на поддержке, включите возможность изменения: Конфигурация → Поддержка → Настройка поддержки.
  3. Выделите объект в дереве и вызовите из контекстного меню поиск ссылок на объект. Платформа покажет все места, где он используется: типы реквизитов, формы, модули, роли, подписки на события, критерии отбора.
  4. Уберите каждое найденное использование. Тип реквизита замените, код поправьте, роли платформа почистит сама.
  5. Удалите объект (Del или команда контекстного меню). Если ссылки остались, платформа предупредит и покажет список.
  6. Выполните проверку конфигурации: Конфигурация → Проверка конфигурации, затем синтаксический контроль модулей.
  7. Обновите конфигурацию базы данных (F7) и внимательно прочитайте окно реорганизации информации.

Приём практиков: префикс «Удалить»

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

Этот приём полезен и в своих доработках:

  • 🔁 переименование не теряет данные — платформа узнаёт объект по внутреннему идентификатору, а не по имени;
  • 🧩 код, который ещё обращается к объекту, легко найти глобальным поиском по слову «Удалить»;
  • 🛟 если перенос пошёл не так, исходные данные целы.

Удалить реквизит и создать новый с тем же именем — не то же самое, что переименовать. Для платформы это новый реквизит с новой пустой колонкой, старые значения будут потеряны.

Объекты в расширении

Из расширения нельзя удалить объект основной конфигурации. Можно удалить только собственный объект расширения или убрать заимствование. Собственный объект удаляется так же, как в основной конфигурации, а его данные пропадут при обновлении расширения в базе.

Что происходит с данными при обновлении конфигурации базы

При обновлении конфигурации БД платформа сравнивает новую структуру со старой. Удалённый объект означает удалённую таблицу. Удалённый реквизит — удалённую колонку.

Окно реорганизации информации показывает, что будет изменено. Строки с удалением таблиц — сигнал остановиться и проверить, что вы действительно этого хотите. Нажали «Принять» — данные удалены.

Что изменилиЧто станет с данными
Переименовали объект или реквизитДанные сохраняются
Удалили реквизитКолонка и значения удаляются
Удалили объектТаблица удаляется целиком, вместе с табличными частями
Сменили тип реквизитаПлатформа пытается преобразовать значения, несовместимые очищаются
Удалили измерение регистраЗаписи перегруппировываются, итоги пересчитываются

Монопольный режим и фоновое обновление

Изменение структуры требует монопольного доступа к базе на время реструктуризации. Пользователей нужно предупредить и завершить их сеансы заранее, иначе обновление не стартует.

Для клиент-серверной базы есть фоновое обновление конфигурации : подготовка новой структуры идёт при работающих пользователях, а монопольный доступ нужен только на короткое принятие изменений. Для больших таблиц это сокращает простой с часов до минут.

Обновление типовой конфигурации

Когда поставщик удалил объект в новом релизе, окно сравнения и объединения показывает его как отсутствующий в новой конфигурации поставщика. Если на такой объект ссылаются ваши доработки, объединение предупредит об этом. Не снимайте флажки вслепую: сначала перенесите свои ссылки на новый объект, который пришёл ему на замену.

Ссылки и целостность: почему объект не удаляется

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

Что считается ссылкой на удаляемый элемент:

  • 📄 реквизиты документов и справочников, включая табличные части;
  • 📊 измерения, ресурсы и реквизиты регистров;
  • 🏷️ владелец в подчинённом справочнике и родитель в иерархическом;
  • 🔗 регистратор у записей регистров (для документов).

Если элемент справочника «Контрагенты» использован хотя бы в одном документе, он не удалится. В отчёте обработки он попадёт в список неудалённых с перечнем мест использования.

Исключение: ссылки из объектов, которые тоже помечены на удаление и удаляются в этом же сеансе. Документ и контрагент из него, помеченные вместе, удалятся оба.

Как найти, где используется объект

В Предприятии откройте Все функции → Стандартные → Поиск ссылок на объекты. Если пункта «Все функции» нет в меню, включите его: Сервис и настройки → Параметры → Отображать команду "Все функции".

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

В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) для дублей удобнее Администрирование → Обслуживание → Поиск и удаление дублей: обработка заменяет ссылки на оригинал во всех документах и только потом удаляет копию.

Как удалять объекты в режиме 1С:Предприятие

Обычный пользователь объект физически не удаляет. Он ставит пометку удаления, а саму очистку выполняет администратор.

Шаг 1. Пометка на удаление

В списке выделите строку и нажмите Del или выберите Ещё → Пометить на удаление / Снять пометку. Значок строки станет перечёркнутым.

Что важно знать о пометке:

  • ✅ помеченный проведённый документ теряет проведение, его движения по регистрам исчезают;
  • ✅ пометка группы справочника помечает и все подчинённые элементы;
  • ✅ помеченный элемент продолжает существовать, ссылки на него в отчётах работают;
  • ✅ пометку можно снять — объект вернётся в работу без потерь.

Шаг 2. Удаление помеченных

В типовых конфигурациях на БСП путь такой: Администрирование → Обслуживание → Удаление помеченных объектов. Обработка показывает дерево помеченных объектов по видам, позволяет снять флажки с лишних и запускает удаление.

В конфигурациях без БСП используйте платформенную обработку: Все функции → Стандартные → Удаление помеченных объектов.

После завершения вы увидите два списка: удалённые и неудалённые с причинами. Неудалённые разбирайте через поиск ссылок.

Удаление помеченных объектов в больших базах идёт долго и нагружает сервер. Запускайте его в нерабочее время. В БСП-конфигурациях можно включить удаление по расписанию — тогда пометки разбираются регламентным заданием.

Права на удаление

За удаление отвечают отдельные права в ролях:

ПравоЧто разрешает
Интерактивная пометка удаленияСтавить пометку в списке и форме
Интерактивное снятие пометки удаленияВозвращать помеченные объекты
Интерактивное удаление помеченныхУдалять помеченные через обработку
Интерактивное удалениеУдалять сразу, без пометки и проверки ссылок
УдалениеУдалять программно

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

Программное удаление объектов в 1С: методы и примеры кода

Из кода объекты удаляют тремя способами. Они отличаются тем, проверяется ли целостность.

МетодПроверка ссылокКогда применять
УстановитьПометкуУдаления(Истина)Не нужна, объект остаётсяОбычная работа, обработки для пользователей
УдалитьОбъекты(Массив, Истина)ДаКонтролируемое удаление помеченных
Объект.Удалить()НетСлужебная очистка, когда ссылок точно нет

Пометка из кода

Объект = Ссылка.ПолучитьОбъект();
Объект.УстановитьПометкуУдаления(Истина);

Для проведённого документа это действие отменяет проведение, как и при пометке вручную.

Удаление помеченных с контролем ссылок

&НаСервере
Процедура УдалитьПомеченныеНаСервере()

	Помеченные = НайтиПомеченныеНаУдаление();

	Для Каждого Ссылка Из Помеченные Цикл
		Удаляемые = Новый Массив;
		Удаляемые.Добавить(Ссылка);
		Попытка
			УдалитьОбъекты(Удаляемые, Истина);
		Исключение
			// Ссылка где-то используется — объект пропускаем
			ЗаписьЖурналаРегистрации("Удаление помеченных",
				УровеньЖурналаРегистрации.Предупреждение, ,
				Ссылка, ОписаниеОшибки());
		КонецПопытки;
	КонецЦикла;

КонецПроцедуры

Поштучный вызов проще разбирать по журналу, но у него есть недостаток. Два помеченных объекта, ссылающихся друг на друга, так не удалятся: каждый «держит» другой. Для таких случаев передавайте в УдалитьОбъекты() весь массив сразу.

Прямое удаление

Запрос = Новый Запрос;
Запрос.Текст =
	"ВЫБРАТЬ ПЕРВЫЕ 1000
	|	Т.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.УдалитьСклады КАК Т";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Объект = Выборка.Ссылка.ПолучитьОбъект();
	Объект.ОбменДанными.Загрузка = Истина;
	Объект.Удалить();
КонецЦикла;

Что делает этот код:

  • 🗑️ удаляет объекты без пометки и без поиска ссылок;
  • ⚡ ОбменДанными.Загрузка = Истина отключает проверки в обработчике ПередУдалением модуля объекта — включайте его только для служебной очистки;
  • 📦 порция в 1000 строк не даёт транзакции разрастись; запускайте код повторно, пока выборка не опустеет.

При удалении документа платформа удаляет и его движения по регистрам. При удалении группы иерархического справочника удаляются подчинённые элементы, при удалении владельца — элементы подчинённых справочников.

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

Очистка записей регистра

Записи регистров удаляют через набор записей: устанавливают отбор и записывают пустой набор.

Набор = РегистрыСведений.НашРегистр.СоздатьНаборЗаписей();
Набор.Отбор.НашеИзмерение.Установить(Значение);
Набор.Записать(); // пустой набор с отбором стирает записи

Для регистров, подчинённых регистратору, отбор ставят по Регистратор. Помните, что после повторного проведения документа движения появятся снова.

Что именно вы удаляете?

Очистка итогов, битых ссылок и места после удаления

После массового удаления остаются хвосты: устаревшие итоги регистров, битые ссылки и неосвобождённое место.

Управление итогами

В Предприятии откройте Все функции → Стандартные → Управление итогами. Там можно:

  1. Пересчитать итоги по выбранным регистрам накопления и бухгалтерии.
  2. Установить период рассчитанных итогов.
  3. Включить или выключить использование итогов.

Пересчёт нужен, когда остатки в отчётах не сходятся с движениями после прямого удаления документов.

Тестирование и исправление

В Конфигураторе: Администрирование → Тестирование и исправление. Флажки, которые нужны после удаления:

  • 🔍 проверка ссылочной целостности — находит битые ссылки;
  • 🧮 пересчёт итогов;
  • 🗜️ сжатие таблиц информационной базы — для файловой базы.

Для найденных битых ссылок выберите действие: создавать объекты-заглушки, очищать ссылки или не изменять. «Создавать объекты» безопаснее: вы получите элементы с именем вида «Объект не найден», которые потом можно разобрать вручную.

Тестирование и исправление требует монопольного режима. Все пользователи должны выйти, их сеансы будут недоступны до конца проверки. Для большой базы это может занять несколько часов — планируйте на ночь или выходные.

Почему база не уменьшилась

Файл 1Cv8.1CD файловой базы после удаления данных не сжимается сам. Место освобождается после сжатия таблиц в тестировании или после выгрузки в .dt и загрузки обратно.

В клиент-серверной базе освобождением места занимается СУБД. В MS SQL это задача администратора базы данных, а не платформы 1С.

Если удаление не проходит

Частые причины и что делать:

  • 🔒 Объект заблокирован другим пользователем. Кто-то держит открытую форму или идёт проведение. Повторите позже или попросите пользователя закрыть объект.
  • 🔗 Ссылки из непомеченных объектов. Откройте список неудалённых, найдите, где используется объект, замените ссылку или пометьте ссылающийся документ.
  • 🧱 Обработчик ПередУдалением отменяет удаление. В типовых конфигурациях там стоят проверки. Читайте текст ошибки — он обычно объясняет, что мешает.
  • 🌐 База участвует в обмене. Удаление в одном узле регистрируется как УдалениеОбъекта и уходит в другие узлы. Если там на объект есть ссылки, обмен выдаст ошибку. Договоритесь, в каком узле удалять.
  • 📜 Объект Конфигуратора не удаляется — «объект используется». Снова запустите поиск ссылок на объект: часто забывают предопределённые элементы, параметры функциональных опций и общие реквизиты.

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

Можно ли восстановить удалённый объект?
Только из резервной копии или выгрузки .dt. Корзины в 1С нет. Пока объект лишь помечен на удаление, достаточно снять пометку.
Почему объект не исчезает из списка после пометки?
Пометка не удаляет объект, а только отмечает его. Он виден в списке перечёркнутым до запуска обработки удаления помеченных.
Нужно ли выгонять пользователей для удаления помеченных объектов?
Нет, обработка работает при активных пользователях. Но объекты, открытые у других, она пропустит, а нагрузка на сервер будет высокой.
Чем удаление реквизита отличается от его отключения функциональной опцией?
Функциональная опция только скрывает реквизит в интерфейсе, данные остаются. Удаление реквизита из конфигурации стирает колонку вместе со значениями.
Удаляются ли движения документа при прямом удалении из кода?
Да. Записи регистров, подчинённые документу как регистратору, платформа удаляет вместе с ним. Итоги после массового удаления лучше пересчитать.