Разработка веб-сервисов для платформы 1С:Предприятие 7.7 является нетривиальной задачей, так как штатные механизмы HTTP-сервисов появились только в версии 8.3. Однако, несмотря на почтенный возраст системы, существует несколько надежных способов организовать обмен данными в режиме реального времени. Рассмотрим основные архитектурные подходы, которые позволяют превратить файловую «семерку» в источник данных для веб-приложений.
Это наиболее современный и стабильный подход. Суть заключается в создании небольшого приложения-посредника (написанного на Python, Go, Node.js или даже 1С 8.3), которое принимает входящие HTTP-запросы и транслирует их в базу 1С 7.7 через COM-соединение (объект V77.Application или V77S.Application).
Разберем алгоритм работы такой прослойки:
EvalExpr() или выполнение произвольного кода в контексте 1С получается результат (например, остаток товара).Рассмотрим пример кода на стороне клиента (в данном случае это может быть 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С уже запущены и ждут заданий.
Если ваша задача сводится исключительно к чтению данных (получение цен, остатков, списка контрагентов), проанализируем возможность прямого доступа к файлам базы данных. Для файловой версии 1С 7.7 это обычные .dbf файлы.
Мы можем использовать стандартный механизм ADO (ActiveX Data Objects). Любой веб-сервер (например, на PHP или ASP.NET) может подключиться к папке с базой через Microsoft dBase Driver или VFPOLEDB.
Рассмотрим преимущества этого способа:
Однако есть и серьезный минус: вам придется самостоятельно разбираться в структуре таблиц, используя файл 1cv7.dd, и реализовывать логику объектных ссылок (например, преобразование внутренних идентификаторов вида " 2Z " в понятные значения).
Если необходимо, чтобы именно запущенная копия 1С реагировала на запросы, мы можем использовать внешние компоненты, умеющие работать с TCP/IP сокетами. Например, компоненты из проекта 1CPP или FormEx.
Проанализируем ситуацию: мы запускаем сеанс 1С под специальным пользователем "Робот". В этом сеансе загружена ВК, которая открывает порт и "слушает" его. При поступлении данных на порт ВК генерирует стандартное ВнешнееСобытие.
В глобальном модуле 1С 7.7 мы перехватываем это событие:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Источник = "MyWebServer" Тогда
// Разбираем входящий JSON или строку запроса
Запрос = СоздатьОбъект("Текст");
Запрос.ДобавитьСтроку(Данные);
// Формируем ответ (например, остаток товара)
РезультатЗапроса = ПолучитьОстатокПоКоду(Данные);
// Отправляем ответ обратно через ВК
ВК_Сокет.ОтправитьОтвет(РезультатЗапроса);
КонецЕсли;
КонецПроцедуры
Этот метод позволяет выполнять в 1С любые действия, включая проведение документов, что невозможно при прямом чтении DBF.
Если использование сложных ВК кажется слишком рискованным, разберем классический, но ускоренный метод обмена через файлы. Основная претензия к файлам-флагам — это низкая скорость HDD/SSD и нагрузка на файловую систему при постоянном опросе.
Чтобы минимизировать задержки, выполним следующие шаги:
ОбработкаОжидания с минимальным интервалом (1 секунда).Поскольку чтение и запись происходят в оперативной памяти, задержки будут минимальными. Для еще большего ускорения реакции можно использовать компоненту FormEx, которая умеет отслеживать изменения в папке через API Windows, избавляя от необходимости использовать таймер 1С.
Подведем итог и выясним, какой метод лучше подходит для ваших задач:
Использование любого из этих методов позволит интегрировать вашу систему 1С 7.7 с современными веб-интерфейсами, мобильными приложениями и личными кабинетами клиентов, обеспечивая актуальность данных в режиме реального времени.