БлогУслугиКарьера
Обсудить проект
БлогУслугиКарьераОбсудить проект
Автоматизация

Обмен 1С с сайтом через OData: настройка с нуля

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

Редакция Feature
Редакция Feature·
27 авг
·
13 мин
·
Обмен 1С с сайтом через OData: настройка с нуля

Главное достоинство OData в 1С заодно и главная его опасность: чтобы отдать данные наружу, программист 1С не нужен. Достаточно поставить пару галочек в конфигураторе.

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

Разберём настройку по шагам, с местами, где это ломается. Общий обзор способов интеграции есть в большом гайде по 1С. Здесь только OData и подробно.

Что такое стандартный интерфейс OData в 1С

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

Возможность появилась в платформе 8.3.5. Важная деталь, которая экономит часы: 1С работает по OData версии 3.0, а не 4.0. Большая часть примеров в интернете написана под четвёртую версию, и её синтаксис здесь просто не сработает. К конкретным различиям вернёмся ниже.

Когда OData подходит:

  • нужно читать справочники, остатки, цены
  • объёмы умеренные, до нескольких тысяч записей на запрос
  • нет требования к сложной бизнес-логике на стороне 1С

Когда не подходит:

  • нужны расчёты и проверки при записи, которых нет в типовой конфигурации
  • запросы сложнее, чем позволяет фильтрация OData
  • нагрузка высокая, а база рабочая

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

Шаг 1. Публикация на веб-сервере

1С отдаёт OData не сама по себе: ей нужен веб-сервер (IIS или Apache) и опубликованная база.

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

После публикации базовый адрес выглядит так:

http://ваш-сервер/имя-базы/odata/standard.odata/

Проверить, что публикация жива, проще всего запросом схемы:

GET http://ваш-сервер/имя-базы/odata/standard.odata/$metadata

В ответ приедет XML с описанием всех доступных сущностей. Если приехал, половина дела сделана.

Шаг 2. Состав интерфейса: ловушка, на которой встают все

Публикация включена, $metadata отвечает, а список сущностей пустой либо в нём нет нужного справочника. Это самая частая точка остановки.

Дело в том, что в актуальных версиях платформы объекты не публикуются автоматически. Нужно явно задать состав стандартного интерфейса OData — указать, какие именно справочники, документы и регистры выставлены наружу.

Задать его можно либо в конфигураторе, либо программно, вызвав метод установки состава интерфейса. И это не бюрократия, а правильное поведение: публиковать всю базу целиком не нужно.

Практическое правило: выставляйте наружу только те объекты, которые реально участвуют в обмене. Каталог, цены, остатки, заказы. Не вся конфигурация.

Шаг 3. Отдельный пользователь и права

Соблазн зайти под администратором велик, особенно когда «надо просто проверить». Проверка обычно и остаётся в проде навсегда.

Заведите отдельного пользователя информационной базы под обмен и выдайте ему роль с минимально нужными правами: чтение того, что читается, запись того, что пишется. Аутентифицируется всё это обычным HTTP Basic:

curl -u "web_exchange:пароль" \
  "http://ваш-сервер/base/odata/standard.odata/Catalog_Номенклатура?\$format=json&\$top=1"

Отсюда же вытекает требование к транспорту. Basic-аутентификация передаёт пару логин-пароль в заголовке при каждом запросе, поэтому канал обязан быть HTTPS. По HTTP это равносильно тому, чтобы отдать доступ к базе всем, кто окажется между вами и сервером.

Нужен обмен 1С с сайтом?

Настроим двусторонний обмен и возьмём на поддержку

Заказать интеграцию с 1С

Шаг 4. Имена сущностей

Имя сущности склеивается из типа объекта и его имени в конфигурации, через подчёркивание:

Объект конфигурации Имя в OData
Справочник «Номенклатура» Catalog_Номенклатура
Документ «ЗаказПокупателя» Document_ЗаказПокупателя
Регистр сведений «ЦеныНоменклатуры» InformationRegister_ЦеныНоменклатуры
Регистр накопления «ТоварыНаСкладах» AccumulationRegister_ТоварыНаСкладах

Русские имена в адресе допустимы, но их нужно кодировать при передаче. Большинство HTTP-клиентов делает это само; проблемы начинаются, когда адрес собирают конкатенацией строк вручную.

К табличным частям обращаются через имя владельца, а точный вид всегда можно подсмотреть в $metadata. Это вообще главный совет по OData в 1С: не угадывайте имена, читайте схему.

Шаг 5. Фильтры и выборка

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

Формат ответа. По умолчанию приезжает Atom/XML. JSON нужно просить явно:

?$format=json

Отбор. Ссылочные значения передаются как GUID со специальным литералом, даты — со своим:

?$filter=Номенклатура_Key eq guid'a1b2c3d4-0000-0000-0000-000000000000'
?$filter=Дата ge datetime'2026-09-01T00:00:00'
?$filter=ПометкаУдаления eq false

Только нужные поля. Экономит и трафик, и время формирования ответа на стороне 1С:

?$select=Ref_Key,Наименование,Артикул

Постраничность. Работает как обычно:

?$top=100&$skip=200

Общее количество. Вот характерное различие: в OData 4.0 это $count=true, а в 1С, где реализована версия 3.0, нужно писать иначе:

?$inlinecount=allpages

Если видите в примере $count=true, значит, пример не про 1С.

Отдельно отметим, что $inlinecount, $orderby и $expand применимы только к запросам, возвращающим список. К запросу одной записи по ключу их прикручивать бессмысленно.

Шаг 6. Запись данных обратно

OData умеет и записывать. Новая запись создаётся обычным POST на коллекцию:

POST /base/odata/standard.odata/Document_ЗаказПокупателя?$format=json
Content-Type: application/json

{
  "Date": "2026-09-01T14:30:00",
  "Контрагент_Key": "a1b2c3d4-0000-0000-0000-000000000000",
  "Товары": [
    { "Номенклатура_Key": "...", "Количество": 2, "Цена": 1500 }
  ]
}

Изменение существующей записи делается через PATCH по ключу. И тут важный момент, который упускают: создание документа не означает его проведение. Документ появится в базе как черновик, а движения по регистрам не сформируются. Для проведения у документов есть отдельное действие, и его нужно вызывать явно.

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

Производительность: почему обмен кладёт базу

OData удобен, но он ходит в базу через обычный механизм запросов 1С, и подкрутить этот запрос вы не можете. Отсюда три типичные проблемы.

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

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

Отсутствие $select. Без него 1С собирает полный набор полей каждого объекта, включая те, что вам не нужны.

Если после всех мер обмен всё равно тяжёлый, это сигнал, что задача переросла OData, и пора писать HTTP-сервисы с нормальными запросами на стороне 1С.

Обсудим ваш проект?

Оставьте контакты — перезвоним и обсудим задачу

Чек-лист настройки

  • База опубликована на веб-сервере, флажок публикации OData включён
  • $metadata отвечает и содержит нужные объекты
  • Состав стандартного интерфейса задан явно, выставлено только необходимое
  • Заведён отдельный пользователь обмена с минимальными правами
  • Доступ идёт по HTTPS, не по HTTP
  • Имена сущностей взяты из $metadata, а не угаданы
  • В запросах есть $format=json и $select
  • Для подсчёта используется $inlinecount=allpages, а не $count=true
  • Документы после создания проводятся отдельным действием
  • Выгрузка инкрементальная и постраничная
  • Тяжёлые операции вынесены из рабочего времени

Заключение

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

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

Читайте также

  • Интеграция 1С с сайтом через API: полный гайд для бизнеса
  • Настройка API на сайте: 7 ошибок, которые вылезают только в проде

Обсудим ваш проект?

Оставьте контакты — перезвоним и обсудим задачу

Содержание
  • Что такое стандартный интерфейс OData в 1С
  • Шаг 1. Публикация на веб-сервере
  • Шаг 2. Состав интерфейса: ловушка, на которой встают все
  • Шаг 3. Отдельный пользователь и права
  • Шаг 4. Имена сущностей
  • Шаг 5. Фильтры и выборка
  • Шаг 6. Запись данных обратно
  • Производительность: почему обмен кладёт базу
  • Чек-лист настройки
  • Заключение
Поделиться:

Похожие статьи

Одна заявка пришла трижды: как убрать дубли в работе
Автоматизация

Одна заявка пришла трижды: как убрать дубли в работе

9 мин
Оплата пришла, заказ завис: как наладить сверку денег
Автоматизация

Оплата пришла, заказ завис: как наладить сверку денег

9 мин
CLAUDE.md: как настроить, чтобы агент не переспрашивал
Автоматизация

CLAUDE.md: как настроить, чтобы агент не переспрашивал

12 мин
Feature IT

Feature IT — платформа по обучению программированию и разработке цифровых продуктов. Мы создаём современные веб-решения для бизнеса и обучаем этому других!

Политика конфиденциальностиПользовательское соглашение

О компании

  • Блог
  • Карьера

Услуги разработки

  • Разработка сайтов под ключ
  • Веб-приложения на React/Next.js
  • Telegram-боты для бизнеса
  • Mini Apps (Telegram, VK)
  • SEO-оптимизированные сайты
  • Автоматизация бизнес-процессов
  • Поддержка и развитие IT-продуктов

Обучение

  • Курс Python с нуля
  • Алгоритмы и структуры данных
  • Паттерны проектирования
  • Подготовка к собеседованиям в IT
  • Практика на реальных проектах

Инструменты

  • Генератор UTM-меток
  • Счётчик символов