
Расширение 1С:Предприятия, которое добавляет базе интерфейс OData версии 4: Power BI и Excel читают данные нативно, агрегация и пакетные запросы работают, доступ выдаётся токенами. Открытый код, лицензия MIT.
Задача
Канал OData у них рассчитан на четвёртую версию. К третьей подключаются с оговорками, и половина типов приезжает строками.
$apply в третьей версии нет. Чтобы получить десять итогов, отчёт выкачивает миллион строк и складывает их у себя.
На $batch штатный интерфейс отвечает 501. Каждая запись — отдельный запрос, и собрать их в одну транзакцию нечем.
Нет ETag и If-Match: два клиента, изменившие один объект, молча затирают правки друг друга.
| Что сравниваем | standard.odata | OData4 |
|---|---|---|
| Протокол | v3 | v4.0 и 4.01, JSON и CSDL XML/JSON |
| Power BI и Excel, «Из канала OData» | с оговорками | нативно, вход по токену без пароля 1С |
| Агрегация на сервере ($apply) | — | groupby, aggregate, filter, topcount |
| Пакетные запросы ($batch) | 501 | да, набор изменений — одна транзакция |
| Запись | без защиты от гонок | ETag и If-Match, безопасный повтор, проведение, движения |
| Доступ | пользователь 1С | профили: объекты, поля, отборы строк, лимиты, частота |
| Токены доступа | — | срок, отзыв, ограничение по IP |
| Журнал запросов и CORS | — | да |
| $metadata в тёплом сеансе | ~400 мс | ~25 мс, кэш между сеансами |
Решение
Имена наборов совпадают со штатными — Catalog_…, Document_…, AccumulationRegister_…, ключ Ref_Key. Для готовых отчётов переход сводится к смене адреса. Сервис строится по метаданным, поэтому работает в любой конфигурации: с БСП и без неё.
GET /base/hs/odata/v4/Document_РеализацияТоваровУслуг ?$filter=Date ge 2026-01-01T00:00:00Z and Контрагент/Description eq 'Ромашка' &$select=Number,Date,СуммаДокумента &$expand=Товары($select=Номенклатура_Key,Количество,Сумма) &$orderby=Date descЧто показало разложение
93–97%
времени запроса уходило на сборку JSON средствами 1С.
Сам запрос к базе и выгрузка результата занимают единицы миллисекунд. Оптимизировать запросы было бы бесполезно: платили не за них. Разложение сделано на странице из тысячи документов с 44 тысячами строк табличных частей.
Сериализация JSON
Сборка строк табличных частей
Формирование ответа
Выгрузить()
Запрос к базе
Компонента на Rust
Сто тысяч строк по 24 колонки: по одному значению — 13 207 мс, строкой с разделителями — 7 892, через JSON — 6 465, внутренним форматом таблицы значений — 1 316. Неудачный способ съедал весь выигрыш компоненты целиком. Сама компонента необязательная: если её нет, сервис работает на языке 1С и отвечает теми же ответами, только медленнее.
Страница документов с табличными частями
9 088 → 1 450 мс
Документы целиком, 3,5 ГБ
992 → 161 с
Документы, три поля
10,5 → 2,5 с
Справочник целиком, 154 МБ
47,9 → 11,7 с
Записи регистра накопления, 1,5 ГБ
853 → 471 с
Во сколько раз быстрее стало по сравнению с выдачей на языке 1С, ступень 100 тыс. документов.
Результат
Замеры 27 сентября 2026: файловая база, 100 тыс. документов и миллион записей в регистрах, веб-сервер на той же машине.
Документы с табличными частями
100 тыс. документов, ответ 3,5 ГБ
Записи регистра накопления
1,09 млн записей
Записи регистра бухгалтерии
1,12 млн записей — здесь мы медленнее
Справочник целиком
100 тыс. элементов, ответ 154 МБ
Записи регистра накопления
1,09 млн записей
Записи регистра бухгалтерии
1,12 млн записей
Документы с табличными частями
100 тыс. документов
Где мы медленнее
Одиночные мелкие запросы медленнее штатного интерфейса: 28 мс против 14.
Записи регистра бухгалтерии на миллион строк страницами по умолчанию отстают: 199 с против 124.
Мерено на файловой базе с веб-сервером на той же машине — клиент-серверная не замерена.
Одновременная работа многих клиентов не замерена.
Установка
Файл OData4-<версия>.cfe со страницы релизов на GitHub.
Конфигуратор → «Конфигурация → Расширения конфигурации → Добавить из файла», затем обновить конфигурацию базы данных.
В публикации базы на веб-сервере включить «Публиковать HTTP-сервисы расширений по умолчанию».
Пользователям — OData4_Пользователь, администратору — OData4_Администратор. На БСП роли выдаются через профили групп доступа.
http://сервер/база/hs/odata/v4/ от имени администратора. Первый такой запрос запоминает состав стандартного интерфейса, после чего сервис доступен остальным.
Где посмотреть