Удаление объектов в 1С 8.3: от метаданных до записей в базе
Содержание
Объект метаданных удаляют в Конфигураторе: сначала убирают все ссылки на него, затем удаляют из дерева и выполняют Конфигурация → Обновить конфигурацию базы данных (F7). Данные пользователей удаляют в два шага: пометка на удаление, затем обработка Удаление помеченных объектов, которая проверяет ссылки. Прямое удаление кодом через Удалить() ссылок не проверяет и оставляет в базе «битые» значения.
Типичная ситуация: в доработанной конфигурации висит старый справочник «Склады_Старые», и разработчик хочет его убрать. Если просто нажать Del в дереве, вместе с объектом при реструктуризации исчезнет таблица со всеми данными, а реквизиты других объектов, которые на неё ссылались, потеряют тип. Удалять объекты в 1С нужно по уровням: метаданные, данные, служебные хвосты — и на каждом свои правила.
Перед любым удалением метаданных и массовым удалением данных выгрузите информационную базу в .dt или сделайте резервную копию средствами СУБД. Удалённую таблицу и физически удалённые записи вернуть можно только из копии.
Удаление объекта метаданных в Конфигураторе
Объект метаданных — это справочник, документ, регистр, реквизит, табличная часть, общий модуль и так далее. Удаляется он из основной конфигурации, а в базу изменение попадает только после обновления конфигурации БД.
Порядок действий
- Откройте конфигурацию:
Конфигурация → Открыть конфигурацию. - Если конфигурация на поддержке, включите возможность изменения:
Конфигурация → Поддержка → Настройка поддержки. - Выделите объект в дереве и вызовите из контекстного меню поиск ссылок на объект. Платформа покажет все места, где он используется: типы реквизитов, формы, модули, роли, подписки на события, критерии отбора.
- Уберите каждое найденное использование. Тип реквизита замените, код поправьте, роли платформа почистит сама.
- Удалите объект (Del или команда контекстного меню). Если ссылки остались, платформа предупредит и покажет список.
- Выполните проверку конфигурации:
Конфигурация → Проверка конфигурации, затем синтаксический контроль модулей. - Обновите конфигурацию базы данных (F7) и внимательно прочитайте окно реорганизации информации.
Приём практиков: префикс «Удалить»
В типовых конфигурациях устаревшие объекты не удаляют сразу. Их переименовывают с префиксом: Справочник.УдалитьСклады, реквизит УдалитьВидОперации. Данные остаются в базе, обработчик обновления переносит их в новую структуру, а окончательно объект удаляют в одной из следующих версий.
Этот приём полезен и в своих доработках:
- 🔁 переименование не теряет данные — платформа узнаёт объект по внутреннему идентификатору, а не по имени;
- 🧩 код, который ещё обращается к объекту, легко найти глобальным поиском по слову «Удалить»;
- 🛟 если перенос пошёл не так, исходные данные целы.
Удалить реквизит и создать новый с тем же именем — не то же самое, что переименовать. Для платформы это новый реквизит с новой пустой колонкой, старые значения будут потеряны.
Объекты в расширении
Из расширения нельзя удалить объект основной конфигурации. Можно удалить только собственный объект расширения или убрать заимствование. Собственный объект удаляется так же, как в основной конфигурации, а его данные пропадут при обновлении расширения в базе.
Что происходит с данными при обновлении конфигурации базы
При обновлении конфигурации БД платформа сравнивает новую структуру со старой. Удалённый объект означает удалённую таблицу. Удалённый реквизит — удалённую колонку.
Окно реорганизации информации показывает, что будет изменено. Строки с удалением таблиц — сигнал остановиться и проверить, что вы действительно этого хотите. Нажали «Принять» — данные удалены.
| Что изменили | Что станет с данными |
|---|---|
| Переименовали объект или реквизит | Данные сохраняются |
| Удалили реквизит | Колонка и значения удаляются |
| Удалили объект | Таблица удаляется целиком, вместе с табличными частями |
| Сменили тип реквизита | Платформа пытается преобразовать значения, несовместимые очищаются |
| Удалили измерение регистра | Записи перегруппировываются, итоги пересчитываются |
Монопольный режим и фоновое обновление
Изменение структуры требует монопольного доступа к базе на время реструктуризации. Пользователей нужно предупредить и завершить их сеансы заранее, иначе обновление не стартует.
Для клиент-серверной базы есть фоновое обновление конфигурации : подготовка новой структуры идёт при работающих пользователях, а монопольный доступ нужен только на короткое принятие изменений. Для больших таблиц это сокращает простой с часов до минут.
Обновление типовой конфигурации
Когда поставщик удалил объект в новом релизе, окно сравнения и объединения показывает его как отсутствующий в новой конфигурации поставщика. Если на такой объект ссылаются ваши доработки, объединение предупредит об этом. Не снимайте флажки вслепую: сначала перенесите свои ссылки на новый объект, который пришёл ему на замену.
Ссылки и целостность: почему объект не удаляется
Ссылочная целостность — это гарантия, что каждая ссылка в базе указывает на существующий объект. Платформа контролирует её только в штатном режиме удаления помеченных объектов.
Что считается ссылкой на удаляемый элемент:
- 📄 реквизиты документов и справочников, включая табличные части;
- 📊 измерения, ресурсы и реквизиты регистров;
- 🏷️ владелец в подчинённом справочнике и родитель в иерархическом;
- 🔗 регистратор у записей регистров (для документов).
Если элемент справочника «Контрагенты» использован хотя бы в одном документе, он не удалится. В отчёте обработки он попадёт в список неудалённых с перечнем мест использования.
Исключение: ссылки из объектов, которые тоже помечены на удаление и удаляются в этом же сеансе. Документ и контрагент из него, помеченные вместе, удалятся оба.
Как найти, где используется объект
В Предприятии откройте Все функции → Стандартные → Поиск ссылок на объекты. Если пункта «Все функции» нет в меню, включите его: Сервис и настройки → Параметры → Отображать команду "Все функции".
Укажите объект — обработка выведет все документы, справочники и регистры, где он встречается. Дальше два пути: заменить ссылку на другой элемент или снять пометку и оставить объект.
В конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) для дублей удобнее Администрирование → Обслуживание → Поиск и удаление дублей: обработка заменяет ссылки на оригинал во всех документах и только потом удаляет копию.
Как удалять объекты в режиме 1С:Предприятие
Обычный пользователь объект физически не удаляет. Он ставит пометку удаления, а саму очистку выполняет администратор.
Шаг 1. Пометка на удаление
В списке выделите строку и нажмите Del или выберите Ещё → Пометить на удаление / Снять пометку. Значок строки станет перечёркнутым.
Что важно знать о пометке:
- ✅ помеченный проведённый документ теряет проведение, его движения по регистрам исчезают;
- ✅ пометка группы справочника помечает и все подчинённые элементы;
- ✅ помеченный элемент продолжает существовать, ссылки на него в отчётах работают;
- ✅ пометку можно снять — объект вернётся в работу без потерь.
Шаг 2. Удаление помеченных
В типовых конфигурациях на БСП путь такой: Администрирование → Обслуживание → Удаление помеченных объектов. Обработка показывает дерево помеченных объектов по видам, позволяет снять флажки с лишних и запускает удаление.
В конфигурациях без БСП используйте платформенную обработку: Все функции → Стандартные → Удаление помеченных объектов.
После завершения вы увидите два списка: удалённые и неудалённые с причинами. Неудалённые разбирайте через поиск ссылок.
Удаление помеченных объектов в больших базах идёт долго и нагружает сервер. Запускайте его в нерабочее время. В БСП-конфигурациях можно включить удаление по расписанию — тогда пометки разбираются регламентным заданием.
Права на удаление
За удаление отвечают отдельные права в ролях:
| Право | Что разрешает |
|---|---|
| Интерактивная пометка удаления | Ставить пометку в списке и форме |
| Интерактивное снятие пометки удаления | Возвращать помеченные объекты |
| Интерактивное удаление помеченных | Удалять помеченные через обработку |
| Интерактивное удаление | Удалять сразу, без пометки и проверки ссылок |
| Удаление | Удалять программно |
Право «Интерактивное удаление» в типовых ролях почти никому не выдают, и это правильно: прямое удаление из списка не проверяет ссылки.
Программное удаление объектов в 1С: методы и примеры кода
Из кода объекты удаляют тремя способами. Они отличаются тем, проверяется ли целостность.
| Метод | Проверка ссылок | Когда применять |
|---|---|---|
УстановитьПометкуУдаления(Истина) | Не нужна, объект остаётся | Обычная работа, обработки для пользователей |
УдалитьОбъекты(Массив, Истина) | Да | Контролируемое удаление помеченных |
Объект.Удалить() | Нет | Служебная очистка, когда ссылок точно нет |
Пометка из кода
Объект = Ссылка.ПолучитьОбъект();
Объект.УстановитьПометкуУдаления(Истина);
Для проведённого документа это действие отменяет проведение, как и при пометке вручную.
Удаление помеченных с контролем ссылок
&НаСервере
Процедура УдалитьПомеченныеНаСервере()
Помеченные = НайтиПомеченныеНаУдаление();
Для Каждого Ссылка Из Помеченные Цикл
Удаляемые = Новый Массив;
Удаляемые.Добавить(Ссылка);
Попытка
УдалитьОбъекты(Удаляемые, Истина);
Исключение
// Ссылка где-то используется — объект пропускаем
ЗаписьЖурналаРегистрации("Удаление помеченных",
УровеньЖурналаРегистрации.Предупреждение, ,
Ссылка, ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Поштучный вызов проще разбирать по журналу, но у него есть недостаток. Два помеченных объекта, ссылающихся друг на друга, так не удалятся: каждый «держит» другой. Для таких случаев передавайте в УдалитьОбъекты() весь массив сразу.
Прямое удаление
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1000
| Т.Ссылка КАК Ссылка
|ИЗ
| Справочник.УдалитьСклады КАК Т";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.ОбменДанными.Загрузка = Истина;
Объект.Удалить();
КонецЦикла;
Что делает этот код:
- 🗑️ удаляет объекты без пометки и без поиска ссылок;
- ⚡
ОбменДанными.Загрузка = Истинаотключает проверки в обработчикеПередУдалениеммодуля объекта — включайте его только для служебной очистки; - 📦 порция в 1000 строк не даёт транзакции разрастись; запускайте код повторно, пока выборка не опустеет.
При удалении документа платформа удаляет и его движения по регистрам. При удалении группы иерархического справочника удаляются подчинённые элементы, при удалении владельца — элементы подчинённых справочников.
После Удалить() все ссылки на объект в других документах превращаются в битые: в форме видно <Объект не найден> с идентификатором. Используйте прямое удаление только когда точно знаете, что ссылок нет.
Очистка записей регистра
Записи регистров удаляют через набор записей: устанавливают отбор и записывают пустой набор.
Набор = РегистрыСведений.НашРегистр.СоздатьНаборЗаписей();
Набор.Отбор.НашеИзмерение.Установить(Значение);
Набор.Записать(); // пустой набор с отбором стирает записи
Для регистров, подчинённых регистратору, отбор ставят по Регистратор. Помните, что после повторного проведения документа движения появятся снова.
Очистка итогов, битых ссылок и места после удаления
После массового удаления остаются хвосты: устаревшие итоги регистров, битые ссылки и неосвобождённое место.
Управление итогами
В Предприятии откройте Все функции → Стандартные → Управление итогами. Там можно:
- Пересчитать итоги по выбранным регистрам накопления и бухгалтерии.
- Установить период рассчитанных итогов.
- Включить или выключить использование итогов.
Пересчёт нужен, когда остатки в отчётах не сходятся с движениями после прямого удаления документов.
Тестирование и исправление
В Конфигураторе: Администрирование → Тестирование и исправление. Флажки, которые нужны после удаления:
- 🔍 проверка ссылочной целостности — находит битые ссылки;
- 🧮 пересчёт итогов;
- 🗜️ сжатие таблиц информационной базы — для файловой базы.
Для найденных битых ссылок выберите действие: создавать объекты-заглушки, очищать ссылки или не изменять. «Создавать объекты» безопаснее: вы получите элементы с именем вида «Объект не найден», которые потом можно разобрать вручную.
Тестирование и исправление требует монопольного режима. Все пользователи должны выйти, их сеансы будут недоступны до конца проверки. Для большой базы это может занять несколько часов — планируйте на ночь или выходные.
Почему база не уменьшилась
Файл 1Cv8.1CD файловой базы после удаления данных не сжимается сам. Место освобождается после сжатия таблиц в тестировании или после выгрузки в .dt и загрузки обратно.
В клиент-серверной базе освобождением места занимается СУБД. В MS SQL это задача администратора базы данных, а не платформы 1С.
Если удаление не проходит
Частые причины и что делать:
- 🔒 Объект заблокирован другим пользователем. Кто-то держит открытую форму или идёт проведение. Повторите позже или попросите пользователя закрыть объект.
- 🔗 Ссылки из непомеченных объектов. Откройте список неудалённых, найдите, где используется объект, замените ссылку или пометьте ссылающийся документ.
- 🧱 Обработчик
ПередУдалениемотменяет удаление. В типовых конфигурациях там стоят проверки. Читайте текст ошибки — он обычно объясняет, что мешает. - 🌐 База участвует в обмене. Удаление в одном узле регистрируется как
УдалениеОбъектаи уходит в другие узлы. Если там на объект есть ссылки, обмен выдаст ошибку. Договоритесь, в каком узле удалять. - 📜 Объект Конфигуратора не удаляется — «объект используется». Снова запустите поиск ссылок на объект: часто забывают предопределённые элементы, параметры функциональных опций и общие реквизиты.