При разработке в 1С:Предприятие 8.3 часто возникает ситуация, когда реквизит ссылочного типа, имеющий ПустаяСсылка(), подсвечивается красным цветом. Начинающие разработчики часто ищут способ присвоить реквизиту некое «особое» значение <Пустой>, полагая, что это поможет избавиться от индикации незаполненного поля. Давайте вместе разберемся, почему так происходит и как правильно управлять поведением реквизитов.
Первое, что необходимо уяснить: красное подчеркивание — это не ошибка данных, а механизм визуального контроля платформы. Он тесно связан со свойством ПроверкаЗаполнения, установленным для реквизита в конфигураторе (значение «Выдавать ошибку»). Система считает, что если в реквизите находится ПустаяСсылка(), то он «не заполнен».
Если вы видите, что в некоторых документах значение отображается как <Пустой> и при этом не подсвечивается красным, это означает одно из двух:
<Пустой>, и именно ссылка на этот объект присвоена реквизиту.Если вам жизненно необходимо иметь «значение по умолчанию», которое выглядит для пользователя как пустой выбор, но система при этом не выдает ошибку, создайте в справочнике предопределенный элемент. Это самый надежный способ.
После создания элемента вы можете легко назначать его программно:
// Присвоение предопределенного значения
Объект.ВашРеквизит = Справочники.ВашСправочник.ПустоеЗначение;
Если же предопределенного элемента нет, но вы знаете, что в базе есть созданный вручную объект с наименованием <Пустой>, можно найти его и подставить:
// Поиск элемента по наименованию
НайденнаяСсылка = Справочники.ВашСправочник.НайтиПоНаименованию("<Пустой>");
Если ЗначениеЗаполнено(НайденнаяСсылка) Тогда
Объект.ВашРеквизит = НайденнаяСсылка;
КонецЕсли;
Если ваша задача — оставить значение пустым, но при этом убрать надоедливое красное подчеркивание, не стоит пытаться имитировать «пустоту». Правильнее будет изменить настройки самой формы. Платформа позволяет управлять поведением отображения прямо при открытии окна.
Для этого воспользуемся обработчиком ПриСозданииНаСервере в модуле формы документа:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Отключаем визуальную отметку того, что поле не заполнено
Элементы.ИмяВашегоРеквизитаНаФорме.АвтоотметкаНезаполненного = Ложь;
КонецПроцедуры
После выполнения этого кода поле перестанет подсвечиваться красным, даже если в нем будет находиться ПустаяСсылка(). Это наиболее корректный подход, если вы не хотите заполнять реквизит какими-либо техническими элементами справочника.
Если вы столкнулись с документом, где реквизит выглядит «пустым», но система не ругается, проведите небольшое исследование. Самый быстрый способ — использовать отладчик.
СправочникСсылка.Клиенты: <Объект не найден> или Клиент (000000001)), значит, это реальный элемент справочника.СправочникСсылка.Клиенты.ПустаяСсылка(), значит, в форме где-то прописана логика отключения проверки заполнения.Подводя итог: не пытайтесь найти магическое значение <Пустой>. Либо используйте реальный элемент справочника для обозначения «пустого состояния», либо управляйте свойством АвтоотметкаНезаполненного элемента формы. Это избавит вас от лишних сущностей в базе данных и сделает код понятным для других разработчиков.