Ошибка видна только в браузере: где искать причину и как поймать её отладчиком

· 10 мин

Содержание

Отладить веб-клиент 1С проще всего штатным отладчиком Конфигуратора или EDT: включите отладку по протоколу HTTP, запустите веб-клиент из Отладка → Начать отладку → Веб-клиент или добавьте к адресу публикации параметр ?DebuggerURL=http://localhost:1550. Точки останова в клиентских процедурах сработают прямо в браузере, серверные — на сервере 1С.

Если отладчик подключить нельзя (рабочий сервер, нет доступа к кластеру), остаются три инструмента: инструменты разработчика браузера (F12), журнал регистрации и технологический журнал. Отладчик выбирают, когда ошибка воспроизводится по шагам. Логи — когда она плавающая или случается только у конкретного пользователя.

Как код выполняется в веб-клиенте и почему это важно для отладки

Веб-клиент — это не отдельная программа, а страница в браузере. Клиентский код модулей форм и общих модулей с флагом «Клиент» платформа превращает в JavaScript, и его исполняет браузер. Серверный код работает там же, где и в тонком клиенте: на рабочем процессе кластера или, в файловом варианте, внутри процесса веб-сервера.

Цепочка вызова выглядит так:

  1. 🖥 Браузер выполняет клиентскую процедуру (&НаКлиенте).
  2. 🌐 Вызов серверной процедуры уходит HTTP-запросом на веб-сервер (Apache или IIS) с модулем расширения 1С.
  3. ⚙️ Модуль веб-сервера передаёт вызов серверу 1С или обрабатывает его сам в файловом режиме.
  4. 🔁 Ответ возвращается в браузер, и клиентский код продолжает работу.

Отсюда три следствия для отладки:

  • Ошибка может жить в любом из трёх звеньев. Браузер, веб-сервер и сервер 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=&quot;C:\Bases\Demo&quot;;">
  <debug enable="true" protocol="http" url="http://localhost:1550"/>
</point>

После правки default.vrd перезапустите веб-сервер или пул приложений IIS. Для Apache это рестарт службы, для IIS — перезапуск пула, в котором работает публикация.

Конфигуратор

  1. Откройте Сервис → Параметры → Отладка и выберите отладку по протоколу HTTP. Адрес сервера отладки для локальной машины — http://localhost:1550.
  2. Там же, в параметрах запуска 1С:Предприятия, укажите адрес публикации и браузер, в котором будет открываться веб-клиент. Название вкладки в разных версиях платформы может отличаться, ищите поле с URL веб-клиента.
  3. В Отладка → Подключение нажмите «Автоматическое подключение» и отметьте типы предметов отладки: веб-клиент и сервер.

Для 1C:EDT логика та же: в конфигурации запуска выбирают веб-клиент, указывают адрес публикации и сервер отладки.

Перед запуском отладки веб-клиента
Выполнено: 0 / 6

Точки останова и пошаговое выполнение в браузере

Запустить веб-клиент под отладкой можно двумя способами.

СпособКогда удобенЧто учесть
Отладка → Начать отладку → Веб-клиент в КонфигуратореРазработка на своей машинеКонфигуратор сам откроет браузер с нужными параметрами
Параметр DebuggerURL в адресе публикацииОтладка с другой машины или в другом браузереАдрес сервера отладки должен быть доступен из браузера

Пример адреса для второго способа:

http://srv-web/demo/ru_RU/?DebuggerURL=http://dev-pc:1550

Здесь srv-web/demo — публикация, dev-pc — машина, где запущен Конфигуратор с сервером отладки.

Как ставить точки и что увидите

  1. В модуле формы поставьте точку останова (F9) на строку внутри процедуры &НаКлиенте.
  2. Выполните в браузере действие, которое вызывает эту процедуру.
  3. Конфигуратор остановит выполнение. Браузер в этот момент «замрёт» — это нормально, он ждёт отладчик.
  4. Шагайте 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 в каталоге logs Apache. Там видны падения модуля 1С и ошибки загрузки публикации.
  • IIS — журналы сайта в %SystemDrive%\inetpub\logs\LogFiles и «Журнал событий Windows» (раздел «Приложение»). Код ответа и подкод подскажут, где отказ: на уровне IIS или внутри модуля 1С.

Сопоставляйте записи по времени: момент ошибки в браузере (вкладка «Сеть»), строка в логе веб-сервера и событие в журнале регистрации или техжурнале должны совпадать с точностью до секунд.

Если отладчик не подключается или ошибка не ловится

Диагностика: выберите симптом

Если ни один способ не дал результата, сократите задачу до минимального примера: пустая обработка с одной командой, которая повторяет проблемный вызов. Если сбой воспроизводится на пустой обработке, дело в платформе, браузере или публикации, а не в коде конфигурации. С таким примером проще идти к администратору веб-сервера или на форум разработчиков.

Ошибки, которые встречаются только в веб-клиенте

СимптомПричинаЧто делать
Не работает выбор или сохранение файлаНет расширения для работы с 1С:Предприятием или используются синхронные методыИспользуйте асинхронные методы (НачатьПомещениеФайла, ПоместитьФайлАсинх и аналоги), предложите пользователю установить расширение
Ошибка создания COM-объекта на клиентеCOM в браузере недоступенПеренесите работу с COM на сервер или используйте внешнюю компоненту с поддержкой веб-клиента
Внешняя компонента не подключаетсяКомпонента собрана без поддержки браузеров или не установлено расширениеПроверьте, что в архиве компоненты есть вариант для вашего браузера
Форма не открывается, ошибок нетБраузер блокирует всплывающие окнаРазрешите всплывающие окна для адреса публикации
Действие выполняется заметно медленнее, чем в тонком клиентеМного серверных вызовов из клиентского кодаПосчитайте запросы e1cib во вкладке «Сеть», объедините вызовы
После обновления конфигурации поведение староеБраузер использует кэшЗакройте сеанс, очистите кэш сайта, откройте заново
Можно ли отладить веб-клиент на рабочей базе?
Технически да, но остановка на точке замораживает сеанс, а сервер в режиме отладки работает медленнее. Делайте копию базы и отлаживайте на ней.
Какой браузер лучше для отладки веб-клиента?
Любой актуальный браузер из списка поддерживаемых вашей версией платформы: Chrome, Edge, Firefox, Яндекс Браузер. Для чистоты эксперимента используйте профиль без сторонних расширений.
Нужна ли отдельная лицензия, чтобы отлаживать веб-клиент?
Сеанс веб-клиента, открытый под отладкой, расходует клиентскую лицензию так же, как обычный. Отдельной лицензии на отладку нет.
Почему в инструментах браузера не видно моего кода?
Код на встроенном языке платформа преобразует в JavaScript, и в браузере он не похож на исходник. Пошаговую отладку модулей делают только отладчиком Конфигуратора или EDT.
Можно ли отлаживать веб-клиент с другого компьютера?
Да. Откройте публикацию с параметром DebuggerURL, где указан адрес машины с сервером отладки, и откройте порт 1550 в брандмауэре этой машины.