Администрирование · 11 мин
Ошибка «Данные невозможно выбрать, так как они были ранее удалены» в 1С: причины и решение
Почему в 1С появляется ошибка «данные невозможно выбрать, так как они были ранее удалены», как найти битую ссылку и устранить её без потери данных.
Сообщение «Эти данные невозможно выбрать, так как они были ранее удалены» появляется в 1С:Предприятии, когда программа обращается к объекту по ссылке, которой в базе уже нет. Технически это так называемая «битая ссылка»: в документе, регистре или другом объекте хранится уникальный идентификатор удалённого элемента справочника или документа, и при попытке открыть, провести или выбрать его платформа не может найти запись в таблице базы данных.
Ошибка сама по себе не означает порчу базы. Ссылка на удалённый объект могла остаться из-за непосредственного удаления без контроля ссылочной целостности, неполной синхронизации между узлами РИБ или обменов, обрыва записи объекта, а также из-за ошибок в доработках, где данные удаляются запросом напрямую. Платформа хранит ссылку как уникальный идентификатор (GUID), и если записи с таким идентификатором нет, пользователь видит именно это сообщение.
Работать с такой базой можно, но некоторые операции будут блокироваться: документ не проведётся, отчёт может завершиться с ошибкой, подбор в поле ввода станет невозможен. Поэтому битые ссылки нужно находить и устранять системно, а не только в том месте, где ошибка проявилась впервые.
Почему возникает ошибка: типичные источники проблемы
Самая частая причина — удаление объекта пометкой с последующим «Удалением помеченных объектов» в монопольном режиме, когда контроль ссылочной целостности был отключён или не сработал из-за прерывания операции. В этом случае объект физически удалён, а ссылки на него в других таблицах остались.
Вторая группа причин — обмены данными. При обмене через планы обмена, конвертацию данных или интеграцию с сайтом объект может быть выгружен в одну базу, удалён там, а ссылка на него продолжает приходить из другой. Особенно часто это проявляется при несовпадении состава выгрузки: документ пришёл, а его контрагент — нет.
Третья группа — технические сбои: обрыв транзакции при записи, аварийное завершение сервера 1С или СУБД, повреждение таблиц. В этом случае объект может отсутствовать в таблице, хотя пользователь его не удалял. Также битые ссылки создают внешние обработки и доработки, которые удаляют записи напрямую запросом, минуя механизмы платформы.
Проверьте реквизиты и табличные части этого документа
Найдите ссылки на удалённый объект по всей базе
Проверьте состав выгрузки и регистрацию изменений
Запустите тестирование и исправление базы
Где искать битую ссылку в базе
Начните с места, где возникает ошибка. Если сообщение появляется при открытии документа, битая ссылка находится в его реквизитах или табличных частях. Если при проведении — ссылка может быть в движениях, которые документ пытается сформировать, или в связанных объектах, к которым обращается код проведения.
Универсальный способ — воспользоваться встроенной проверкой. В конфигураторе: «Администрирование — Тестирование и исправление», отметьте пункт «Проверка ссылочной целостности информационной базы». Проверку выполняйте в монопольном режиме и только на копии или после создания резервной копии: режим с включённым исправлением может очищать ссылки автоматически.
Если известен текст ошибки с идентификатором объекта, можно найти все места использования. В типовых конфигурациях есть обработка «Поиск и удаление дублей» и отчёты по местам использования, а для произвольного поиска подходят внешние обработки поиска битых ссылок, которые строят запросы вида «ГДЕ Ссылка ЕСТЬ NULL» по всем реквизитам ссылочных типов.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ Реализация.Ссылка КАК Документ
|ИЗ Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ Реализация.Контрагент = &ПустаяСсылка
| ИЛИ Реализация.Контрагент.Ссылка ЕСТЬ NULL";Как устранить проблему: основные варианты
Способ исправления зависит от того, должен ли удалённый объект существовать. Если объект был удалён ошибочно (например, контрагент, по которому есть документы), правильное решение — восстановить его. В файловой базе это делается из резервной копии: объект выгружают из копии через обмен данными или вручную создают заново с тем же набором данных, но учтите, что у нового объекта будет другой GUID, и ссылки на старый идентификатор останутся битыми.
Чтобы восстановить объект именно с прежним идентификатором, используют специальные обработки, создающие объект по заданному GUID. Это рабочий, но рискованный приём: при ошибке можно получить дубли или рассогласование с узлами обмена, где этот объект уже существует с другим идентификатором.
Если объект удалён правомерно, а ссылка осталась по ошибке (например, в устаревшем документе, который не проводится), ссылку нужно очистить или заменить. Откройте объект-источник, найдите поле с битой ссылкой и замените его на корректное значение либо очистите. Для массовой чистки удобны групповые обработки изменения реквизитов.
Как выбрать действие
Пошаговое устранение на практике
Ниже — безопасная последовательность действий для типичного случая, когда битая ссылка мешает проведению документа.
- 1Создайте резервную копию базы (файловая — копированием каталога или выгрузкой dt, клиент-серверная — средствами СУБД).
- 2Зафиксируйте, в каком объекте возникает ошибка, и запишите GUID из текста сообщения, если он указан.
- 3Запустите тестирование и исправление с проверкой ссылочной целостности на копии базы.
- 4Определите, должен ли удалённый объект существовать: проверьте журнал регистрации на событие удаления.
- 5Восстановите объект либо очистите/замените ссылки на него во всех найденных местах.
- 6Повторите операцию, вызвавшую ошибку, и убедитесь, что документ проводится и отчёты строятся.
После исправления обязательно проверьте смежные объекты. Если битая ссылка была в контрагенте, проверьте документы и регистры по этому контрагенту; если в номенклатуре — остатки и обороты. Одна удалённая запись часто порождает несколько битых ссылок в разных таблицах.
Особые случаи: обмены, РИБ и доработки
В распределённых базах (РИБ) битая ссылка часто означает, что объект удалён в одном узле, а изменения с ссылкой на него пришли из другого. Здесь недостаточно почистить ссылку локально — при следующем обмене она вернётся. Нужно разобраться с порядком удаления в узлах и при необходимости повторно выгрузить объект из узла, где он существует.
При обменах с сайтом или сторонними системами проверьте настройки соответствия объектов. Если товар на сайте удалён, а в 1С заказ продолжает на него ссылаться, ошибка будет возникать при каждой загрузке заказов. Решение — корректная настройка правил конвертации и режима удаления объектов в обмене.
Если в конфигурации есть доработки, проверьте код, который удаляет объекты. Удаление через запрос или установку пометки без последующего контроля ссылок — типичный источник проблемы. Такие места стоит доработать, добавив проверку ссылочной целостности перед удалением.
Профилактика и проверка результата
Чтобы проблема не повторялась, используйте штатное удаление помеченных объектов с контролем ссылочной целостности — платформа не даст удалить объект, на который есть ссылки, и покажет их список. Не отключайте этот контроль без необходимости и не удаляйте объекты напрямую запросами.
Настройте регулярное резервное копирование и периодическую проверку ссылочной целостности на копии базы — это позволяет обнаруживать битые ссылки до того, как они заблокируют работу пользователей. В крупных базах такую проверку удобно запускать по расписанию в нерабочее время.
Как проверить результат
Документ открывается, все поля заполнены корректно
Сообщение об удалённых данных появляется снова
Документ проводится без ошибок, движения формируются
Ошибка при проведении или пустые движения
Проверка не находит битых ссылок
Остаются объекты со ссылками на удалённые данные
Обмен завершается без ошибок по этому объекту
Ссылка возвращается после очередного обмена
Частые ошибки при устранении
Что важно запомнить
Ошибка означает ссылку на удалённый объект. Порядок действий: резервная копия, поиск битой ссылки через проверку целостности, восстановление объекта или очистка ссылки, контроль результата. В распределённых базах устраняйте причину в обмене, иначе проблема вернётся.
Часто задаваемые вопросы
Можно ли продолжать работать, если ошибка появляется редко?
Можно, но с оговорками: битая ссылка не исчезнет сама и рано или поздно заблокирует проведение документа, построение отчёта или обмен. Кроме того, одна битая ссылка часто указывает на проблему в процедуре удаления или обмена, которая будет создавать новые. Лучше устранить её при первом появлении.
Чем отличается битая ссылка от помеченного на удаление объекта?
Помеченный объект физически существует в базе, ссылки на него работают, просто он исключён из обычных выборок. Битая ссылка возникает, когда объект уже удалён физически, а ссылка на его идентификатор осталась. Ошибка «данные невозможно выбрать» относится именно ко второму случаю.
Опасно ли «Тестирование и исправление» для данных?
Сам режим проверки безопасен, но включённые опции исправления (очистка ссылок, удаление объектов) изменяют данные необратимо. Поэтому его всегда запускают на копии или после резервного копирования, в монопольном режиме, а результаты сначала анализируют в режиме «только проверка».
Как восстановить удалённый элемент справочника, на который ссылаются документы?
Простое создание нового элемента не поможет — у него будет другой идентификатор. Нужно либо восстановить объект из резервной копии с сохранением GUID (специальными обработками), либо заменить битую ссылку на новый элемент во всех документах и регистрах, что при большом числе ссылок делается групповой обработкой.
Почему ошибка возвращается после каждого обмена данными?
Потому что ссылка приходит из другого узла или системы, где объект существует или где хранится старая ссылка. Локальная очистка не решает проблему: нужно скорректировать правила обмена, состав выгрузки или удалить объект согласованно во всех узлах, а затем повторить синхронизацию.
Может ли ошибка означать повреждение базы, а не удаление объекта?
Да, если объект точно никто не удалял, а ошибка появилась после сбоя питания, обрыва работы сервера или ошибок СУБД. В этом случае проверьте базу на копии через тестирование и исправление, а для клиент-серверного варианта — дополнительно средствами СУБД, и восстановите данные из последней исправной копии, если повреждение подтвердится.