К статье
Практический материал

Разработка и Конфигурация · 10 мин

1С: как получить ссылку на созданный документ

Как получить ссылку на созданный документ в 1С: методы ПолучитьСсылку, Ссылка, UUID, поиск по номеру. Примеры кода, ошибки и проверка результата.

Ссылка на документ — это уникальный идентификатор объекта в базе 1С, который позволяет обращаться к документу из любой точки кода: записывать в него данные, устанавливать как реквизит другого объекта, передавать между процедурами. После создания документа через Документы.ИмяДокумента.СоздатьДокумент() разработчик получает объект, а не ссылку, и переход от объекта к ссылке вызывает вопросы у начинающих.

Ключевой момент: ссылка появляется у документа только после записи в базу данных. Пока объект существует лишь в памяти, свойство Ссылка содержит пустую ссылку. Поэтому правильная последовательность — заполнить объект, записать его и только потом работать со ссылкой.

Ниже разобраны основные способы получения ссылки: через свойство объекта после записи, через метод ПолучитьСсылку() с заранее заданным идентификатором, поиск по номеру и дате, а также получение ссылки из уникального идентификатора. Для каждого способа указаны условия применения и типичные ошибки.

Как устроены объект и ссылка в 1С

В 1С документ существует в двух представлениях. Объект типа ДокументОбъект — это полная копия данных в памяти: реквизиты, табличные части, движения. Ссылка типа ДокументСсылка — лёгкий идентификатор, содержащий только указатель на запись в базе. Через ссылку можно читать реквизиты (платформа выполняет обращение к базе), но изменять данные можно только через объект.

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

Получение ссылки после записи документа

Самый распространённый сценарий — создать документ, заполнить, записать и взять ссылку из свойства объекта. Это стандартный подход для обработок, обменов и фоновых процедур.

НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

НовыйДокумент.Дата = ТекущаяДатаСеанса();

НовыйДокумент.Заполнить(ДанныеЗаполнения);

НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);

СсылкаНаДокумент = НовыйДокумент.Ссылка;

После записи переменная СсылкаНаДокумент содержит полноценную ссылку, которую можно передать в другую процедуру, записать в реквизит другого объекта или вывести пользователю. Если документ записывается без проведения, используется РежимЗаписиДокумента.Запись — на получение ссылки это не влияет.

Проверить результат просто: функция ЗначениеЗаполнено(СсылкаНаДокумент) должна вернуть Истина, а СсылкаНаДокумент.Номер — присвоенный номер документа. Если номер читается без ошибки, документ реально существует в базе.

Порядок действий
  1. 1
    Создайте объект: Документы.ИмяДокумента.СоздатьДокумент()
  2. 2
    Заполните реквизиты и табличные части
  3. 3
    Вызовите Записать() с нужным режимом
  4. 4
    Получите ссылку: Ссылка = НовыйДокумент.Ссылка
  5. 5
    Проверьте: ЗначениеЗаполнено(Ссылка) должно быть Истина

Получение ссылки до записи через ПолучитьСсылку()

Иногда ссылка нужна до записи документа — например, когда в табличную часть или связанный объект требуется сразу проставить ссылку на создаваемый документ, либо при синхронизации данных, где идентификатор приходит из внешней системы. Для этого служит метод ПолучитьСсылку() в паре с УстановитьСсылкуНового().

НовыйUUID = Новый УникальныйИдентификатор;

НоваяСсылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(НовыйUUID);

НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

НовыйДокумент.УстановитьСсылкуНового(НоваяСсылка);

НовыйДокумент.Дата = ТекущаяДатаСеанса();

НовыйДокумент.Записать();

// НоваяСсылка уже совпадает с НовыйДокумент.Ссылка

Метод ПолучитьСсылку() без параметра генерирует ссылку со случайным идентификатором, с параметром — ссылку по заданному UUID. Важно понимать: сам по себе вызов ПолучитьСсылку() не создаёт документ в базе, он лишь формирует идентификатор. Документ появится только после Записать().

Поиск ссылки существующего документа

Если документ уже создан и нужно получить на него ссылку, применяются методы поиска. Основной — НайтиПоНомеру(НомерДокумента, ДатаПоиска). Дата обязательна, потому что номера документов уникальны только в пределах периода нумерации (обычно года).

Ссылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("0000-000125", Дата(2026, 6, 15));

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

// документ не найден

КонецЕсли;

Для сложных условий поиска — по контрагенту, организации, комментарию — используется запрос. Запрос возвращает именно ссылку, если выбрать поле Ссылка из таблицы документа. Это самый гибкий способ, но он требует аккуратности с производительностью при больших объёмах данных.

Сравнение способов поиска

НайтиПоНомеру

Быстрый поиск по номеру и дате. Подходит, когда номер известен точно. Не ищет по другим реквизитам.

Запрос

Гибкий поиск по любым условиям. Требует написания текста запроса и контроля производительности.

ПолучитьСсылку(UUID)

Мгновенное получение ссылки по известному идентификатору. Не проверяет существование документа.

Получение ссылки из уникального идентификатора

При обмене данными между базами или интеграции с внешними системами часто передаётся строковое представление UUID. Чтобы превратить его в ссылку, идентификатор сначала преобразуется в тип УникальныйИдентификатор, затем в ссылку через ПолучитьСсылку().

UUIDСтрокой = "a1b2c3d4-e5f6-7890-abcd-ef1234567890";

UUID = Новый УникальныйИдентификатор(UUIDСтрокой);

Ссылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(UUID);

// Проверка существования

Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг ГДЕ Ссылка = &Ссылка");

Запрос.УстановитьПараметр("Ссылка", Ссылка);

Если Запрос.Выполнить().Пустой() Тогда

// документа с таким UUID нет в базе

КонецЕсли;

Обратная задача — получить UUID из ссылки — решается свойством Ссылка.УникальныйИдентификатор(). Это полезно при формировании данных для внешних систем, где 1С выступает источником.

Типичные ошибки и их последствия

Большинство проблем при работе со ссылками связано с непониманием момента её появления и отсутствием проверок. Ниже — ошибки, которые встречаются чаще всего.

Типичные ошибки
01
Обращение к Свойство Ссылка до Записать() — получается пустая ссылка, которая молча записывается в реквизиты других объектов
02
Использование ПолучитьСсылку() для поиска — метод не проверяет существование, результатом становится битая ссылка
03
Записать() внутри транзакции без контроля исключений — при откате сохранённая ранее ссылка указывает на несуществующий документ
04
Поиск по номеру без указания даты — находится документ другого периода или не находится ничего

Отдельного внимания заслуживает работа в транзакциях. Если ссылка получена после Записать(), но транзакция позже откатывается, документ исчезает, а переменная со ссылкой остаётся. Любая запись такой ссылки в другие объекты создаёт битые ссылки, которые потом мешают обменам и отчётам.

Проверка корректности полученной ссылки

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

Контрольные точки

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

ЗначениеЗаполнено(Ссылка)
Норма

Возвращает Истина

Тревожный признак

Ложь — документ не записан или ссылка не получена

Чтение реквизита Ссылка.Номер
Норма

Возвращается номер документа

Тревожный признак

Ошибка обращения или пустое значение — ссылка битая

Запрос по ссылке
Норма

Запрос возвращает одну строку

Тревожный признак

Пустой результат — документа нет в базе

Минимальная проверка — ЗначениеЗаполнено() — отсекает только пустые ссылки. Полная проверка существования выполняется запросом или попыткой чтения реквизита в попытке-исключении. В массовых обработках предпочтителен запрос: он быстрее и не генерирует исключений.

Итог

Что важно запомнить

Ссылка появляется после Записать() и доступна через свойство Ссылка объекта. Если ссылка нужна заранее — ПолучитьСсылку() плюс УстановитьСсылкуНового(). Для поиска существующих документов — НайтиПоНомеру() или запрос, но никогда ПолучитьСсылку(). Всегда проверяйте заполненность и существование ссылки перед использованием.

Часто задаваемые вопросы

Можно ли получить ссылку на документ, не записывая его?

Да, через Документы.ИмяДокумента.ПолучитьСсылку() — будет создана ссылка с новым UUID. Однако документ в базе при этом не появится: ссылка станет «рабочей» только после того, как объект с установленной через УстановитьСсылкуНового() ссылкой будет записан.

Почему после СоздатьДокумент() свойство Ссылка пустое?

Метод СоздатьДокумент() формирует объект только в памяти. Постоянный идентификатор присваивается платформой при записи в базу. До вызова Записать() свойство Ссылка всегда содержит пустую ссылку — это нормальное поведение, а не ошибка.

Как из строки с GUID получить ссылку на документ?

Создайте значение типа УникальныйИдентификатор из строки конструктором Новый УникальныйИдентификатор(СтрокаGUID), затем передайте его в Документы.ИмяДокумента.ПолучитьСсылку(UUID). После этого проверьте запросом, существует ли документ с такой ссылкой в базе.

Что такое битая ссылка и как её избежать?

Битая ссылка — ссылка, указывающая на несуществующий объект, например на удалённый документ. Она возникает при использовании ПолучитьСсылку() без проверки, откате транзакций и прямом удалении объектов. Избежать помогают проверка существования запросом и контроль целостности при удалении.

Чем ПолучитьСсылку() отличается от НайтиПоНомеру()?

НайтиПоНомеру() выполняет поиск в базе и возвращает ссылку только на существующий документ либо пустую ссылку. ПолучитьСсылку() не обращается к данным, а просто конструирует идентификатор — документ может при этом не существовать.

Можно ли изменить ссылку уже записанного документа?

Нет, ссылка записанного документа неизменна — это гарантия целостности базы. Если требуется документ с другим идентификатором, создаётся новый документ с нужной ссылкой через УстановитьСсылкуНового(), а старый помечается на удаление с последующим контролем ссылочной целостности.