Публикация веб-сервисов 1С REST API в Microsoft IIS

В статье мы настроим серверную часть 1С для использования REST API 1С:Предприятие в веб-разработке. Настройку будем производить на рабочем терминальном сервере Windows Server 2008 R2 с установленной на нем файловой 1С:Бухгалтерия 8.3 Базовая, к которой одновременно будет иметь доступ бухгалтер. В качестве веб-сервера будем использовать родной в среде Windows Internet Informational Services 7.

Подготовка и настройка Windows Server и IIS

Для использования API 1C нам необходим веб-сервер, который будет обрабатывать запросы от разрабатываемого нами веб-приложения. Поскольку мы не перестраиваем инфраструктуру, используем уже установленную платформу 1С:Предприятие и конфигурацию 1С:Бухгалтерия Базовая 8.3. В качестве веб-сервера было принято решение не устанавливать сторонние сервисы, а использовать MS IIS.

Запускаем Диспетчер сервера и нажимаем Добавить роль. Ставим галочку напротив Веб-сервер (IIS). В следующем окне проверяем наличие галочек напротив устанавливаемых компонентов.

Добавление роли на сервере Microsoft Windows Server 2008 R2

В следующем окне проверяем наличие галочек напротив устанавливаемых компонентов.

Устанавливаемые компоненты IIS

Для папки, где лежит база данных 1С добавляем права на чтение и изменения для групп IIS_USERS, IUSR. А также на запуск C:\Program Files (x86)\1cv8\8.3.xx.xxxx\bin для тех же групп.

Добавление прав доступа к каталогу базы данных 1с для пользователей веб-сервера IIS

Далее добавляем новое приложение в секции Default Web Site.

Добавляем новое приложение

Физический путь – путь до папки с базой данных 1C. В качестве псевдонима указываем произвольное значение (лучше латиницей), например, 1c. В этом случае обращение будет осуществляться по адресу http://[IP-адрес-сервера]/1c. Пул приложений – DefaultAppPool.

Настройки веб-приложения

В пуле приложений DefaultAppPool добавляем возможность запуск 32-хразрядных приложений – нажимаем «Дополнительные параметры» и изменяем значение опции «Разрешены 32-разрядные приложения» на True.

Разрешаем запуск 32-хразрядных приложений IIS

На этом этапе браузер, установленный на сервере по запросу адреса http://localhost должен выдавать приветственную заставку Microsoft IIS. Точно такую же картинку должен выдавать и браузер любого компьютера в сети по запросу http://[IP-адрес-сервера]. Если все получилось – переходим к стадии публикации веб-сервисов 1С, если нет – проверям правила файервола и настройки веб-сервера.

Начальная страница IIS свидетельствует о работоспособности веб-сервера

Чтобы REST API 1с был доступен из сети Интернет (я надеюсь, ваш Windows сервер не имеет прямого выхода в интернет), необходимо выполнить проброс портов - пример этого действия на оборудовании Mikrotik читайте в этой статье.

Публикация веб-сервисов 1С для использования его REST API веб-приложением

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

Запуск конфигуратора 1С

Далее открываем пункт меню Администрирование-Публикация на веб-сервере. В открывшемся окне вводим произвольное Имя, указываем веб-сервер (Internet Information Services), ставим галочки «Публиковать стандартный интерфейс OData», а также 2 галочки «Публиковать Web-сервисы».

Публикация веб-сервисов 1С в конфигураторе

На вкладке «HTTP сервисы» устанавливаем галочки:

  • ExternalAPI
  • ПередачаДанных
  • УниверсальнаяИнтеграцияВнутренняя

Нажимаем на кнопку «Опубликовать» и соглашаемся на перезапуск сервера IIS.

Если все прошло успешно и мы получили уведомление об этом – можно проверять работоспособность веб-клиента и API 1С. Через браузер должна быть доступна сама 1С, например http://[IP-адрес-сервера]/1c.

Моя базовая версия запустилась, но отказалась находить лицензию. Это никак не помешает в работе с API, а использовать веб-клиента 1С не планировалось.

Веб-клиент 1С запускается в веб-браузере

Поэтому добившись в окне браузера стартовой загрузки 1С, можно переходить к настройке прав доступа нашего веб-приложения к данным 1С, получаемым через API. Для этого создадим пользователя(ей), от имени которых будем работать с API.

Создание пользователя 1С для работы с FullREST API

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

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

Открываем пункт меню «Все функции», далее «Обработки»-Настройки стандартного интерфейса OData.

Если у вас нет пункта «Все функции» - включим ее в меню Настройки-Параметры – галочка «Отображать команду Все функции».

Сделаем опцию Все функции видимой

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

Выбираем данные, которые будут доступны через API 1C

Обратите внимание, на ссылку «Информация для разработчиков». Здесь представлена исчерпывающая информация по синтаксису запросов, ответов и возможных примеров использования REST API 1С:Предприятие.

Тестирование API 1C и настройка CORS

Теперь можно попробовать выполнить запрос к API, например, вбив в браузере строку http://IP-адрес-сервера/1c/odata/standard.odata/Catalog_Номенклатура?$format=application/json;odata=nometadata&$filter=IsFolder eq false and DeletionMark eq false&$top=10 &$orderby=Description asc

В ответ браузер выведет окно ввода логина и пароля – пользователя которого мы создали на предыдущем шаге. При успешной авторизации мы должны получить JSON-строку, содержащую 10 первых записей справочника Номенклатура, которые не помечены на удаление, не являются папками и отсортированы по наименованию по возрастанию.

Прекрасно! Теперь можно опробовать работу API в реальной разработке. Создадим простенькое приложение, запрашивающее данные из API 1С:Предприятие через библиотеку axios.


let http = axios({
 method: 'get',
 url: 'http://10.0.1.21/1c/odata/standard.odata/Catalog_Номенклатура?$format=application/json;odata=nometadata&$filter=IsFolder eq false and DeletionMark eq false&$top=10 &$orderby=Description asc',
 auth: {
  username: 'odata',
  password: 'SomeOdataPassword'
 }
})
 .then(response => {
  console.log(response.data)
 })

И здесь нас поджидает фиаско в виде ошибки:

Access to XMLHttpRequest at 'http://…' from origin 'http://localhost:2020' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource

Ошибка CORS

Анализ этой неприятности приводит к политикам безопасности CORS. Ошибка возникает при кроссдоменных запросах (когда домен клиента не совпадает с доменом сервера). В нашем случае есть возможность исправить это на сервере IIS. Нам потребуется значение origin из ошибки, в моем случае это http://localhost:2020.

Для этого установим Microsoft Web Platform Installer. После чего пункт Установщик веб-платформы будет отображаться в конфигураторе IIS.

Запускаем установщик веб-платформ

С его помощью мы сможем настроить политику безопасности CORS. Воспользуемся поиском – найдем CORS и установим найденный компонент. Теперь переходим к его настройке.

Устанавливаем CORS для IIS

Запускаем редактор конфигураций сайта 1С. Выбираем в выпадающем списке «Раздел» system.WebServer-cors. Установим Enabled в true. Раскрываем пункт «Коллекция» нажатием на .

Запускаем конфигуратор CORS

Добавляем запись.

  • allowCredentials -> true
  • allowed -> true
  • allowHeaders-allowAllRequestedHeaders ->true
  • origin -> имя хоста, отправляемого запрос в 1С API. В нашем случае это http://localhost:2020

Настройки CORS

  • allowMethods - нажатием на кнопку раскрываем список и добавляем все методы, которые будут нами использоваться в связке нашего веб-приложения с API 1C:Предприятие.

Добавляем необходимые методы для работы нашего веб-приложения с 1С API

Соответственно, если планируется использовать другие хосты для отправки запросов к IIS – добавляем аналогичным образом.

Теперь самое время попробовать наше первое тестовое веб-приложение.

Результат получения данных в веб-приложение из 1С через API

Как мы убедились, запрос правильно отрабатывает и API 1С корректно передало данные в наше веб-приложение.