Как реализовать прием HTTP-запросов и REST API в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При интеграции старых учетных систем с современными веб-сайтами часто возникает необходимость настроить полноценный двусторонний обмен данными. Если отправлять данные из старой платформы разработчики обычно умеют, то прием входящих POST-запросов (вебхуков) от сайта вызывает много вопросов. Платформа 1С 7.7 «из коробки» не поддерживает создание HTTP-сервисов, как это реализовано в современных версиях (например, в 1С 8.3). Давайте разберем по шагам, как можно решить эту задачу и построить надежный REST API для 1С 7.7.

Архитектура решения: почему нужен промежуточный сервис?

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

  1. Отдельное приложение на C#, PHP, Go или Node.js.
  2. Современная база на платформе 1С 8.3, опубликованная на веб-сервере (IIS или Apache).
  3. Готовый микросервис, написанный энтузиастами специально для интеграции с 1С 7.7.

Рассмотрим подробнее алгоритм работы такой архитектуры. Внешний сервис круглосуточно работает и слушает запросы по HTTP от сайта. При поступлении новых данных он транслирует их в 1С 7.7, инициирует создание документов, получает ответ от учетной системы и возвращает его обратно на сайт.

Способ 1: Синхронный обмен через COM-соединение

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

  1. Сайт отправляет данные о новом заказе в формате JSON на адрес вашего веб-сервиса.
  2. Веб-сервис инициализирует COM-объект V77.Application.
  3. Устанавливается соединение с базой 1С 7.7.
  4. Веб-сервис вызывает функции глобального модуля 1С для создания нового документа и передает туда параметры.
  5. 1С создает документ, проводит его и возвращает через COM-соединение результат (например, номер созданного документа или статус ошибки).
  6. Веб-сервис формирует HTTP-ответ и отправляет его сайту.

Проблема производительности COM-соединений и пути ее решения

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

Чтобы избежать этой проблемы, промежуточный веб-сервис должен реализовывать пул соединений. Разберем этот механизм: веб-сервис заранее открывает несколько сессий 1С 7.7 (например, 5-10 штук) и держит их постоянно запущенными в фоне. Когда поступает новый запрос от сайта, сервис не запускает новую сессию, а передает задачу в уже открытое и свободное COM-соединение. Это позволяет сократить время ответа API до миллисекунд.

Способ 2: Асинхронный обмен через файлы или базу данных (Очереди)

Если вам не требуется мгновенный синхронный ответ сайту об успешном проведении документа в 1С, рассмотрим более отказоустойчивую альтернативу без использования COM-соединений. Этот подход избавляет от проблем с блокировками и долгой загрузкой.

Алгоритм работы выглядит так:

  1. Внешний скрипт (например, на PHP) моментально принимает входящий POST-запрос от сайта, отвечает ему статусом "200 OK" (запрос принят в обработку) и сохраняет полученные данные в промежуточную таблицу MySQL или записывает их в текстовый файл в специальную папку.
  2. В самой 1С 7.7 постоянно запущен отдельный служебный сеанс пользователя с открытой обработкой, в которой активирована функция ОбработкаОжидания().
  3. Раз в несколько секунд (или минут) 1С 7.7 сканирует папку или обращается к промежуточной базе.
  4. Если найдены новые данные, 1С забирает их, создает необходимые документы и формирует файл-ответ (или пишет статус обратно в промежуточную базу).
  5. Внешний скрипт отслеживает появление ответа от 1С и самостоятельно отправляет его обратно на сайт.

Работа с форматами данных и кодировками

При построении двустороннего REST API крайне важно учитывать форматы передачи данных. Современные веб-приложения обмениваются информацией в формате JSON и используют кодировку UTF-8. Платформа 1С 7.7 не умеет работать ни с тем, ни с другим форматом напрямую.

Именно поэтому ваш промежуточный сервис должен выполнять роль переводчика. Он должен принимать входящий JSON с сайта, парсить его и конвертировать в форматы, понятные 1С 7.7 (например, в XML, CSV или просто набор текстовых параметров). Также необходимо осуществлять перекодировку текстовых данных из UTF-8 в Windows-1251 (кодировка 1С 7.7), чтобы вместо кириллицы в базу не попали нечитаемые символы.

Как отправлять исходящие запросы из 1С 7.7

Для полноты картины рассмотрим, как 1С 7.7 может выступать в роли инициатора обмена и отправлять POST-запросы на сайт. Для этого не обязательно искать специализированные внешние компоненты. Разработчики используют встроенные в операционную систему Windows OLE/COM-объекты.

Чаще всего применяются объекты WinHttp.WinHttpRequest.5.1 или Msxml2.ServerXMLHTTP. Они позволяют формировать HTTP-запросы прямо из кода 1С, устанавливать необходимые заголовки (включая авторизацию), задавать таймауты и получать ответы от сервера веб-сайта.

Пример вызова подобного объекта в коде выглядит примерно так:


HTTPЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
HTTPЗапрос.Open("POST", "https://api.yoursite.com/endpoint", 0);
HTTPЗапрос.SetRequestHeader("Content-Type", "application/json");
HTTPЗапрос.Send(ТекстJSON);
ОтветСервера = HTTPЗапрос.ResponseText;

Прямой доступ к базе данных (SQL)

Если речь идет об очень высоконагруженном проекте, где скорость критична, рассмотрим самый радикальный вариант интеграции — прямой доступ к таблицам базы данных (например, через MS SQL Server, если 1С 7.7 работает в SQL-режиме). В этом случае внешний веб-сервис читает и пишет данные прямо в таблицы SQL, полностью минуя механизмы 1С.

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

← На главную