Как отлаживать HTTP-сервисы в 1С и исправить ошибку 404 при обмене данными?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработка и поддержка механизмов обмена данными через HTTP-сервисы — одна из наиболее частых задач современного программиста 1С. Однако процесс отладки таких сервисов часто вызывает затруднения, особенно когда вместо ожидаемых данных мы получаем код состояния 404 Not Found. В этой статье мы подробно разберем, как настроить среду разработки для полноценной отладки, проанализируем типичные ошибки при формировании запросов и выясним, как заставить конфигуратор "останавливаться" в коде серверного расширения.

Разбор первой проблемы: Почему возникает ошибка 404?

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


HttpЗапрос = Новый HttpЗапрос("ut10/hs/obmen2/shabl", Заголовки);
Соединение = Новый HTTPСоединение("localhost", , "1", "1");

Разберем по шагам, как должен выглядеть корректный путь. Стандартная структура URL для HTTP-сервиса в 1С выглядит следующим образом: http://[Сервер]/[ИмяПубликации]/hs/[КорневойURL]/[ШаблонURL].

Проанализируем типичные ошибки в формировании пути:

  1. Дублирование имени публикации. Если при создании объекта HTTPСоединение вы указываете только адрес сервера (как в примере выше — localhost), то в конструкторе HTTPЗапрос путь должен начинаться с имени публикации. Однако, если имя базы ut10 уже входит в настройки соединения, повторное указание его в пути приведет к тому, что веб-сервер будет искать ресурс по адресу ut10/ut10/hs/..., что неизбежно вызовет ошибку 404.
  2. Обязательный сегмент hs. Сразу после имени публикации базы в URL должен идти фиксированный сегмент hs. Он указывает веб-серверу (Apache или IIS), что запрос должен быть передан именно модулю расширения HTTP-сервисов 1С.
  3. Регистрозависимость. На серверах под управлением Linux (где часто работает Apache) пути чувствительны к регистру. Проверьте, что КорневойURL в свойствах HTTP-сервиса в конфигураторе и в строке запроса совпадают до последнего знака.
  4. Публикация сервиса. Если вы добавили новый HTTP-сервис в конфигурацию, но не обновили публикацию на веб-сервере (меню Администрирование — Публикация на веб-сервере), веб-сервер просто не узнает о существовании нового ресурса.

Настройка автоматического подключения отладчика

Для того чтобы точка останова, установленная в модуле HTTP-сервиса, сработала, недостаточно просто запустить конфигуратор. Рассмотрим, как настроить автоматическое подключение предметов отладки.

Выполним следующие шаги в конфигураторе:

  1. Перейдем в меню Отладка — Подключение...
  2. В открывшемся окне нажмем кнопку Автоматическое подключение...
  3. В списке флажков обязательно отметим пункт HTTP-сервисы на сервере. Также рекомендуется отметить Web-сервисы на сервере, если они используются в обмене.

После этих настроек при поступлении внешнего запроса конфигуратор попытается "перехватить" управление, если найдет установленную точку останова в соответствующем методе (GET, POST и т.д.).

Включение отладки в файле публикации default.vrd

Если автоматическое подключение не срабатывает, необходимо проверить конфигурационный файл публикации 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

Посмотрим на специфику работы с веб-сервером 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С.

Выполним проверку по шагам:

  1. Скопируйте URL сервиса и попробуйте вызвать его через Postman.
  2. Укажите тип запроса (POST) и добавьте необходимые заголовки (Content-Type: application/json).
  3. Настройте авторизацию (Basic Auth), используя логин и пароль пользователя 1С.

Если через Postman запрос проходит успешно и возвращает код 200, значит, проблему нужно искать в коде отправителя в 1С (ошибки в объекте HTTPСоединение). Если же и Postman получает 404 — проблема в публикации или структуре URL на стороне сервера-приемника.

Итоги и рекомендации

Мы рассмотрели основные способы диагностики и отладки HTTP-сервисов. Подведем итог: для успешного решения задачи необходимо убедиться в правильности URL (наличие сегмента /hs/), проверить параметры в файле default.vrd и настроить автоматическое подключение предметов отладки в конфигураторе. Сочетание полноценной отладки с использованием точек останова и логирования в Журнал регистрации позволяет быстро найти и устранить ошибки в логике обмена данными.

← На главную