Разработка и Конфигурация · 10 мин
1С: как получить ссылку на созданный документ
Как получить ссылку на созданный документ в 1С: методы ПолучитьСсылку, Ссылка, UUID, поиск по номеру. Примеры кода, ошибки и проверка результата.
Ссылка на документ — это уникальный идентификатор объекта в базе 1С, который позволяет обращаться к документу из любой точки кода: записывать в него данные, устанавливать как реквизит другого объекта, передавать между процедурами. После создания документа через Документы.ИмяДокумента.СоздатьДокумент() разработчик получает объект, а не ссылку, и переход от объекта к ссылке вызывает вопросы у начинающих.
Ключевой момент: ссылка появляется у документа только после записи в базу данных. Пока объект существует лишь в памяти, свойство Ссылка содержит пустую ссылку. Поэтому правильная последовательность — заполнить объект, записать его и только потом работать со ссылкой.
Ниже разобраны основные способы получения ссылки: через свойство объекта после записи, через метод ПолучитьСсылку() с заранее заданным идентификатором, поиск по номеру и дате, а также получение ссылки из уникального идентификатора. Для каждого способа указаны условия применения и типичные ошибки.
Как устроены объект и ссылка в 1С
В 1С документ существует в двух представлениях. Объект типа ДокументОбъект — это полная копия данных в памяти: реквизиты, табличные части, движения. Ссылка типа ДокументСсылка — лёгкий идентификатор, содержащий только указатель на запись в базе. Через ссылку можно читать реквизиты (платформа выполняет обращение к базе), но изменять данные можно только через объект.
Пока новый документ не записан, у него нет постоянной ссылки: свойство Ссылка возвращает пустую ссылку соответствующего типа. Проверить это можно функцией ЗначениеЗаполнено(). После успешного вызова Записать() платформа присваивает объекту ссылку, и она становится доступной для использования.
Получение ссылки после записи документа
Самый распространённый сценарий — создать документ, заполнить, записать и взять ссылку из свойства объекта. Это стандартный подход для обработок, обменов и фоновых процедур.
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДатаСеанса();
НовыйДокумент.Заполнить(ДанныеЗаполнения);
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
СсылкаНаДокумент = НовыйДокумент.Ссылка;
После записи переменная СсылкаНаДокумент содержит полноценную ссылку, которую можно передать в другую процедуру, записать в реквизит другого объекта или вывести пользователю. Если документ записывается без проведения, используется РежимЗаписиДокумента.Запись — на получение ссылки это не влияет.
Проверить результат просто: функция ЗначениеЗаполнено(СсылкаНаДокумент) должна вернуть Истина, а СсылкаНаДокумент.Номер — присвоенный номер документа. Если номер читается без ошибки, документ реально существует в базе.
- 1Создайте объект: Документы.ИмяДокумента.СоздатьДокумент()
- 2Заполните реквизиты и табличные части
- 3Вызовите Записать() с нужным режимом
- 4Получите ссылку: Ссылка = НовыйДокумент.Ссылка
- 5Проверьте: ЗначениеЗаполнено(Ссылка) должно быть Истина
Получение ссылки до записи через ПолучитьСсылку()
Иногда ссылка нужна до записи документа — например, когда в табличную часть или связанный объект требуется сразу проставить ссылку на создаваемый документ, либо при синхронизации данных, где идентификатор приходит из внешней системы. Для этого служит метод ПолучитьСсылку() в паре с УстановитьСсылкуНового().
НовыйUUID = Новый УникальныйИдентификатор;
НоваяСсылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(НовыйUUID);
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДокумент.УстановитьСсылкуНового(НоваяСсылка);
НовыйДокумент.Дата = ТекущаяДатаСеанса();
НовыйДокумент.Записать();
// НоваяСсылка уже совпадает с НовыйДокумент.Ссылка
Метод ПолучитьСсылку() без параметра генерирует ссылку со случайным идентификатором, с параметром — ссылку по заданному UUID. Важно понимать: сам по себе вызов ПолучитьСсылку() не создаёт документ в базе, он лишь формирует идентификатор. Документ появится только после Записать().
Поиск ссылки существующего документа
Если документ уже создан и нужно получить на него ссылку, применяются методы поиска. Основной — НайтиПоНомеру(НомерДокумента, ДатаПоиска). Дата обязательна, потому что номера документов уникальны только в пределах периода нумерации (обычно года).
Ссылка = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("0000-000125", Дата(2026, 6, 15));
Если Ссылка.Пустая() Тогда
// документ не найден
КонецЕсли;
Для сложных условий поиска — по контрагенту, организации, комментарию — используется запрос. Запрос возвращает именно ссылку, если выбрать поле Ссылка из таблицы документа. Это самый гибкий способ, но он требует аккуратности с производительностью при больших объёмах данных.
Сравнение способов поиска
Быстрый поиск по номеру и дате. Подходит, когда номер известен точно. Не ищет по другим реквизитам.
Гибкий поиск по любым условиям. Требует написания текста запроса и контроля производительности.
Мгновенное получение ссылки по известному идентификатору. Не проверяет существование документа.
Получение ссылки из уникального идентификатора
При обмене данными между базами или интеграции с внешними системами часто передаётся строковое представление UUID. Чтобы превратить его в ссылку, идентификатор сначала преобразуется в тип УникальныйИдентификатор, затем в ссылку через ПолучитьСсылку().
UUIDСтрокой = "a1b2c3d4-e5f6-7890-abcd-ef1234567890";
UUID = Новый УникальныйИдентификатор(UUIDСтрокой);
Ссылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(UUID);
// Проверка существования
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг ГДЕ Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Если Запрос.Выполнить().Пустой() Тогда
// документа с таким UUID нет в базе
КонецЕсли;
Обратная задача — получить UUID из ссылки — решается свойством Ссылка.УникальныйИдентификатор(). Это полезно при формировании данных для внешних систем, где 1С выступает источником.
Типичные ошибки и их последствия
Большинство проблем при работе со ссылками связано с непониманием момента её появления и отсутствием проверок. Ниже — ошибки, которые встречаются чаще всего.
Отдельного внимания заслуживает работа в транзакциях. Если ссылка получена после Записать(), но транзакция позже откатывается, документ исчезает, а переменная со ссылкой остаётся. Любая запись такой ссылки в другие объекты создаёт битые ссылки, которые потом мешают обменам и отчётам.
Проверка корректности полученной ссылки
Перед использованием ссылки в ответственных операциях — записи в регистры, передаче в обмен — стоит убедиться, что она заполнена и указывает на реально существующий документ.
Как проверить результат
Возвращает Истина
Ложь — документ не записан или ссылка не получена
Возвращается номер документа
Ошибка обращения или пустое значение — ссылка битая
Запрос возвращает одну строку
Пустой результат — документа нет в базе
Минимальная проверка — ЗначениеЗаполнено() — отсекает только пустые ссылки. Полная проверка существования выполняется запросом или попыткой чтения реквизита в попытке-исключении. В массовых обработках предпочтителен запрос: он быстрее и не генерирует исключений.
Что важно запомнить
Ссылка появляется после Записать() и доступна через свойство Ссылка объекта. Если ссылка нужна заранее — ПолучитьСсылку() плюс УстановитьСсылкуНового(). Для поиска существующих документов — НайтиПоНомеру() или запрос, но никогда ПолучитьСсылку(). Всегда проверяйте заполненность и существование ссылки перед использованием.
Часто задаваемые вопросы
Можно ли получить ссылку на документ, не записывая его?
Да, через Документы.ИмяДокумента.ПолучитьСсылку() — будет создана ссылка с новым UUID. Однако документ в базе при этом не появится: ссылка станет «рабочей» только после того, как объект с установленной через УстановитьСсылкуНового() ссылкой будет записан.
Почему после СоздатьДокумент() свойство Ссылка пустое?
Метод СоздатьДокумент() формирует объект только в памяти. Постоянный идентификатор присваивается платформой при записи в базу. До вызова Записать() свойство Ссылка всегда содержит пустую ссылку — это нормальное поведение, а не ошибка.
Как из строки с GUID получить ссылку на документ?
Создайте значение типа УникальныйИдентификатор из строки конструктором Новый УникальныйИдентификатор(СтрокаGUID), затем передайте его в Документы.ИмяДокумента.ПолучитьСсылку(UUID). После этого проверьте запросом, существует ли документ с такой ссылкой в базе.
Что такое битая ссылка и как её избежать?
Битая ссылка — ссылка, указывающая на несуществующий объект, например на удалённый документ. Она возникает при использовании ПолучитьСсылку() без проверки, откате транзакций и прямом удалении объектов. Избежать помогают проверка существования запросом и контроль целостности при удалении.
Чем ПолучитьСсылку() отличается от НайтиПоНомеру()?
НайтиПоНомеру() выполняет поиск в базе и возвращает ссылку только на существующий документ либо пустую ссылку. ПолучитьСсылку() не обращается к данным, а просто конструирует идентификатор — документ может при этом не существовать.
Можно ли изменить ссылку уже записанного документа?
Нет, ссылка записанного документа неизменна — это гарантия целостности базы. Если требуется документ с другим идентификатором, создаётся новый документ с нужной ссылкой через УстановитьСсылкуНового(), а старый помечается на удаление с последующим контролем ссылочной целостности.