Как программно задать значение <Пустой> для реквизита типа Справочник в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке в 1С:Предприятие 8.3 часто возникает ситуация, когда реквизит ссылочного типа, имеющий ПустаяСсылка(), подсвечивается красным цветом. Начинающие разработчики часто ищут способ присвоить реквизиту некое «особое» значение <Пустой>, полагая, что это поможет избавиться от индикации незаполненного поля. Давайте вместе разберемся, почему так происходит и как правильно управлять поведением реквизитов.

Понимание природы индикации незаполненного реквизита

Первое, что необходимо уяснить: красное подчеркивание — это не ошибка данных, а механизм визуального контроля платформы. Он тесно связан со свойством ПроверкаЗаполнения, установленным для реквизита в конфигураторе (значение «Выдавать ошибку»). Система считает, что если в реквизите находится ПустаяСсылка(), то он «не заполнен».

Если вы видите, что в некоторых документах значение отображается как <Пустой> и при этом не подсвечивается красным, это означает одно из двух:

  1. Либо в справочнике создан реальный элемент, который называется <Пустой>, и именно ссылка на этот объект присвоена реквизиту.
  2. Либо для элемента формы программно или в конфигураторе отключена проверка заполнения.

Метод 1: Использование предопределенного элемента

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

После создания элемента вы можете легко назначать его программно:


// Присвоение предопределенного значения
Объект.ВашРеквизит = Справочники.ВашСправочник.ПустоеЗначение;

Если же предопределенного элемента нет, но вы знаете, что в базе есть созданный вручную объект с наименованием <Пустой>, можно найти его и подставить:


// Поиск элемента по наименованию
НайденнаяСсылка = Справочники.ВашСправочник.НайтиПоНаименованию("<Пустой>");
Если ЗначениеЗаполнено(НайденнаяСсылка) Тогда
    Объект.ВашРеквизит = НайденнаяСсылка;
КонецЕсли;

Метод 2: Отключение проверки заполнения

Если ваша задача — оставить значение пустым, но при этом убрать надоедливое красное подчеркивание, не стоит пытаться имитировать «пустоту». Правильнее будет изменить настройки самой формы. Платформа позволяет управлять поведением отображения прямо при открытии окна.

Для этого воспользуемся обработчиком ПриСозданииНаСервере в модуле формы документа:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Отключаем визуальную отметку того, что поле не заполнено
    Элементы.ИмяВашегоРеквизитаНаФорме.АвтоотметкаНезаполненного = Ложь;
КонецПроцедуры

После выполнения этого кода поле перестанет подсвечиваться красным, даже если в нем будет находиться ПустаяСсылка(). Это наиболее корректный подход, если вы не хотите заполнять реквизит какими-либо техническими элементами справочника.

Анализ ситуации: как проверить, что именно записано в поле

Если вы столкнулись с документом, где реквизит выглядит «пустым», но система не ругается, проведите небольшое исследование. Самый быстрый способ — использовать отладчик.

  1. Установите точку останова в месте, где вы получаете объект документа.
  2. В окне табло или вычисления выражений посмотрите значение реквизита.
  3. Если это ссылка (например, СправочникСсылка.Клиенты: <Объект не найден> или Клиент (000000001)), значит, это реальный элемент справочника.
  4. Если это СправочникСсылка.Клиенты.ПустаяСсылка(), значит, в форме где-то прописана логика отключения проверки заполнения.

Подводя итог: не пытайтесь найти магическое значение <Пустой>. Либо используйте реальный элемент справочника для обозначения «пустого состояния», либо управляйте свойством АвтоотметкаНезаполненного элемента формы. Это избавит вас от лишних сущностей в базе данных и сделает код понятным для других разработчиков.

← На главную