Приветствуем вас! Если вы столкнулись с ошибкой "Страница не найдена" (HTTP 404) при попытке выполнить HTTP-запрос из одной информационной базы 1С к другой, значит, мы вместе выясним причину и найдем решение. Эта проблема часто возникает из-за некорректной настройки серверной части или неправильного формирования адреса запроса. Давайте подробно разберем, как наладить взаимодействие между базами 1С с помощью HTTP-запросов.
Мы рассмотрим два основных подхода к организации такого взаимодействия: через HTTP-сервисы, которые вы разрабатываете самостоятельно, и через стандартный интерфейс OData, предоставляемый платформой 1С. Для упрощения процесса обмена данными между приложениями можно также рассмотреть готовые инструменты, такие как система O-Bridges для организации обмена файлами и данными.
Прежде чем мы сможем обратиться к другой базе 1С по протоколу HTTP, необходимо, чтобы эта база была опубликована на веб-сервере. Без этого шага любая попытка обращения к ней завершится ошибкой "Страница не найдена", поскольку веб-сервер просто не будет знать, куда маршрутизировать ваш запрос.
Для публикации базы нам потребуется один из веб-серверов: IIS (Internet Information Services), который обычно используется в среде Windows Server, или Apache. Стоит отметить, что в некоторых случаях может потребоваться создание файла default.vrd без использования локального веб-сервера для подготовки настроек публикации.
Рассмотрим процесс публикации по шагам:
Конфигуратор под пользователем с административными правами. Перейдите в меню "Администрирование" -> "Публикация на веб-сервере...".MyBaseService. Это имя будет частью URL-адреса вашей базы.HTTPS. Если ваша задача — настроить публикацию HTTP-сервиса с использованием клиентского SSL-сертификата на Apache, это потребует дополнительной настройки конфигурационных файлов сервера.После успешной публикации вы сможете проверить доступность базы, введя в адресную строку браузера примерно такой URL: http://<Адрес_Сервера>/<Имя_Публикации>/ru_RU/. Если база открывается, значит, основная публикация прошла успешно.
HTTP-сервисы в 1С — это мощный инструмент для организации произвольного API (Application Programming Interface), который позволяет обмениваться данными с другими системами, включая другие базы 1С.
Давайте разберем процесс создания собственного HTTP-сервиса. Чтобы не писать каждый раз код с нуля, вы можете использовать универсальный модуль с процедурами для быстрой разработки API, который значительно ускоряет процесс расширения функционала.
Корневой URL, например, APIService. Это будет базовая часть адреса для всех методов вашего сервиса.Шаблоны URL. Каждый шаблон может иметь свои методы обработки запросов (GET, POST, PUT, DELETE и т.д.).
/V1/Товары/{КодТовара}.
// Пример процедуры обработки GET-запроса
// в модуле HTTP-сервиса
Процедура Get(Запрос)
Ответ = Запрос.СоздатьОтвет();
Ответ.КодСостояния = 200; // OK
Ответ.УстановитьТелоИзСтроки("Привет от HTTP-сервиса 1С!");
Ответ.УстановитьЗаголовок("Content-Type", "text/plain; charset=utf-8");
КонецПроцедуры
POST или PUT), вы можете получить их с помощью методов объекта HTTPСервисЗапрос.
// Пример получения тела POST-запроса
// в модуле HTTP-сервиса
Процедура Post(Запрос)
Ответ = Запрос.СоздатьОтвет();
Попытка
ТелоЗапросаСтрокой = Запрос.ПолучитьТелоКакСтроку();
ДанныеJSON = ПрочитатьJSON(ТелоЗапросаСтрокой);
// ... Ваша логика обработки данных ...
Ответ.КодСостояния = 200;
Ответ.УстановитьТелоИзСтроки("Данные успешно получены и обработаны.");
Исключение
Ответ.КодСостояния = 400; // Bad Request
Ответ.УстановитьТелоИзСтроки("Ошибка обработки запроса: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Теперь давайте посмотрим, как из другой базы 1С отправить запрос к нашему опубликованному HTTP-сервису. Для этого мы будем использовать объекты HTTPСоединение, HTTPЗапрос и HTTPОтвет.
HTTPСоединение: Этот объект отвечает за установление связи с веб-сервером.
// Параметры целевой базы 1С
ИмяСервера = "localhost";
Порт = 80;
ИмяПубликации = "MyBaseService";
Если Порт = 443 Тогда
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(ИмяСервера, Порт, , , , ЗащищенноеСоединение);
Иначе
Соединение = Новый HTTPСоединение(ИмяСервера, Порт);
КонецЕсли;
HTTPЗапрос: Этот объект описывает сам запрос.
Ресурс = "/" + ИмяПубликации + "/hs/APIService/V1/Товары/00001";
Запрос = Новый HTTPЗапрос(Ресурс);
Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Запрос.Заголовки.Вставить("Accept", "application/json");
HTTPОтвет:
Попытка
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Сообщить("Запрос успешно выполнен.");
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
Иначе
Сообщить("Ошибка. Код состояния: " + Ответ.КодСостояния);
КонецЕсли;
Исключение
Сообщить("При выполнении HTTP-запроса произошла ошибка: " + ОписаниеОшибки());
КонецПопытки;
OData (Open Data Protocol) позволяет автоматически формировать REST-интерфейс для всего прикладного решения. Это позволяет взаимодействовать с объектами 1С без написания кода HTTP-сервисов вручную.
URL для OData: http://<Адрес_Сервера>/<Имя_Публикации>/odata/standard.odata/.
// Пример запроса к справочнику "Номенклатура"
РесурсOData = "/" + ИмяПубликации + "/odata/standard.odata/Catalog_Номенклатура?$format=json";
ЗапросOData = Новый HTTPЗапрос(РесурсOData);
Попытка
ОтветOData = Соединение.Получить(ЗапросOData);
// Обработка результата...
КонецПопытки;
Ошибка 404 — самый частый спутник начинающих. Основные причины:
/hs/... для сервисов, /odata/... для OData).Для эффективной отладки рекомендуем:
При обмене данными не забывайте о защите:
Мы надеемся, что это подробное руководство поможет вам успешно настроить HTTP-взаимодействие между вашими базами 1С и избежать ошибки "Страница не найдена". Успешной работы!