Разработка и поддержка механизмов обмена данными через HTTP-сервисы — одна из наиболее частых задач современного программиста 1С. Однако процесс отладки таких сервисов часто вызывает затруднения, особенно когда вместо ожидаемых данных мы получаем код состояния 404 Not Found. В этой статье мы подробно разберем, как настроить среду разработки для полноценной отладки, проанализируем типичные ошибки при формировании запросов и выясним, как заставить конфигуратор "останавливаться" в коде серверного расширения.
Прежде чем переходить к настройке отладчика, проанализируем ситуацию, когда сервер возвращает ошибку 404. Рассмотрим структуру URL-адреса, которую формирует автор в своем примере. В коде 1С это выглядит так:
HttpЗапрос = Новый HttpЗапрос("ut10/hs/obmen2/shabl", Заголовки);
Соединение = Новый HTTPСоединение("localhost", , "1", "1");
Разберем по шагам, как должен выглядеть корректный путь. Стандартная структура URL для HTTP-сервиса в 1С выглядит следующим образом: http://[Сервер]/[ИмяПубликации]/hs/[КорневойURL]/[ШаблонURL].
Проанализируем типичные ошибки в формировании пути:
HTTPСоединение вы указываете только адрес сервера (как в примере выше — localhost), то в конструкторе HTTPЗапрос путь должен начинаться с имени публикации. Однако, если имя базы ut10 уже входит в настройки соединения, повторное указание его в пути приведет к тому, что веб-сервер будет искать ресурс по адресу ut10/ut10/hs/..., что неизбежно вызовет ошибку 404.hs. Он указывает веб-серверу (Apache или IIS), что запрос должен быть передан именно модулю расширения HTTP-сервисов 1С.КорневойURL в свойствах HTTP-сервиса в конфигураторе и в строке запроса совпадают до последнего знака.Для того чтобы точка останова, установленная в модуле HTTP-сервиса, сработала, недостаточно просто запустить конфигуратор. Рассмотрим, как настроить автоматическое подключение предметов отладки.
Выполним следующие шаги в конфигураторе:
После этих настроек при поступлении внешнего запроса конфигуратор попытается "перехватить" управление, если найдет установленную точку останова в соответствующем методе (GET, POST и т.д.).
Если автоматическое подключение не срабатывает, необходимо проверить конфигурационный файл публикации default.vrd. Этот файл находится в каталоге, куда была опубликована база (например, C:\inetpub\wwwroot\MyBase\ для IIS или в каталоге htdocs для Apache).
Проанализируем содержимое файла. Нам необходимо добавить или отредактировать узел debug. Рассмотрим два варианта настройки в зависимости от используемого протокола отладки.
Вариант 1: Отладка по протоколу TCP
Этот способ чаще использовался в старых версиях платформы (до 8.3.7), но актуален и сейчас для определенных конфигураций сети:
<debug enable="true" protocol="tcp" url="tcp://localhost" />
Вариант 2: Отладка по протоколу HTTP (Рекомендуется)
Современный стандарт для платформы 8.3. Этот метод более стабилен при работе через брандмауэры:
<debug enable="true" protocol="http" url="http://localhost" />
Важное примечание: При включении отладки в default.vrd помните, что веб-сервер будет ждать ответа от конфигуратора. Если конфигуратор закрыт, а отладка включена, внешний запрос может "зависнуть" до истечения таймаута веб-сервера.
Посмотрим на специфику работы с веб-сервером Apache. В отличие от IIS, Apache может требовать дополнительных манипуляций с правами доступа к папке публикации. Убедитесь, что пользователь, под которым запущен сервис Apache (обычно это SYSTEM или специальный пользователь www-data), имеет права на чтение и выполнение в каталоге с базой данных и модулями расширения 1С.
Также проверьте файл httpd.conf веб-сервера Apache. В нем должна быть загружена соответствующая библиотека 1С (например, LoadModule _1cws_module ...). Если модуль загружен некорректно, запросы к /hs/ не будут обрабатываться 1С, и вы снова увидите ошибку 404.
Рассмотрим ситуацию, когда отладчик подключить невозможно (например, на продуктовом сервере). В этом случае выясним причину ошибки с помощью логирования входящих данных. В самом начале метода-обработчика (например, МетодПОСТ) добавим следующий код:
Процедура ШаблонПринятьДанные(Запрос)
// Логируем входящее тело запроса для анализа
ТекстЗапроса = Запрос.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
ЗаписьЖурналаРегистрации("HTTP_Обмен", УровеньЖурналаРегистрации.Информация, , , "Тело запроса: " + ТекстЗапроса);
// Проверяем параметры URL
Для Каждого Параметр Из Запрос.ПараметрыURL Цикл
ЗаписьЖурналаРегистрации("HTTP_Обмен", , , , "Параметр: " + Параметр.Ключ + " = " + Параметр.Значение);
КонецЦикла;
// Далее идет логика обработки...
КонецПроцедуры
Этот метод позволяет увидеть, доходит ли запрос до базы вообще. Если после отправки запроса в журнале регистрации не появилось записей — значит, проблема на уровне веб-сервера (ошибка 404 или 403) и код 1С даже не начинает выполняться.
Проанализируем еще один важный аспект. Часто ошибка кроется в коде 1С, который отправляет запрос. Чтобы исключить этот фактор, рекомендуется использовать сторонние утилиты, такие как Postman или Insomnia. После настройки корректной передачи данных для контроля итоговых движений по счетам учёта можно автоматически сравнить бухгалтерские и налоговые проводки между базами 1С.
Выполним проверку по шагам:
Content-Type: application/json).Если через Postman запрос проходит успешно и возвращает код 200, значит, проблему нужно искать в коде отправителя в 1С (ошибки в объекте HTTPСоединение). Если же и Postman получает 404 — проблема в публикации или структуре URL на стороне сервера-приемника.
Мы рассмотрели основные способы диагностики и отладки HTTP-сервисов. Подведем итог: для успешного решения задачи необходимо убедиться в правильности URL (наличие сегмента /hs/), проверить параметры в файле default.vrd и настроить автоматическое подключение предметов отладки в конфигураторе. Сочетание полноценной отладки с использованием точек останова и логирования в Журнал регистрации позволяет быстро найти и устранить ошибки в логике обмена данными.