Разработка веб-сервисов в 1С — задача ответственная, и одна из самых частых сложностей, с которой сталкиваются программисты, — это невозможность «поймать» момент выполнения кода на стороне сервера. Часто возникает ситуация, когда запрос уходит, данные вроде бы обрабатываются, но точка останова не срабатывает, или, как в случае автора вопроса, не удается достучаться до конкретного реквизита. Разберем по шагам, как настроить окружение, чтобы отладка работала стабильно.
Первым делом нам необходимо убедиться, что Конфигуратор настроен на перехват сеансов, инициированных веб-сервисом. Поскольку веб-сервис создает фоновый сеанс при каждом обращении, мы не можем «успеть» подключиться к нему вручную. Проанализируем необходимые действия в интерфейсе:
После этого Конфигуратор будет пытаться автоматически «подцепить» любой сеанс веб-сервиса, который обращается к данной информационной базе, а инструмент для тестирования GET и POST запросов позволит инициировать нужный вызов. Однако, важно понимать: этого флажка достаточно только в том случае, если сервер 1С уже подготовлен к отладке на уровне системных настроек.
Если вы установили флажок, но точка останова всё равно игнорируется, значит, сервер 1С запущен в обычном режиме. По умолчанию отладка на сервере выключена для экономии ресурсов. Рассмотрим подробнее, как это исправить для разных операционных систем.
Для ОС Windows:
Нам необходимо модифицировать строку запуска службы сервера. Для этого выполним следующие действия:
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3... (название зависит от версии платформы).ImagePath.-debug.Для ОС Linux:
В Linux-системах настройка выполняется через конфигурационные файлы. Выясним причину, если файл не найден: путь зависит от дистрибутива, обычно это /etc/sysconfig/srv1cv83 или /etc/default/srv1cv83. В файле нужно найти или добавить переменную SRV1CV8_DEBUG=1 и перезапустить демона сервера.
При публикации веб-сервиса создается специальный файл описания — default.vrd. Он находится в каталоге на веб-сервере (Apache или IIS). Для успешной отладки этот файл должен содержать разрешение на передачу отладочной информации. Разберем структуру этого файла.
Вам необходимо найти секцию <base> и убедиться, что в ней присутствует атрибут debug. Пример правильной записи:
<point name="MyWebService"
alias="ws1.1с"
enable="true">
<debug enable="true" url="tcp://localhost" />
</point>
Если вы используете современный протокол отладки по HTTP, адрес может выглядеть иначе, например: url="http://имя_сервера:порт". Без этой настройки веб-сервер просто «не поймет», что сеанс нужно передать отладчику Конфигуратора.
Начиная с версии 8.3.7, платформа поддерживает два способа связи между отладчиком и сервером. Посмотрим на их отличия, чтобы выбрать подходящий:
Иногда код веб-сервиса даже не начинает выполняться, так как ошибка происходит раньше. Проанализируем ситуацию: при любом вызове веб-сервиса система сначала инициализирует сеанс. При этом выполняется процедура УстановкаПараметровСеанса в модуле сеанса.
Если в этой процедуре есть ошибки или стоят условия, которые некорректно отрабатывают для пользователя веб-сервиса, выполнение прервется. Попробуем поставить точку останова в самом начале УстановкаПараметровСеанса. Если отладчик там остановится, значит, настройки подключения верны, и проблему нужно искать в инициализации данных.
Если точка останова упорно не срабатывает, рассмотрим альтернативный метод диагностики. Иногда быстрее и проще записать значение проблемного реквизита в журнал регистрации, чтобы убедиться, что данные вообще доходят до сервера.
Пример использования функции записи:
ЗаписьЖурналаРегистрации("ОтладкаВебСервиса",
УровеньЖурналаРегистрации.Предупреждение, , ,
"Значение реквизита: " + Строка(НужныйРеквизит));
Это поможет вам понять, на каком этапе «теряется» значение: при передаче в параметрах запроса или уже внутри логики самого веб-сервиса. Кроме того, не забывайте про задержку подключения: иногда первый запрос к сервису уходит «вхолостую», пока отладчик инициализирует соединение. Повторный вызов обычно отрабатывает уже с перехватом управления.