Как реализовать веб-сервис для 1С 7.7 на файловой базе данных

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

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

Вариант 1: Использование внешнего HTTP-прокси и OLE-соединения

Это наиболее современный и стабильный подход. Суть заключается в создании небольшого приложения-посредника (написанного на Python, Go, Node.js или даже 1С 8.3), которое принимает входящие HTTP-запросы и транслирует их в базу 1С 7.7 через COM-соединение (объект V77.Application или V77S.Application).

Разберем алгоритм работы такой прослойки:

  1. Веб-сервер получает GET или POST запрос от клиента.
  2. Прослойка проверяет наличие свободного OLE-сеанса с 1С 7.7.
  3. Через метод EvalExpr() или выполнение произвольного кода в контексте 1С получается результат (например, остаток товара).
  4. Прослойка упаковывает результат в JSON и отдает его клиенту.

Рассмотрим пример кода на стороне клиента (в данном случае это может быть 1С 8.3), который обращается к такому сервису-прокси для выполнения кода в 7.7:


&НаСервере
Функция ВыполнитьЗапросК77(КодНаВыполнение, КолонкиРезультата)
    // Параметры подключения к прокси-серверу
    Соединение = Новый HTTPСоединение("192.168.1.11", 8090);
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Base", СтрокаВBase64(ПутьКБазе77));
    Заголовки.Вставить("User", СтрокаВBase64(ИмяПользователя));
    
    Запрос = Новый HTTPЗапрос("/eval", Заголовки);
    Запрос.УстановитьТелоИзСтроки(КодНаВыполнение, КодировкаТекста.UTF8);
    
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    Возврат Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
КонецФункции

Главный плюс этого метода в том, что нам не нужно держать открытым окно 1С на сервере. Однако важно помнить, что создание нового OLE-объекта на каждый запрос — операция дорогая. Поэтому рекомендуется реализовать пул соединений (Connection Pool), где несколько сеансов 1С уже запущены и ждут заданий.

Вариант 2: Прямое чтение таблиц DBF через ADO

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

Мы можем использовать стандартный механизм ADO (ActiveX Data Objects). Любой веб-сервер (например, на PHP или ASP.NET) может подключиться к папке с базой через Microsoft dBase Driver или VFPOLEDB.

Рассмотрим преимущества этого способа:

Однако есть и серьезный минус: вам придется самостоятельно разбираться в структуре таблиц, используя файл 1cv7.dd, и реализовывать логику объектных ссылок (например, преобразование внутренних идентификаторов вида " 2Z " в понятные значения).

Вариант 3: Обработка внешних событий через специализированные ВК

Если необходимо, чтобы именно запущенная копия 1С реагировала на запросы, мы можем использовать внешние компоненты, умеющие работать с TCP/IP сокетами. Например, компоненты из проекта 1CPP или FormEx.

Проанализируем ситуацию: мы запускаем сеанс 1С под специальным пользователем "Робот". В этом сеансе загружена ВК, которая открывает порт и "слушает" его. При поступлении данных на порт ВК генерирует стандартное ВнешнееСобытие.

В глобальном модуле 1С 7.7 мы перехватываем это событие:


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    Если Источник = "MyWebServer" Тогда
        // Разбираем входящий JSON или строку запроса
        Запрос = СоздатьОбъект("Текст");
        Запрос.ДобавитьСтроку(Данные);
        
        // Формируем ответ (например, остаток товара)
        РезультатЗапроса = ПолучитьОстатокПоКоду(Данные);
        
        // Отправляем ответ обратно через ВК
        ВК_Сокет.ОтправитьОтвет(РезультатЗапроса);
    КонецЕсли;
КонецПроцедуры

Этот метод позволяет выполнять в 1С любые действия, включая проведение документов, что невозможно при прямом чтении DBF.

Вариант 4: Использование RAM-диска и файлов-флагов

Если использование сложных ВК кажется слишком рискованным, разберем классический, но ускоренный метод обмена через файлы. Основная претензия к файлам-флагам — это низкая скорость HDD/SSD и нагрузка на файловую систему при постоянном опросе.

Чтобы минимизировать задержки, выполним следующие шаги:

  1. Создадим в оперативной памяти RAM-диск (виртуальный диск).
  2. Настроим веб-сервер так, чтобы он записывал запросы в виде файлов на этот диск.
  3. В 1С 7.7 настроим ОбработкаОжидания с минимальным интервалом (1 секунда).

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

Рекомендации по выбору решения

Подведем итог и выясним, какой метод лучше подходит для ваших задач:

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

← На главную