Создание ссылок в 1С:Предприятие — задача, с которой сталкиваются и начинающие разработчики, и опытные программисты. В зависимости от контекста ссылка может вести на внешний ресурс, открывать документ в базе, запускать обработку или даже передавать параметры между формами. Главная сложность заключается в разнообразии инструментов платформы: здесь нет универсального метода, а выбор способа зависит от версии 1С, типа клиента (тонкий/толстый/веб) и конечной цели.
В этой статье мы разберём все актуальные способы создания ссылок в 1С 8.3, включая программное формирование URL, работу с гиперссылками в формах, динамическое изменение адресов в отчётах и даже интеграцию с внешними сервисами через API. Особое внимание уделим типичным ошибкам, которые приводят к неработающим ссылкам, и нюансам безопасности при открытии внешних ресурсов из базы.
Если вы ищете способ вставить кликабельную ссылку в печатную форму, добавить гиперссылку в табличный документ или сгенерировать URL для обмена данными между системами — здесь найдёте готовые решения с примерами кода и пояснениями.
1. Простые гиперссылки в формах 1С
Самый очевидный способ добавить ссылку в 1С — использовать элемент управления «Поле гиперссылки» (ПолеHTMLДокумента или ПолеГиперссылки в зависимости от версии). Этот метод подходит для статичных ссылок, которые не меняются в процессе работы программы.
Чтобы добавить такую ссылку:
- 📌 Откройте форму в режиме редактирования (
Конфигуратор → Объекты → Формы). - 🔧 Перетащите элемент «Поле гиперссылки»** на форму из палитры элементов.
- 🔗 В свойствах элемента укажите
Гиперссылка(например,"https://example.com") иЗаголовок(текст, который будет отображаться пользователю). - 🎨 При необходимости настройте шрифт, цвет и другие визуальные параметры.
Пример кода для динамического изменения ссылки прямо в форме:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементыФормы.МояСсылка.Гиперссылка = "https://1c.ru" + ?(ЭтоТонкийКлиент(), "?thin=1", "");
ЭлементыФормы.МояСсылка.Заголовок = "Перейти на сайт 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. Безопасность при работе со ссылками
Открытие внешних ссылок из 1С может быть опасно: злоумышленники часто используют фишинговые URL для кражи данных. Чтобы минимизировать риски:
- 🔒 Ограничивайте домены. Создайте список разрешённых доменов в настройках программы и проверяйте все исходящие ссылки через функцию:
Функция ДоменРазрешён(URL)
РазрешённыеДомены = Новый Массив;
РазрешённыеДомены.Добавить("1c.ru");
РазрешённыеДомены.Добавить("example.com");
Домен = СтрЗначениеВРегистре(РегулярныеВыражения.Найти(URL, "https?://([^/]+)"), 1);
Возврат РазрешённыеДомены.Найти(Домен) <> Неопределён;
КонецФункции
Процедура ОткрытьURLБезопасно(URL)
Если НЕ ДоменРазрешён(URL) Тогда
Если Вопрос("Вы действительно хотите открыть внешнюю ссылку: " + URL + "?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
ОткрытьURL(URL);
КонецЕсли;
Иначе
ОткрытьURL(URL);
КонецЕсли;
КонецПроцедуры
⚠️ Внимание: В веб-клиенте 1С некоторые методы работы со ссылками могут быть заблокированы политиками безопасности браузера (CSP). Например, открытие новых окон черезwindow.openчасто блокируется как поп-ап. В таких случаях используйтеОткрытьURL()с флагомНовыйСеанс = Ложь.
6. Интеграция с внешними сервисами через API
Ссылки в 1С не ограничиваются простым открытием страниц — они могут использоваться для обмена данными с внешними системами. Например, вы можете сгенерировать 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. Типичные ошибки и их решения
Даже опытные разработчики сталкиваются с проблемами при работе со ссылками в 1С. Вот наиболее распространённые ошибки и способы их исправления:
| Ошибка | Причина | Решение |
|---|---|---|
| Ссылка не открывается в веб-клиенте | Браузер блокирует поп-апы или отсутствует обработчик 1c:// |
Используйте ОткрытьURL(URL, Ложь) или настройте CSP заголовки на сервере |
| Кириллические символы в URL отображаются кракозябрами | Не используется кодировка UTF-8 или URLEncode |
Применяйте СтрЗначениеВВebЦвет() для всех динамических параметров |
Внутренние ссылки 1c:// не работают после обновления платформы |
Изменился формат идентификаторов объектов | Используйте УникальныйИдентификатор().УникальныйИдентификатор вместо Ссылка.УникальныйИдентификатор() |
| Ссылки в PDF не кликабельные | Стандартный экспорт не поддерживает гиперссылки | Используйте библиотеку iTextSharp или 1C:PDF для генерации PDF |
Если ссылка ведёт на внутренний ресурс (например, на документ в базе), но открывается в новой вкладке браузера вместо клиента 1С, проверьте:
- Настройки интеграции с браузером (
Администрирование → Настройки программы → Интеграция). - Регистрацию протокола
1c://в реестре Windows (для толстого клиента). - Правильность формирования 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С с нужным документом.
Почему при клике на ссылку в отчёте ничего не происходит?
Вероятные причины:
- Область не имеет типа
ТипОбласти.Гиперссылка. - В веб-клиенте отсутствует обработчик кликов (проверьте настройки
ТабличныйДокумент.ТолькоПросмотр = Ложь). - URL содержит недопустимые символы (используйте
СтрЗначениеВВebЦвет()). - В браузере блокируются поп-апы (для веб-клиента).
Решение: добавьте отладочный вывод перед открытием ссылки, чтобы убедиться, что URL формируется корректно.
Можно ли в 1С сделать ссылку, которая откроет файл на диске?
Да, но с оговорками:
- В толстом клиенте можно использовать
ОткрытьФайл(ПутьКФайлу). - В тонком/веб-клиенте прямой доступ к файловой системе заблокирован. Альтернативы:
- Загрузите файл на сервер и дайте ссылку на скачивание.
- Используйте
1c://протокол с обработчиком, который откроет файл через локальное приложение.
Пример для толстого клиента:
Процедура ОткрытьФайлНаДиске(Путь)
Если НЕ ЭтоВебКлиент() И НЕ ЭтоТонкийКлиент() Тогда
ОткрытьФайл(Путь);
Иначе
Предупреждение("Открытие локальных файлов недоступно в этом режиме!");
КонецЕсли;
КонецПроцедуры
Как передать параметры в ссылке, если они содержат сложные данные (массивы, структуры)?
Для передачи сложных данных:
- Сериализуйте данные в
JSONилиBase64: - На стороне получателя десериализуйте данные:
Параметры = Новый Структура;
Параметры.Вставить("Фильтр", Новый Структура("ДатаНачала,ДатаКонца", НачалоПериода, КонецПериода));
ПараметрыJSON = JSON.Записать(Параметры);
URL = "https://example.com/report?params=" + Base64Строка(ПараметрыJSON);
ПараметрыJSON = Base64Значение(ПараметрыИзURL.params);
Параметры = JSON.Прочитать(ПараметрыJSON);
Для больших объёмов данных лучше использовать временное хранилище (например, ПоместитьВоВременноеХранилище()) и передавать только идентификатор.
Как отследить, перешёл ли пользователь по ссылке?
Способы отслеживания:
- 📌 Журналирование: Ведите лог переходов в регистре сведений или отдельном документе.
- 📊 Внешние сервисы: Используйте сокращатели ссылок (например, bit.ly) с аналитикой.
- 🔄 Обратный вызов: Для внутренних ссылок (
1c://) добавляйте параметр?track=1и обрабатывайте его при открытии.
Пример кода для журналирования:
Процедура ОткрытьСсылкуСОтслеживанием(URL, Пользователь, ТипСсылки)
ЗаписьЛога = Документы.ЛогПереходов.СоздатьДокумент();
ЗаписьЛога.URL = URL;
ЗаписьЛога.Пользователь = Пользователь;
ЗаписьЛога.Тип = ТипСсылки;
ЗаписьЛога.ДатаВремя = ТекущаяДата();
ЗаписьЛога.Записать();
ОткрытьURL(URL);
КонецПроцедуры