Как правильно создать HTTP-запрос из одной базы 1С в другую и что делать, если возникает ошибка "Страница не найдена"?

Программист 1С v8.3 (Обычные формы)
← На главную

Приветствуем вас! Если вы столкнулись с ошибкой "Страница не найдена" (HTTP 404) при попытке выполнить HTTP-запрос из одной информационной базы 1С к другой, значит, мы вместе выясним причину и найдем решение. Эта проблема часто возникает из-за некорректной настройки серверной части или неправильного формирования адреса запроса. Давайте подробно разберем, как наладить взаимодействие между базами 1С с помощью HTTP-запросов.

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

Публикация информационной базы 1С на веб-сервере

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

Для публикации базы нам потребуется один из веб-серверов: IIS (Internet Information Services), который обычно используется в среде Windows Server, или Apache. Стоит отметить, что в некоторых случаях может потребоваться создание файла default.vrd без использования локального веб-сервера для подготовки настроек публикации.

Рассмотрим процесс публикации по шагам:

  1. Установка веб-сервера: Убедитесь, что на сервере, где находится целевая база 1С, установлен и настроен веб-сервер (IIS или Apache). Для IIS на Windows Server необходимо включить соответствующие компоненты, такие как "Расширения ISAPI" и "Фильтры ISAPI".
  2. Публикация через Конфигуратор: Откройте базу 1С в режиме Конфигуратор под пользователем с административными правами. Перейдите в меню "Администрирование" -> "Публикация на веб-сервере...".
  3. Настройка публикации:
    • Имя публикации: Укажите короткое и понятное имя, например, MyBaseService. Это имя будет частью URL-адреса вашей базы.
    • Каталог: Выберите или создайте каталог, куда будут сохраняться файлы публикации.
    • Веб-сервер: Выберите тип установленного веб-сервера (IIS или Apache).
    • Публикуемые сервисы: Очень важно установить флажки для тех HTTP-сервисов или интерфейса OData, которые вы планируете использовать. Если вы забудете это сделать, даже при опубликованной базе, сам сервис будет недоступен.
    • Публиковать стандартный интерфейс OData: Если вы планируете использовать OData, обязательно установите этот флажок.
    • Публиковать доступ для клиентских приложений: Этот флажок позволяет подключаться к базе через веб-клиент. Если вы планируете только программное взаимодействие через HTTP-сервисы/OData, его можно снять для повышения безопасности.
    • Использовать защищенное соединение (HTTPS): Для повышения безопасности передачи данных в интернете настоятельно рекомендуем использовать HTTPS. Если ваша задача — настроить публикацию HTTP-сервиса с использованием клиентского SSL-сертификата на Apache, это потребует дополнительной настройки конфигурационных файлов сервера.
  4. Проверка разрядности Apache: Если вы используете Apache, убедитесь, что его разрядность (32-бит или 64-бит) соответствует разрядности клиентской платформы 1С, установленной на сервере.
  5. Перезапуск веб-сервера: После публикации обязательно перезапустите веб-сервер (IIS или Apache), чтобы изменения вступили в силу.

После успешной публикации вы сможете проверить доступность базы, введя в адресную строку браузера примерно такой URL: http://<Адрес_Сервера>/<Имя_Публикации>/ru_RU/. Если база открывается, значит, основная публикация прошла успешно.

Использование HTTP-сервисов для взаимодействия

HTTP-сервисы в 1С — это мощный инструмент для организации произвольного API (Application Programming Interface), который позволяет обмениваться данными с другими системами, включая другие базы 1С.

Разработка HTTP-сервиса в конфигурации 1С

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

  1. Создание объекта метаданных: В конфигураторе откройте дерево метаданных и найдите ветку "HTTP-сервисы". Добавьте новый HTTP-сервис.
  2. Настройка корневого URL: Укажите Корневой URL, например, APIService. Это будет базовая часть адреса для всех методов вашего сервиса.
  3. Определение шаблонов URL и методов: Внутри HTTP-сервиса вы создаете Шаблоны URL. Каждый шаблон может иметь свои методы обработки запросов (GET, POST, PUT, DELETE и т.д.).
    • В шаблонах URL можно использовать параметры, которые будут передаваться в процедуру обработки запроса, например, /V1/Товары/{КодТовара}.
  4. Реализация логики в модуле: Для каждого метода в шаблоне URL необходимо создать процедуру обработки на встроенном языке 1С. Для более сложных сценариев маршрутизации запросов к внешним сервисам можно применить решение «Точка маршрутизации» — специализированный API-шлюз на платформе 1С.
    
    // Пример процедуры обработки GET-запроса
    // в модуле HTTP-сервиса
    Процедура Get(Запрос)
        Ответ = Запрос.СоздатьОтвет();
        Ответ.КодСостояния = 200; // OK
        Ответ.УстановитьТелоИзСтроки("Привет от HTTP-сервиса 1С!");
        Ответ.УстановитьЗаголовок("Content-Type", "text/plain; charset=utf-8");
    КонецПроцедуры
    
  5. Получение тела HTTP-запроса: Если вы ожидаете данные в теле запроса (например, для методов POST или PUT), вы можете получить их с помощью методов объекта HTTPСервисЗапрос.
    
    // Пример получения тела POST-запроса
    // в модуле HTTP-сервиса
    Процедура Post(Запрос)
        Ответ = Запрос.СоздатьОтвет();
        Попытка
            ТелоЗапросаСтрокой = Запрос.ПолучитьТелоКакСтроку();
            ДанныеJSON = ПрочитатьJSON(ТелоЗапросаСтрокой);
            // ... Ваша логика обработки данных ...
            Ответ.КодСостояния = 200;
            Ответ.УстановитьТелоИзСтроки("Данные успешно получены и обработаны.");
        Исключение
            Ответ.КодСостояния = 400; // Bad Request
            Ответ.УстановитьТелоИзСтроки("Ошибка обработки запроса: " + ОписаниеОшибки());
        КонецПопытки;
    КонецПроцедуры
    

Выполнение HTTP-запроса из клиентской базы 1С

Теперь давайте посмотрим, как из другой базы 1С отправить запрос к нашему опубликованному HTTP-сервису. Для этого мы будем использовать объекты HTTPСоединение, HTTPЗапрос и HTTPОтвет.

  1. Создание объекта HTTPСоединение: Этот объект отвечает за установление связи с веб-сервером.
    
    // Параметры целевой базы 1С
    ИмяСервера = "localhost";
    Порт = 80;
    ИмяПубликации = "MyBaseService";
    
    Если Порт = 443 Тогда
        ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
        Соединение = Новый HTTPСоединение(ИмяСервера, Порт, , , , ЗащищенноеСоединение);
    Иначе
        Соединение = Новый HTTPСоединение(ИмяСервера, Порт);
    КонецЕсли;
    
  2. Создание объекта HTTPЗапрос: Этот объект описывает сам запрос.
    
    Ресурс = "/" + ИмяПубликации + "/hs/APIService/V1/Товары/00001";
    Запрос = Новый HTTPЗапрос(Ресурс);
    Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    Запрос.Заголовки.Вставить("Accept", "application/json");
    
  3. Выполнение запроса и получение HTTPОтвет:
    
    Попытка
        Ответ = Соединение.Получить(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            Сообщить("Запрос успешно выполнен.");
            ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
        Иначе
            Сообщить("Ошибка. Код состояния: " + Ответ.КодСостояния);
        КонецЕсли;
    Исключение
        Сообщить("При выполнении HTTP-запроса произошла ошибка: " + ОписаниеОшибки());
    КонецПопытки;
    

Использование стандартного интерфейса OData

OData (Open Data Protocol) позволяет автоматически формировать REST-интерфейс для всего прикладного решения. Это позволяет взаимодействовать с объектами 1С без написания кода HTTP-сервисов вручную.

Настройка и публикация OData

  1. Настройка в конфигурации (для БСП): В пользовательском режиме перейдите в "Администрирование" -> "Синхронизация данных" -> "Настройки стандартного интерфейса OData" для выбора доступных объектов.
  2. Публикация на веб-сервере: Не забудьте установить флажок "Публиковать стандартный интерфейс OData" при публикации базы.
  3. Безопасность: Рекомендуется использовать минимальные права доступа для учетных записей OData.

Выполнение запроса к OData из клиентской базы 1С

URL для OData: http://<Адрес_Сервера>/<Имя_Публикации>/odata/standard.odata/.


// Пример запроса к справочнику "Номенклатура"
РесурсOData = "/" + ИмяПубликации + "/odata/standard.odata/Catalog_Номенклатура?$format=json";
ЗапросOData = Новый HTTPЗапрос(РесурсOData);
Попытка
    ОтветOData = Соединение.Получить(ЗапросOData);
    // Обработка результата...
КонецПопытки;

Диагностика ошибки "Страница не найдена" (404 Not Found)

Ошибка 404 — самый частый спутник начинающих. Основные причины:

  1. База не опубликована: Проверьте наличие файлов публикации в каталоге веб-сервера.
  2. Неправильный URL-адрес: Опечатки в имени публикации или корневом URL (/hs/... для сервисов, /odata/... для OData).
  3. Компоненты не выбраны: Проверьте флажки публикации конкретных HTTP-сервисов.
  4. Веб-сервер: Перезапустите IIS или Apache.
  5. Брандмауэр: Убедитесь, что порты 80/443 открыты для входящих соединений.

Отладка и безопасность

Отладка HTTP-сервисов и запросов

Для эффективной отладки рекомендуем:

  1. Включение отладки по HTTP: Настройте параметры отладки в конфигураторе.
  2. Использование Postman: Этот инструмент незаменим для тестирования запросов перед их реализацией в коде 1С.
  3. Журнал регистрации: Всегда проверяйте логи на стороне сервера.

Аутентификация и безопасность

При обмене данными не забывайте о защите:

  1. Аутентификация: Создавайте отдельных пользователей. Для современных систем отлично подойдет реализация аутентификации по JWT-токену стандартными средствами 1С.
  2. HTTPS: Всегда используйте шифрование для защиты данных.
  3. Токены доступа: При работе с JWT помните о времени жизни токена и необходимости его обновления.

Мы надеемся, что это подробное руководство поможет вам успешно настроить HTTP-взаимодействие между вашими базами 1С и избежать ошибки "Страница не найдена". Успешной работы!

← На главную