Поле в 1С осталось пустым или показывает «Объект не найден»: что делать
Содержание
Пустая ссылка в 1С — это реквизит ссылочного типа, в котором не выбрано ни одно значение: поле на форме просто пустое, а внутри базы хранится нулевой идентификатор 00000000-0000-0000-0000-000000000000. Исправляется она выбором правильного элемента в поле. Если значение не выбирается, причина почти всегда в отборе по связанному полю, правах или пометке удаления.
Хуже, когда в поле написано <Объект не найден> (45:b2c8...). Это уже не пустая, а битая ссылка: элемент когда-то был выбран, но его удалили из базы. Такой случай лечат иначе, и ниже разобраны оба.
Пустая и битая ссылка в 1С: в чём разница
Пользователь видит две похожие картины, но для программы это разные вещи. От того, какая у вас ситуация, зависит способ исправления.
| Признак | Пустая ссылка | Битая ссылка |
|---|---|---|
| Что видно в поле | Ничего, поле пустое | <Объект не найден> и код в скобках |
| Что хранится в базе | Нулевой идентификатор | Идентификатор удалённого объекта |
| Откуда берётся | Поле не заполнили или очистили | Объект удалили напрямую, сбой обмена или загрузки |
Проверка ЗначениеЗаполнено() | Ложь | Истина — поле формально заполнено |
| Как исправить | Выбрать значение в поле | Выбрать значение заново или прогнать «Тестирование и исправление» |
Последняя строка в таблице главная для разработчика. Битая ссылка проходит проверку заполнения, поэтому документ с ней проводится, а в отчётах вместо контрагента появляется строка <Объект не найден>.
💡 Пустое значение в обязательном поле программа ловит сама: при записи появится сообщение вида Поле "Контрагент" не заполнено. Битую ссылку она не замечает, её приходится искать.
Почему в поле 1С оказывается пустая ссылка
Причин немного, и большинство из них связаны не с ошибкой программы, а с порядком работы.
- 📝 Поле не заполнили. Реквизит не помечен как обязательный, и документ записали без него. Через месяц он «всплывает» в отчёте строкой без названия.
- 🔗 Связанное поле пустое. Договор выбирается только по выбранному контрагенту, склад или подразделение — по организации. Пока главное поле пустое, в подчинённом выбрать нечего.
- 🔄 Перезаполнение. Сменили организацию или контрагента в шапке — программа очистила зависимые поля: договор, банковский счёт, ставку.
- 📥 Загрузка и обмен. При загрузке из Excel или обмене между базами элемент не нашёлся по коду или ИНН, и реквизит остался пустым.
- ✂️ Ручная очистка. Сочетание
Shift+F4очищает поле. Нажали случайно — и не заметили. - 🗑️ Удаление без контроля. Объект удалили, минуя проверку ссылок, — это путь к битой, а не к пустой ссылке, но симптом в отчётах похожий.
С чего начать диагностику пустой ссылки
Двигайтесь по шагам сверху вниз: каждый следующий нужен, только если предыдущий не дал ответа.
- Посмотрите, что в поле. Пусто — это пустая ссылка. Текст
<Объект не найден>— битая. Название элемента зачёркнуто или с крестиком в списке — элемент помечен на удаление. - Нажмите кнопку выбора (
...илиF4) в проблемном поле. Откроется список. Если он пустой, значит, срабатывает отбор по другому полю формы или ограничение прав. - Проверьте связанные поля шапки. Для договора — контрагент и организация, для банковского счёта — организация, для статьи затрат — вид операции.
- Сравните с соседним документом. Скопируйте похожий документ, где всё заполнено, и посмотрите, какое значение там стоит.
- Проверьте права. Если коллега с полными правами видит элемент, а вы нет, дело в ограничениях доступа к данным. Решает администратор базы.
Как исправить пустую ссылку: пошагово
Способ зависит от масштаба. Один документ правят руками, сотню — обработкой, битые ссылки по всей базе — Конфигуратором.
Один документ: выбрать правильное значение
- Откройте документ и, если он проведён, оставьте его открытым — отменять проведение не нужно.
- Заполните поля шапки в порядке сверху вниз: организация, контрагент, договор. Так программа не будет очищать уже выбранные значения.
- В пустом поле нажмите
F4или кнопку выбора и найдите элемент. Можно начать вводить название прямо в поле — 1С предложит совпадения по наименованию и коду. - Нажмите
Провести и закрыть. Движения пересчитаются с новым значением.
⚠️ Если документ закрытого периода, программа не даст его перепровести без снятия даты запрета изменения. Её устанавливает и снимает администратор, а правка в закрытом периоде меняет уже сданную отчётность.
Нужного элемента нет в списке выбора
Значит, срабатывает отбор. Проверьте по порядку:
- 🔍 Связанное поле. Договор привязан к контрагенту-владельцу. Если договор заведён у другого контрагента или у головной организации, он не появится.
- 🏢 Организация. В многофирменной базе договоры и счета часто ограничены организацией. Договор чужой организации в списке не покажется.
- 📂 Группа вместо элемента. В иерархическом справочнике выбрать папку-группу обычно нельзя. Раскройте её и выберите элемент внутри.
- ❌ Пометка удаления. Помеченный элемент виден в списке, но подставлять его не стоит: при удалении помеченных ссылка станет проблемой. Снимите пометку или выберите действующий элемент.
Если элемента действительно нет — создайте его прямо из списка выбора кнопкой Создать. После записи он сразу подставится в поле.
Много документов: найти и заполнить пустые поля
Сначала найдите все документы с пустым реквизитом. В списке документов откройте настройки списка через Ещё и добавьте отбор по нужному полю с видом сравнения «Не заполнено». Список покажет только документы, где значение пустое.
Дальше два пути:
- Вручную, если документов десяток. Открывайте по одному и выбирайте значение.
- Групповым изменением реквизитов, если их сотни. В типовых конфигурациях на БСП обработка «Групповое изменение реквизитов» открывается из списка документов через
Ещё. Выделите документы, укажите реквизит и новое значение.
Групповое изменение перезаписывает поле во всех выделенных документах сразу. Сделайте резервную копию базы до запуска. Отменить операцию одной кнопкой нельзя.
Битые ссылки по всей базе: тестирование и исправление
Когда <Объект не найден> встречается в десятках документов, ручная правка не поможет. Используйте штатный механизм платформы.
- Сделайте резервную копию:
Администрирование → Выгрузить информационную базув Конфигураторе. - Попросите всех пользователей выйти. Тестирование требует монопольного доступа, все открытые сеансы нужно завершить заранее.
- В Конфигураторе откройте
Администрирование → Тестирование и исправление. - Отметьте флажок «Проверка ссылочной целостности информационной базы».
- Выберите режим «Тестирование и исправление» и решите, что делать со ссылками на несуществующие объекты.
- Нажмите
Выполнитьи дождитесь протокола.
Три варианта обработки битых ссылок:
| Вариант | Что произойдёт | Когда выбирать |
|---|---|---|
| Создавать объекты | Появятся элементы-заглушки, ссылки начнут на них указывать | Нужно сохранить связь, чтобы потом заполнить заглушку правильными данными |
| Очищать ссылки | Битые ссылки станут пустыми | Значение не важно или его проще выбрать заново |
| Не изменять | Ошибки попадут только в протокол | Сначала нужно оценить масштаб |
💡 Начните с «Не изменять». Протокол покажет, какие объекты и реквизиты затронуты. Решение «очистить» или «создать» принимайте, уже зная масштаб.
Пустая ссылка в коде и запросах 1С
Разработчику пустые ссылки встречаются чаще, чем пользователю. Несколько приёмов закрывают почти все случаи.
Получить пустую ссылку
У каждого ссылочного типа есть метод менеджера ПустаяСсылка():
ПустойКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
ПустойВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПустаяСсылка();
На клиенте менеджеры справочников недоступны. Там используют ПредопределенноеЗначение:
ПустойКонтрагент = ПредопределенноеЗначение("Справочник.Контрагенты.ПустаяСсылка");
Название перечисления в примере условное — подставьте своё из дерева конфигурации.
Проверить, заполнено ли поле
Есть два способа, и они не взаимозаменяемы.
Ссылка.Пустая()— метод ссылки. Работает, только если в переменной точно ссылка. Если тамНеопределено, получите ошибкуМетод объекта не обнаружен (Пустая).ЗначениеЗаполнено(Значение)— глобальная функция. ВозвращаетЛожьдля пустой ссылки,Неопределено, пустой строки, нуля и пустой даты. Подходит и для составного типа.
Если Не ЗначениеЗаполнено(Объект.Договор) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не выбран договор с контрагентом";
Сообщение.Поле = "Объект.Договор";
Сообщение.Сообщить();
КонецЕсли;
В реквизитах составного типа пустое значение — это обычно Неопределено, а не пустая ссылка конкретного типа. Поэтому в универсальном коде проверяйте через ЗначениеЗаполнено.
Сделать поле обязательным
Самый надёжный способ — без кода. В Конфигураторе у реквизита установите свойство «Проверка заполнения» в значение «Выдавать ошибку». Платформа сама не даст записать документ с пустым полем.
Если поле обязательно только в части случаев, добавьте его в проверку в модуле объекта:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия Тогда
ПроверяемыеРеквизиты.Добавить("Договор");
КонецЕсли;
КонецПроцедуры
Имя значения перечисления здесь тоже пример: возьмите своё.
Пустые и битые ссылки в запросе
В тексте запроса пустую ссылку записывают через ЗНАЧЕНИЕ:
ВЫБРАТЬ
Реализация.Ссылка КАК Документ
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Проведен
И Реализация.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
Битые ссылки ищут по-другому. Ссылка не пустая, но при обращении к реквизиту объекта получается NULL, потому что самого объекта в таблице нет:
ВЫБРАТЬ
Реализация.Ссылка КАК Документ,
Реализация.Контрагент КАК БитаяСсылка
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ГДЕ
Реализация.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
И Реализация.Контрагент.ПометкаУдаления ЕСТЬ NULL
Запрос можно выполнить в консоли запросов. Он покажет документы, где контрагент указан, но в справочнике его уже нет.
⚠️ Не путайте пустую ссылку и NULL. При левом соединении отсутствующая строка даёт NULL, а не пустую ссылку. Условие = ЗНАЧЕНИЕ(...ПустаяСсылка) её не поймает — нужно ЕСТЬ NULL или ЕСТЬNULL().
Объект по пустой ссылке
Метод ПолучитьОбъект() у пустой ссылки возвращает Неопределено. Если сразу вызвать у результата Записать(), код упадёт с ошибкой Значение не является значением объектного типа. Проверяйте результат перед работой с ним:
ОбъектКонтрагента = Ссылка.ПолучитьОбъект();
Если ОбъектКонтрагента = Неопределено Тогда
Возврат;
КонецЕсли;
Ошибки, из-за которых пустая ссылка возвращается снова
Значение исправили, а через неделю поле опять пустое. Обычно виновата одна из этих привычек.
- 🔁 Заполнение шапки снизу вверх. Сначала выбрали договор, потом поменяли контрагента — договор очистился. Порядок «организация → контрагент → договор» убирает проблему.
- 📋 Копирование старых документов. Копия переносит все реквизиты, включая пустые и битые. Перед копированием проверьте исходник.
- 🗑️ Непосредственное удаление элементов. Право удалять напрямую обходит проверку, есть ли на объект ссылки. Каждое такое удаление — потенциальные битые ссылки.
- 🔧 «Очищать ссылки» без анализа. Режим тестирования с очисткой превращает битые ссылки в пустые. Документы перестают ссылаться на мусор, но и правильного значения в них уже нет — его надо заполнить.
- 🧮 Проверка
= ПустаяСсылка()в составном типе. Пустое значение тамНеопределено, и сравнение с пустой ссылкой конкретного справочника вернётЛожь.
Как не допустить пустых ссылок в базе
Профилактика дешевле разбора последствий. Достаточно нескольких правил.
- Обязательные поля — обязательны. Для ключевых реквизитов включите «Проверку заполнения» или проверку в
ОбработкаПроверкиЗаполнения. Пользователь не сможет записать документ без значения. - Удаляйте только через пометку. Помечайте объекты на удаление, а удаляйте обработкой удаления помеченных объектов. В БП 3.0 она находится в разделе
Администрирование → Обслуживание. Обработка не удалит объект, на который есть ссылки, и покажет, кто на него ссылается. - Заберите право непосредственного удаления. Оставьте его администратору. У обычных пользователей должна быть только пометка удаления.
- Контролируйте загрузку и обмены. Перед загрузкой из файла сверьте справочники по коду или ИНН. После обмена смотрите протокол: незагруженные объекты дают пустые поля в приёмнике.
- Проверяйте базу регулярно. Раз в квартал или перед закрытием года прогоняйте запрос на пустые и битые ссылки по ключевым документам.
Частые вопросы о пустых ссылках в 1С
Можно ли провести документ с пустой ссылкой?
Почему в отчёте появилась строка без названия?
Пропадут ли данные, если выбрать «Очищать ссылки» в тестировании?
Как узнать, какой объект был по битой ссылке?
<Объект не найден> стоит номер типа и идентификатор. По идентификатору объект можно найти в резервной копии базы, если он там ещё есть.Отличается ли пустая ссылка от «Неопределено»?
Неопределено — значение без типа, его хранят реквизиты составного типа. Функция ЗначениеЗаполнено для обоих вернёт Ложь.