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

Администрирование · 12 мин

1С OData: что это и как использовать

Что такое OData в 1С, как опубликовать интерфейс на веб-сервере, настроить права и обмениваться данными через HTTP. Примеры запросов и типичные ошибки.

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

Механизм реализован в платформе «1С:Предприятие» начиная с версии 8.3.5 и работает на базе открытого стандарта OData (Open Data Protocol). Платформа автоматически генерирует REST-интерфейс для объектов конфигурации: справочников, документов, регистров, планов счетов. Разработчику не нужно описывать каждую точку доступа вручную — достаточно опубликовать базу на веб-сервере и включить соответствующую настройку.

Типичные сценарии использования: выгрузка каталога товаров и остатков на сайт, передача заказов из интернет-магазина в 1С, интеграция с CRM, построение отчётов во внешних BI-системах, обмен данными между двумя базами 1С без настройки планов обмена. OData подходит именно для оперативного, «поштучного» обмена, а не для массовой репликации данных.

Что такое OData и как он работает в 1С

OData (Open Data Protocol) — открытый стандарт обмена данными через HTTP, разработанный Microsoft и стандартизированный OASIS. Запросы формируются как обычные URL: в адресной строке указывается нужный объект, а фильтры, сортировка и выбор полей задаются специальными параметрами. Ответ возвращается в формате Atom/XML или JSON.

В 1С платформа сама строит OData-интерфейс на основе метаданных конфигурации. Если в базе есть справочник «Номенклатура», то после публикации он становится доступен по адресу вида http://server/base/odata/standard.odata/Catalog_Номенклатура. Документы, регистры сведений и накопления получают аналогичные адреса с префиксами Document_, InformationRegister_, AccumulationRegister_.

По умолчанию через OData доступны операции чтения всех опубликованных объектов. Запись (создание, изменение, удаление) тоже поддерживается методами POST, PATCH и DELETE, но её необходимо явно разрешить: в конфигураторе для каждого объекта в свойствах есть настройка разрешения изменения через стандартный интерфейс OData.

Что можно делать через OData в 1С

Чтение данных — основной сценарий. Внешняя система может получить список контрагентов, остатки по регистру, табличную часть конкретного документа. Поддерживаются параметры запроса: $filter для отбора, $select для выбора полей, $top и $skip для постраничной выборки, $orderby для сортировки, $expand для получения связанных данных.

Запись данных позволяет создавать документы и элементы справочников из внешних систем. Например, интернет-магазин после оформления заказа отправляет POST-запрос — и в 1С появляется документ «Заказ покупателя» с заполненной табличной частью. Проведение документа через стандартный интерфейс не выполняется: объект сохраняется, но провести его нужно отдельно — либо расширением OData, либо регламентным заданием в самой 1С.

Важно понимать границу: OData работает с данными, а не с бизнес-логикой. Обработчики «ПриЗаписи» и «ПередЗаписью» на сервере выполняются, но клиентские обработчики, команды форм и печатные формы через OData недоступны. Если нужна сложная логика — правильнее писать собственный HTTP-сервис.

OData и альтернативы

Стандартный OData

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

HTTP-сервисы

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

Планы обмена

Оптимальны для регулярной синхронизации между базами 1С. Избыточны для разовых запросов из внешних систем.

Как включить и опубликовать OData

Для работы OData база должна быть опубликована на веб-сервере — IIS или Apache. Файловый режим без веб-сервера не поддерживает OData, как и любые HTTP-сервисы. Если база работает в клиент-серверном варианте, публикация всё равно выполняется через веб-сервер, который выступает посредником между клиентом и кластером.

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

Порядок включения OData
  1. 1
    Убедитесь, что платформа версии 8.3.5 или новее, а веб-сервер (IIS/Apache) установлен и настроен для работы с 1С
  2. 2
    Откройте конфигуратор под пользователем с правами администратора
  3. 3
    Выполните «Администрирование» → «Публикация на веб-сервере», укажите имя и каталог публикации
  4. 4
    Установите флажок «Публиковать стандартный интерфейс OData» и нажмите «Опубликовать»
  5. 5
    Откройте в браузере адрес http://сервер/имя/odata/standard.odata и введите логин и пароль пользователя базы
  6. 6
    Проверьте, что в ответе перечислены объекты конфигурации — интерфейс работает
http
GET /base/odata/standard.odata/Catalog_Номенклатура?$format=json&$top=10 HTTP/1.1
Host: server
Authorization: Basic base64(пользователь:пароль)

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

Настройка прав и состава доступных объектов

Доступ через OData контролируется стандартной ролевой моделью 1С. Пользователь, от имени которого подключается внешняя система, увидит только те объекты, на которые у его ролей есть права чтения. Это важно: не нужно создавать отдельную модель безопасности — достаточно грамотно настроить роли.

Состав объектов, видимых через OData, можно ограничить вручную. В конфигураторе: «Администрирование» → «Настройка поддержки интерфейса OData» (в разных версиях платформы пункт может называться немного иначе). Там снимаются флажки с объектов, которые не должны попадать во внешний интерфейс — например, с регистров с персональными данными или служебных справочников.

Для записи данных нужно дополнительно разрешить изменение объектов: в свойствах конкретного объекта метаданных в ветке настроек OData отмечается возможность изменения через стандартный интерфейс. Без этого POST- и PATCH-запросы будут отклонены.

Примеры запросов к данным

Базовый запрос на чтение справочника с фильтром: .../odata/standard.odata/Catalog_Контрагенты?$filter=Наименование eq 'ООО Ромашка'&$format=json. Параметр $format=json удобен для большинства интеграций, так как JSON проще разбирать, чем XML.

Получение документа с табличной частью выполняется через $expand: .../Document_ЗаказПокупателя(guid'...')?$expand=Товары. Ссылки на объекты в 1С передаются через GUID — это ключевой идентификатор записи в OData, его нужно получать заранее или из предыдущих запросов.

Для больших выборок обязательно используйте постраничное чтение через $top и $skip. Запрос без ограничений к регистру с миллионами записей может надолго заблокировать соединение и создать лишнюю нагрузку на сервер 1С.

Типичные ошибки при работе с OData
01
Запрос данных без $top и $filter — выгрузка всей таблицы, таймауты и нагрузка на сервер
02
Использование учётной записи с полными правами в скриптах интеграции — риск компрометации всей базы
03
Ожидание, что созданный через POST документ проведётся автоматически — стандартный интерфейс проведение не выполняет
04
Обращение по HTTP вместо HTTPS при доступе извне — логин и пароль передаются в открытом виде
05
Попытка использовать OData для массовой репликации вместо планов обмена — медленно и ненадёжно

Производительность и ограничения

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

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

Когда OData не подходит и что использовать вместо

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

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

Маршрут решения

Как выбрать механизм интеграции

Нужно быстро дать внешней системе читать справочники и документы без доработокИспользуйте стандартный OData
Внешняя система должна создавать и проводить документы с бизнес-логикойРазработайте собственный HTTP-сервис
Нужна регулярная синхронизация между двумя базами 1СНастройте план обмена
Нужен разовый перенос большого объёма данныхИспользуйте выгрузку/загрузку через файлы или обработки, а не OData

Проверка работоспособности интерфейса

Базовая проверка — открыть в браузере корневой адрес .../odata/standard.odata. Должен отобразиться XML-документ со списком доступных наборов сущностей. Если список есть — публикация и аутентификация работают.

Следующий шаг — запрос конкретного объекта с параметром $top=1. Успешный ответ с данными означает, что права на чтение настроены корректно. Пустой ответ при заведомо непустом справочнике указывает на ограничения прав или отборы на уровне ролей (RLS).

Контрольные точки

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

Открытие корневого URL standard.odata
Норма

Возвращается XML со списком объектов конфигурации

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

Ошибка 404 (нет публикации) или 401 (проблема аутентификации)

Запрос справочника с $top=1
Норма

Возвращается одна запись с полями

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

Пустой результат при заполненном справочнике — проверьте права и RLS

POST-запрос на создание элемента
Норма

Ответ 201 с данными созданного объекта

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

Ошибка 403 — не разрешено изменение объекта через OData в конфигураторе

Частые вопросы

Работает ли OData в файловой базе 1С без веб-сервера?

Нет. OData, как и любые HTTP-интерфейсы 1С, требует публикации базы на веб-сервере IIS или Apache. Файловую базу тоже можно опубликовать — веб-сервер будет обращаться к ней напрямую, но без публикации интерфейс недоступен.

Можно ли через OData провести документ?

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

Какой формат данных выбрать: XML или JSON?

Для большинства интеграций удобнее JSON — добавьте параметр $format=json в запрос. JSON компактнее и проще разбирается в скриптах и веб-приложениях. XML (Atom) остаётся форматом по умолчанию и подходит для систем, которые его ожидают.

Безопасно ли открывать OData наружу, в интернет?

Только при соблюдении мер: обязательный HTTPS, отдельная учётная запись с минимальными правами, ограничение состава опубликованных объектов, по возможности — фильтрация по IP на уровне веб-сервера или прокси. Открывать интерфейс с полными правами по HTTP недопустимо.

Нужно ли изменять конфигурацию для включения OData?

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

Почему запрос к OData выполняется медленно?

Частые причины: отсутствие фильтра и выгрузка всей таблицы, запрос связанных данных через $expand по большим табличным частям, отбор по неиндексированным полям. Начните с добавления $filter по индексированным реквизитам и $top для ограничения выборки.

Итог

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

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