При интеграции старых учетных систем с современными веб-сайтами часто возникает необходимость настроить полноценный двусторонний обмен данными. Если отправлять данные из старой платформы разработчики обычно умеют, то прием входящих POST-запросов (вебхуков) от сайта вызывает много вопросов. Платформа 1С 7.7 «из коробки» не поддерживает создание HTTP-сервисов, как это реализовано в современных версиях (например, в 1С 8.3). Давайте разберем по шагам, как можно решить эту задачу и построить надежный REST API для 1С 7.7.
Проанализируем ситуацию: поскольку 1С 7.7 не может самостоятельно выступать в роли веб-сервера и «слушать» входящие HTTP-запросы, нам необходимо создать внешний сервис-прослойку. Не имеет значения, на каком языке программирования или платформе будет написан этот сервис. Это может быть:
Рассмотрим подробнее алгоритм работы такой архитектуры. Внешний сервис круглосуточно работает и слушает запросы по HTTP от сайта. При поступлении новых данных он транслирует их в 1С 7.7, инициирует создание документов, получает ответ от учетной системы и возвращает его обратно на сайт.
Посмотрим на классический пример реализации, предложенный специалистами. Внешний веб-сервис принимает POST-запрос и использует COM-коннектор для подключения к базе 1С 7.7. Весь процесс происходит в режиме реального времени:
V77.Application.Выясним причину, по которой описанный выше способ может привести к зависанию сервера. Инициализация COM-объекта запускает полноценный фоновый процесс 1С 7.7, что может занимать от нескольких секунд до десятка секунд. Если сайт генерирует множество запросов одновременно (например, в период распродажи), сервер просто не выдержит нагрузки из-за огромного количества открывающихся процессов.
Чтобы избежать этой проблемы, промежуточный веб-сервис должен реализовывать пул соединений. Разберем этот механизм: веб-сервис заранее открывает несколько сессий 1С 7.7 (например, 5-10 штук) и держит их постоянно запущенными в фоне. Когда поступает новый запрос от сайта, сервис не запускает новую сессию, а передает задачу в уже открытое и свободное COM-соединение. Это позволяет сократить время ответа API до миллисекунд.
Если вам не требуется мгновенный синхронный ответ сайту об успешном проведении документа в 1С, рассмотрим более отказоустойчивую альтернативу без использования COM-соединений. Этот подход избавляет от проблем с блокировками и долгой загрузкой.
Алгоритм работы выглядит так:
ОбработкаОжидания().При построении двустороннего REST API крайне важно учитывать форматы передачи данных. Современные веб-приложения обмениваются информацией в формате JSON и используют кодировку UTF-8. Платформа 1С 7.7 не умеет работать ни с тем, ни с другим форматом напрямую.
Именно поэтому ваш промежуточный сервис должен выполнять роль переводчика. Он должен принимать входящий JSON с сайта, парсить его и конвертировать в форматы, понятные 1С 7.7 (например, в XML, CSV или просто набор текстовых параметров). Также необходимо осуществлять перекодировку текстовых данных из UTF-8 в Windows-1251 (кодировка 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;
Если речь идет об очень высоконагруженном проекте, где скорость критична, рассмотрим самый радикальный вариант интеграции — прямой доступ к таблицам базы данных (например, через MS SQL Server, если 1С 7.7 работает в SQL-режиме). В этом случае внешний веб-сервис читает и пишет данные прямо в таблицы SQL, полностью минуя механизмы 1С.
Важное предупреждение: этот способ дает мгновенный отклик, но требует высочайшей квалификации. При записи данных напрямую в SQL не срабатывает внутренняя бизнес-логика 1С, не выполняются модули проведения документов, не формируются движения по регистрам. Поэтому такой подход чаще используют исключительно для GET-запросов (чтения остатков, цен, статусов заказов), а создание документов доверяют классическим методам через COM или файловый обмен.