1c8 Работа с пустыми ссылками

Если в 1с8 ссылка пустая, тогда её идентификатор будет равен
00000000-0000-0000-0000-000000000000

У обычной ссылки уникальный идентификатор можно получить так:
уник = Ссылка.УникальныйИдентификатор();
например «349126eb-eaba-13d8-bca8-000c6efdd521»

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

Проверить на пустую ссылку можно так:

Если Ссылка.Пустая() Тогда

Или так:

Если Ссылка = Справочники.Номенклатура.ПустаяСсылка() Тогда

Пустые ссылки возвращаются методами НайтиПоНаименованию, НайтиПоКоду, НайтиПоНомеру в случае, когда объект не найден. Пустые ссылки являются значениями по умолчанию для реквизитов ссылочных типов. Если реквизит имеет составной тип данных,то значением по умолчанию для него является Неопределено.

Неопределено <> NULL <> "" <> 0 <> пустая ссылка <> Битая ссылка

У пустой ссылки есть все поля (реквизиты, табличные часть) и к ним можно обращаться. Они будут незаполнены (для чисел — 0, для ссылок — пустые ссылки, для строк переменной длины — «», для строк фиксированной длины — опр. количество пробелов). Табличные части будут иметь 0 строк.

Пустые ссылки можно «разыменовать» (обращаться через точку с свойствам). Следующий фрагмент кода вполне работоспособен:

ПустойПользователь = Справочники.Пользователи.ПустаяСсылка();
ЦФО = ПустойПользователь.Сотрудник.Подразделение.ЦФО;

Т.е. не нужно лишних проверок в программных модулях. Может кому пригодится.

Есть еще такое понятие, как «битая ссылка» (условное название). Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом:

<Объект не найден> (16:bca8000c6efdd52111d8eaba7c9706eb)

Битая ссылка не является пустой. Т.е. метод Пустая() возвращает Ложь. Определить, что ссылка битая можно так:

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

или так (ненадежно):

Если Лев(СокрЛП(Ссылка),18) = "<Объект не найден>" Тогда


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *