Как организовать переход по ссылке и открытие тонкого клиента 1С, подключенного по HTTP (WS)?

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

В практике администрирования 1С:Предприятия часто возникает задача отправки пользователям ссылок на информационную базу. Если база работает в клиент-серверном варианте через кластер серверов 1С (протокол TCP), проблем обычно не возникает: стандартная ссылка вида e1c://server/NameServer/NameBase корректно обрабатывается операционной системой и запускает тонкий клиент. Также часто требуется реализовать открытие объекта базы 1С по навигационной ссылке из письма или сообщения в мессенджере.

Однако ситуация усложняется, когда база опубликована на веб-сервере (IIS или Apache), и мы хотим, чтобы при клике по ссылке открывался не браузер, а именно тонкий клиент 1С, подключенный по протоколу HTTP/HTTPS. Тонкий клиент 1С через HTTP/HTTPS: особенности настройки и запуска подразумевают использование веб-сервера как транспорта, но стандартные ссылки, начинающиеся с http://, операционная система Windows всегда отдает браузеру по умолчанию. В некоторых сценариях работы через браузер может потребоваться специализированный Web клиент (расширение для Chrome), но для полноценной работы чаще выбирают именно тонкое приложение.

В этой статье мы подробно разберем, как обойти это ограничение, используя параметры запуска платформы и настройку пользовательского протокола в реестре Windows.

Анализ проблемы и стандартные возможности

Давайте разберемся, почему стандартная схема e1c:// не всегда подходит для веб-подключений. Согласно документации, схема e1c поддерживает варианты подключения к серверу предприятия или к файловой базе. Прямой поддержки инкапсуляции веб-адреса для запуска тонкого клиента в "один клик" без дополнительных настроек на стороне клиента в платформе реализовано ограничено.

Наша цель — заставить ссылку запустить исполняемый файл 1cestart.exe с определенными ключами.

Основной ключ, который нам понадобится, это /WS. Этот параметр указывает платформе, что подключение должно производиться к веб-серверу. Чтобы правильно составить команду запуска, можно использовать конструктор параметров командной строки, который содержит детальное описание этого и других сопутствующих ключей.

Синтаксис команды выглядит следующим образом:


"C:\Program Files\1cv8\common\1cestart.exe" /WS "http://адрес_веб_сервера/имя_базы"

Если мы выполним эту команду, используя стандартную командную строку Windows (Win+R -> cmd), у нас запустится тонкий клиент 1С с подключением к указанной базе. Теперь наша задача — "научить" браузер или почтовый клиент формировать такую команду при клике по ссылке.

Решение через регистрацию собственного протокола (URI Scheme)

Единственным надежным способом реализовать такой сценарий является регистрация собственного URI-протокола в реестре Windows. Подробно запуск 1С по ссылке из браузера через свой протокол позволяет автоматизировать процесс открытия нужной базы. Для более сложных сценариев, например, если устройства находятся не в домене, может потребоваться лаунчер для 1C с проверкой доменной авторизации.

Давайте назовем наш протокол, например, e1cweb. Тогда ссылки, которые мы будем рассылать пользователям, будут иметь вид: e1cweb://адрес_сервера/база

Когда пользователь нажмет на такую ссылку, Windows будет искать в реестре правило обработки для протокола e1cweb и передаст управление нашей программе-обработчику.

Шаг 1. Подготовка скрипта-обработчика

Поскольку браузер передает в программу-обработчик ссылку целиком (вместе с префиксом e1cweb://), а 1cestart.exe не умеет "отрезать" этот префикс самостоятельно, нам потребуется промежучный скрипт. Это может быть простой файл .bat или .cmd.

Создадим файл, например, C:\1C_Links\run_1c_web.cmd. В этом файле мы должны получить переданную строку, убрать из нее наш выдуманный протокол и подставить нужные параметры запуска 1С.

Примерный код скрипта:


@echo off
set "InputUrl=%1"

REM Удаляем кавычки, если они есть
set "InputUrl=%InputUrl:"=%"

REM Заменяем наш протокол e1cweb:// на http://
REM Внимание: синтаксис замены строк в BAT-файлах специфичен
set "FinalUrl=%InputUrl:e1cweb://=http://%"

REM Запускаем 1С
start "" "C:\Program Files\1cv8\common\1cestart.exe" /WS "%FinalUrl%"

Этот скрипт принимает один аргумент (ссылку), заменяет протокол на http:// и запускает платформу с ключом /WS.

Важное примечание: Если вы используете HTTPS, скрипт нужно адаптировать соответствующим образом, чтобы замена происходила на https://.

Шаг 2. Регистрация протокола в реестре Windows

Теперь нам нужно сообщить Windows, что все ссылки, начинающиеся с e1cweb://, нужно отправлять в наш файл run_1c_web.cmd.

Для этого необходимо создать структуру разделов в реестре в ветке HKEY_CLASSES_ROOT. Опираясь на руководство по регистрации приложений для работы с собственными протоколами URL (URI Scheme), это можно сделать вручную через regedit или создав файл с расширением .reg.

Рассмотрим содержимое .reg файла:


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\e1cweb]
@="URL:1C Web Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\e1cweb\shell]

[HKEY_CLASSES_ROOT\e1cweb\shell\open]

[HKEY_CLASSES_ROOT\e1cweb\shell\open\command]
@="\"C:\\1C_Links\\run_1c_web.cmd\" \"%1\""

Разберем, что здесь происходит:

  1. Мы создаем раздел e1cweb. Строковой параметр URL Protocol (пустой) указывает системе, что это именно протокол.
  2. Создаем подраздел shell\open\command.
  3. В значении по умолчанию для command прописываем путь к нашему скрипту. Обратите внимание на экранирование кавычек и слэшей. %1 означает, что сюда будет подставлена ссылка, по которой кликнул пользователь.

После запуска этого файла и подтверждения внесения изменений в реестр, система научится распознавать ссылки вида e1cweb://....

Открытие конкретного объекта (Навигационные ссылки)

Часто задачи требуют не просто открыть базу, но и перейти к конкретному документу или элементу справочника. В платформе для этого используются навигационные ссылки в 1С:Предприятии 8 вида e1cib/data/.... Как мы отмечали ранее, открытие объекта базы 1С по навигационной ссылке из письма значительно упрощает работу конечных пользователей.

Если мы хотим передать такую ссылку через наш механизм, нам нужно модернизировать команду запуска. Платформа 1С поддерживает ключ /Url для указания навигационной ссылки внутри базы.

Однако, передать всё в одной строке вида e1cweb://server/base/e1cib/data/... будет сложно для разбора в простом bat-файле. Более надежный вариант — использовать навигационные ссылки, которые формируются самой платформой при нажатии "Получить ссылку", и передавать их как аргумент.

Если мы посмотрим на возможности 1cestart.exe, то увидим, что можно комбинировать параметры. Для корректной обработки навигации внутри базы, запущенной по веб-ссылке, наш скрипт должен быть более интеллектуальным.

Если вы хотите открывать конкретный объект, ссылка может выглядеть так (условно, для вашего парсера): e1cweb://server/base#e1cib/data/Справочник.Номенклатура?ref=guid...

В таком случае скрипт должен разделить строку на две части:

  1. Адрес базы для параметра /WS.
  2. Навигационную ссылку для параметра /Url (если она присутствует).

Простая реализация в cmd может быть затруднительна для сложного парсинга. В таких случаях системные администраторы часто используют VBScript или PowerShell в качестве "прослойки".

Рассмотрим пример логики для PowerShell, который можно вызывать из реестра:


# Получаем аргумент (ссылку)
$rawUrl = $args[0]

# Предположим формат: e1cweb://server/base#e1cib/data/Doc.Ref?id=...
# Нам нужно превратить это в запуск 1С

# 1. Отделяем протокол
$httpUrl = $rawUrl -replace "^e1cweb://", "http://"

# 2. Если есть символ #, считаем, что дальше идет навигационная ссылка
if ($httpUrl -match "#") {
    $parts = $httpUrl -split "#"
    $baseUrl = $parts[0]
    $navLink = $parts[1]
    
    # Запуск с переходом к объекту
    Start-Process "C:\Program Files\1cv8\common\1cestart.exe" -ArgumentList "/WS `"$baseUrl`" /Url `"$navLink`""
}
else {
    # Просто запуск базы
    Start-Process "C:\Program Files\1cv8\common\1cestart.exe" -ArgumentList "/WS `"$httpUrl`""
}

В этом случае в реестре в разделе command нужно будет прописать запуск PowerShell с этим скриптом.

Альтернативное решение: Файлы списка баз (.v8i)

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

Это не совсем "ссылка" в понимании веба, но файл-ярлык, который можно отправить по почте. Структура файла base.v8i:


[Название_Базы]
Connect=ws="http://server/base";
ID=...
OrderInList=16384
Folder=/
OrderInTree=16384
External=0
ClientConnectionSpeed=Normal
App=ThinClient
WA=1
Version=8.3

Ключевой параметр здесь: App=ThinClient. Он принудительно заставляет платформу запускать именно тонкий клиент, игнорируя настройки пользователя. Если пользователь сохранит этот файл и запустит его, база откроется в нужном клиенте.

Резюме

Подведем итоги. Чтобы ссылка открывала 1С Тонкий клиент через веб-сервер (WS):

  1. Прямая ссылка http:// всегда перехватывается браузером. Обойти это настройками 1С нельзя, это поведение ОС.
  2. Решение заключается в использовании исполняемого файла 1cestart.exe с параметром /WS "адрес".
  3. Для интеграции в веб-страницы или письма необходимо зарегистрировать в Windows собственный URI-протокол (например, e1cweb).
  4. Необходим промежучный скрипт (bat/ps1), который примет нестандартную ссылку, преобразует ее в валидный URL и передаст в параметры запуска 1С.

Данный метод требует предварительной настройки рабочих мест пользователей (распространение скрипта и ключей реестра через групповые политики GPO), но является наиболее полным и профессиональным решением задачи.

← На главную