REST API в 1С: как сделать учётную систему доступной

Типовая 1С — чёрный ящик для внешних систем. Данные есть: остатки, цены, заказы, отчёты. Но достать их может только пользователь через интерфейс. Сайт хочет проверить наличие товара — некуда обратиться. Дашборд руководителя хочет выручку за неделю — негде спросить. Мобильное приложение курьера хочет статус заказа — никак. Всё, что может предложить типовая конфигурация внешнему миру, — выгрузка в файл по расписанию. Один раз в час, если повезёт.

HTTP-сервис в 1С меняет эту ситуацию принципиально. Он превращает учётную систему из закрытого хранилища в полноценный узел интеграционной архитектуры — с чётким контрактом, авторизацией и ответом за миллисекунды.

Что такое HTTP-сервис в 1С и зачем он нужен бизнесу

HTTP-сервис — это механизм платформы 1С:Предприятие, который позволяет обрабатывать входящие HTTP-запросы прямо внутри конфигурации. Технически это обработчик URL: внешняя система отправляет GET или POST на определённый адрес, платформа 1С принимает запрос, выполняет код на встроенном языке и возвращает ответ — как правило, в формате JSON.

С точки зрения бизнеса HTTP-сервис — это контролируемая точка входа в данные 1С. Вместо того чтобы давать внешним системам прямой доступ к базе (что небезопасно и неуправляемо), мы создаём набор конкретных операций: «получить остаток», «создать заказ», «вернуть статус оплаты». Каждая операция — отдельный endpoint, задокументированный, защищённый, предсказуемый.

Это работает в 1C:ERP, 1C:УНФ, 1C:КА, 1C:Бухгалтерии — везде, где есть платформа 8.3.10 и выше. Не требует внешних компонент. Не требует отдельного сервера. Достаточно опубликовать информационную базу через веб-сервер Apache или IIS.

Важно понимать разницу между HTTP-сервисом и стандартным REST-интерфейсом OData, который 1С тоже умеет предоставлять из коробки. OData отдаёт данные «как есть» — структуру справочников и документов, — и это удобно для простых случаев. Но он не позволяет реализовать бизнес-логику: проверить остаток с учётом резервов, применить скидку, сформировать отчёт по сложным правилам. HTTP-сервис — это полноценный код, где мы контролируем каждый шаг.

Архитектура интеграционного слоя 1С

Архитектура: три уровня интеграционного слоя

Мы выделяем три архитектурных уровня при построении REST API поверх 1С. Каждый решает свою задачу, и пропуск любого из них приводит к проблемам на продуктиве.

Уровень 1: транспорт. HTTP-сервис принимает запрос, разбирает URL и заголовки, определяет, какую операцию вызвать. Здесь же — проверка токена авторизации, логирование входящего запроса, формирование стандартного ответа с кодами HTTP. Критически важно сделать единый обработчик ошибок: если код упал с исключением, клиент должен получить структурированный JSON с описанием проблемы, а не HTML-страницу с трассировкой стека. На практике это означает обёртку всего обработчика в Попытка/Исключение с формированием ответа вида {"success": false, "error": "Описание"} и кода HTTP 500.

Уровень 2: бизнес-логика. Обработка запроса по существу — чтение данных из регистров, формирование отчётов через СКД, создание документов, проверка остатков. Этот код не должен знать ничего про HTTP: он получает параметры и возвращает структуру. Такое разделение позволяет тестировать бизнес-логику отдельно, через обработку, без необходимости каждый раз слать HTTP-запросы.

Уровень 3: сериализация. Преобразование результата в JSON (или XML, если интегрируемая система требует). Здесь же — обработка пустых значений, дат, ссылочных типов. Дата в 1С и дата в JSON — разные вещи, и если не стандартизировать формат на этом уровне, каждый endpoint будет изобретать свой.

На практике мы используем вспомогательную функцию SafeReadJSON для безопасного разбора входящего тела запроса. Она оборачивает десериализацию в попытку, возвращает пустую структуру при ошибке и позволяет не дублировать обработку невалидного JSON в каждом методе.

Цикл обработки HTTP-запроса в 1С

Примеры из практики: от корзины интернет-магазина до управленческого дашборда

Абстрактные рассуждения об архитектуре полезны до определённого предела. Вот четыре сценария, которые мы реализовали в рабочих системах.

Корзина интернет-магазина: валидация и резерв в реальном времени

Интернет-магазин на Bitrix отправляет в 1С состав корзины при оформлении заказа. HTTP-сервис в 1C:УНФ принимает POST-запрос с массивом товаров и количеств, проверяет фактическое наличие на складах, учитывает существующие резервы, рассчитывает итоговую сумму с учётом скидок и возвращает подтверждённый состав заказа.

Отдельный endpoint hookcart обрабатывает предварительную валидацию корзины: когда покупатель ещё не нажал «оформить», но сайту уже нужно показать актуальную доступность. Здесь же учитывается пункт самовывоза — остатки проверяются по конкретному складу, а не по всей компании.

Ключевой технический момент — обработка ошибок. Если товар удалён из 1С, а сайт его всё ещё показывает, endpoint должен вернуть не 500, а корректный ответ с пометкой «позиция недоступна» и предложением альтернатив. Централизованный разбор JSON через SafeReadJSON здесь критичен: некорректное тело запроса от сайта не должно ронять весь сервис.

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

Маркетплейсы: двусторонний обмен с WB и Ozon

Здесь 1С выступает не только сервером, но и клиентом REST API. Типичный цикл: 1С отправляет на WB/Ozon актуальные цены и остатки (POST с Bearer-токеном авторизации), а в обратном направлении забирает новые заказы и обновления статусов.

Обе стороны — REST: 1С отправляет JSON на API маркетплейса и принимает JSON в ответ. Разница в том, что для исходящих запросов используется объект ОбъектHTTPСоединение, а для входящих — тот же HTTP-сервис. Все практические тонкости этой двусторонней интеграции собраны в статье про интеграцию 1С с Wildberries и Ozon. Аутентификация на стороне маркетплейса — через API-ключ в заголовке Authorization.

Важный нюанс: API маркетплейсов меняется часто. Мы вынесли маппинг полей и URL в отдельные настроечные таблицы внутри 1С, чтобы при очередном изменении API не трогать код, а только поправить соответствие полей.

Выгрузка каталога: XML для сайта

HTTP-сервис в 1C:ERP генерирует полный каталог товаров в XML: наименование, описание, изображения (ссылки), цены по типам, остатки по складам. Сайт запрашивает каталог по расписанию, но через HTTP — без FTP, без промежуточных файлов на диске.

Преимущество перед файловым обменом: если нужно отдать каталог двум сайтам и мобильному приложению, не нужно настраивать три выгрузки. Один endpoint, три потребителя. При необходимости можно добавить параметры фильтрации — отдавать не весь каталог, а только изменения с определённой даты, что существенно снижает нагрузку при частых запросах.

MCP-сервер: 1С как источник данных для AI-ассистентов

Это, пожалуй, самый нетипичный сценарий. Мы создали внутри 1С набор HTTP-сервисов, которые работают как инструменты для внешних AI-систем по протоколу MCP (Model Context Protocol). Каждый сервис — отдельная операция:

  • execute_report — выполняет произвольный отчёт на СКД по переданным параметрам и возвращает результат в JSON. Руководитель спрашивает AI-ассистента: «Какая выручка за прошлую неделю по направлению N?» — ассистент вызывает endpoint, получает цифры, формулирует ответ.
  • get_event_log — возвращает записи журнала регистрации с фильтрацией по периоду, пользователю, типу события. Полезно для мониторинга и аудита без подключения к 1С.
  • run_scheduled_job — запускает регламентное задание по имени. Администратор через чат-бот может инициировать обмен с сайтом, не заходя в конфигуратор.
  • manage_report_recipients — управляет подписками на рассылку отчётов: добавить email, убрать, посмотреть список.

Все эти endpoints используют Bearer-токен для аутентификации. Схема запросов и ответов задокументирована так, чтобы AI-система могла автоматически определить, какой инструмент вызвать.

Практическая ценность: руководитель получает ответы на вопросы о бизнесе в привычном чате, не запуская 1С и не дожидаясь, пока бухгалтер сформирует отчёт. Время от вопроса до ответа — секунды, а не часы. А IT-администратор может запускать обслуживание базы из Telegram-бота, находясь вне офиса.

Безопасность: аутентификация и контроль доступа

Открыть HTTP-сервис наружу — значит создать точку входа, доступную из интернета. Вопрос безопасности здесь не теоретический.

Минимальный набор мер, который мы применяем в каждом проекте:

Bearer-токен. Каждая внешняя система получает уникальный токен. Токен передаётся в заголовке Authorization. HTTP-сервис проверяет его на транспортном уровне, до вызова бизнес-логики. Нет токена — HTTP 401, невалидный токен — HTTP 403. Без исключений.

Отдельный пользователь 1С. HTTP-сервис работает от имени специального пользователя с минимальными правами. Он не может открыть конфигуратор, не может зайти в интерфейс, не может выполнить произвольный код. Только те операции, которые прописаны в его ролях.

HTTPS. Весь обмен — только по шифрованному каналу. Токен в открытом HTTP — это токен, доступный любому, кто слушает трафик. Сертификат Let's Encrypt бесплатен, настройка занимает час.

Логирование. Каждый входящий запрос записывается: время, IP, endpoint, токен (хэш), код ответа. Если что-то пошло не так, мы можем восстановить хронологию. Лог пишется в регистр сведений внутри 1С — не в файл, который легко потерять при переносе.

Rate limiting. Ограничение количества запросов с одного IP или по одному токену за единицу времени. Реализуется либо на уровне веб-сервера (nginx/Apache), либо внутри 1С через счётчик в регистре. Защита от перебора токенов и от случайных бесконечных циклов на стороне клиента.

Отдельная тема — разграничение доступа по операциям. Один токен для сайта даёт доступ только к остаткам и ценам. Другой токен для дашборда — к отчётам и журналу регистрации. Третий для маркетплейса — к созданию заказов. Матрица «токен — разрешённые endpoints» хранится в регистре сведений и проверяется на каждом запросе.

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

HTTP-сервис vs COM-соединение vs файловый обмен

У 1С есть три способа отдать данные наружу. Каждый — со своими ограничениями. Четвёртый — относительно новый вариант: WebSocket в 1С 8.3.27, который позволяет получать данные из внешних систем в реальном времени без периодических опросов.

Файловый обмен — классика: 1С выгружает XML или CSV на диск (или по FTP), внешняя система забирает. Просто в реализации, работает десятилетиями. Минусы: задержка (данные актуальны на момент последней выгрузки), хрупкость (файл может не записаться, застрять, быть прочитан до полной записи), сложность масштабирования (каждый новый потребитель — новая выгрузка).

COM-соединение — внешняя система подключается к 1С через COM-объект и выполняет код на встроенном языке. Мощно, но только под Windows, только на одном сервере, только с полными правами пользователя 1С. Любая ошибка в вызывающем коде может заблокировать сеанс. Масштабируется плохо, отлаживается тяжело, через интернет не работает.

HTTP-сервис — стандартный REST API поверх HTTP. Работает через интернет, кроссплатформенный (клиентом может быть что угодно: Python, JavaScript, PHP, другая 1С, мобильное приложение), не требует прямого доступа к серверу 1С. Каждый запрос — независимый, без состояния, не блокирует другие сеансы. При необходимости легко масштабируется: достаточно добавить ещё один рабочий процесс сервера 1С, и веб-сервер распределит нагрузку.

Сравнение способов интеграции с 1С

Сводная таблица:

КритерийФайловый обменCOM-соединениеHTTP-сервис
Задержка данныхМинуты — часыРеальное времяРеальное время
Платформа клиентаЛюбаяТолько WindowsЛюбая
Работа через интернетЧерез FTP/SFTPНетДа
МасштабируемостьНизкаяНизкаяВысокая
БезопасностьЗависит от транспортаПолный доступГранулярная
Сложность реализацииНизкаяСредняяСредняя

Файловый обмен по-прежнему оправдан для тяжёлых пакетных операций: полная выгрузка каталога из 50 000 позиций, ежедневная синхронизация справочников. HTTP-сервис — для всего, что требует актуальности и скорости. COM-соединение мы рекомендуем только в двух случаях: legacy-интеграция, которую дорого переписывать, и автоматизированное тестирование на том же сервере.

На практике оптимальный вариант — комбинация. Тяжёлую первичную загрузку (импорт 100 000 позиций справочника) делать файлом, а оперативные обновления (новая цена, изменённый остаток, созданный заказ) — через HTTP-сервис. Такой подход даёт и производительность пакетной обработки, и актуальность реального времени.

Когда стоит строить интеграционный слой

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

HTTP-сервис — это не замена всей интеграции, а точка входа. Один слой, через который проходят все внешние обращения к 1С. С логированием, авторизацией и единообразным форматом ответа. Построить его правильно с первого проекта проще и дешевле, чем переделывать три файловых обмена, когда они начнут конфликтовать.

Если ваша 1С:ERP, 1C:КА или 1C:УНФ уже обросла выгрузками в файлы и ручными загрузками из Excel — скорее всего, пора. Первые признаки: менеджеры вручную проверяют остатки для сайта, бухгалтер каждое утро загружает заказы из файла, руководитель получает отчёт на почту раз в день вместо того, чтобы видеть цифры в моменте. Каждый из этих сценариев — это HTTP-сервис, который решает проблему раз и навсегда.

Мы проектируем интеграционный слой с нуля и встраиваем в существующие конфигурации без замены типового функционала. Результат — 1С, которая отвечает на запросы внешних систем так же быстро, как обычный веб-сервис. Один из популярных сценариев — Telegram-бот для управленческой отчётности, где данные из 1С через HTTP-сервисы попадают прямо в мессенджер руководителя.