Как открыть конкретную карточку объекта в веб-клиенте 1С по клику со стороннего сайта?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Структура внешней навигационной ссылки платформы 1С

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

Рассмотрим типовой формат внешней навигационной ссылки на карточку справочника:

http://адрес_сервера/имя_публикации/#e1cib/data/Справочник.Контрагенты?ref=ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ

Разберем подробнее, что означает параметр ref. В значении ref передается шестнадцатеричное представление уникального идентификатора ссылки объекта (GUID), записанное слитно, без дефисов. Если пользователь переходит по такой ссылке, веб-клиент запускается и сразу открывает основную форму объекта.

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

Способ 1. Получение навигационной ссылки средствами платформы

Если нам необходимо сформировать ссылку внутри самой конфигурации 1С, выясним, какие методы платформы для этого предназначены:

  1. Метод ПолучитьНавигационнуюСсылку() возвращает внутреннюю ссылку (начинающуюся с префикса e1cib/data/).
  2. Метод ПолучитьВнешнююНавигационнуюСсылку() формирует полный URL, автоматически подставляя адрес публикации из параметров информационной базы.

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


// Получаем ссылку на конкретного контрагента
СсылкаНаОбъект = Справочники.Контрагенты.НайтиПоКоду("000000001");
Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
    // Получаем полный URL для веб-клиента
    ПолнаяСсылка = ПолучитьВнешнююНавигационнуюСсылку(СсылкаНаОбъект);
КонецЕсли;

Способ 2. Поиск по коду через промежуточный HTTP-сервис

На практике внешний сайт часто оперирует только текстовым кодом или артикулом, не зная внутреннего GUID объекта 1С. Генерировать параметр ref вручную на стороне внешнего сайта сложно, так как стандартный формат GUID (RFC 4122) отличается порядком байтов от внутреннего двоичного представления ссылки 1С.

В этом случае надежнее всего использовать связку с легким HTTP-сервисом на стороне 1С. Разберем по шагам, как работает эта схема:

  1. Пользователь на сайте нажимает кнопку открытия карточки контрагента.
  2. Сайт отправляет фоновый асинхронный запрос к HTTP-сервису 1С, передавая код контрагента в параметрах.
  3. HTTP-сервис выполняет поиск контрагента по коду и получает его навигационную ссылку.
  4. HTTP-сервис возвращает готовую ссылку сайту, и браузер открывает полученный URL в новой вкладке.

Посмотрим на пример реализации метода HTTP-сервиса в 1С:


Функция ПолучитьСсылкуПоКоду(Запрос)
    КодКонтрагента = Запрос.ПараметрыЗапроса.Получить("code");
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    
    СсылкаНаКонтрагента = Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента);
    Если ЗначениеЗаполнено(СсылкаНаКонтрагента) Тогда
        ВнешняяСсылка = ПолучитьВнешнююНавигационнуюСсылку(СсылкаНаКонтрагента);
        ТелоОтвета = Новый Структура("success, url", Истина, ВнешняяСсылка);
    Иначе
        Ответ.КодСостояния = 404;
        ТелоОтвета = Новый Структура("success, error", Ложь, "Контрагент не найден");
    КонецЕсли;
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ТелоОтвета);
    Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
    
    Возврат Ответ;
КонецФункции

Способ 3. Передача параметра запуска (без предварительных запросов)

Если мы хотим переходить по ссылке в один клик без промежуточных обращений к веб-сервисам, проанализируем механизм передачи параметра запуска C в адресной строке веб-клиента.

Внешний сайт формирует прямой URL вида:

http://адрес_сервера/имя_публикации/?C=КОД_КОНТРАГЕНТА

Далее настроим обработку этого параметра в модуле управляемого приложения конфигурации 1С. При старте сеанса проверяем системную переменную ПараметрЗапуска:


Процедура ПриНачалеРаботыСистемы()
    Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда
        НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду(ПараметрЗапуска);
        Если ЗначениеЗаполнено(НайденныйКонтрагент) Тогда
            ПараметрыОткрытия = Новый Структура("Ключ", НайденныйКонтрагент);
            ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыОткрытия);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Этот способ позволяет сразу открыть карточку в интерфейсе веб-клиента, передавая идентификатор любой сущности непосредственно через параметры строки запроса.

Практические рекомендации и ограничения

Разберем важные эксплуатационные моменты при организации перехода в веб-клиент из внешних систем:

  1. Расход клиентских лицензий: каждый переход по внешней ссылке открывает новую вкладку браузера. Каждая новая вкладка веб-клиента 1С запускает отдельный сеанс и резервирует отдельную пользовательскую лицензию. Если сотрудники часто переходят по карточкам с сайта, свободные лицензии могут быстро исчерпаться.
  2. Безопасность аутентификации: не передавайте логин и пароль пользователя открытым текстом в строке URL (через параметры N и P). Для удобной и безопасной авторизации без повторного ввода паролей рекомендуется настроить на веб-сервере сквозную аутентификацию (OpenID / SSO или доменную Kerberos-аутентификацию).
  3. Оптимизация веб-сервера Apache: чтобы веб-клиент запускался быстро при каждом клике, обязательно включите в конфигурации веб-сервера модули сжатия (mod_deflate) и постоянных соединений (KeepAlive On), что предотвратит повторную медленную загрузку скриптов интерфейса платформы.
← На главную