Почему не работает отладка веб-сервиса 1С в одной конкретной базе и как это исправить?

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

При работе с платформой 1С:Предприятие 8.2 (особенно на сборках типа 8.2.19.130) системные администраторы и разработчики часто сталкиваются с мистической ситуацией: отладка веб-сервисов прекрасно работает в одной информационной базе, но категорически отказывается запускаться в другой, даже если настройки кажутся идентичными. Ситуация осложняется, если сервер работает под управлением Linux в связке с Apache.

В этой статье мы подробно разберем, почему отладчик может игнорировать конкретную базу, проанализируем неочевидные настройки конфигурационных файлов и выясним, как добиться стабильной работы отладки в сложных инфраструктурных условиях.

Анализ исходной ситуации

Рассмотрим типичный сценарий: на одном сервере опубликовано несколько баз. В конфигураторе включен параметр «Автоматическое подключение: Веб-сервисы». Для большинства баз при вызове метода веб-сервиса отладка «цепляется» мгновенно, позволяя проходить по точкам останова. Однако в «проблемной» базе сеанс авторизуется (это видно в Журнале регистрации), код выполняется, но отладчик не реагирует.

Выясним причины такого поведения, переходя от простых настроек к глубоким системным конфигурациям.

Проверка идентичности строк подключения (Регистрозависимость)

Одной из самых частых и неочевидных причин является несовпадение строк подключения. Для отладчика 1С принципиально важно, чтобы параметры сервера и базы совпадали символ в символ.

Проанализируем файл публикации default.vrd, который обычно находится в каталоге публикации веб-сервиса на стороне Apache. Нас интересуют атрибуты Srvr и Ref в элементе point. Сравните их с тем, как база прописана в списке информационных баз вашего Конфигуратора:

Убедитесь, что строки подключения в окне запуска 1С и в файле публикации абсолютно идентичны.

Тонкая настройка файла default.vrd

Разберем структуру файла default.vrd. Для включения отладки в нем должен присутствовать параметр debug="true". Однако использование localhost в качестве адреса отладчика часто приводит к проблемам на Linux-серверах.

Если Конфигуратор запущен на вашем локальном компьютере (Windows), а веб-сервис крутится на удаленном Linux-сервере, указание url="tcp://localhost" заставит сервер искать отладчик на самом себе. Вместо этого нужно явно указать IP-адрес вашего рабочего места.

Пример правильной настройки элемента point в файле default.vrd:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/MyBase"
       ib="Srvr=192.168.1.10;Ref=MyBase;"
       debug="true"
       url="tcp://192.168.1.50"/>

Здесь 192.168.1.50 — это IP вашего компьютера, где открыт Конфигуратор. Не забывайте, что порт 1560-1591 (и управляющий порт 1550) должен быть открыт на вашем компьютере для входящих соединений со стороны сервера 1С.

Использование дополнительных конфигурационных файлов

В некоторых случаях настроек в default.vrd недостаточно. Проанализируем необходимость создания файла webservicecfg.xml. В Linux-версии 1С этот файл должен располагаться в каталоге настроек платформы (например, /opt/1C/v8.2/i386/conf/ или /opt/1C/v8.2/x86_64/conf/).

Создадим этот файл со следующим содержанием для принудительной активации отладки:


<config xmlns="http://v8.1c.ru/v8/webservicecfg">
   <debugconfig debug="true" debuggerURL="tcp://192.168.1.50"/>
</config>

Это глобальная настройка, которая поможет, если расширение веб-сервера по каким-то причинам игнорирует локальные параметры .vrd файла.

Диагностика через Журнал регистрации

Если отладка так и не заработала, воспользуемся методом «логирования», чтобы понять, на каком этапе происходит сбой в логике кода. Рассмотрим пример использования метода ЗаписьЖурналаРегистрации внутри процедуры веб-сервиса.

Посмотрим на пример кода, который поможет отследить значения переменных без использования точки останова:


Процедура ВыполнитьОбменДанными(Данные)
    
    // Записываем начало выполнения
    ЗаписьЖурналаРегистрации("Web-сервис.Отладка",
        УровеньЖурналаРегистрации.Информация,
        ,
        ,
        "Вызов метода ВыполнитьОбменДанными начат. Параметры: " + Данные);
        
    Попытка
        // Здесь ваша логика
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ * ИЗ Справочник.Номенклатура ГДЕ Код = &Код";
        Запрос.УстановитьПараметр("Код", Данные);
        
        // Логируем текст запроса для проверки
        ЗаписьЖурналаРегистрации("Web-сервис.Отладка",
            УровеньЖурналаРегистрации.Текст,
            ,
            ,
            "Выполняемый запрос: " + Запрос.Текст);
            
        Результат = Запрос.Выполнить();
        // ... продолжение логики
        
    Исключение
        ЗаписьЖурналаРегистрации("Web-сервис.Ошибка",
            УровеньЖурналаРегистрации.Ошибка,
            ,
            ,
            "Произошла ошибка: " + ОписаниеОшибки());
    КонецПопытки;

КонецПроцедуры

Этот метод позволяет увидеть, заходит ли выполнение в нужные блоки кода и какие данные получает запрос. Если в Журнале регистрации записи появляются, значит веб-сервис работает, и проблема локализована исключительно в механизме HTTP-отладки.

Очистка серверного кэша и специфические права доступа

Проанализируем ситуацию с кэшем. В 1С 8.2 на Linux кэш метаданных и сеансовых данных может «забаговать» именно для одной базы. Рассмотрим пошаговый алгоритм безопасной очистки:

  1. Остановите службу сервера 1С: service srv1cv82 stop.
  2. Остановите Apache: service httpd stop (или apache2).
  3. Перейдите в каталог с данными сервера 1С (обычно /home/usr1cv8/.1cv8/1C/1cv82/).
  4. Найдите папку с GUID проблемной базы. Внимание! Не удаляйте папку базы целиком, если там хранятся настройки. Очистите только вложенные папки с временными файлами (кэшем).
  5. Очистите содержимое системной папки /tmp/ от всех файлов, начинающихся на v8_.
  6. Запустите службы снова.

Также важно проверить права доступа. Процесс Apache (пользователь www-data или apache) должен иметь права на чтение всех конфигурационных файлов 1С. Если для проблемной базы публикация была создана «вручную» копированием файлов, проверьте, не остались ли владельцем файлов root, что может мешать расширению 1С корректно считывать параметры отладки.

Заключение

Отладка веб-сервисов в 1С 8.2 — это чувствительный к настройкам процесс. Мы выяснили, что чаще всего проблема кроется в регистрозависимости строк подключения, неправильном IP-адресе отладчика в файле публикации или блокировке портов фаерволом на стороне разработчика. Если стандартные методы не помогают, использование расширенного логирования через ЗаписьЖурналаРегистрации остается самым надежным способом понять, что происходит «под капотом» веб-сервиса.

← На главную