Объект в 1С не удаляется из-за ссылок: как найти их и убрать

· 10 мин

Содержание

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

Типичная ситуация: вы пометили на удаление дубль контрагента или старую номенклатуру, запустили удаление, а программа отчиталась, что объект не удалён. Ниже разбор по шагам: какие бывают ссылки, чем их искать, как чистить вручную и как автоматизировать, если таких объектов сотни.

Почему 1С не даёт удалить объект: виды ссылок

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

Если хотя бы одна ссылка найдена, объект остаётся. Это защита: иначе в документах вместо контрагента появилась бы «битая ссылка» вида <Объект не найден>.

Где обычно прячутся ссылки:

  • 📄 Реквизиты шапки документов и справочников — контрагент в реализации, склад в поступлении, основная номенклатура в карточке.
  • 📋 Табличные части — номенклатура в строке «Товары», статья затрат в строке «Услуги».
  • 📊 Записи регистров — измерения, ресурсы и реквизиты регистров накопления, сведений, бухгалтерии. Сюда же попадают субконто в проводках.
  • 🌳 Иерархия и подчинение — объект указан как родитель группы или как владелец подчинённого справочника (договоры у контрагента, единицы измерения у номенклатуры).
  • ⚙️ Константы и настройки — например, основной склад или основная организация в настройках пользователя.
  • 🔗 Другие помеченные объекты — ссылка из объекта, который тоже помечен на удаление.

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

Записи регистров сведений, где объект стоит в ведущем измерении, удалению не мешают: платформа считает их подчинёнными и удаляет вместе с объектом. Блокируют удаление обычные, не ведущие измерения.

Как найти ссылки на объект штатными средствами

Через «Все функции»

В любой конфигурации на платформе 8.3 есть стандартная обработка поиска ссылок. Она встроена в платформу, поэтому не зависит от того, БП у вас, ЗУП или УТ.

  1. Включите меню «Все функции», если его нет: откройте главное меню (кнопка с тремя полосками или шестерёнкой в заголовке окна) → Настройки → поставьте флажок «Отображать команду “Все функции”».
  2. Откройте Все функции → Стандартные.
  3. Запустите обработку поиска ссылок на объекты (в списке стандартных она одна с таким назначением).
  4. Укажите объект, который не удаляется, и нажмите кнопку поиска.

Программа выведет список: где именно найдена ссылка и в каком объекте метаданных. Двойной щелчок по строке открывает документ или элемент.

Через карточку объекта

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть команда «Места использования». Ищите её в меню «Ещё» формы элемента или списка. Она показывает те же ссылки, но прямо из карточки, без перехода в «Все функции».

Через «Структуру подчинённости»

Для документов полезна команда «Структура подчинённости» (иконка с деревом в командной панели документа). Она показывает документы, введённые на основании. Это не полный поиск ссылок, но быстро выявляет, например, счёт-фактуру, созданный на основании реализации, которую нужно удалить.

СпособЧто находитКогда удобен
Поиск ссылок в «Все функции»Все ссылки в базеЛюбая конфигурация, разовая проверка
«Места использования»Все ссылкиТиповые конфигурации на БСП
«Структура подчинённости»Только цепочку документов-основанийУдаление документа
Протокол удаления помеченныхСсылки сразу по всем помеченнымМассовая чистка

Обработка «Удаление помеченных объектов»: как читать протокол

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

Перед запуском сделайте резервную копию базы . Удаление необратимо, а «корзины» в 1С нет.

Порядок работы:

  1. Попросите пользователей завершить работу или запускайте вне рабочего времени. Обработка нагружает базу, а записи, которые кто-то правит в этот момент, могут не удалиться.
  2. Откройте обработку и выберите режим: удалить всё помеченное или выбрать объекты вручную.
  3. Запустите удаление и дождитесь протокола.
  4. Откройте список неудалённых объектов. Для каждого программа покажет, какие данные мешают удалению.

Протокол — это готовый список мест, которые нужно разобрать. По каждой строке есть три варианта действий:

  • ✅ Ссылающийся объект тоже не нужен — пометьте его на удаление и запустите обработку ещё раз.
  • 🔄 Ссылающийся объект нужен, но в нём должен стоять другой элемент — замените ссылку (следующий раздел).
  • ⛔ Удаляемый объект на самом деле используется — снимите с него пометку удаления. Так бывает, когда помечали «на всякий случай».

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

Что мешает удалению в вашем случае?

Как заменить ссылки на другой элемент

Чаще всего объект удаляют потому, что это дубль: в базе два одинаковых контрагента или две позиции номенклатуры. Документы есть на обоих. Вручную переписывать каждый документ долго, поэтому в типовых конфигурациях есть обработка «Поиск и удаление дублей». В Бухгалтерии 3.0 она в том же месте: Администрирование → Обслуживание → Корректировка данных.

Как она работает:

  1. Выберите тип данных, например «Контрагенты», и правило сравнения (по наименованию, ИНН и т. п.).
  2. Обработка покажет группы похожих элементов.
  3. В каждой группе отметьте оригинал — элемент, который останется.
  4. Запустите замену. Программа перепишет ссылки во всех документах, регистрах и справочниках с дубля на оригинал и пометит дубль на удаление.
  5. Удалите помеченные обработкой из предыдущего раздела.

Если дублей нет, а надо просто заменить один элемент на другой, работает тот же механизм: найдите оба элемента в обработке и назначьте один из них оригиналом.

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

Ручная замена оправдана, когда ссылок мало: 3–5 документов. Откройте каждый из протокола или из поиска ссылок, выберите в реквизите правильное значение, проведите документ. Проведение перезапишет движения, и в регистрах тоже останется только новый элемент.

Ручной поиск через консоль запросов

Когда объект ищут не по одному, а по признаку («какие проведённые документы используют помеченную номенклатуру»), удобнее консоль запросов. Это внешняя обработка, её берут с диска ИТС для своей версии платформы или используют встроенную в конфигурацию, если она есть. Открывают через Файл → Открыть (меню в заголовке окна).

Консоль только читает данные. Удалять или менять в ней ничего нельзя, зато она быстро показывает точный список мест.

Пример: найти строки товаров в реализациях, где указана номенклатура, помеченная на удаление.

ВЫБРАТЬ
    Товары.Ссылка КАК Документ,
    Товары.Ссылка.Дата КАК Дата,
    Товары.Ссылка.Проведен КАК Проведен,
    Товары.Номенклатура КАК Номенклатура
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
    Товары.Номенклатура.ПометкаУдаления
    И НЕ Товары.Ссылка.ПометкаУдаления
УПОРЯДОЧИТЬ ПО
    Дата

Условие НЕ Товары.Ссылка.ПометкаУдаления отсекает документы, которые и так удалятся вместе с номенклатурой. В результате остаются именно те документы, которые мешают.

Второй пример — проверить остатки по удаляемому элементу в регистре накопления:

ВЫБРАТЬ
    Остатки.Номенклатура,
    Остатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура) КАК Остатки

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

Внешняя обработка для массовой проверки и удаления

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

  • НайтиПоСсылкам(МассивСсылок) — возвращает таблицу значений: найденная ссылка, ссылающиеся данные, объект метаданных.
  • Объект.Удалить() — непосредственное удаление объекта без проверки ссылочной целостности.

Метод Удалить() не проверяет ссылки. Если вызвать его без предварительного поиска, в документах останутся битые ссылки. Поэтому сначала ищем, потом удаляем только «чистые» объекты.

Пример серверной процедуры: перебрать помеченные элементы справочника и удалить те, на которые никто не ссылается.

&НаСервереБезКонтекста
Процедура УдалитьНеиспользуемыеПомеченные()

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

    Помеченные = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
    Удалено = 0;

    Для Каждого Ссылка Из Помеченные Цикл

        Массив = Новый Массив;
        Массив.Добавить(Ссылка);
        Найденные = НайтиПоСсылкам(Массив);

        // Колонки результата: 0 - ссылка, 1 - ссылающиеся данные, 2 - метаданные
        Мешают = 0;
        Для Каждого Строка Из Найденные Цикл
            Если Строка[1] <> Ссылка Тогда
                Мешают = Мешают + 1;
                Сообщить(СтрШаблон("%1: ссылка в %2", Ссылка, Строка[2].ПолноеИмя()));
            КонецЕсли;
        КонецЦикла;

        Если Мешают = 0 Тогда
            Попытка
                Ссылка.ПолучитьОбъект().Удалить();
                Удалено = Удалено + 1;
            Исключение
                Сообщить(СтрШаблон("%1: %2", Ссылка, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())));
            КонецПопытки;
        КонецЕсли;

    КонецЦикла;

    Сообщить(СтрШаблон("Удалено объектов: %1", Формат(Удалено, "ЧН=0; ЧГ=0")));

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

Что учесть при доработке:

  • 🔑 Пользователю нужно право на непосредственное удаление объектов. Обычно оно есть только у роли полных прав.
  • 🔁 Ссылки между помеченными объектами этот код считает мешающими. Если у элемента есть подчинённые помеченные элементы, сначала удалите их, а потом повторите проход.
  • 🧪 Отлаживайте обработку на копии базы. Сравните число удалённых с тем, что показывает штатная обработка.
  • 🗂 В типовых конфигурациях на БСП для замены ссылок есть программный интерфейс в общем модуле ОбщегоНазначения. Если пишете доработку для такой конфигурации, используйте его, а не собственный перебор регистров: он учитывает исключения поиска ссылок и правила конкретной конфигурации.

Не удаляйте объекты прямой записью в таблицы SQL. Платформа хранит связанные данные в нескольких таблицах и итогах, и такое удаление ломает базу. Восстанавливать её придётся тестированием и исправлением или из копии.

Как не накапливать «неудаляемые» объекты

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

Что помогает:

  1. Отключите непосредственное удаление пользователям. Если право «Интерактивное удаление» есть у всех, кто-то однажды удалит объект в обход проверки, и появятся битые ссылки. Оставьте пользователям только пометку на удаление.
  2. Удаляйте помеченные регулярно. Раз в месяц или после закрытия периода. Чем дольше копятся пометки, тем запутаннее связи между ними. В свежих версиях БСП обработку удаления помеченных можно запускать по расписанию.
  3. Не плодите дубли. Включите в настройках проверку на дубли при вводе контрагентов по ИНН, загружайте номенклатуру из классификаторов, а не набирайте вручную.
  4. Помечайте с причиной. Если элемент пометил не администратор, пусть оставит комментарий: «дубль Альфа ООО, оригинал — Альфа ООО (ИНН …)». Это экономит время при разборе протокола.
  5. Проверяйте «битые» ссылки. Если в документах уже видно <Объект не найден>, запустите в Конфигураторе тестирование и исправление информационной базы с проверкой ссылочной целостности. Перед этим нужен монопольный доступ к базе: все пользователи будут отключены, поэтому делайте это вне рабочего времени.
Перед удалением помеченных
Выполнено: 0 / 5

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

Бывает, что поиск ссылок пуст, а объект не удаляется. Проверьте по порядку:

  • 🔒 Объект заблокирован. Его открыл другой пользователь или фоновое задание. Закройте формы, дождитесь окончания обмена и повторите.
  • 🔄 Ссылка из узла обмена. Объект зарегистрирован к выгрузке в узлах плана обмена. После очередного обмена регистрация снимается. Если обмен давно не работает, разберитесь с ним до удаления.
  • 🧩 Ссылка из расширения или доработки. Расширения и нетиповые обработки могут хранить ссылки в своих реквизитах. Поиск их находит, но назначение такой ссылки неочевидно — уточните у разработчика.
  • ⏳ Обработка прервалась по таймауту. При больших объёмах удаляйте частями: выберите вручную 100–500 объектов за проход.

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

Можно ли восстановить объект после удаления помеченных?
Нет. В 1С нет корзины. Вернуть объект можно только из резервной копии базы: выгрузить его оттуда и загрузить в рабочую базу обработкой переноса данных.
Почему после удаления справочника отчёты за прошлые годы изменились?
Значит, удалили объект, который использовался в учёте, в обход проверки ссылок. Движения остались с битой ссылкой. Восстановите элемент из копии или замените битую ссылку на правильный элемент.
Удаляются ли записи регистров вместе с документом?
Да. Движения документа подчинены ему как регистратору и удаляются вместе с ним. Отдельно чистить регистры не нужно.
Нужен ли монопольный режим для удаления помеченных?
На платформе 8.3 удалять помеченные можно и при работающих пользователях. Но объекты, которые они в этот момент редактируют, не удалятся, а нагрузка вырастет. Надёжнее запускать вне рабочего времени.
Почему один и тот же объект висит в протоколе месяцами?
Обычно на него ссылается нужный проведённый документ. Обработка не будет удалять его, пока ссылку не заменят. Либо замените ссылку, либо снимите пометку удаления.