Устанавливает значение для нового (созданного и еще не записанного) объекта, которое будет назначено при записи в качестве ссылки. Значение не может равняться ссылке какого-либо из имеющихся в базе данных объекта данного типа. Уникальность ссылки проверяется при записи объекта.
Синтаксис
УстановитьСсылкуНового(<Ссылка>)Полное описание, параметры и ограничения
СправочникОбъект.<Имя справочника>.УстановитьСсылкуНового (CatalogObject.<Catalog name>.SetNewObjectRef)
СправочникОбъект.<Имя справочника> (CatalogObject.<Catalog name>)
УстановитьСсылкуНового (SetNewObjectRef)
Доступен, начиная с версии 8.0.
Синтаксис:
УстановитьСсылкуНового(<Ссылка>)
Параметры:
<Ссылка> (обязательный)
Тип: СправочникСсылка.<Имя справочника>.
Ссылка, которая будет назначена при записи нового объекта.
Описание:
Устанавливает значение для нового (созданного и еще не записанного) объекта, которое будет назначено при записи в качестве ссылки. Значение не может равняться ссылке какого-либо из имеющихся в базе данных объекта данного типа. Уникальность ссылки проверяется при записи объекта.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
См. также:
СправочникМенеджер.<Имя справочника>, метод ПолучитьСсылку
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Назначить новому товару ссылку, не создавая запись в базе
ПолучитьСсылку строит ссылку из UUID. Такая ссылка ещё не означает существование товара. Назначаем её новому объекту и проверяем это различие.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.
Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.
Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.
Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.
Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.
Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;
Идентификатор = Новый УникальныйИдентификатор;
ПлановаяСсылка = Справочники.УчебныеТовары.ПолучитьСсылку(Идентификатор);
Товар = Справочники.УчебныеТовары.СоздатьЭлемент();
Товар.Наименование = "Учебная книга со ссылкой";
Товар.УстановитьСсылкуНового(ПлановаяСсылка);
Сообщить(Товар.ПолучитьСсылкуНового() = ПлановаяСсылка);
Сообщить(ПлановаяСсылка.УникальныйИдентификатор() = Идентификатор);
Сообщить(Не ПлановаяСсылка.Пустая());
Сообщить(Товар.ЭтоНовый());
Сообщить(ПлановаяСсылка.ПолучитьОбъект() = Неопределено);
Сообщить(ПлановаяСсылка.Метаданные().Имя = "УчебныеТовары");Разбор по шагам
Новый UUID задаёт идентичность предполагаемой ссылки; ПолучитьСсылку не читает и не создаёт объект в базе.
УстановитьСсылкуНового применим к новому незаписанному объекту. Проверка уникальности выполняется при будущей записи.
ПолучитьСсылкуНового возвращает назначенное значение, которое сравниваем с плановой ссылкой.
Непустая ссылка может вести к отсутствующей записи. Поэтому отдельно проверяем ПолучитьОбъект на Неопределено.
Как проверить результат
Все шесть сравнений дают Истина для нового случайного UUID в пустой учебной базе.
Товар остаётся новым, список справочника не изменяется.
ПолучитьОбъект для плановой ссылки возвращает Неопределено, а не новый автоматически записанный товар.
Ожидаемый результат
Показано различие между непустой ссылкой, назначением идентичности и существованием записи.
На что обратить внимание
Не назначайте ссылку существующего товара новому объекту: это не способ обновления данных.
Случайный UUID не является кодом товара, артикулом или универсальным ID внешнего API. Контракт обмена проектируют отдельно.
Не вызывайте свойства данных у ссылки на отсутствующий объект в расчёте на автоматическое создание записи.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Записать учебный товар внутри транзакции и намеренно отменить
В новой пустой учебной базе проверяем, что отмена транзакции убирает созданную запись. Никаких существующих товаров не удаляем.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.
Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.
Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.
Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.
Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.
Это единственный фрагмент данной группы, который вызывает Записать. Выполняйте строго в новой пустой базе Учебная85 с пустым модулем справочника; транзакция намеренно отменяется.
Не запускайте в рабочей конфигурации: её обработчики записи могут иметь внешние побочные действия, которые откат базы не отменяет.
Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;
Товар = Справочники.УчебныеТовары.СоздатьЭлемент();
Товар.Наименование = "Учебный товар с отменой";
Товар.Артикул = "ROLLBACK-ONLY";
Товар.Цена = 250;
Ссылка = Справочники.УчебныеТовары.ПолучитьСсылку(Новый УникальныйИдентификатор);
Товар.УстановитьСсылкуНового(Ссылка);
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Запустите упражнение вне существующей транзакции";
КонецЕсли;
НачатьТранзакцию();
Попытка
Товар.Записать();
Внутри = Ссылка.ПолучитьОбъект();
Сообщить(Внутри <> Неопределено);
Сообщить(Не Товар.ЭтоНовый());
ОтменитьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Сообщить(Не ТранзакцияАктивна());
Сообщить(Ссылка.ПолучитьОбъект() = Неопределено);Разбор по шагам
До начала проверяем, что чужая транзакция не активна. Не отменяем транзакцию вызывающего кода.
Записываем только собственный новый объект с новым UUID и читаем его внутри этой транзакции.
ОтменитьТранзакцию откатывает запись, после чего снова проверяем существование через ссылку.
В случае ошибки отменяем только ещё активную транзакцию данного упражнения и передаём исключение дальше.
Как проверить результат
Внутри транзакции объект получен; после записи ЭтоНовый=Ложь.
После отмены транзакция не активна и ПолучитьОбъект возвращает Неопределено.
В списке УчебныеТовары нет нового учебного товара после завершения упражнения.
Ожидаемый результат
Запись собственной учебной строки была отменена без удаления существующих объектов.
На что обратить внимание
Отмена транзакции не откатывает HTTP-запросы, отправленные письма и внешние файлы. Поэтому база и обработчики специально изолированы.
Состояние уже изменённого объекта в памяти не считайте доказательством состояния базы после отката: проверяем базу через ссылку.
Записать может вызывать код объекта и подписки; в подготовке их намеренно нет.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.