Поле в 1С осталось пустым или показывает «Объект не найден»: что делать

· 10 мин

Содержание

Пустая ссылка в 1С — это реквизит ссылочного типа, в котором не выбрано ни одно значение: поле на форме просто пустое, а внутри базы хранится нулевой идентификатор 00000000-0000-0000-0000-000000000000. Исправляется она выбором правильного элемента в поле. Если значение не выбирается, причина почти всегда в отборе по связанному полю, правах или пометке удаления.

Хуже, когда в поле написано <Объект не найден> (45:b2c8...). Это уже не пустая, а битая ссылка: элемент когда-то был выбран, но его удалили из базы. Такой случай лечат иначе, и ниже разобраны оба.

Пустая и битая ссылка в 1С: в чём разница

Пользователь видит две похожие картины, но для программы это разные вещи. От того, какая у вас ситуация, зависит способ исправления.

ПризнакПустая ссылкаБитая ссылка
Что видно в полеНичего, поле пустое<Объект не найден> и код в скобках
Что хранится в базеНулевой идентификаторИдентификатор удалённого объекта
Откуда берётсяПоле не заполнили или очистилиОбъект удалили напрямую, сбой обмена или загрузки
Проверка ЗначениеЗаполнено()ЛожьИстина — поле формально заполнено
Как исправитьВыбрать значение в полеВыбрать значение заново или прогнать «Тестирование и исправление»

Последняя строка в таблице главная для разработчика. Битая ссылка проходит проверку заполнения, поэтому документ с ней проводится, а в отчётах вместо контрагента появляется строка <Объект не найден>.

💡 Пустое значение в обязательном поле программа ловит сама: при записи появится сообщение вида Поле "Контрагент" не заполнено. Битую ссылку она не замечает, её приходится искать.

Почему в поле 1С оказывается пустая ссылка

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

  • 📝 Поле не заполнили. Реквизит не помечен как обязательный, и документ записали без него. Через месяц он «всплывает» в отчёте строкой без названия.
  • 🔗 Связанное поле пустое. Договор выбирается только по выбранному контрагенту, склад или подразделение — по организации. Пока главное поле пустое, в подчинённом выбрать нечего.
  • 🔄 Перезаполнение. Сменили организацию или контрагента в шапке — программа очистила зависимые поля: договор, банковский счёт, ставку.
  • 📥 Загрузка и обмен. При загрузке из Excel или обмене между базами элемент не нашёлся по коду или ИНН, и реквизит остался пустым.
  • ✂️ Ручная очистка. Сочетание Shift+F4 очищает поле. Нажали случайно — и не заметили.
  • 🗑️ Удаление без контроля. Объект удалили, минуя проверку ссылок, — это путь к битой, а не к пустой ссылке, но симптом в отчётах похожий.

С чего начать диагностику пустой ссылки

Двигайтесь по шагам сверху вниз: каждый следующий нужен, только если предыдущий не дал ответа.

  1. Посмотрите, что в поле. Пусто — это пустая ссылка. Текст <Объект не найден> — битая. Название элемента зачёркнуто или с крестиком в списке — элемент помечен на удаление.
  2. Нажмите кнопку выбора (... или F4) в проблемном поле. Откроется список. Если он пустой, значит, срабатывает отбор по другому полю формы или ограничение прав.
  3. Проверьте связанные поля шапки. Для договора — контрагент и организация, для банковского счёта — организация, для статьи затрат — вид операции.
  4. Сравните с соседним документом. Скопируйте похожий документ, где всё заполнено, и посмотрите, какое значение там стоит.
  5. Проверьте права. Если коллега с полными правами видит элемент, а вы нет, дело в ограничениях доступа к данным. Решает администратор базы.
Диагностика: выберите симптом

Как исправить пустую ссылку: пошагово

Способ зависит от масштаба. Один документ правят руками, сотню — обработкой, битые ссылки по всей базе — Конфигуратором.

Один документ: выбрать правильное значение

  1. Откройте документ и, если он проведён, оставьте его открытым — отменять проведение не нужно.
  2. Заполните поля шапки в порядке сверху вниз: организация, контрагент, договор. Так программа не будет очищать уже выбранные значения.
  3. В пустом поле нажмите F4 или кнопку выбора и найдите элемент. Можно начать вводить название прямо в поле — 1С предложит совпадения по наименованию и коду.
  4. Нажмите Провести и закрыть. Движения пересчитаются с новым значением.

⚠️ Если документ закрытого периода, программа не даст его перепровести без снятия даты запрета изменения. Её устанавливает и снимает администратор, а правка в закрытом периоде меняет уже сданную отчётность.

Нужного элемента нет в списке выбора

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

  • 🔍 Связанное поле. Договор привязан к контрагенту-владельцу. Если договор заведён у другого контрагента или у головной организации, он не появится.
  • 🏢 Организация. В многофирменной базе договоры и счета часто ограничены организацией. Договор чужой организации в списке не покажется.
  • 📂 Группа вместо элемента. В иерархическом справочнике выбрать папку-группу обычно нельзя. Раскройте её и выберите элемент внутри.
  • ❌ Пометка удаления. Помеченный элемент виден в списке, но подставлять его не стоит: при удалении помеченных ссылка станет проблемой. Снимите пометку или выберите действующий элемент.

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

Много документов: найти и заполнить пустые поля

Сначала найдите все документы с пустым реквизитом. В списке документов откройте настройки списка через Ещё и добавьте отбор по нужному полю с видом сравнения «Не заполнено». Список покажет только документы, где значение пустое.

Дальше два пути:

  • Вручную, если документов десяток. Открывайте по одному и выбирайте значение.
  • Групповым изменением реквизитов, если их сотни. В типовых конфигурациях на БСП обработка «Групповое изменение реквизитов» открывается из списка документов через Ещё. Выделите документы, укажите реквизит и новое значение.

Групповое изменение перезаписывает поле во всех выделенных документах сразу. Сделайте резервную копию базы до запуска. Отменить операцию одной кнопкой нельзя.

Битые ссылки по всей базе: тестирование и исправление

Когда <Объект не найден> встречается в десятках документов, ручная правка не поможет. Используйте штатный механизм платформы.

  1. Сделайте резервную копию: Администрирование → Выгрузить информационную базу в Конфигураторе.
  2. Попросите всех пользователей выйти. Тестирование требует монопольного доступа, все открытые сеансы нужно завершить заранее.
  3. В Конфигураторе откройте Администрирование → Тестирование и исправление.
  4. Отметьте флажок «Проверка ссылочной целостности информационной базы».
  5. Выберите режим «Тестирование и исправление» и решите, что делать со ссылками на несуществующие объекты.
  6. Нажмите Выполнить и дождитесь протокола.

Три варианта обработки битых ссылок:

ВариантЧто произойдётКогда выбирать
Создавать объектыПоявятся элементы-заглушки, ссылки начнут на них указыватьНужно сохранить связь, чтобы потом заполнить заглушку правильными данными
Очищать ссылкиБитые ссылки станут пустымиЗначение не важно или его проще выбрать заново
Не изменятьОшибки попадут только в протоколСначала нужно оценить масштаб

💡 Начните с «Не изменять». Протокол покажет, какие объекты и реквизиты затронуты. Решение «очистить» или «создать» принимайте, уже зная масштаб.

Пустая ссылка в коде и запросах 1С

Разработчику пустые ссылки встречаются чаще, чем пользователю. Несколько приёмов закрывают почти все случаи.

Получить пустую ссылку

У каждого ссылочного типа есть метод менеджера ПустаяСсылка():

ПустойКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
ПустойВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПустаяСсылка();

На клиенте менеджеры справочников недоступны. Там используют ПредопределенноеЗначение:

ПустойКонтрагент = ПредопределенноеЗначение("Справочник.Контрагенты.ПустаяСсылка");

Название перечисления в примере условное — подставьте своё из дерева конфигурации.

Проверить, заполнено ли поле

Есть два способа, и они не взаимозаменяемы.

  • Ссылка.Пустая() — метод ссылки. Работает, только если в переменной точно ссылка. Если там Неопределено, получите ошибку Метод объекта не обнаружен (Пустая).
  • ЗначениеЗаполнено(Значение) — глобальная функция. Возвращает Ложь для пустой ссылки, Неопределено, пустой строки, нуля и пустой даты. Подходит и для составного типа.
Если Не ЗначениеЗаполнено(Объект.Договор) Тогда
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Не выбран договор с контрагентом";
    Сообщение.Поле = "Объект.Договор";
    Сообщение.Сообщить();
КонецЕсли;

В реквизитах составного типа пустое значение — это обычно Неопределено, а не пустая ссылка конкретного типа. Поэтому в универсальном коде проверяйте через ЗначениеЗаполнено.

Сделать поле обязательным

Самый надёжный способ — без кода. В Конфигураторе у реквизита установите свойство «Проверка заполнения» в значение «Выдавать ошибку». Платформа сама не даст записать документ с пустым полем.

Если поле обязательно только в части случаев, добавьте его в проверку в модуле объекта:

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    Если ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия Тогда
        ПроверяемыеРеквизиты.Добавить("Договор");
    КонецЕсли;
КонецПроцедуры

Имя значения перечисления здесь тоже пример: возьмите своё.

Пустые и битые ссылки в запросе

В тексте запроса пустую ссылку записывают через ЗНАЧЕНИЕ:

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

Битые ссылки ищут по-другому. Ссылка не пустая, но при обращении к реквизиту объекта получается NULL, потому что самого объекта в таблице нет:

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

Запрос можно выполнить в консоли запросов. Он покажет документы, где контрагент указан, но в справочнике его уже нет.

⚠️ Не путайте пустую ссылку и NULL. При левом соединении отсутствующая строка даёт NULL, а не пустую ссылку. Условие = ЗНАЧЕНИЕ(...ПустаяСсылка) её не поймает — нужно ЕСТЬ NULL или ЕСТЬNULL().

Объект по пустой ссылке

Метод ПолучитьОбъект() у пустой ссылки возвращает Неопределено. Если сразу вызвать у результата Записать(), код упадёт с ошибкой Значение не является значением объектного типа. Проверяйте результат перед работой с ним:

ОбъектКонтрагента = Ссылка.ПолучитьОбъект();
Если ОбъектКонтрагента = Неопределено Тогда
    Возврат;
КонецЕсли;

Ошибки, из-за которых пустая ссылка возвращается снова

Значение исправили, а через неделю поле опять пустое. Обычно виновата одна из этих привычек.

  • 🔁 Заполнение шапки снизу вверх. Сначала выбрали договор, потом поменяли контрагента — договор очистился. Порядок «организация → контрагент → договор» убирает проблему.
  • 📋 Копирование старых документов. Копия переносит все реквизиты, включая пустые и битые. Перед копированием проверьте исходник.
  • 🗑️ Непосредственное удаление элементов. Право удалять напрямую обходит проверку, есть ли на объект ссылки. Каждое такое удаление — потенциальные битые ссылки.
  • 🔧 «Очищать ссылки» без анализа. Режим тестирования с очисткой превращает битые ссылки в пустые. Документы перестают ссылаться на мусор, но и правильного значения в них уже нет — его надо заполнить.
  • 🧮 Проверка = ПустаяСсылка() в составном типе. Пустое значение там Неопределено, и сравнение с пустой ссылкой конкретного справочника вернёт Ложь.

Как не допустить пустых ссылок в базе

Профилактика дешевле разбора последствий. Достаточно нескольких правил.

  1. Обязательные поля — обязательны. Для ключевых реквизитов включите «Проверку заполнения» или проверку в ОбработкаПроверкиЗаполнения. Пользователь не сможет записать документ без значения.
  2. Удаляйте только через пометку. Помечайте объекты на удаление, а удаляйте обработкой удаления помеченных объектов. В БП 3.0 она находится в разделе Администрирование → Обслуживание. Обработка не удалит объект, на который есть ссылки, и покажет, кто на него ссылается.
  3. Заберите право непосредственного удаления. Оставьте его администратору. У обычных пользователей должна быть только пометка удаления.
  4. Контролируйте загрузку и обмены. Перед загрузкой из файла сверьте справочники по коду или ИНН. После обмена смотрите протокол: незагруженные объекты дают пустые поля в приёмнике.
  5. Проверяйте базу регулярно. Раз в квартал или перед закрытием года прогоняйте запрос на пустые и битые ссылки по ключевым документам.
Перед закрытием периода
Выполнено: 0 / 4

Частые вопросы о пустых ссылках в 1С

Можно ли провести документ с пустой ссылкой?
Да, если реквизит не помечен как обязательный. Документ проведётся, но в движениях на месте значения будет пусто. В отчётах такие суммы попадут в строку без названия.
Почему в отчёте появилась строка без названия?
Это суммы, у которых аналитика не заполнена. Расшифруйте строку двойным щелчком — отчёт покажет документы-источники, в них и нужно выбрать значение.
Пропадут ли данные, если выбрать «Очищать ссылки» в тестировании?
Сами документы останутся, но битые реквизиты станут пустыми. Узнать, какое значение было раньше, после этого можно только по резервной копии.
Как узнать, какой объект был по битой ссылке?
В скобках после <Объект не найден> стоит номер типа и идентификатор. По идентификатору объект можно найти в резервной копии базы, если он там ещё есть.
Отличается ли пустая ссылка от «Неопределено»?
Да. Пустая ссылка имеет конкретный тип, например пустой контрагент. Неопределено — значение без типа, его хранят реквизиты составного типа. Функция ЗначениеЗаполнено для обоих вернёт Ложь.