Работа с ссылками на документы в 1С:Предприятие — одна из самых востребованных задач при разработке интеграций, отчетов и пользовательских интерфейсов. Часто требуется не просто получить объект документа, а именно его универсальную ссылку, которую можно передать по email, использовать в API или отобразить в веб-клиенте. В этой статье разберем все актуальные способы получения ссылок — от классических методов встроенного языка до современных подходов с REST и HTTP-Сервисами.

Особенность задачи в том, что понятие "ссылка" в многозначно: это может быть внутренний идентификатор для работы внутри базы, URL для веб-клиента, или универсальная ссылка для внешних систем. Мы рассмотрим все варианты с примерами кода и таблицей сравнения методов. Если вы разрабатываете интеграцию с внешними сервисами или создаете кастомный интерфейс — эта инструкция поможет избежать типичных ошибок и выбрать оптимальный подход.

Предупреждение для новичков: не путайте ссылку на документ (объект в базе) и гиперссылку (URL для веб-доступа). В толстом клиенте первые работают всегда, а вторые требуют настройки веб-сервера. Об этом — в разделе про Получение URL для веб-клиента.

1. Стандартный метод: Получение ссылки через встроенный язык

Самый простой способ — использовать метод Ссылка() объекта документа. Он возвращает внутреннюю ссылку, которую можно использовать для работы внутри , но не для внешних систем.

Пример кода для получения ссылки на текущий документ:

Док = Документы.ЗаказПокупателя.НайтиПоНомеру("000000001");

Если Не Док.Пустая() Тогда

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

Сообщить("Ссылка: " + СсылкаНаДокумент.УникальныйИдентификатор());

КонецЕсли;

Ключевые моменты:

  • 🔹 Метод Ссылка() работает для любых объектов метаданных (документы, справочники, регистры).
  • 🔹 Возвращаемая ссылка содержит УникальныйИдентификатор (UID) — это ключевое поле для поиска объекта в базе.
  • 🔹 Внутри такую ссылку можно передавать между формами, использовать в запросах и сравнениях.
💡

Если нужно получить ссылку на документ из формы, используйте свойство ЭтотОбъект.Ссылка — оно содержит текущую ссылку на объект формы.

Ограничение метода: такая ссылка не работает вне контекста 1С. Например, ее нельзя вставить в письмо или передать во внешнюю систему — она понятна только внутри платформы 1С:Предприятие.

2. Получение URL для веб-клиента

Если ваша база опубликована на веб-сервере (например, Apache или IIS с модулем 1C:Enterprise), можно сформировать прямую ссылку для открытия документа в браузере. Для этого используется системный механизм ПолучениеURLИзСсылки().

Пример кода:

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

URL = ПолучениеURLИзСсылки(СсылкаНаДокумент, "", Истина);

Сообщить("URL для веб-клиента: " + URL);

Разберем параметры функции:

  • 📌 СсылкаНаДокумент — внутренняя ссылка на документ (см. раздел 1).
  • 📌 Второй параметр — имя публикации (если пусто, берется текущая).
  • 📌 Третий параметр (Истина) — признак использования https (рекомендуется для безопасности).
Что делать если функция возвращает пустую строку?

Если ПолучениеURLИзСсылки() возвращает пусто, проверьте:

1. База опубликована на веб-сервере (в конфигураторе: Администрирование → Публикация на веб-сервере).

2. У пользователя есть права на доступ к документу через веб-интерфейс.

3. В настройках веб-сервера указан корректный виртуальный каталог для 1С.

⚠️ Внимание: Если ваша база работает в файловом варианте или не опубликована на веб-сервере, этот метод вернет пустую строку. Также URL может измениться при переносе базы на другой сервер — учитывайте это при разработке интеграций.

3. Универсальный идентификатор (UID) и его применение

Каждый объект в имеет уникальный идентификатор (UID) — это глобально уникальный код, который не меняется при переносе базы или реструктуризации. Его можно использовать для надежной идентификации документа в интеграциях.

Как получить UID:

Док = Документы.ПоступлениеТоваров.НайтиПоНомеру("ПТ-123");

UID = Док.УникальныйИдентификатор();

Сообщить("UID документа: " + UID); // Пример: "a1b2c3d4-5678-90ef-1234-567890abcdef"

Преимущества UID:

  • 🔐 Не зависит от номера или даты документа (в отличие от Номер и Дата).
  • 🔄 Сохраняется при выгрузке/загрузке данных через XML или JSON.
  • 🌍 Можно использовать для синхронизации с внешними системами (например, CRM или ERP).

Как найти документ по UID:

UID = Новый УникальныйИдентификатор("a1b2c3d4-5678-90ef-1234-567890abcdef");

Док = Документы.ПоступлениеТоваров.НайтиПоUID(UID);

📊 Какой метод идентификации документов вы используете чаще?
По номеру и дате
По UID
По ссылке (встроенный язык)
Через REST API

⚠️ Внимание: В старых версиях 1С:Предприятие 7.7 UID не поддерживался. Если вы работаете с унаследованными системами, используйте составной ключ из Номер + Дата + ТипДокумента.

4. Использование HTTP-Сервисов и REST API

Для современных интеграций оптимальный способ — использование HTTP-Сервисов или REST API. Это позволяет получать ссылки на документы в формате, понятном внешним системам (например, JSON).

Пример создания HTTP-сервиса для выдачи ссылок:

  1. В конфигураторе создайте новый объект HTTPСервис (раздел Общие → HTTP-Сервисы).
  2. Добавьте операцию ПолучитьСсылкуНаДокумент с параметрами ТипДокумента и Номер.
  3. Реализуйте логику поиска и возврата данных:
    Функция ПолучитьСсылкуНаДокумент(ТипДокумента, Номер) Экспорт
    

    Док = Документы[ТипДокумента].НайтиПоНомеру(Номер);

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

    Возврат Новый Структура("Успех, Ошибка", Ложь, "Документ не найден");

    Иначе

    URL = ПолучениеURLИзСсылки(Док.Ссылка());

    Возврат Новый Структура("Успех, URL, UID",

    Истина,

    URL,

    Док.УникальныйИдентификатор());

    КонецЕсли;

    КонецФункции;

  4. Опубликуйте сервис в модуле приложения:
    ПараметрыПубликации = Новый Структура();
    

    ПараметрыПубликации.Вставить("Адрес", "/hs/document/link");

    ПубликоватьHTTPСервис(ПараметрыПубликации, Новый ОписаниеТипов("КаталогHTTPСервисов.МойСервисДляСсылок"));

Теперь внешняя система может отправлять GET-запрос вида:

https://ваш-сервер/1c-hs/document/link?type=ЗаказПокупателя&number=000000001

и получать ответ:

{

"Успех": true,

"URL": "https://ваш-сервер/1c-ru/ru_RU?ref=7a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d#ЗаказПокупателя/000000001",

"UID": "7a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d"

}

Создать объект HTTPСервис в конфигураторе|Добавить операцию с параметрами ТипДокумента и Номер|Реализовать логику поиска документа|Опубликовать сервис в модуле приложения|Проверить права доступа для пользователей-->

⚠️ Внимание: При публикации HTTP-сервиса убедитесь, что:

  1. На веб-сервере настроен HTTPS (обязательно для безопасности!).
  2. В настройках разрешено использование HTTP-Сервисов (параметр разрешить_вызов_внешних_веб_сервисов в файле конфигурации).
  3. Пользователь, от имени которого работает сервис, имеет права на чтение документов.

Если стандартные методы не подходят (например, нужна ссылка в нетипичном формате), можно использовать внешние компоненты или библиотеку DirectLink.

Популярные решения:

Метод Описание Когда использовать
1C:DirectLink Библиотека для работы с через COM-соединение. Позволяет получать ссылки из внешних приложений (например, C# или Python). Интеграция с Windows-приложениями, когда нужна высокая производительность.
REST API через расширение Самостоятельная разработка REST-интерфейса с использованием расширений конфигурации. Если требуется гибкая логика формирования ссылок (например, с дополнительными параметрами).
WebHooks Настройка уведомлений о событиях (создание/изменение документа) с передачей ссылки во внешнюю систему. Для автоматической синхронизации (например, отправка ссылки в Telegram-бот при проведении документа).

Пример использования DirectLink на C#:

// Подключение к базе

var connection = new V8Connection("File=C:\\Bases\\MyBase;Usr=Администратор;Pwd=;");

connection.Connect();

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

var docRef = connection.NewObject("ДокументСсылка.ЗаказПокупателя.000000001");

var uid = docRef.UniqueID();

var url = connection.GetURLFromReference(docRef);

⚠️ Внимание: Внешние компоненты требуют дополнительной настройки безопасности. Всегда проверяйте:

  • 🔒 Права доступа к базе через COM-соединение (настройка в 1cv81c.dll).
  • 🛡️ Наличие антивирусного исключения для рабочего каталога .
  • 🔄 Совместимость версии библиотеки с вашей платформой (например, DirectLink не поддерживает 1С:Предприятие 8.3.20+ без обновления).

6. Практические примеры и типичные ошибки

Рассмотрим реальные сценарии и распространенные проблемы при работе со ссылками.

Пример 1: Получение ссылки для email-рассылки

Задача: отправить клиенту письмо со ссылкой на его заказ.

Решение:

// 1. Получаем документ

Заказ = Документы.ЗаказПокупателя.НайтиПоНомеру("000000001");

// 2. Формируем URL для веб-клиента

URL = ПолучениеURLИзСсылки(Заказ.Ссылка(), "", Истина);

// 3. Отправляем письмо

ТекстПисьма = "Ваш заказ №" + Заказ.Номер + " от " + Формат(Заказ.Дата, "ДФ=dd.MM.yyyy") + "

Ссылка для просмотра: " + URL;

ОтправитьПисьмо("client@example.com", "Ваш заказ №" + Заказ.Номер, ТекстПисьма);

Пример 2: Интеграция с CRM через REST

Задача: передать в Bitrix24 ссылку на документ при создании лида.

Решение:

// 1. Получаем UID документа

UID = Док.УникальныйИдентификатор();

// 2. Формируем JSON для API Bitrix24

ДанныеДляCRM = Новый Структура();

ДанныеДляCRM.Вставить("TITLE", "Заказ №" + Док.Номер);

ДанныеДляCRM.Вставить("SOURCE", "1С");

ДанныеДляCRM.Вставить("UF_CRM_15_DOCUMENT_UID", UID); // Поле для хранения UID

// 3. Отправляем данные

HTTPЗапрос = Новый HTTPЗапрос("https://your-bitrix24.bitrix24.ru/rest/1/abcdefghijklmnop/crm.lead.add");

HTTPЗапрос.УстановитьТелоИзСтроки(СериализоватьJSON(ДанныеДляCRM));

Ответ = Новый HTTPСоединение().Получить(HTTPЗапрос);

Типичные ошибки и решения:

  • Ошибка: ПолучениеURLИзСсылки() возвращает пусто.
    Решение: Проверьте публикацию базы на веб-сервере и права пользователя.
  • Ошибка: Ссылка ведет на страницу авторизации.
    Решение: Включите анонимный доступ или передавайте токен авторизации в URL.
  • Ошибка: UID не находится после выгрузки/загрузки данных.
    Решение: Используйте ЗагрузкаДанныхXML с параметром ЗагружатьУникальныеИдентификаторы = Истина.
💡

Всегда проверяйте формат ссылок при интеграции с внешними системами. Например, Bitrix24 ожидает UID в формате строки без дефисов, а некоторые CRM требуют URL с токеном доступа.

7. Сравнение методов: какой выбрать?

Выбор метода зависит от задачи. Ниже таблица сравнения с рекомендациями:

Метод Формат ссылки Где работает Сложность реализации Когда использовать
Ссылка() Внутренняя ссылка Только внутри ⭐ (просто) Работа с документами в базе, передача между формами.
ПолучениеURLИзСсылки() URL для веб-клиента Только для опубликованных баз ⭐⭐ Отправка ссылок по email, открытие в браузере.
УникальныйИдентификатор() UID (GUID) Любые интеграции Синхронизация с внешними системами, резервное копирование.
HTTP-Сервис JSON/XML с URL и UID Для внешних систем ⭐⭐⭐ API для мобильных приложений, CRM, ERP.
DirectLink Любой формат Внешние Windows-приложения ⭐⭐⭐⭐ Высокопроизводительные интеграции с C#/Python.

Рекомендации по выбору:

  • 🔧 Для внутренних задач (отчеты, обработки) хватит Ссылка().
  • 🌐 Для веб-доступа используйте ПолучениеURLИзСсылки().
  • 🤝 Для интеграций с внешними системами оптимален UID + HTTP-Сервис.
  • 🚀 Для сложных сценариев (например, реального времени) — DirectLink или WebHooks.
📊 Какой метод вы используете для интеграции 1С с внешними системами?
UID + HTTP-Сервис
Прямой URL
Внешние компоненты (DirectLink)
Другой вариант

FAQ: Частые вопросы по работе со ссылками

Можно ли получить ссылку на документ из мобильного приложения 1С?

Да, но с ограничениями:

  • В мобильном клиенте работает ПолучениеURLИзСсылки(), но только если база опубликована на веб-сервере.
  • Для офлайн-работы используйте UID — его можно синхронизировать при следующем подключении.
  • В 1С:Мобильная платформа (нативные приложения) ссылки формируются через MobileAppURL.
Как передать ссылку на документ в Telegram-бот?

Оптимальный способ:

  1. Создайте HTTP-Сервис, который возвращает UID и краткую информацию о документе.
  2. В боте по команде /document запрашивайте у пользователя номер документа.
  3. Отправляйте UID в через API, получайте данные и формируйте сообщение с ссылкой.

Пример кода для бота (Python):

import requests

def get_document_link(doc_number):

response = requests.get(

f"https://your-1c-server/hs/document/link?type=ЗаказПокупателя&number={doc_number}",

auth=("user", "password")

)

return response.json()["URL"]

Почему после обновления платформы перестали работать ссылки?

Вероятные причины:

  • В 1С:Предприятие 8.3.18+ изменился формат UID для некоторых объектов. Проверьте актуальность методов.
  • При обновлении мог сброситься флаг ПубликоватьНаВебСервере в настройках базы.
  • В новых версиях по умолчанию может быть отключен протокол HTTP (требуется HTTPS).

Решение: проверьте настройки публикации в конфигураторе (Администрирование → Публикация на веб-сервере) и обновите код, если используете устаревшие методы (например, ПолучитьURLДокумента() вместо ПолучениеURLИзСсылки()).

Как защитить ссылки от несанкционированного доступа?

Меры безопасности:

  • 🔐 Используйте HTTPS для всех внешних ссылок.
  • 🛡️ Настройте проверку прав доступа в HTTP-Сервисе (например, по токену или IP).
  • 🔄 Для чувствительных данных (например, финансовые документы) генерируйте одноразовые ссылки с ограниченным временем жизни.
  • 📜 Ведите лог обращений к документам через внешние ссылки (модуль ЖурналРегистрации).

Пример кода для проверки токена:

Функция ПроверитьТокен(ЗапрошенныйТокен) Экспорт

ДопустимыеТокены = ПолучитьДопустимыеТокеныИзБазы(); // Например, из регистра сведений

Возврат ДопустимыеТокены.Найти(ЗапрошенныйТокен) <> Неопределено;

КонецФункции;

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

Да, для этого:

  1. В схеме компоновки данных отчета добавьте поле типа Ссылка.
  2. В настройках поля укажите выражение вида ВЫБРАТЬ Документ.Ссылка КАК СсылкаНаДокумент.
  3. Для вывода в HTML/Excel используйте функцию ПолучениеURLИзСсылки() в обработчике ПриКомпоновкеРезультата.

Пример для вывода в Excel:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

Для Каждого Строка Из ДокументРезультат.ВыбранныеСтроки Цикл

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

Строка.URL = ПолучениеURLИзСсылки(Строка.СсылкаНаДокумент);

КонецЕсли;

КонецЦикла;

КонецПроцедуры;