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

В этой статье мы разберём все актуальные способы создания ссылок в 1С 8.3, включая программное формирование URL, работу с гиперссылками в формах, динамическое изменение адресов в отчётах и даже интеграцию с внешними сервисами через API. Особое внимание уделим типичным ошибкам, которые приводят к неработающим ссылкам, и нюансам безопасности при открытии внешних ресурсов из базы.

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

📊 Для чего вам нужны ссылки в 1С?
Открывать документы в базе
Переходить на внешние сайты
Интеграция с другими системами
Формировать отчёты с кликабельными данными
Другое

1. Простые гиперссылки в формах 1С

Самый очевидный способ добавить ссылку в — использовать элемент управления «Поле гиперссылки» (ПолеHTMLДокумента или ПолеГиперссылки в зависимости от версии). Этот метод подходит для статичных ссылок, которые не меняются в процессе работы программы.

Чтобы добавить такую ссылку:

  • 📌 Откройте форму в режиме редактирования (Конфигуратор → Объекты → Формы).
  • 🔧 Перетащите элемент «Поле гиперссылки»** на форму из палитры элементов.
  • 🔗 В свойствах элемента укажите Гиперссылка (например, "https://example.com") и Заголовок (текст, который будет отображаться пользователю).
  • 🎨 При необходимости настройте шрифт, цвет и другие визуальные параметры.

Пример кода для динамического изменения ссылки прямо в форме:

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ЭлементыФормы.МояСсылка.Гиперссылка = "https://1c.ru" + ?(ЭтоТонкийКлиент(), "?thin=1", "");

ЭлементыФормы.МояСсылка.Заголовок = "Перейти на сайт 1С (" + ТипКлиентскогоПриложения() + ")";

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

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

2. Динамические ссылки с параметрами

Часто требуется формировать ссылки «на лету», подставляя в них данные из базы. Например, сгенерировать URL для перехода к карточке клиента в CRM-системе или передать идентификатор документа во внешний сервис.

Для этого используйте функцию СтрЗначениеВВebЦвет() (для кодирования параметров) и конкатенацию строк. Пример:

Функция ПолучитьСсылкуНаДокумент(СсылкаНаДокумент)

БазовыйURL = "https://crm.example.com/doc?id=";

Идентификатор = СтрЗначениеВВebЦвет(СсылкаНаДокумент.УникальныйИдентификатор());

Возврат БазовыйURL + Идентификатор + "&source=1c";

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

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

Процедура НадписьПриНажатии(Элемент)

URL = ПолучитьСсылкуНаДокумент(ТекущийДокумент);

ОткрытьURL(URL); // Встроенная процедура для открытия ссылок

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

Метод кодирования Пример использования Когда применять
СтрЗначениеВВebЦвет() СтрЗначениеВВebЦвет("Привет мир!")"%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82+%D0%BC%D0%B8%D1%80!" Для передачи кириллических символов и пробелов в URL
URLДокумента() URLДокумента(СсылкаНаДокумент)"1c://document/12345" Для внутренних ссылок на объекты 1С (работает только в тонком/толстом клиенте)
Base64Строка() Base64Строка("секретный_ключ") Для передачи зашифрованных параметров в API-запросах
💡

Если ваша ссылка ведёт на внешний ресурс, всегда предупреждайте пользователя об этом. Добавьте всплывающее окно с подтверждением или иконку 🌐 рядом с гиперссылкой.

3. Ссылки в табличных документах и печатных формах

В отчётах и печатных формах ссылки добавляются через области табличного документа с типом ТипОбласти.Гиперссылка. Это позволяет сделать кликабельными отдельные ячейки, строки или даже графические элементы (например, логотипы).

Пример кода для добавления ссылки в ячейку табличного документа:

Процедура СформироватьОтчет(Таблица)

Область = Таблица.Область(1, 1, 1, 1); // Ячейка A1

Область.Тип = ТипОбласти.Гиперссылка;

Область.Гиперссылка = "https://example.com/report?id=" + ТекущийОтчет.Ид;

Область.Текст = "Открыть детализацию отчёта";

Область.ЦветТекста = RGB(0, 0, 255); // Синий цвет для ссылки

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

Для динамического формирования ссылок в больших отчётах используйте цикл по строкам:

Для Каждого Строка Из Таблица.ВыделенныеСтроки Цикл

Область = Таблица.Область(Строка.НомерСтроки, 5); // 5-й столбец

Область.Тип = ТипОбласти.Гиперссылка;

Область.Гиперссылка = ПолучитьURLДляСтроки(Строка.Данные);

Область.Текст = "Подробнее";

КонецЦикла;

⚠️ Внимание: В печатных формах, экспортируемых в PDF, гиперссылки сохранятся только если использовать специализированные библиотеки (например, 1C:PDF или iText). Стандартный экспорт в PDF через ТабличныйДокумент.ЗаписатьPDF() не поддерживает кликабельные ссылки.

Используйте относительные пути для внутренних ссылок|Тестируйте отображение в разных клиентах (тонкий/веб)|Проверяйте кодировку параметров в URL|Добавляйте подсказки при наведении на ссылку (Область.Подсказка = "...")-->

4. Программное открытие ссылок и работа с протоколом 1c://

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

Формат ссылки:

1c://{имя_базы}/{тип_объекта}/{идентификатор}

Примеры:

1c://demo/catalog/12345 // Открыть элемент справочника

1c://demo/document/67890 // Открыть документ

1c://demo/report/sales?date=2026-01-01 // Открыть отчёт с параметрами

Чтобы сгенерировать такую ссылку из кода 1С:

Функция ПолучитьВнутреннююСсылку(Объект)

База = ?(ПустаяСтрока(ИмяБазыДанных()), "default", ИмяБазыДанных());

ТипОбъекта = ТипЗнч(Объект).ИмяТипа;

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

Возврат "1c://" + База + "/" + НРег(ТипОбъекта) + "/" + Ид;

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

Для обработки входящих ссылок (например, при открытии 1С из браузера) используйте обработчик события ПриНачалеРаботыСистемы в главном модуле:

Процедура ПриНачалеРаботыСистемы()

Если ПараметрыСеанса.Глобальный.СсылкаНеОбработана Тогда

Ссылка = ПараметрыСеанса.Глобальный.КоманднаяСтрока;

Если НРег(Лев(Ссылка, 5)) = "1C://" Тогда

ОбработатьВнутреннююСсылку(Строка(Ссылка));

КонецЕсли;

КонецЕсли;

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

Как проверить поддержку протокола 1c

// в браузере?:

1. Создайте HTML-файл с тестовой ссылкой: <a href="1c://demo">Тест</a>

2. Откройте файл в браузере и кликните по ссылке.

3. Если 1С открывается — протокол зарегистрирован корректно. Если нет, проверьте настройки реестра Windows или используйте утилиту 1CEstart для регистрации протокола.

5. Безопасность при работе со ссылками

Открытие внешних ссылок из может быть опасно: злоумышленники часто используют фишинговые URL для кражи данных. Чтобы минимизировать риски:

  • 🔒 Ограничивайте домены. Создайте список разрешённых доменов в настройках программы и проверяйте все исходящие ссылки через функцию:
  • Функция ДоменРазрешён(URL)
    

    РазрешённыеДомены = Новый Массив;

    РазрешённыеДомены.Добавить("1c.ru");

    РазрешённыеДомены.Добавить("example.com");

    Домен = СтрЗначениеВРегистре(РегулярныеВыражения.Найти(URL, "https?://([^/]+)"), 1);

    Возврат РазрешённыеДомены.Найти(Домен) <> Неопределён;

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

  • 🛡️ Используйте подтверждение. Перед открытием внешней ссылки показывайте пользователю диалог с предупреждением и полным адресом:
  • Процедура ОткрытьURLБезопасно(URL)
    

    Если НЕ ДоменРазрешён(URL) Тогда

    Если Вопрос("Вы действительно хотите открыть внешнюю ссылку: " + URL + "?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда

    ОткрытьURL(URL);

    КонецЕсли;

    Иначе

    ОткрытьURL(URL);

    КонецЕсли;

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

  • 🔄 Логируйте переходы. Ведите журнал открытых ссылок для аудита (особенно важно для предприятий с высокими требованиями к безопасности).
⚠️ Внимание: В веб-клиенте некоторые методы работы со ссылками могут быть заблокированы политиками безопасности браузера (CSP). Например, открытие новых окон через window.open часто блокируется как поп-ап. В таких случаях используйте ОткрытьURL() с флагом НовыйСеанс = Ложь.

6. Интеграция с внешними сервисами через API

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

  • 📊 Авторизации через OAuth (например, для интеграции с Google Drive или Яндекс.Диском).
  • 📦 Загрузки файлов в облачные хранилища (с предварительно сгенерированной подписью).
  • 📈 Передачи данных в аналитические системы (например, Power BI или Tableau).
  • 💳 Оплаты через платежные шлюзы (с формированием чека и возвратом статуса).

Пример формирования ссылки для OAuth-авторизации в Google API:

Функция ПолучитьURLАвторизацииGoogle(КлиентID, РедиректURI, ОбластиДоступа)

БазовыйURL = "https://accounts.google.com/o/oauth2/v2/auth";

Параметры = Новый Структура;

Параметры.Вставить("client_id", КлиентID);

Параметры.Вставить("redirect_uri", РедиректURI);

Параметры.Вставить("response_type", "code");

Параметры.Вставить("scope", ОбластиДоступа);

Параметры.Вставить("access_type", "offline");

Параметры.Вставить("prompt", "consent");

Возврат БазовыйURL + "?" + СтроковыеФункцииКлиентСервер.СериализоватьПараметрыСтрокиЗапроса(Параметры);

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

Для обработки ответа от платежного шлюза (например, после оплаты) используйте веб-сервис на стороне 1С:

Процедура ОбработатьВозвратОтПлатежногоШлюза(Запрос) Экспорт

Параметры = РазобратьПараметрыЗапроса(Запрос.ТелоКакСтрока);

Если Параметры.СодержитКлюч("status") И Параметры.status = "success" Тогда

НайтиИОбработатьЗаказ(Параметры.order_id);

КонецЕсли;

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

💡

При интеграции с внешними сервисами всегда используйте HTTPS, проверяйте сертификаты и реализуйте механизм проверки подписи запросов (например, через HMAC).

7. Типичные ошибки и их решения

Даже опытные разработчики сталкиваются с проблемами при работе со ссылками в . Вот наиболее распространённые ошибки и способы их исправления:

Ошибка Причина Решение
Ссылка не открывается в веб-клиенте Браузер блокирует поп-апы или отсутствует обработчик 1c:// Используйте ОткрытьURL(URL, Ложь) или настройте CSP заголовки на сервере
Кириллические символы в URL отображаются кракозябрами Не используется кодировка UTF-8 или URLEncode Применяйте СтрЗначениеВВebЦвет() для всех динамических параметров
Внутренние ссылки 1c:// не работают после обновления платформы Изменился формат идентификаторов объектов Используйте УникальныйИдентификатор().УникальныйИдентификатор вместо Ссылка.УникальныйИдентификатор()
Ссылки в PDF не кликабельные Стандартный экспорт не поддерживает гиперссылки Используйте библиотеку iTextSharp или 1C:PDF для генерации PDF

Если ссылка ведёт на внутренний ресурс (например, на документ в базе), но открывается в новой вкладке браузера вместо клиента 1С, проверьте:

  1. Настройки интеграции с браузером (Администрирование → Настройки программы → Интеграция).
  2. Регистрацию протокола 1c:// в реестре Windows (для толстого клиента).
  3. Правильность формирования URL (должен начинаться с 1c://, а не http://).

8. Продвинутые техники: генерация QR-кодов и коротких ссылок

Для удобства пользователей можно автоматически генерировать QR-коды со ссылками или использовать сервисы сокращения URL (например, bit.ly или cutt.ly). Это актуально для:

  • 📱 Быстрого доступа к документам со смартфонов (например, QR-код на печатной форме накладной).
  • 📋 Компактного отображения длинных URL в отчётах.
  • 📊 Отслеживания переходов (если используете сервис с аналитикой).

Пример генерации QR-кода со ссылкой на документ:

Процедура СформироватьQRКод(СсылкаНаДокумент, КартинкаQR)

URL = ПолучитьВнутреннююСсылку(СсылкаНаДокумент);

// Используем внешнюю компоненту или HTTP-сервис для генерации QR

Запрос = Новый HTTPЗапрос("https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=" + СтрЗначениеВВebЦвет(URL));

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

КартинкаQR.Загрузить(Ответ.ПолучитьТелоКакДвоичныеДанные());

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

Для сокращения ссылок можно использовать API bit.ly:

Функция СократитьСсылку(ДлинныйURL, ТокенBitly)

Запрос = Новый HTTPЗапрос("/v4/shorten");

Запрос.УстановитьЗаголовок("Authorization", "Bearer " + ТокенBitly);

Запрос.УстановитьЗаголовок("Content-Type", "application/json");

Запрос.УстановитьТело(Новый ЗаписьJSON;

ЗаписьJSON.Установить("long_url", ДлинныйURL);

ЗаписьJSON.Записать());

Соединение = Новый HTTPСоединение("api-ssl.bitly.com", 443, Истина);

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

Данные = JSON.Прочитать(Ответ.ПолучитьТелоКакСтроку());

Возврат Данные.link;

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

⚠️ Внимание: При использовании внешних сервисов для генерации QR-кодов или сокращения ссылок убедитесь, что они соответствуют требованиям вашей компании по защите данных. Не передавайте конфиденциальную информацию в открытом виде.
💡

Для генерации QR-кодов прямо в 1С без внешних сервисов можно использовать компоненту "Barcode1D2D" или библиотеку "ZXing" через Native API.

FAQ: Частые вопросы по ссылкам в 1С

Как сделать ссылку на документ, которая будет работать и в тонком, и в веб-клиенте?

Используйте универсальный формат с проверкой типа клиента:

Функция ПолучитьУниверсальнуюСсылку(СсылкаНаДокумент)

Если ЭтоВебКлиент() Тогда

Возврат "/ru_RU/enterprise#" + СтрЗначениеВВebЦвет(СсылкаНаДокумент.УникальныйИдентификатор());

Иначе

Возврат "1c://" + ИмяБазыДанных() + "/document/" + СсылкаНаДокумент.УникальныйИдентификатор().УникальныйИдентификатор;

КонецЕсли;

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

В веб-клиенте ссылка откроется в текущей вкладке, в тонком — запустит 1С с нужным документом.

Почему при клике на ссылку в отчёте ничего не происходит?

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

  1. Область не имеет типа ТипОбласти.Гиперссылка.
  2. В веб-клиенте отсутствует обработчик кликов (проверьте настройки ТабличныйДокумент.ТолькоПросмотр = Ложь).
  3. URL содержит недопустимые символы (используйте СтрЗначениеВВebЦвет()).
  4. В браузере блокируются поп-апы (для веб-клиента).

Решение: добавьте отладочный вывод перед открытием ссылки, чтобы убедиться, что URL формируется корректно.

Можно ли в 1С сделать ссылку, которая откроет файл на диске?

Да, но с оговорками:

  • В толстом клиенте можно использовать ОткрытьФайл(ПутьКФайлу).
  • В тонком/веб-клиенте прямой доступ к файловой системе заблокирован. Альтернативы:
    • Загрузите файл на сервер и дайте ссылку на скачивание.
    • Используйте 1c:// протокол с обработчиком, который откроет файл через локальное приложение.

Пример для толстого клиента:

Процедура ОткрытьФайлНаДиске(Путь)

Если НЕ ЭтоВебКлиент() И НЕ ЭтоТонкийКлиент() Тогда

ОткрытьФайл(Путь);

Иначе

Предупреждение("Открытие локальных файлов недоступно в этом режиме!");

КонецЕсли;

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

Как передать параметры в ссылке, если они содержат сложные данные (массивы, структуры)?

Для передачи сложных данных:

  1. Сериализуйте данные в JSON или Base64:
  2. Параметры = Новый Структура;
    

    Параметры.Вставить("Фильтр", Новый Структура("ДатаНачала,ДатаКонца", НачалоПериода, КонецПериода));

    ПараметрыJSON = JSON.Записать(Параметры);

    URL = "https://example.com/report?params=" + Base64Строка(ПараметрыJSON);

  3. На стороне получателя десериализуйте данные:
  4. ПараметрыJSON = Base64Значение(ПараметрыИзURL.params);
    

    Параметры = JSON.Прочитать(ПараметрыJSON);

Для больших объёмов данных лучше использовать временное хранилище (например, ПоместитьВоВременноеХранилище()) и передавать только идентификатор.

Как отследить, перешёл ли пользователь по ссылке?

Способы отслеживания:

  • 📌 Журналирование: Ведите лог переходов в регистре сведений или отдельном документе.
  • 📊 Внешние сервисы: Используйте сокращатели ссылок (например, bit.ly) с аналитикой.
  • 🔄 Обратный вызов: Для внутренних ссылок (1c://) добавляйте параметр ?track=1 и обрабатывайте его при открытии.

Пример кода для журналирования:

Процедура ОткрытьСсылкуСОтслеживанием(URL, Пользователь, ТипСсылки)

ЗаписьЛога = Документы.ЛогПереходов.СоздатьДокумент();

ЗаписьЛога.URL = URL;

ЗаписьЛога.Пользователь = Пользователь;

ЗаписьЛога.Тип = ТипСсылки;

ЗаписьЛога.ДатаВремя = ТекущаяДата();

ЗаписьЛога.Записать();

ОткрытьURL(URL);

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