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

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

При работе с базами данных 1С у многих пользователей возникает необходимость интеграции между различными информационными системами или обмена данными между несколькими базами. Один из распространённых механизмов для прямого программного взаимодействия с файловыми или клиент-серверными базами 1С — это использование объекта V83.ComConnector, который позволяет подключиться к базе через OLE-соединение. Однако, что делать, если ваша база 1С опубликована через веб-сервер (например, Apache) и доступна по протоколам HTTP/HTTPS? Возникает логичный вопрос: можно ли использовать тот же V83.ComConnector для работы с такой «облачной» или веб-опубликованной базой?

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

Почему V83.ComConnector не подходит для веб-опублидованных баз?

Прежде всего, давайте проясним принципиальное различие между технологиями, которые мы пытаемся совместить. Объект V83.ComConnector, как следует из его названия, основан на технологии COM (Component Object Model). Это устаревшая, но до сих пор используемая технология Microsoft, предназначенная для взаимодействия между приложениями в локальной среде Windows. Она требует прямого доступа к файловой базе данных или к серверу 1С по соответствующим сетевым протоколам.

Когда мы говорим о базе, опубликованной через веб-сервер (Apache или IIS), мы имеем дело совершенно с другой парадигмой взаимодействия. Веб-публикация означает, что доступ к базе осуществляется по протоколам HTTP/HTTPS. Эти протоколы предназначены для передачи гипертекста и других данных в сети Интернет, они работают на более высоком уровне абстракции и используют совершенно иные механизмы сетевого взаимодействия, чем COM.

Давайте проанализируем ситуацию подробнее:

  1. Различные протоколы связи: ComConnector ожидает прямого подключения к процессу rphost (на сервере 1С) или к файлу базы данных (для файлового варианта). Он не умеет работать через HTTP/HTTPS прокси или веб-сервер. Веб-сервер в данном случае выступает как посредник, который транслирует HTTP-запросы в запросы к внутренней инфраструктуре 1С и обратно.
  2. Место выполнения кода: При использовании ComConnector мы фактически запускаем сеанс 1С в фоновом режиме на той же машине или в той же локальной сети, где находится база или сервер. Все операции с данными, запросы и вычисления выполняются в этом фоновом сеансе. При веб-доступе через тонкий клиент или браузер все запросы и обработка данных происходят на стороне сервера 1С, а клиент получает уже подготовленные данные для отображения.
  3. Сетевое окружение: Даже если веб-сервер Apache и клиентский компьютер находятся в одной одноранговой сети Windows, и Apache работает под Windows, это не меняет фундаментального принципа. Доступ к базе через веб-публикацию все равно будет осуществляться по HTTP/HTTPS. Попытка использовать ComConnector для такого подключения, скорее всего, потерпит неудачу, поскольку он просто не сможет установить соединение по протоколу, отличному от того, для которого он был разработан.

Таким образом, наша попытка "подружить" V83.ComConnector с веб-опубликованной базой подобна попытке связать два устройства, предназначенных для совершенно разных типов кабелей и разъёмов – они просто несовместимы на уровне используемых технологий.

Как же тогда взаимодействовать с веб-опубликованной базой 1С? Основные подходы.

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

  1. HTTP-сервисы и Web-сервисы 1С

    Это рекомендуемый и наиболее корректный путь для интеграции с базами 1С, опубликованными на веб-сервере. Платформа 1С:Предприятие предлагает встроенные средства для создания и публикации своих собственных HTTP-сервисов и Web-сервисов, которые специально предназначены для обмена данными по протоколам HTTP/HTTPS.

    • Web-сервисы (на основе SOAP): Это более традиционный подход, основанный на протоколе SOAP (Simple Object Access Protocol). Они позволяют описывать операции и типы данных с помощью WSDL (Web Services Description Language), что обеспечивает строгую типизацию и формализацию взаимодействия. Web-сервисы хорошо подходят для сложных транзакционных операций и систем, требующих высокой степени формализации. Для работы с ними в базе-приёмнике обычно создаётся "WS-ссылка".

      Пример программного использования WS-ссылки (общий вид):

      
      // Предполагаем, что WS-ссылка уже добавлена в конфигурацию
      // и называется "МойВебСервис"
      Прокси = Новый WSПрокси("http://localhost/ws/МойВебСервис?wsdl", 
                            "http://www.mycompany.com/MyService", 
                            "МойВебСервис");
                      
      Параметр1 = "НекотороеЗначение";
      Результат = Прокси.ВыполнитьОперацию(Параметр1);
                      
      Сообщить(Результат);
      
    • HTTP-сервисы (REST-подобные): Это более современный и гибкий подход, ориентированный на архитектурный стиль REST (Representational State Transfer). HTTP-сервисы позволяют создавать интерфейсы, ориентированные на ресурсы, и обычно обмениваются данными в более лёгких форматах, таких как JSON или XML. Они идеально подходят для построения API (Application Programming Interface), быстрого обмена небольшими объемами данных и интеграции с веб-приложениями или мобильными клиентами. HTTP-сервисы часто легче в реализации и отладке по сравнению с Web-сервисами.

      Для работы с HTTP-сервисами в базе-приёмнике необходимо программно формировать HTTP-запросы и обрабатывать ответы. Например, для получения данных из веб-опубликованной базы:

      
      // Создаем HTTP-запрос
      Запрос = Новый HTTPЗапрос("/hs/МойHTTPСервис/Данные"); 
      // Замените на фактический URL и имя сервиса
                      
      // Добавляем заголовки, если требуется авторизация или тип контента
      // Запрос.УстановитьЗаголовок("Authorization", "Basic " + Base64Кодировать(ИмяПользователя + ":" + Пароль));
      // Запрос.УстановитьЗаголовок("Content-Type", "application/json");
                      
      // Создаем HTTP-соединение
      Соединение = Новый HTTPСоединение("имя_вашего_веб_сервера", 
                                       ,,
                                       ,,
                                       ,,
                                       ,,
                                       Истина); // Истина - для HTTPS
                                                       
      // Отправляем запрос
      Ответ = Соединение.Отправить(Запрос);
                      
      // Обрабатываем ответ
      Если Ответ.КодСостояния = 200 Тогда
          // Успешный ответ
          ДанныеОтвета = Ответ.ПолучитьТелоКакСтроку();
          // Если данные в JSON, можно их десериализовать
          // ЧтениеJSON = Новый ЧтениеJSON();
          // ЧтениеJSON.УстановитьСтроку(ДанныеОтвета);
          // СтруктураДанных = ПрочитатьJSON(ЧтениеJSON);
          Сообщить("Получены данные: " + ДанныеОтвета);
      Иначе
          Сообщить("Ошибка при выполнении запроса: " + Ответ.КодСостояния);
      КонецЕсли;
      

    Преимущества использования HTTP- и Web-сервисов:

    • Штатный механизм: Это часть платформы 1С, разработанная специально для таких задач.
    • Безопасность: Поддерживают аутентификацию, передачу по HTTPS.
    • Производительность: Оптимизированы для взаимодействия через веб-сервер.
    • Гибкость: Позволяют передавать любые данные и вызывать любые процедуры, доступные на стороне сервера.
    • Совместимость: Могут использоваться из любой системы, поддерживающей HTTP-запросы.

    Решение проблемы "не хочу менять типовую конфигурацию": Автор исходного сообщения выразил нежелание вносить изменения в стандартную "Бухгалтерию предприятия". Мы понимаем это опасение. Однако, для добавления HTTP- или Web-сервисов нет необходимости изменять типовую конфигурацию напрямую. Вы можете создать необходимые сервисы через расширения конфигурации. Расширения позволяют добавлять новый функционал, включая сервисы, без изменения основной конфигурации, что значительно упрощает обновление типовых решений.

    Для публикации HTTP-сервисов требуется наличие веб-сервера (Apache или IIS) с установленными модулями расширения веб-сервера 1С. Эти модули обеспечивают корректное взаимодействие между веб-сервером и платформой 1С.

  2. Тонкий клиент 1С (1cv8c.exe)

    Тонкий клиент — это облегченное клиентское приложение 1С, которое предназначено для работы с управляемым приложением. Он также может подключаться к базе через веб-сервер по протоколам HTTP/HTTPS, точно так же, как и веб-клиент (работающий в браузере). Однако, важно понимать, что тонкий клиент, хоть и устанавливается на компьютер пользователя, не предоставляет прямого доступа к COM-объектам веб-базы для выполнения запросов "на лету" из другой базы, как это предполагалось с ComConnector. Его роль – отображать пользовательский интерфейс и взаимодействовать с серверной частью 1С.

    При работе в тонком клиенте все действия, связанные с базой данных, включая выполнение запросов, проведение документов и вычисления, выполняются на сервере 1С. Тонкий клиент лишь отправляет запросы на сервер (например, "открыть форму", "провести документ", "выполнить отчет"), сервер обрабатывает их, выполняет необходимые операции (в том числе запросы к СУБД) и возвращает клиенту только те данные, которые необходимы для отображения или дальнейшей обработки на стороне клиента (с использованием ограниченного набора типов встроенного языка).

    Это означает, что возможность "выполнять запросы" в тонком клиенте, о которой упоминалось в дискуссии, не подразумевает прямого доступа к базе данных или возможности использовать OLE-объекты для такого доступа. Это лишь инициирование серверных вызовов, которые уже на сервере выполняют нужные запросы и возвращают результат обратно клиенту. Таким образом, тонкий клиент — это средство работы пользователя с системой, а не средство программной интеграции между базами.

Принцип работы тонкого клиента и выполнения запросов

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

  1. Клиентское приложение (тонкий клиент) отправляет запрос на сервер 1С.
  2. Сервер 1С получает этот запрос и выполняет необходимые действия: формирует запрос к СУБД, обращается к данным объектов 1С, запускает процедуры обработки и т.д. Все эти действия происходят исключительно на сервере.
  3. После выполнения всех операций, сервер 1С формирует ответ, который содержит только те данные, которые необходимы для отображения на клиенте (например, таблица отчета, результаты проведения документа, новые значения полей).
  4. Тонкий клиент получает этот ответ и отображает данные пользователю.

Таким образом, тонкий клиент является лишь "тонким" интерфейсом, а вся бизнес-логика и работа с данными сосредоточена на сервере. Это архитектурное решение повышает масштабируемость, безопасность и снижает требования к клиентским машинам. Но при этом оно исключает возможность прямого доступа к базе данных или ее COM-объектам непосредственно с клиентской стороны для целей интеграции.

Что мы рекомендуем?

Для решения вашей задачи, а именно выполнения запроса в "облачной" базе и обработки его в другой базе, расположенной на компьютере пользователя, мы настоятельно рекомендуем использовать HTTP-сервисы или Web-сервисы 1С. Это штатный и наиболее эффективный способ взаимодействия с веб-опубликованными базами.

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

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

Мы надеемся, что данный материал помог вам разобраться в тонкостях подключения к веб-опубликованным базам 1С и выбрать наиболее подходящий и эффективный метод интеграции. Забудьте о ComConnector для веб-баз и обратите внимание на мощные возможности HTTP- и Web-сервисов!

← На главную