Отладка 1С в браузере: от точки останова до сетевых запросов
Содержание
Веб-клиент 1С отлаживают тем же отладчиком Конфигуратора, что и тонкий клиент: включают отладку по протоколу HTTP, запускают сервер отладки и открывают базу в браузере с параметром DebuggerURL. Точки останова срабатывают в коде на встроенном языке, а не в JavaScript. Инструменты разработчика браузера (F12) дополняют отладчик: в них видно сетевые запросы, ошибки загрузки и заблокированные окна.
Какой инструмент когда брать? Ошибка в логике формы — отладчик 1С. Форма «висит» или открывается 10 секунд — вкладка «Сеть» в браузере и замер производительности. Ошибка есть только у одного пользователя и не воспроизводится — журнал регистрации и технологический журнал. Проблема с файлами или оборудованием — проверка расширений браузера и внешних компонент.
Подготовка окружения перед отладкой веб-клиента
Отладка веб-клиента требует трёх вещей: опубликованной базы, механизма отладки по HTTP и браузера, который пускает 1С без ограничений.
Публикация базы
Базу публикуют на веб-сервере (IIS или Apache) из Конфигуратора, запущенного от имени администратора: Администрирование → Публикация на веб-сервере. Для веб-клиента нужен флажок публикации тонкого клиента
и веб-клиента. После публикации в каталоге появляется файл default.vrd — в нём описаны параметры доступа к базе.
Отладку удобнее вести на тестовой копии базы, опубликованной под отдельным именем. Точка останова в рабочей базе остановит выполнение кода у пользователя, который его вызвал.
Отладка по протоколу HTTP
С платформы 8.3.7 появился механизм отладки по HTTP, и для веб-клиента он основной. Включается в Конфигураторе: Сервис → Параметры → Отладка, поле выбора механизма отладки — «Отладка по протоколу HTTP». При запуске отладки Конфигуратор сам поднимает сервер отладки dbgs.exe. По умолчанию он слушает порт 1550.
Если база файловая и опубликована на веб-сервере, серверный код выполняется в процессе веб-сервера. Чтобы отлаживать и его, в default.vrd разрешают отладку элементом debug:
<debug enable="true"
protocol="http"
url="http://localhost:1550"/>
После правки файла перезапустите пул приложений IIS или службу Apache.
Перезапуск веб-сервера обрывает сеансы всех пользователей, которые работают через браузер. На рабочем сервере делайте это вне рабочего времени.
Для клиент-серверной базы отладку разрешают на сервере 1С: службу агента запускают с ключами -debug -http. Это тоже требует перезапуска службы, а значит, разрыва всех сеансов кластера.
Браузер
- 🌐 Подойдут актуальные Chrome, Edge, Firefox, Яндекс Браузер, Safari.
- 🚫 Блокировщик всплывающих окон для адреса базы отключите: 1С открывает в отдельных окнах формы и вспомогательные страницы.
- 🧹 Расширения-блокировщики рекламы на время отладки выключите: они режут часть запросов и дают ложные ошибки.
- 🔒 Если публикация идёт по HTTPS с самоподписанным сертификатом, сначала откройте адрес вручную и примите сертификат, иначе часть запросов браузер молча отклонит.
Отладчик Конфигуратора: точки останова в веб-клиенте
Есть два способа подключить веб-клиент к отладчику. Выбор зависит от того, кто открывает браузер.
| Способ | Когда подходит | Что сделать |
|---|---|---|
| Запуск из Конфигуратора | Разработчик сам воспроизводит сценарий | Указать адрес публикации и браузер в параметрах запуска, затем Отладка → Начать отладку → Веб-клиент |
Параметр DebuggerURL | Ошибку воспроизводит другой человек или другой компьютер | Добавить параметр к адресу базы и включить автоподключение |
Запуск из Конфигуратора
В Сервис → Параметры на вкладке параметров запуска 1С:Предприятия укажите адрес опубликованной базы и браузер. Затем выберите Отладка → Начать отладку → Веб-клиент. Браузер откроется с базой, а сеанс сразу появится в списке предметов отладки.
Подключение по ссылке
Откройте базу по адресу вида:
http://srv-web/buh/ru_RU/?DebuggerURL=http://192.168.1.15:1550
Здесь 192.168.1.15 — компьютер разработчика, где запущен Конфигуратор и сервер отладки. Порт 1550 должен быть открыт в брандмауэре этого компьютера.
В Конфигураторе откройте Отладка → Подключение. Там видно предметы отладки: клиентские сеансы и серверные процессы. Подключите нужный вручную или настройте автоматическое подключение и отметьте в нём веб-клиент — тогда каждый новый сеанс подключится сам.
Что работает и что нет
- ✅ Точки останова, пошаговое выполнение, табло, вычисление выражений, стек вызовов — в клиентском коде (
&НаКлиенте) и в серверном. - ✅ Остановка по ошибке:
Отладка → Остановка по ошибке. Удобно, когда ошибка выводится как общее сообщение без места возникновения. - ⚠️ Клиентский код в браузере работает как JavaScript, который платформа получила из модуля. Пока отладчик стоит на точке останова, страница браузера «замирает». Это нормально, не перезагружайте её.
Код, который должен вести себя в браузере иначе, выделяют инструкцией препроцессора:
#Если ВебКлиент Тогда
// ветка только для браузера
ПоказатьПредупреждение(, "Работа в браузере");
#Иначе
// тонкий клиент
#КонецЕсли
Инструменты разработчика браузера при отладке веб-клиента 1С
Окно открывается клавишей F12 или Ctrl+Shift+I. Отладчик 1С не показывает, что происходит между браузером и веб-сервером. Это видно только здесь.
Вкладка «Консоль»
Сюда попадают ошибки загрузки скриптов, отказы в доступе к ресурсам, ошибки сертификатов и сообщения о заблокированных окнах. Если веб-клиент не стартует, а на экране белая страница или бесконечная загрузка, первым делом смотрите консоль.
Сам JavaScript веб-клиента минимизирован. Ставить в нём точки останова бессмысленно: имена функций ничего не скажут. Логику проверяйте отладчиком 1С.
Вкладка «Сеть»
Здесь каждый вызов сервера виден как отдельный запрос. Адреса запросов веб-клиента содержат фрагмент e1cib. Что полезно смотреть:
- Поставьте фильтр по
e1cib, чтобы убрать картинки и стили. - Включите флажок отключения кэша на время диагностики.
- Выполните действие в форме: открытие, нажатие кнопки, ввод значения.
- Посчитайте запросы и посмотрите столбец времени.
Одно нажатие кнопки дало 15 запросов — значит, код формы обращается к серверу в цикле. Один запрос шёл 8 секунд — проблема в серверном коде или в запросе к базе, и дальше её ищут замером производительности.
Код ответа тоже говорит многое:
- 🔴 401/403 — проблема аутентификации на веб-сервере или прав на каталог публикации.
- 🔴 404 — неверный адрес публикации или не опубликован нужный сервис.
- 🔴 500 — ошибка в модуле расширения веб-сервера 1С или в серверном коде; подробности ищите в журналах.
- 🟡 Запрос «висит» без ответа — сервер занят или ждёт блокировку.
Если проблему видит только пользователь, попросите его сохранить содержимое вкладки «Сеть» в файл HAR (правый клик по списку запросов) и прислать вам. Так вы увидите его запросы со временем выполнения, не подключаясь к его компьютеру.
Журнал регистрации и журналы сервера
Отладчик ловит ошибку, которую вы воспроизвели. Журналы ловят то, что случилось у пользователя вчера.
Журнал регистрации
В Конфигураторе: Администрирование → Журнал регистрации. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) он открывается и в пользовательском режиме из раздела Администрирование. Отберите события по пользователю, интервалу и уровню «Ошибка». В записи будет текст исключения и, если его записал код конфигурации, место возникновения.
Чтобы отличить сеансы браузера от остальных, смотрите колонку приложения: веб-клиент там указан отдельно от тонкого клиента.
Технологический журнал
Когда в журнале регистрации пусто, а ошибка есть, включают технологический журнал. Его настраивают файлом logcfg.xml в каталоге conf платформы на сервере. Пример, который пишет исключения и вызовы дольше 1 секунды:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\techlog" history="24">
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="CALL"/>
<gt property="duration" value="10000"/>
</event>
<property name="all"/>
</log>
</config>
Длительность здесь задаётся в десятитысячных долях секунды: значение 10000 равно одной секунде. Параметр history — сколько часов хранить файлы.
Технологический журнал без отборов за час работы может занять несколько гигабайт. Всегда ставьте отбор по событиям и ограничивайте history.
Журналы веб-сервера
- 📁 IIS — журналы запросов в
%SystemDrive%\inetpub\logs\LogFiles, ошибки пула приложений — в журнале событий Windows. - 📁 Apache — файл
error.logв каталогеlogsсервера (в Linux обычно/var/log/apache2/или/var/log/httpd/).
Строка с кодом 500 в журнале веб-сервера и время из вкладки «Сеть» позволяют найти нужное событие в техжурнале по времени.
Производительность веб-клиента: что и как замерять
В браузере каждый вызов сервера дороже, чем в тонком клиенте: запрос идёт через веб-сервер по HTTP. Код, который в тонком клиенте «терпимо медленный», в веб-клиенте становится заметно медленным.
Замер производительности
Отладка → Замер производительности в Конфигураторе во время отладки веб-клиента. Включите замер, выполните медленное действие, остановите. В результате — строки кода с числом выполнений и временем. Отсортируйте по времени и смотрите верх списка.
Типичные причины медленной работы
- Много серверных вызовов. Процедура
&НаКлиентев цикле вызывает функцию&НаСервере. Каждый вызов — отдельный запрос. Решение: собрать данные в массив и сделать один вызов. - Лишняя передача формы. Директива
&НаСервереотправляет на сервер данные формы. Если процедуре они не нужны, используйте&НаСервереБезКонтекста. - Повторное получение одних и тех же данных. Константы и настройки, которые не меняются за сеанс, кэшируют в общем модуле с повторным использованием возвращаемых значений.
- Тяжёлый обработчик
ПриОткрытии. Расчёты при открытии формы переносите вПриСозданииНаСервере, чтобы они шли в том же вызове, что и создание формы.
Пример, как не надо и как надо:
// Плохо: 100 строк = 100 запросов к серверу
Для Каждого Строка Из Объект.Товары Цикл
Строка.Цена = ПолучитьЦенуНаСервере(Строка.Номенклатура);
КонецЦикла;
// Хорошо: один вызов на всю таблицу
ЗаполнитьЦеныНаСервере();
Где ЗаполнитьЦеныНаСервере — процедура &НаСервере, которая одним запросом получает цены по всем товарам табличной части.
Проверить результат оптимизации проще всего во вкладке «Сеть»: было 100 запросов на кнопку, стало 1–2.
Файлы и внешние компоненты в браузере
Самая частая причина «в тонком клиенте работает, в браузере нет» — работа с файлами на компьютере пользователя.
Расширение для работы с файлами
Браузер не даёт сайту доступ к диску. Для этого 1С устанавливает расширение работы с файлами: дополнение браузера плюс приложение на компьютере. В коде его подключают и, если нужно, предлагают установить:
&НаКлиенте
Процедура ПроверитьРасширение()
Оповещение = Новый ОписаниеОповещения("ПослеПодключения", ЭтотОбъект);
НачатьПодключениеРасширенияРаботыСФайлами(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПодключения(Подключено, Параметры) Экспорт
Если Не Подключено Тогда
НачатьУстановкуРасширенияРаботыСФайлами();
КонецЕсли;
КонецПроцедуры
В веб-клиенте нет синхронных вариантов этих методов, только асинхронные с описанием оповещения. Модальные окна тоже запрещены, если в свойствах конфигурации режим использования модальности стоит «Не использовать».
Без расширения можно передать файл на сервер через диалог выбора файла браузера (методы помещения файла) и отдать файл пользователю через получение файла. Прочитать произвольный файл с диска или записать в конкретный каталог без расширения нельзя.
Внешние компоненты
- 🔌 В браузере работают только компоненты по технологии Native API, собранные под браузеры. COM-компоненты и компоненты для тонкого клиента под Windows в браузере не загрузятся.
- 🔌 Компоненту подключают асинхронно:
НачатьПодключениеВнешнейКомпоненты, при неудаче —НачатьУстановкуВнешнейКомпоненты. - 🔌 Для торгового оборудования проверьте, что производитель драйвера заявил поддержку веб-клиента. Если поддержки нет, это место работает только в тонком клиенте.
При отладке такой ошибки сначала проверьте в браузере, что расширение 1С установлено и включено в списке расширений. Затем поставьте точку останова в обработчике оповещения: если Подключено = Ложь, дело в установке, а не в коде.
Чего не делать при отладке в браузере
- ❌ Отлаживать на рабочей публикации. Точка останова в общем модуле остановит каждого пользователя, который выполнит этот код.
- ❌ Оставлять автоподключение включённым. После отладки отключите его и удалите
DebuggerURLиз закладок пользователя, иначе сеансы будут пытаться найти сервер отладки. - ❌ Держать
debug enable="true"в рабочей публикации. Включили для диагностики — после неё вернитеfalseи перезапустите веб-сервер в нерабочее время. - ❌ Проверять скорость только с локального компьютера. Веб-сервер в той же сети отвечает быстро. Пользователь через интернет увидит каждый лишний вызов сервера сильнее.
- ❌ Оставлять технологический журнал включённым. Он нагружает сервер и заполняет диск. Удалите или переименуйте
logcfg.xml, когда собрали данные.