СправочникСсылка.<Имя справочника>.ПолучитьОбъект

Методы · GetObject

Получает по ссылке объект, предназначенный для чтения, изменения, добавления и удаления справочника.

Синтаксис

ПолучитьОбъект()

Примеры платформы

ТипыНоменклатуры = Перечисления.ТипыНоменклатуры;
Если ТоварСсылка.ТипНоменклатуры = ТипыНоменклатуры.ПустаяСсылка() Тогда
    Объект = ТоварСсылка.ПолучитьОбъект();
    Объект.ТипНоменклатуры = ТипыНоменклатуры.Товар;
    Попытка
        Объект.Записать();
    Исключение
        Предупреждение(НСтр("ru = 'Не удалось записать объект';"
           + " en = 'Can't write the object'")
           + " '" + Объект + '"!
           |"+ ОписаниеОшибки(),60);
    КонецПопытки;
КонецЕсли;
Полное описание, параметры и ограничения

СправочникСсылка.<Имя справочника>.ПолучитьОбъект (CatalogRef.<Catalog name>.GetObject)

СправочникСсылка.<Имя справочника> (CatalogRef.<Catalog name>)

ПолучитьОбъект (GetObject)

Доступен, начиная с версии 8.0.

Синтаксис:
ПолучитьОбъект()
Возвращаемое значение:
Тип: СправочникОбъект.<Имя справочника>, Неопределено.
Неопределено - объекта в базе нет (например, при обмене данными или после непосредственного удаления объекта, на который есть ссылки).
Описание:

Получает по ссылке объект, предназначенный для чтения, изменения, добавления и удаления справочника.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

Пример:

ТипыНоменклатуры = Перечисления.ТипыНоменклатуры;
Если ТоварСсылка.ТипНоменклатуры = ТипыНоменклатуры.ПустаяСсылка() Тогда
Объект = ТоварСсылка.ПолучитьОбъект();
Объект.ТипНоменклатуры = ТипыНоменклатуры.Товар;
Попытка
Объект.Записать();
Исключение
Предупреждение(НСтр("ru = 'Не удалось записать объект';"
+ " en = 'Can't write the object'")
+ " '" + Объект + '"!
|"+ ОписаниеОшибки(),60);
КонецПопытки;
КонецЕсли;

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Назначить новому товару ссылку, не создавая запись в базе

ПолучитьСсылку строит ссылку из UUID. Такая ссылка ещё не означает существование товара. Назначаем её новому объекту и проверяем это различие.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

  5. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.


Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
    ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;

Идентификатор = Новый УникальныйИдентификатор;
ПлановаяСсылка = Справочники.УчебныеТовары.ПолучитьСсылку(Идентификатор);
Товар = Справочники.УчебныеТовары.СоздатьЭлемент();
Товар.Наименование = "Учебная книга со ссылкой";
Товар.УстановитьСсылкуНового(ПлановаяСсылка);
Сообщить(Товар.ПолучитьСсылкуНового() = ПлановаяСсылка);
Сообщить(ПлановаяСсылка.УникальныйИдентификатор() = Идентификатор);
Сообщить(Не ПлановаяСсылка.Пустая());
Сообщить(Товар.ЭтоНовый());
Сообщить(ПлановаяСсылка.ПолучитьОбъект() = Неопределено);
Сообщить(ПлановаяСсылка.Метаданные().Имя = "УчебныеТовары");

Разбор по шагам

  1. Новый UUID задаёт идентичность предполагаемой ссылки; ПолучитьСсылку не читает и не создаёт объект в базе.

  2. УстановитьСсылкуНового применим к новому незаписанному объекту. Проверка уникальности выполняется при будущей записи.

  3. ПолучитьСсылкуНового возвращает назначенное значение, которое сравниваем с плановой ссылкой.

  4. Непустая ссылка может вести к отсутствующей записи. Поэтому отдельно проверяем ПолучитьОбъект на Неопределено.

Как проверить результат

  1. Все шесть сравнений дают Истина для нового случайного UUID в пустой учебной базе.

  2. Товар остаётся новым, список справочника не изменяется.

  3. ПолучитьОбъект для плановой ссылки возвращает Неопределено, а не новый автоматически записанный товар.

Ожидаемый результат

Показано различие между непустой ссылкой, назначением идентичности и существованием записи.

На что обратить внимание

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

  2. Случайный UUID не является кодом товара, артикулом или универсальным ID внешнего API. Контракт обмена проектируют отдельно.

  3. Не вызывайте свойства данных у ссылки на отсутствующий объект в расчёте на автоматическое создание записи.

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

Скопировать по настоящей ссылке и изменить только незаписанную копию

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

Где и как запускать

Полный серверный модуль своей новой пустой конфигурации Учебная85, платформа 8.5.1.1343. Собственные ссылки/объекты, временная запись только с откатом; здесь не запускался.

Подготовка

  1. Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

  5. Для этого блока УчебныеТовары не подчинён владельцу, не имеет предопределённых элементов и дополнительных обработчиков. Модули объекта/менеджера пусты, подписок и расширений нет. Иерархия групп и элементов допускает два уровня ниже корня.

  6. Точную платформу 8.5.1.1343 проверяет код. Ссылки и объекты создаются самим уроком; UUID не подменяется знакомым кодом из УТ/КА2/УНФ/БП.

  7. Свойства ссылки readonly, свойства полученного объекта могут быть записываемыми. Ссылка.Скопировать возвращает новый объект, но сам метод не записывает его в базу.

  8. Непустой UUID/ссылка не подтверждает наличие записи. Для плановой ссылки проверяется ПолучитьОбъект=Неопределено, а данные отсутствующей записи не читаются.

  9. ВерсияДанных — непрозрачная строка платформы, не число, дата, версия конфигурации или номер обновления. Урок не декодирует и не назначает её вручную.

  10. Здесь в 1С примеры не запускались. Проверены исходники и установленная справка; записи/формы в ваших базах этим заполнением не создавались.

  11. Весь модуль вставьте в серверный общий модуль УчебныеСсылки. Его серверная экспортная процедура ВыполнитьПример вызывается из своей процедуры формы с &НаСервереБезКонтекста. Не вставляйте готовую процедуру внутрь другого обработчика.

  12. В транзакционных опытах временно записываются только собственные новые товар/группы, затем выполняется ОтменитьТранзакцию и при успехе, и при ошибке. Не заменяйте откат фиксацией и не вызывайте этот модуль внутри чужой транзакции.

  13. Запускайте строго в новой пустой базе Учебная85, с пустыми модулями объектов и без подписок. Здесь временно записываются только созданные самим примером объекты.

  14. Отмена транзакции выполняется и при успехе, и при ошибке. Не заменяйте её фиксацией и не запускайте внутри транзакции вызывающего кода.

  15. Откат базы не отменяет письма, HTTP-запросы и другие внешние действия обработчиков. Поэтому копия рабочей конфигурации с неизвестными обработчиками не заменяет эту подготовку.

Процедура ВыполнитьПример() Экспорт
    
    Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
        ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Запустите учебную задачу вне чужой транзакции";
    КонецЕсли;
    Ссылка = Справочники.УчебныеТовары.ПолучитьСсылку(Новый УникальныйИдентификатор);
    НачатьТранзакцию();
    Попытка
        Товар = Справочники.УчебныеТовары.СоздатьЭлемент();
        Товар.УстановитьСсылкуНового(Ссылка);
        Товар.Наименование = "Источник копии ссылки";
        Товар.Артикул = "REF-ORIGINAL";
        Товар.Цена = 250;
        Штрихкод = Товар.Штрихкоды.Добавить();
        Штрихкод.Штрихкод = "REF-OWN-01";
        Штрихкод.Основной = Истина;
        Товар.УстановитьНовыйКод("У");
        Товар.Записать();
        СсылкаИсточника = Товар.Ссылка;
        Копия = СсылкаИсточника.Скопировать();
        Копия.Наименование = "Независимая копия в памяти";
        Копия.Артикул = "REF-COPY";
        Копия.Штрихкоды.Получить(0).Штрихкод = "REF-COPY-01";
        Сообщить(ТипЗнч(Копия) = Тип("СправочникОбъект.УчебныеТовары"));
        Сообщить(Копия.ЭтоНовый());
        Сообщить(Копия.Ссылка.Пустая());
        Сообщить(Копия.Штрихкоды.Количество() = 1);
        Сообщить(СсылкаИсточника.Наименование = "Источник копии ссылки");
        Исходный = СсылкаИсточника.ПолучитьОбъект();
        Если Исходный = Неопределено Тогда
            ВызватьИсключение "Собственный источник внутри транзакции не найден";
        КонецЕсли;
        Сообщить(Исходный.Артикул = "REF-ORIGINAL");
        Сообщить(Исходный.Штрихкоды.Получить(0).Штрихкод = "REF-OWN-01");
        Сообщить("Скопировать по ссылке вернул новый незаписанный объект; копия не записывалась");
        ОтменитьТранзакцию();
    Исключение
        Если ТранзакцияАктивна() Тогда
            ОтменитьТранзакцию();
        КонецЕсли;
        ВызватьИсключение;
    КонецПопытки;
    Сообщить(Не ТранзакцияАктивна());
    Сообщить(Ссылка.ПолучитьОбъект() = Неопределено);
КонецПроцедуры

Разбор по шагам

  1. В собственной отменяемой транзакции записать один новый источник с одним учебным штрихкодом.

  2. Вызвать Скопировать именно на СсылкаИсточника.

  3. Изменить наименование, артикул и строку штрихкода только у возвращённого нового объекта.

  4. Проверить тип объекта, ЭтоНовый и пустую ссылку копии. Копию не записывать.

  5. Получить исходный сохранённый объект по реальной ссылке и проверить неизменность его артикула/строки.

  6. Откатить запись собственного источника и подтвердить отсутствие.

Как проверить результат

  1. Семь сравнений Истина: новая копия не подменила источник.

  2. Не сравнивается код копии с кодом источника: правила нумерации отдельно не выдумываются.

  3. Копия не записана, источник отменён, чужие товары не затронуты.

Ожидаемый результат

Реально разобрана граница между копированием по ссылке и записью возвращённого объекта.

На что обратить внимание

  1. Объект и ссылка не взаимозаменяемы: только объект используется для изменения данных, ссылка идентифицирует запись.

  2. Ссылки на отсутствующий или отменённый объект не следует читать как существующий товар.

  3. Никакие чужие объекты не ищутся по первому совпадению/первой строке и не удаляются по названию.

  4. Свойства ссылки не присваиваются, а непрозрачная ВерсияДанных не декодируется.

  5. Откат базы не отменяет внешние действия обработчиков, поэтому допускается только подготовленная своя пустая конфигурация без таких обработчиков.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.