К статье
Практический материал

Разработка и Конфигурация · 11 мин

API в 1С: как использовать для интеграции и обмена данными

Как использовать API в 1С: публикация HTTP-сервисов, стандартный OData-интерфейс, веб-сервисы, настройка прав и типичные ошибки интеграции.

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

Любой из этих механизмов требует публикации базы на веб-сервере (Apache или IIS), потому что обращения извне приходят по HTTP/HTTPS, а веб-сервер передаёт их рабочим процессам 1С. Файловая база без веб-сервера отдавать данные по API не сможет — только через агенты вроде COM-соединения, что для внешних интеграций считается устаревшим и небезопасным решением.

Прежде чем открывать доступ, определите, какие именно данные нужны внешней системе, и создайте отдельного пользователя с минимально необходимыми правами. Открытие полного доступа к базе по API — одна из самых частых причин утечек и повреждения данных.

Какие виды API есть в 1С и что выбрать

Платформа 1С:Предприятие предоставляет три встроенных механизма внешнего доступа. Первый — автоматический REST-интерфейс OData: после включения публикации все разрешённые объекты конфигурации (справочники, документы, регистры) становятся доступны по URL вида /base/odata/standard.odata/Catalog_Номенклатура. Никакого программирования не требуется, но и изменить логику нельзя — отдаётся то, что есть в базе.

Второй механизм — HTTP-сервисы, которые разработчик создаёт в конфигураторе самостоятельно. Здесь вы определяете шаблоны URL, методы (GET, POST, PUT, DELETE) и пишете обработчики на встроенном языке. Это даёт полный контроль: можно возвращать только нужные поля, выполнять проверки, проводить документы, формировать ответ в JSON.

Третий вариант — веб-сервисы (SOAP). Они описываются WSDL-файлом и используются там, где внешняя система требует строгого контракта: например, при интеграции с корпоративными шинами данных или устаревшими банковскими клиентами. Для новых проектов SOAP применяют редко из-за громоздкости XML-протокола.

Сравнение вариантов API в 1С

OData (стандартный интерфейс)

Подходит для быстрого чтения и записи типовых объектов без разработки. Ограничение: нельзя изменить логику, нет кастомных операций, нагрузка на больших выборках.

HTTP-сервисы (REST/JSON)

Подходят для любой произвольной логики, обмена с сайтами и мобильными приложениями. Требуют разработки и тестирования обработчиков.

Веб-сервисы (SOAP)

Подходят для интеграций, где внешняя система требует WSDL-контракт. Избыточны для новых проектов, сложнее в отладке.

Как включить стандартный OData-интерфейс

OData — самый быстрый способ открыть доступ к данным. Для его включения нужно опубликовать базу на веб-сервере и отметить опцию публикации стандартного интерфейса OData. В конфигураторе это делается через меню «Администрирование» → «Публикация на веб-сервере», где ставится флажок «Публиковать стандартный интерфейс OData». В клиент-серверном варианте публикацию можно выполнить и через консоль кластера или утилиту webinst.

После публикации список доступных сущностей возвращается по адресу http://server/base/odata/standard.odata с метаданными в $metadata. Чтение данных выполняется GET-запросами с параметрами $filter, $select, $top, а запись — POST и PATCH. Формат ответа по умолчанию XML, для JSON добавляется параметр $format=json или заголовок Accept.

Порядок включения OData
  1. 1
    Убедитесь, что база работает на веб-сервере (Apache или IIS) и публикация выполняется без ошибок.
  2. 2
    В конфигураторе откройте «Администрирование» → «Публикация на веб-сервере» и включите флажок публикации стандартного интерфейса OData.
  3. 3
    Создайте отдельного пользователя и выдайте ему роли только на нужные объекты.
  4. 4
    Запросите в браузере или Postman адрес /odata/standard.odata/$metadata и проверьте наличие нужных сущностей.
  5. 5
    Выполните тестовый GET-запрос с фильтром и убедитесь, что возвращаются только ожидаемые данные.

Важный нюанс: OData применяет права пользователя, под которым идёт обращение. Если у пользователя нет права чтения справочника, сущность вернёт ошибку доступа. Поэтому «пустой ответ» чаще всего означает не поломку API, а нехватку прав.

Как создать собственный HTTP-сервис

HTTP-сервис создаётся в конфигураторе в ветке «Общие» → «HTTP-сервисы». Для сервиса задаётся корневой URL (например, api), затем добавляются шаблоны URL — например, /goods/{code}, и для каждого шаблона — методы с обработчиками. В обработчике доступны параметры запроса, тело запроса, заголовки, а результат формируется объектом HTTPСервисОтвет с кодом состояния и телом.

Типовой обработчик чтения остатков выглядит так: из параметров URL извлекается код номенклатуры, выполняется запрос к регистру остатков, результат сериализуется в JSON через объект ЗаписьJSON, формируется ответ с кодом 200. При отсутствии данных корректно возвращать код 404, при ошибках в параметрах — 400 с описанием проблемы.

bsl
Функция ПолучитьОстаток(Запрос)
    КодТовара = Запрос.ПараметрыURL["code"];
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json");
    // запрос к регистру, запись результата в JSON
    Ответ.УстановитьТелоИзСтроки(РезультатJSON);
    Возврат Ответ;
КонецФункции

После создания сервиса его нужно опубликовать: в настройках публикации на веб-сервере на закладке «HTTP-сервисы» отметить нужные сервисы. Обращение будет идти по адресу http://server/base/hs/api/... — префикс hs является стандартным для HTTP-сервисов 1С.

Аутентификация и безопасность API

Базовая аутентификация (логин и пароль пользователя 1С в заголовке Authorization) — встроенный и рабочий механизм, но передавать учётные данные можно только по HTTPS. Открытый HTTP означает, что логин и пароль передаются практически в открытом виде и легко перехватываются. Для серьёзных интеграций настраивают SSL-сертификат на веб-сервере и закрывают порт 80 либо делают редирект на HTTPS.

Дополнительные меры: отдельный пользователь для каждой внешней системы (чтобы можно было отозвать доступ точечно), роли с минимальным набором прав, ограничение доступа по IP на уровне веб-сервера или файрвола, журналирование обращений. Внутри HTTP-сервиса можно реализовать проверку токена в заголовке, если базовой аутентификации недостаточно.

Как обращаться к API из внешних систем

Со стороны клиента работа с API 1С ничем не отличается от любого другого REST API. Для тестирования удобен Postman или curl: указывается URL, тип аутентификации Basic Auth с логином и паролем пользователя 1С, заголовки Accept и Content-Type. Успешный ответ — код 200 с телом JSON или XML.

Из скриптовых языков обращение выполняется стандартными HTTP-клиентами: requests в Python, HttpClient в C#, fetch в JavaScript. При работе с OData учитывайте, что значения дат и ссылок имеют специфический формат, а строковые значения в фильтрах заключаются в одинарные кавычки с экранированием.

bash
curl -u "api_user:password" -H "Accept: application/json" "http://server/base/odata/standard.odata/Catalog_Номенклатура?$format=json&$top=10"

Для двустороннего обмена (когда 1С сама вызывает внешний API) используется объект HTTPСоединение и HTTPЗапрос во встроенном языке. Это отдельный сценарий: 1С выступает клиентом, например при отправке заказов в службу доставки или получении курсов валют.

Типичные ошибки и как их диагностировать

Ошибка 404 при обращении к HTTP-сервису чаще всего означает, что сервис не опубликован или URL не совпадает с шаблоном. Ошибка 401 — неверный логин/пароль или пользователь отключён. Ошибка 500 — исключение в обработчике: смотрите журнал регистрации базы, там фиксируется текст ошибки. Пустой ответ OData при корректном запросе — признак нехватки прав у пользователя.

Типичные ошибки
01
Публикация сервиса без перезапуска/перепубликации после изменений — внешняя система получает старое поведение или 404.
02
Один пользователь API на все интеграции — невозможно отозвать доступ точечно и найти источник проблемы в журнале.
03
Возврат больших выборок без пагинации и фильтров — таймауты веб-сервера и нагрузка на рабочие процессы.
04
Отсутствие обработки исключений в обработчике — клиент получает 500 без описания, диагностика усложняется.
05
Работа по HTTP без шифрования — перехват учётных данных и данных базы.
Контрольные точки

Как проверить результат

Доступность сервиса
Норма

Запрос возвращает код 200 и ожидаемую структуру данных

Тревожный признак

Код 404, 401 или таймаут соединения

Права доступа
Норма

Пользователь API видит только разрешённые объекты

Тревожный признак

Доступны объекты, которых не должно быть, или пустые ответы на корректные запросы

Запись данных
Норма

Созданный через API документ виден в базе с корректными реквизитами

Тревожный признак

Данные частично не записались, документ не проводится, дубли при повторном запросе

Журнал регистрации
Норма

Нет ошибок от обработчиков сервиса

Тревожный признак

Регулярные исключения при обращениях внешней системы

Ограничения и альтернативы

API на веб-сервере — не единственный способ обмена. Если внешняя система находится в одной сети с 1С и объёмы большие, иногда эффективнее обмен через файлы, планы обмена или брокеры сообщений (RabbitMQ, Kafka через внешние компоненты). Планы обмена хорошо решают задачу синхронизации между базами 1С, а вот для сайта или мобильного приложения они не подходят.

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

Итог

Что важно запомнить

Для простого доступа к данным включите стандартный OData, для произвольной логики создайте HTTP-сервис в конфигураторе. Всегда используйте HTTPS, отдельного пользователя с минимальными правами и проверяйте результат через журнал регистрации и контрольные запросы.

Частые вопросы об API в 1С

Можно ли использовать API в файловой базе 1С без веб-сервера?

Для HTTP-доступа извне веб-сервер обязателен: именно он принимает запросы и передаёт их платформе. В файловом режиме можно опубликовать базу через локальный Apache или IIS на том же компьютере — это рабочий вариант для тестов и небольших интеграций.

Чем OData отличается от HTTP-сервиса на практике?

OData включается без программирования и сразу отдаёт типовые объекты, но логику изменить нельзя. HTTP-сервис требует разработки обработчиков, зато позволяет вернуть любые данные в любом формате, выполнить проверки, провести документ и обработать ошибки по своим правилам.

Как передать файл через HTTP-сервис 1С?

Файл передаётся в теле запроса: либо как двоичные данные, либо закодированным в Base64 внутри JSON. В обработчике тело читается методом ПолучитьТелоКакДвоичныеДанные или ПолучитьТелоКакСтроку с последующим декодированием. Для больших файлов учитывайте ограничения веб-сервера на размер запроса.

Почему внешняя система получает ошибку 500 при обращении к сервису?

Код 500 означает исключение в обработчике на стороне 1С. Откройте журнал регистрации с отбором по пользователю API и найдите текст ошибки. Частые причины: обращение к несуществующему объекту, нарушение прав, ошибка преобразования типов при разборе JSON.

Как ограничить количество запросов к API?

Встроенного механизма лимитирования в платформе нет. Ограничения настраиваются на уровне веб-сервера или обратного прокси (nginx), а также прикладным кодом: например, проверкой частоты обращений по токену с записью в регистр сведений.

Нужно ли лицензировать пользователей API отдельно?

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