Как программно подключиться к базе 1С, опубликованной на веб-сервере?

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

В практике интеграции систем часто возникает задача настроить обмен данными или программно подключиться к базе 1С, которая находится на удаленном веб-сервере. При этом стандартные веб- или HTTP-сервисы в конфигурации могут быть не опубликованы, а пользователю доступна лишь обычная авторизация через логин и пароль в веб-клиенте. Как поступить в такой ситуации? Существуют ли программные аналоги привычного COM-соединения для работы через веб-протоколы?

В этой статье мы подробно разберем все возможные технические подходы к решению данной задачи: от использования специального COM-объекта тонкого клиента до активации стандартного REST API (OData) и создания собственных легковесных HTTP-сервисов в расширениях.

Вариант 1. Использование COM-объекта тонкого клиента (V83C.Application)

Многие разработчики привыкли использовать объект V83.COMConnector для быстрого прямого подключения к базам данных. Однако этот объект представляет собой полноценный толстый клиент, который работает исключительно по протоколам прямого доступа к СУБД или кластеру серверов 1С (через параметры Srvr или File). Работать по протоколам HTTP/HTTPS через веб-сервер он не умеет.

Для решения этой проблемы в платформе 1С:Предприятие предусмотрен альтернативный OLE-объект — тонкий клиент V83C.Application (обратите внимание на букву C, означающую Client). Этот объект умеет подключаться к базе через веб-сервер.

Рассмотрим по шагам, как настроить и использовать такое подключение:

  1. Регистрация OLE-сервера на клиентской машине.

    На том компьютере, где будет выполняться внешний скрипт инициализации подключения, обязательно должен быть установлен тонкий клиент 1С той же версии, что и на сервере. Его необходимо зарегистрировать в операционной системе в качестве OLE-сервера. Для этого запустите командную строку от имени Администратора и выполните команду:

    1cv8c.exe /RegServer
  2. Формирование строки подключения.

    В отличие от локального подключения, строка соединения должна использовать параметр ws (Web-Service), указывающий на URL-адрес публикации вашей базы на веб-сервере (IIS или Apache).

    Проанализируем пример кода на встроенном языке 1С, который инициализирует такое подключение:

    
    ПутьКПубликации = "https://my-web-server.ru/trade_base";
    ИмяПользователя = "Администратор";
    ПарольПользователя = "SuperPassword123";
    
    СтрокаПодключения = "ws=""" + ПутьКПубликации + """;Usr=""" + ИмяПользователя + """;Pwd=""" + ПарольПользователя + """;";
    
    Попытка
        ТонкийКлиентCOM = Новый COMОбъект("V83C.Application");
        СоединениеУспешно = ТонкийКлиентCOM.Connect(СтрокаПодключения);
    Исключение
        ЗаписьЖурналаРегистрации("ОшибкаПодключения", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
        ВызватьИсключение "Не удалось подключиться к базе через веб-сервер: " + ОписаниеОшибки();
    КонецПопытки;
    

Важное ограничение метода: Поскольку подключение выполняется в контексте Тонкого клиента, вы столкнетесь с жесткими ограничениями на работу с метаданными. Например, попытка напрямую обратиться к менеджерам данных на клиенте вызовет ошибку "Method 'Справочники' not supported by automation object". Напрямую создавать, читать или записывать элементы справочников и документов через такой COM-объект нельзя.

Выясним, как обойти это ограничение. Для работы с данными вам придется вызывать экспортные процедуры и функции из общих модулей конфигурации, у которых установлены свойства "Клиент (управляемое приложение)" и "Вызов сервера". Внутри этих процедур вы сможете передавать простые структуры данных или сериализованные строки XML/JSON, обрабатывая их на стороне сервера 1С.

Вариант 2. Быстрая активация стандартного интерфейса OData (REST)

Использование COM-технологий постепенно уходит в прошлое из-за привязки к операционной системе Windows, жестких требований к совпадению версий платформы и сложностей с производительностью. Гораздо более современным подходом является использование стандартного интерфейса OData (REST API), предоставляемого платформой 1С по умолчанию.

Многие ошибочно полагают, что для активации OData требуется изменять саму конфигурацию 1С и заново публиковать базу. На самом деле, этот интерфейс генерируется платформой автоматически и включается простой корректировкой файла описания публикации default.vrd на вашем веб-сервере.

Разберем по шагам, как включить OData:

  1. Перейдите в каталог на веб-сервере, куда опубликована ваша база данных (например, C:\inetpub\wwwroot\trade_base\ для IIS или соответствующую директорию для Apache).

  2. Откройте файл default.vrd в любом текстовом редакторе.

  3. Найдите корневой тег <point> и добавьте внутрь него дочерний XML-элемент <rest>, разрешающий работу стандартного интерфейса:

    
    <point xmlns="http://v8.1c.ru/8.2/virtual-resource-system" ...>
        <ws>
            <!-- Здесь ваши стандартные веб-сервисы -->
        </ws>
        <rest>
            <standardOData enable="true"/>
        </rest>
    </point>
    
  4. Сохраните файл и перезапустите ваш веб-сервер (например, выполнив команду iisreset в консоли Windows).

После этого вы можете отправлять стандартные HTTP-запросы из любого внешнего приложения (написанного на Python, C#, JavaScript, PHP или используя утилиту curl) к объектам вашей базы данных 1С. Для авторизации используются те же учетные данные пользователей 1С (поддерживается как Basic-авторизация, так и OpenID).

Пример HTTP GET-запроса для получения списка номенклатуры из базы данных:


GET https://my-web-server.ru/trade_base/odata/standard.odata/Catalog_Номенклатура?$format=json
Authorization: Basic Base64(Логин:Пароль)

Платформа автоматически вернет структурированный ответ в формате JSON. Этот метод невероятно быстр, безопасен, не требует доработки конфигурации и работает на любых операционных системах.

Вариант 3. Разработка собственного HTTP-сервиса в расширении

Если вам требуется реализовать сложную логику обработки данных при обмене, оптимальным решением станет создание собственного HTTP-сервиса. Самое главное преимущество этого подхода заключается в том, что его можно реализовать в **расширении конфигурации**. Это позволит вам не снимать основную конфигурацию 1С с поддержки.

Рассмотрим алгоритм создания такого решения:

  1. Создайте новое расширение конфигурации в дереве метаданных и добавьте в него новый объект HTTP-сервисы.

  2. Задайте имя сервиса (например, ExternalIntegration) и корневой шаблон (например, /v1).

  3. Создайте шаблон URL (например, /getdata или /savedata) и определите для него HTTP-метод (GET или POST).

  4. В модуле HTTP-сервиса напишите обработчик запроса. Посмотрим на практический пример кода, который принимает POST-запрос с JSON-пакетом данных и создает новый элемент в справочнике:

    
    Функция СохранитьДанныеPOST(Запрос)
        
        Ответ = Новый HTTPСервисОтвет(200);
        Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
        
        // Получаем тело запроса в виде строки
        СтрокаДанных = Запрос.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
        
        // Десериализуем JSON во временную структуру
        Чтение = Новый ЧтениеJSON;
        Чтение.УстановитьСтроку(СтрокаДанных);
        Данные = ПрочитатьJSON(Чтение);
        Чтение.Закрыть();
        
        // Выполняем запись данных в транзакции
        НачатьТранзакцию();
        Попытка
            НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
            НовыйЭлемент.Наименование = Данные.Наименование;
            НовыйЭлемент.Артикул = Данные.Артикул;
            НовыйЭлемент.Записать();
            
            ЗафиксироватьТранзакцию();
            
            // Формируем успешный JSON-ответ
            Запись = Новый ЗаписьJSON;
            Запись.УстановитьСтроку();
            СтруктураРезультата = Новый Структура("success, id", Истина, Строка(НовыйЭлемент.Ссылка.УникальныйИдентификатор()));
            ЗаписатьJSON(Запись, СтруктураРезультата);
            СтрокаОтвета = Запись.Закрыть();
            
            Ответ.УстановитьТелоИзСтроки(СтрокаОтвета, КодировкаТекста.UTF8);
        Исключение
            ОтменитьТранзакцию();
            
            Ответ.КодСостояния = 500;
            Запись = Новый ЗаписьJSON;
            Запись.УстановитьСтроку();
            СтруктураОшибки = Новый Структура("success, error", Ложь, ОписаниеОшибки());
            ЗаписатьJSON(Запись, СтруктураОшибки);
            СтрокаОшибки = Запись.Закрыть();
            
            Ответ.УстановитьТелоИзСтроки(СтрокаОшибки, КодировкаТекста.UTF8);
        КонецПопытки;
        
        Возврат Ответ;
        
    КонецФункции
    
  5. После написания кода обновите публикацию на веб-сервере через конфигуратор (меню Администрирование -> Публикация на веб-сервере), убедившись, что в списке публикуемых HTTP-сервисов отмечено галочкой ваше расширение.

Вариант 4. Эмуляция интерфейса через RPA и автоматизацию браузеров

Бывают исключительные ситуации, когда у вас полностью отсутствуют права администрирования веб-сервера (вы не можете отредактировать default.vrd для OData), а конфигурация закрыта для внесения изменений (нельзя добавить расширение с HTTP-сервисом). При этом вам доступен только штатный веб-клиент в браузере.

В этом случае на помощь приходят современные системы робототехнической автоматизации процессов (RPA) или инструменты тестирования веб-интерфейсов, такие как Selenium WebDriver, Playwright или Puppeteer.

Используя библиотеки автоматизации на языках Python или Node.js, вы можете написать скрипт, который будет выполнять следующие действия:

  1. Запускать фоновый процесс браузера Chromium или Firefox.
  2. Переходить по адресу публикации веб-клиента 1С.
  3. Находить поля ввода по XPath или CSS-селекторам и эмулировать ввод логина и пароля.
  4. Нажимать кнопку входа, дожидаться отрисовки интерфейса 1С.
  5. Находить нужные кнопки меню, открывать списки документов, считывать текстовые данные из табличных частей веб-клиента или заполнять экранные формы.

Преимущества метода: Абсолютная независимость от настроек сервера 1С. Вам не нужны никакие дополнительные права доступа, кроме прав обычного пользователя.

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

Резюме

Проанализировав все доступные варианты, мы можем сделать следующие выводы:

← На главную