При интеграции корпоративных порталов, интернет-магазинов или CRM-систем с базой 1С часто возникает задача: пользователь кликает по кнопке или ссылке на внешнем сайте, после чего в браузере сразу открывается веб-клиент 1С с нужной карточкой элемента (например, контрагента или заказа) для просмотра и редактирования. Разберем детально, как устроены навигационные ссылки платформы 1С:Предприятие, как открыть объект по коду и какие нюансы интеграции необходимо учитывать.
Платформа 1С:Предприятие поддерживает прямой доступ к формам объектов через механизм навигационных ссылок. В браузере такая ссылка состоит из двух частей: URL публикации информационной базы на веб-сервере и навигационной части (хеша), начинающейся с символа #.
Рассмотрим типовой формат внешней навигационной ссылки на карточку справочника:
http://адрес_сервера/имя_публикации/#e1cib/data/Справочник.Контрагенты?ref=ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ
Разберем подробнее, что означает параметр ref. В значении ref передается шестнадцатеричное представление уникального идентификатора ссылки объекта (GUID), записанное слитно, без дефисов. Если пользователь переходит по такой ссылке, веб-клиент запускается и сразу открывает основную форму объекта.
Важная деталь: если пользователь еще не авторизован в базе, веб-клиент сначала отобразит стандартную форму аутентификации. После успешного ввода логина и пароля платформа автоматически перенаправит пользователя к карточке, указанной в навигационной ссылке.
Если нам необходимо сформировать ссылку внутри самой конфигурации 1С, выясним, какие методы платформы для этого предназначены:
ПолучитьНавигационнуюСсылку() возвращает внутреннюю ссылку (начинающуюся с префикса e1cib/data/).ПолучитьВнешнююНавигационнуюСсылку() формирует полный URL, автоматически подставляя адрес публикации из параметров информационной базы.Посмотрим на пример формирования ссылки во встроенном языке:
// Получаем ссылку на конкретного контрагента
СсылкаНаОбъект = Справочники.Контрагенты.НайтиПоКоду("000000001");
Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
// Получаем полный URL для веб-клиента
ПолнаяСсылка = ПолучитьВнешнююНавигационнуюСсылку(СсылкаНаОбъект);
КонецЕсли;
На практике внешний сайт часто оперирует только текстовым кодом или артикулом, не зная внутреннего GUID объекта 1С. Генерировать параметр ref вручную на стороне внешнего сайта сложно, так как стандартный формат GUID (RFC 4122) отличается порядком байтов от внутреннего двоичного представления ссылки 1С.
В этом случае надежнее всего использовать связку с легким HTTP-сервисом на стороне 1С. Разберем по шагам, как работает эта схема:
Посмотрим на пример реализации метода HTTP-сервиса в 1С:
Функция ПолучитьСсылкуПоКоду(Запрос)
КодКонтрагента = Запрос.ПараметрыЗапроса.Получить("code");
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
СсылкаНаКонтрагента = Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента);
Если ЗначениеЗаполнено(СсылкаНаКонтрагента) Тогда
ВнешняяСсылка = ПолучитьВнешнююНавигационнуюСсылку(СсылкаНаКонтрагента);
ТелоОтвета = Новый Структура("success, url", Истина, ВнешняяСсылка);
Иначе
Ответ.КодСостояния = 404;
ТелоОтвета = Новый Структура("success, error", Ложь, "Контрагент не найден");
КонецЕсли;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ТелоОтвета);
Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
Возврат Ответ;
КонецФункции
Если мы хотим переходить по ссылке в один клик без промежуточных обращений к веб-сервисам, проанализируем механизм передачи параметра запуска C в адресной строке веб-клиента.
Внешний сайт формирует прямой URL вида:
http://адрес_сервера/имя_публикации/?C=КОД_КОНТРАГЕНТА
Далее настроим обработку этого параметра в модуле управляемого приложения конфигурации 1С. При старте сеанса проверяем системную переменную ПараметрЗапуска:
Процедура ПриНачалеРаботыСистемы()
Если ЗначениеЗаполнено(ПараметрЗапуска) Тогда
НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоКоду(ПараметрЗапуска);
Если ЗначениеЗаполнено(НайденныйКонтрагент) Тогда
ПараметрыОткрытия = Новый Структура("Ключ", НайденныйКонтрагент);
ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", ПараметрыОткрытия);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот способ позволяет сразу открыть карточку в интерфейсе веб-клиента, передавая идентификатор любой сущности непосредственно через параметры строки запроса.
Разберем важные эксплуатационные моменты при организации перехода в веб-клиент из внешних систем:
N и P). Для удобной и безопасной авторизации без повторного ввода паролей рекомендуется настроить на веб-сервере сквозную аутентификацию (OpenID / SSO или доменную Kerberos-аутентификацию).mod_deflate) и постоянных соединений (KeepAlive On), что предотвратит повторную медленную загрузку скриптов интерфейса платформы.