Ошибка видна только в браузере: где искать причину и как поймать её отладчиком
Содержание
Отладить веб-клиент 1С проще всего штатным отладчиком Конфигуратора или EDT: включите отладку по протоколу HTTP, запустите веб-клиент из Отладка → Начать отладку → Веб-клиент или добавьте к адресу публикации параметр ?DebuggerURL=http://localhost:1550. Точки останова в клиентских процедурах сработают прямо в браузере, серверные — на сервере 1С.
Если отладчик подключить нельзя (рабочий сервер, нет доступа к кластеру), остаются три инструмента: инструменты разработчика браузера (F12), журнал регистрации и технологический журнал. Отладчик выбирают, когда ошибка воспроизводится по шагам. Логи — когда она плавающая или случается только у конкретного пользователя.
Как код выполняется в веб-клиенте и почему это важно для отладки
Веб-клиент — это не отдельная программа, а страница в браузере. Клиентский код модулей форм и общих модулей с флагом «Клиент» платформа превращает в JavaScript, и его исполняет браузер. Серверный код работает там же, где и в тонком клиенте: на рабочем процессе кластера или, в файловом варианте, внутри процесса веб-сервера.
Цепочка вызова выглядит так:
- 🖥 Браузер выполняет клиентскую процедуру (
&НаКлиенте). - 🌐 Вызов серверной процедуры уходит HTTP-запросом на веб-сервер (Apache или IIS) с модулем расширения 1С.
- ⚙️ Модуль веб-сервера передаёт вызов серверу 1С или обрабатывает его сам в файловом режиме.
- 🔁 Ответ возвращается в браузер, и клиентский код продолжает работу.
Отсюда три следствия для отладки:
- Ошибка может жить в любом из трёх звеньев. Браузер, веб-сервер и сервер 1С пишут свои логи, и смотреть нужно все.
- Часть кода в веб-клиенте не выполняется вовсе. Блоки
#Если ТолстыйКлиентОбычноеПриложение Тогдаи#Если ТонкийКлиент Тогдабраузер пропускает. Для веб-клиента есть своя директива#Если ВебКлиент Тогда. - Не всё, что работает в тонком клиенте, доступно в браузере. COM-объекты на клиенте, часть внешних компонент, прямой доступ к файловой системе без расширения для работы с 1С:Предприятием — типичные источники ошибок «только в вебе».
Первым делом убедитесь, что ошибка действительно специфична для веб-клиента. Повторите те же действия в тонком клиенте под тем же пользователем. Воспроизводится и там — отлаживайте в тонком клиенте, это быстрее.
Подготовка среды: что включить на сервере, в публикации и в Конфигураторе
Отладка веб-клиента в 8.3 идёт через сервер отладки (dbgs) по протоколу HTTP. По умолчанию он слушает порт 1550. Порядок настройки зависит от варианта базы.
Клиент-серверная база
Серверу 1С нужно разрешить отладку. Агент кластера (ragent) должен быть запущен с ключами -debug -http. Для службы Windows ключи дописывают в строку запуска службы (параметр ImagePath в разделе службы агента в реестре) и перезапускают её.
Перезапуск службы агента обрывает сеансы всех пользователей кластера. Делайте это вне рабочего времени и только на тестовом или разработческом сервере. На рабочем сервере отладку держать включённой не стоит: она снижает производительность.
Файловая база, опубликованная на веб-сервере
Серверный код здесь выполняет модуль веб-сервера. Отладку разрешают в файле публикации default.vrd элементом debug:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/demo"
ib="File="C:\Bases\Demo";">
<debug enable="true" protocol="http" url="http://localhost:1550"/>
</point>
После правки default.vrd перезапустите веб-сервер или пул приложений IIS. Для Apache это рестарт службы, для IIS — перезапуск пула, в котором работает публикация.
Конфигуратор
- Откройте
Сервис → Параметры → Отладкаи выберите отладку по протоколу HTTP. Адрес сервера отладки для локальной машины —http://localhost:1550. - Там же, в параметрах запуска 1С:Предприятия, укажите адрес публикации и браузер, в котором будет открываться веб-клиент. Название вкладки в разных версиях платформы может отличаться, ищите поле с URL веб-клиента.
- В
Отладка → Подключениенажмите «Автоматическое подключение» и отметьте типы предметов отладки: веб-клиент и сервер.
Для 1C:EDT логика та же: в конфигурации запуска выбирают веб-клиент, указывают адрес публикации и сервер отладки.
Точки останова и пошаговое выполнение в браузере
Запустить веб-клиент под отладкой можно двумя способами.
| Способ | Когда удобен | Что учесть |
|---|---|---|
Отладка → Начать отладку → Веб-клиент в Конфигураторе | Разработка на своей машине | Конфигуратор сам откроет браузер с нужными параметрами |
Параметр DebuggerURL в адресе публикации | Отладка с другой машины или в другом браузере | Адрес сервера отладки должен быть доступен из браузера |
Пример адреса для второго способа:
http://srv-web/demo/ru_RU/?DebuggerURL=http://dev-pc:1550
Здесь srv-web/demo — публикация, dev-pc — машина, где запущен Конфигуратор с сервером отладки.
Как ставить точки и что увидите
- В модуле формы поставьте точку останова (F9) на строку внутри процедуры
&НаКлиенте. - Выполните в браузере действие, которое вызывает эту процедуру.
- Конфигуратор остановит выполнение. Браузер в этот момент «замрёт» — это нормально, он ждёт отладчик.
- Шагайте F10 (через процедуру) и F11 (с заходом). Значения смотрите в табло (
Shift+F9) и через «Вычислить выражение».
Серверные процедуры, вызванные из веб-клиента, отлаживаются как предмет отладки «Сервер». Если точка в &НаСервере не срабатывает, проверьте, что сервер подключён в окне Отладка → Подключение.
Приёмы, которые экономят время
- 🎯 Условная точка останова. Правой кнопкой по точке — условие, например
Объект.Номер = "0000-000123". Остановится только на нужном документе. - 🧭 Останов по ошибке. В меню «Отладка» включите остановку по ошибке. Отладчик встанет на строке, где выброшено исключение, даже если оно перехвачено в
Попытка ... Исключение. - 🔍 Стек вызовов (
Ctrl+Alt+C) показывает, как вы дошли до текущей строки, включая переход клиент → сервер.
Если код в браузере ведёт себя по-старому после изменения конфигурации, браузер мог взять закешированный скрипт. Закройте вкладку веб-клиента, очистите кэш для адреса публикации и откройте сеанс заново.
Консоль браузера и вкладка «Сеть»
Инструменты разработчика (F12 в Chrome, Edge, Firefox, Яндекс Браузере) не отладят код на встроенном языке: он уже превращён в JavaScript и читать его нет смысла. Но они хорошо показывают, что происходит между браузером и сервером.
Вкладка «Консоль» (Console)
Смотрите красные сообщения в момент сбоя. Типичные находки:
- ⛔ заблокированное всплывающее окно — веб-клиенту нужны всплывающие окна для части форм;
- 🔒 ошибки смешанного содержимого: страница открыта по HTTPS, а ресурс или сервер отладки запрашивается по HTTP;
- 🧩 ошибки загрузки расширения для работы с 1С:Предприятием или внешней компоненты.
Вкладка «Сеть» (Network)
Запросы веб-клиента к серверу идут по адресам, содержащим e1cib. Отфильтруйте список по этой строке и повторите действие.
| Что видите | Что это обычно значит |
|---|---|
| Код 404 на адрес публикации | Публикация не найдена: неверный путь, публикация удалена, веб-сервер перезапущен без неё |
| Код 401 или 403 | Проблема аутентификации на веб-сервере (настройки IIS, права на каталог публикации) |
| Код 500 | Ошибка модуля веб-сервера или сервера 1С — подробности ищите в логах веб-сервера и техжурнале |
| Код 502 или 504 | Обрыв на прокси или балансировщике перед веб-сервером, часто по таймауту |
| Запрос висит десятки секунд | Долгий серверный вызов: тяжёлый запрос, блокировка, ожидание на СУБД |
| Десятки запросов на одно действие | Лишние вызовы сервера из клиентского кода |
Последний пункт — частая причина «тормозит только в вебе». Каждый вызов сервера в браузере — это сетевой запрос с задержкой. Процедура, которая в цикле зовёт &НаСервере 50 раз, в тонком клиенте по локальной сети почти незаметна, а через интернет
даёт секунды ожидания. Лечится переносом цикла на сервер и одним вызовом.
Запрос с кодом 500 можно открыть и посмотреть ответ сервера (вкладка Response). Иногда там лежит текст ошибки, который пользователь не видит на экране.
Журнал регистрации, технологический журнал и логи веб-сервера
Когда ошибка плавающая или воспроизводится только у пользователя, отладчик не поможет. Нужно, чтобы система сама записала, что произошло.
Журнал регистрации
Открывается в Конфигураторе через Администрирование → Журнал регистрации или из пользовательского режима в разделе администрирования типовой конфигурации. Отфильтруйте по пользователю, интервалу времени и уровню «Ошибка». Сеансы веб-клиента в колонке приложения отмечены как веб-клиент, по этому признаку их легко отделить от тонкого клиента
.
Своё событие в журнал удобно писать из обработчика исключения. Запись делают на сервере:
&НаКлиенте
Процедура ВыполнитьРасчет(Команда)
Попытка
ВыполнитьРасчетНаСервере();
Исключение
Инфо = ИнформацияОбОшибке();
ЗаписатьОшибкуВЖурнал(ПодробноеПредставлениеОшибки(Инфо));
ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(Инфо));
КонецПопытки;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗаписатьОшибкуВЖурнал(ТекстОшибки)
ЗаписьЖурналаРегистрации("ВебКлиент.ВыполнитьРасчет",
УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
КонецПроцедуры
Функции КраткоеПредставлениеОшибки и ПодробноеПредставлениеОшибки есть в платформе начиная с 8.3.17. В более ранних релизах используйте ОписаниеОшибки().
Технологический журнал
Техжурнал включают файлом logcfg.xml в каталоге conf платформы на сервере 1С (для файловой базы — на машине с веб-сервером). Минимальная настройка для поиска исключений и долгих вызовов:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\1C_TechLog" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="CALL"/>
<ge property="duration" value="3000000"/>
</event>
<property name="all"/>
</log>
</config>
EXCP — исключения, CALL с фильтром по длительности — серверные вызовы дольше 3 секунд (в 8.3 длительность указывается в микросекундах). history="24" хранит логи 24 часа.
Техжурнал быстро растёт на диске. Включайте его на время диагностики, следите за местом на диске и выключайте, удалив или переименовав logcfg.xml, когда причина найдена.
Логи веб-сервера
- Apache — файл
error.logв каталогеlogsApache. Там видны падения модуля 1С и ошибки загрузки публикации. - IIS — журналы сайта в
%SystemDrive%\inetpub\logs\LogFilesи «Журнал событий Windows» (раздел «Приложение»). Код ответа и подкод подскажут, где отказ: на уровне IIS или внутри модуля 1С.
Сопоставляйте записи по времени: момент ошибки в браузере (вкладка «Сеть»), строка в логе веб-сервера и событие в журнале регистрации или техжурнале должны совпадать с точностью до секунд.
Если отладчик не подключается или ошибка не ловится
Если ни один способ не дал результата, сократите задачу до минимального примера: пустая обработка с одной командой, которая повторяет проблемный вызов. Если сбой воспроизводится на пустой обработке, дело в платформе, браузере или публикации, а не в коде конфигурации. С таким примером проще идти к администратору веб-сервера или на форум разработчиков.
Ошибки, которые встречаются только в веб-клиенте
| Симптом | Причина | Что делать |
|---|---|---|
| Не работает выбор или сохранение файла | Нет расширения для работы с 1С:Предприятием или используются синхронные методы | Используйте асинхронные методы (НачатьПомещениеФайла, ПоместитьФайлАсинх и аналоги), предложите пользователю установить расширение |
| Ошибка создания COM-объекта на клиенте | COM в браузере недоступен | Перенесите работу с COM на сервер или используйте внешнюю компоненту с поддержкой веб-клиента |
| Внешняя компонента не подключается | Компонента собрана без поддержки браузеров или не установлено расширение | Проверьте, что в архиве компоненты есть вариант для вашего браузера |
| Форма не открывается, ошибок нет | Браузер блокирует всплывающие окна | Разрешите всплывающие окна для адреса публикации |
| Действие выполняется заметно медленнее, чем в тонком клиенте | Много серверных вызовов из клиентского кода | Посчитайте запросы e1cib во вкладке «Сеть», объедините вызовы |
| После обновления конфигурации поведение старое | Браузер использует кэш | Закройте сеанс, очистите кэш сайта, откройте заново |
Можно ли отладить веб-клиент на рабочей базе?
Какой браузер лучше для отладки веб-клиента?
Нужна ли отдельная лицензия, чтобы отлаживать веб-клиент?
Почему в инструментах браузера не видно моего кода?
Можно ли отлаживать веб-клиент с другого компьютера?
DebuggerURL, где указан адрес машины с сервером отладки, и откройте порт 1550 в брандмауэре этой машины.