Как опубликовать 1С по OData
Что нужно получить в итоге
Openbook читает вашу базу только на чтение, через стандартный интерфейс OData, который есть в платформе 1С. Для этого нужны три вещи:
- база опубликована на веб-сервере по HTTPS с включённым стандартным интерфейсом OData (адрес
/odata/standard.odata); - в интерфейс включены нужные объекты (по умолчанию интерфейс пуст);
- заведён отдельный пользователь только на чтение, например
OPENBOOK_MCP.
Если вы не администратор 1С, отправьте эту страницу тому, кто им является. В тарифе «Для компании» помощь с публикацией входит: напишите нам, и мы подскажем по вашей конфигурации.
1. Что понадобится
- Платформа 1С:Предприятие 8.3.5 или новее и установленный компонент «Модули расширения веб-сервера».
- Веб-сервер с уже настроенным HTTPS: IIS на Windows или Apache 2.4 на Linux.
- Права администратора операционной системы. Конфигуратор для публикации запускают «от имени администратора».
macOS. Платформа 1С не умеет публиковать базы на macOS. Публикуйте на сервере с Windows или Linux, а Openbook подключайте к готовому адресу.
2. Опубликуйте базу
Подойдёт любой из двух способов.
Способ А. Из Конфигуратора
- Откройте базу в Конфигураторе, запущенном от имени администратора.
- В меню Администрирование выберите Публикация на веб-сервере…
- Укажите имя публикации (латиницей: буквы, цифры,
_или-, не более 40 символов, начинается с буквы), веб-сервер и каталог публикации. - Поставьте флажок «Публиковать стандартный интерфейс OData» и нажмите «Опубликовать».
- Для Apache после публикации перезапустите службу веб-сервера. Перезапуск закроет текущие сеансы этой публикации, поэтому делайте его вне рабочих часов.
Способ Б. Командой webinst
Утилита webinst входит в платформу: на Windows она лежит в C:\Program Files\1cv8\<версия>\bin\webinst.exe, на Linux — в /opt/1cv8/x86_64/<версия>/webinst. Запускайте её с правами администратора.
- Создайте новый пустой каталог публикации. Не используйте каталог, где уже есть
default.vrd: файл действующей публикации нельзя перезаписывать. - Положите в него файл
default.vrdс таким содержимым. В строке соединения не должно быть логина и пароля (Usr=,Pwd=):
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system" base="/buh" ib="<строка соединения с базой>">
<standardOData enable="true" reuseSessions="autouse" sessionMaxAge="20"/>
</point>
- Выполните публикацию. Для IIS:
webinst -publish -iis -wsdir buh -dir "<каталог публикации>" -connstr "<строка соединения с базой>" -descriptor "<каталог публикации>\default.vrd"
Для Apache 2.4 замените -iis на -apache24 и добавьте -confpath "<путь к httpd.conf>". Здесь buh — имя публикации; оно станет частью адреса.
3. Включите объекты в интерфейс OData
Включить стандартный интерфейс и выбрать объекты — разные действия. Публикация включает OData, а состав объектов сохраняется внутри самой базы. Пока состав не задан, по адресу /odata/standard.odata/ вы увидите почти пустой список.
Если в вашей конфигурации есть готовый экран (в типовых конфигурациях на БСП — Администрирование → Синхронизация данных → настройка стандартного интерфейса OData), отметьте объекты из списка ниже там. Иначе выполните один раз скрипт, запустив его в режиме «1С:Предприятие» под администратором базы, например из внешней обработки:
// Выполните один раз под администратором базы, в режиме «1С:Предприятие».
Объекты = Новый Массив;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("РегистрБухгалтерии.Типовой"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("ПланСчетов.Типовой"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник.Контрагенты"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник.Организации"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник.ДоговорыКонтрагентов"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник.Кассы"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник.Валюты"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник.Номенклатура"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник.Склады"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник.ОсновныеСредства"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Справочник.КлассификаторЕдиницИзмерения"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("РегистрСведений.КурсыВалют"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("РегистрСведений.РасчетПереоценкиВалютныхСредств"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Документ.ЗакрытиеМесяца"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Документ.ОперацияБух"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Документ.ПлатежноеПоручениеВходящее"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Документ.ПлатежноеПоручениеИсходящее"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Документ.ПриходныйКассовыйОрдер"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Документ.РасходныйКассовыйОрдер"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Документ.ПоступлениеТоваровУслуг"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени("Документ.РеализацияТоваровУслуг"); Если ОбъектМетаданных <> Неопределено Тогда Объекты.Добавить(ОбъектМетаданных); КонецЕсли;
УстановитьСоставСтандартногоИнтерфейсаOData(Объекты);
Сообщить("Состав OData сохранён: " + Объекты.Количество());
- Объект, которого нет в вашей конфигурации, скрипт пропускает.
- Процедура замещает состав целиком. Если базой уже пользуются другие интеграции, сначала получите текущий список функцией
ПолучитьСоставСтандартногоИнтерфейсаOData()и добавьте к нему объекты из скрипта. - Не добавляйте физических лиц, сотрудников, кадровые и зарплатные объекты: Openbook их не читает ни при каких настройках.
4. Создайте пользователя только на чтение
- Создайте в базе отдельного пользователя, например
OPENBOOK_MCP, с аутентификацией «1С:Предприятие» и паролем. Не используйте администратора и не используйте учётную запись сотрудника. - Дайте ему роль только на чтение объектов из списка выше: регистр бухгалтерии и план счетов, продажи и закупки, банковские документы, номенклатура и склады, контрагенты и организации.
- Запретите запись, проведение и удаление, административный доступ и конфигурирование, а также справочники физических лиц и сотрудников, начисление зарплаты и кадровые документы, банковские счета сотрудников и личные контакты.
Права этого пользователя действуют и внутри OData: чего у него нет, того Openbook не увидит. Подключение по OData занимает клиентскую лицензию 1С, как обычный сеанс.
5. HTTPS обязателен
Логин и пароль 1С передаются на ваш веб-сервер в каждом запросе, поэтому публикация должна быть доступна только по HTTPS с действующим сертификатом. Openbook подключается по https://; обычный http:// допускается лишь как явно разрешённое исключение для теста в доверенной сети.
Если Openbook установлен на другом компьютере, чем веб-сервер 1С, ограничьте доступ к публикации по адресам на уровне IIS или обратного прокси.
6. Проверьте адрес
- Откройте в браузере
https://<сервер>/<имя публикации>/odata/standard.odata/и войдите пользователемOPENBOOK_MCP. Должен прийти XML со списком коллекций. - В Openbook, на странице подключения, которую открывает ваш AI по просьбе «подключи Openbook», укажите адрес без
/odata/standard.odata:https://<сервер>/<имя публикации>. Окончание коннектор добавит сам. - Перед сохранением Openbook прочитает одну строку справочника
Catalog_Контрагенты. Если чтение не удалось, подключение не сохранится, а страница скажет, что именно не так.
| Что видно | Вероятная причина |
|---|---|
| Пустой список коллекций | Не задан состав интерфейса (раздел 3). |
| 401 | Неверный пользователь или пароль, либо у пользователя нет прав на объекты. |
| 404 на всём корне | Публикация не создана или каталог публикации не существует. Опубликуйте от имени администратора. |
| 500 при первом запросе | Для IIS: в пуле приложений не разрешены 32-разрядные приложения, а модуль расширения 1С 32-битный. |
| Объект есть, а данных нет | У пользователя нет прав на чтение этого объекта. |
Нужна помощь?
В тарифе «Для компании» помощь с публикацией и настройкой входит в стоимость. Напишите нам через контакты внизу страницы: расскажите, где стоит база (сервер, облако, свой компьютер) и какая у вас конфигурация.