Отладка 1С в браузере: от точки останова до сетевых запросов

· 10 мин

Содержание

Веб-клиент 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. Что полезно смотреть:

  1. Поставьте фильтр по e1cib, чтобы убрать картинки и стили.
  2. Включите флажок отключения кэша на время диагностики.
  3. Выполните действие в форме: открытие, нажатие кнопки, ввод значения.
  4. Посчитайте запросы и посмотрите столбец времени.

Одно нажатие кнопки дало 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. Код, который в тонком клиенте «терпимо медленный», в веб-клиенте становится заметно медленным.

Замер производительности

Отладка → Замер производительности в Конфигураторе во время отладки веб-клиента. Включите замер, выполните медленное действие, остановите. В результате — строки кода с числом выполнений и временем. Отсортируйте по времени и смотрите верх списка.

Типичные причины медленной работы

  1. Много серверных вызовов. Процедура &НаКлиенте в цикле вызывает функцию &НаСервере. Каждый вызов — отдельный запрос. Решение: собрать данные в массив и сделать один вызов.
  2. Лишняя передача формы. Директива &НаСервере отправляет на сервер данные формы. Если процедуре они не нужны, используйте &НаСервереБезКонтекста.
  3. Повторное получение одних и тех же данных. Константы и настройки, которые не меняются за сеанс, кэшируют в общем модуле с повторным использованием возвращаемых значений.
  4. Тяжёлый обработчик ПриОткрытии. Расчёты при открытии формы переносите в ПриСозданииНаСервере, чтобы они шли в том же вызове, что и создание формы.

Пример, как не надо и как надо:

// Плохо: 100 строк = 100 запросов к серверу
Для Каждого Строка Из Объект.Товары Цикл
    Строка.Цена = ПолучитьЦенуНаСервере(Строка.Номенклатура);
КонецЦикла;

// Хорошо: один вызов на всю таблицу
ЗаполнитьЦеныНаСервере();

Где ЗаполнитьЦеныНаСервере — процедура &НаСервере, которая одним запросом получает цены по всем товарам табличной части.

Проверить результат оптимизации проще всего во вкладке «Сеть»: было 100 запросов на кнопку, стало 1–2.

Файлы и внешние компоненты в браузере

Самая частая причина «в тонком клиенте работает, в браузере нет» — работа с файлами на компьютере пользователя.

Расширение для работы с файлами

Браузер не даёт сайту доступ к диску. Для этого 1С устанавливает расширение работы с файлами: дополнение браузера плюс приложение на компьютере. В коде его подключают и, если нужно, предлагают установить:

&НаКлиенте
Процедура ПроверитьРасширение()
    Оповещение = Новый ОписаниеОповещения("ПослеПодключения", ЭтотОбъект);
    НачатьПодключениеРасширенияРаботыСФайлами(Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура ПослеПодключения(Подключено, Параметры) Экспорт
    Если Не Подключено Тогда
        НачатьУстановкуРасширенияРаботыСФайлами();
    КонецЕсли;
КонецПроцедуры

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

Без расширения можно передать файл на сервер через диалог выбора файла браузера (методы помещения файла) и отдать файл пользователю через получение файла. Прочитать произвольный файл с диска или записать в конкретный каталог без расширения нельзя.

Внешние компоненты

  • 🔌 В браузере работают только компоненты по технологии Native API, собранные под браузеры. COM-компоненты и компоненты для тонкого клиента под Windows в браузере не загрузятся.
  • 🔌 Компоненту подключают асинхронно: НачатьПодключениеВнешнейКомпоненты, при неудаче — НачатьУстановкуВнешнейКомпоненты.
  • 🔌 Для торгового оборудования проверьте, что производитель драйвера заявил поддержку веб-клиента. Если поддержки нет, это место работает только в тонком клиенте.

При отладке такой ошибки сначала проверьте в браузере, что расширение 1С установлено и включено в списке расширений. Затем поставьте точку останова в обработчике оповещения: если Подключено = Ложь, дело в установке, а не в коде.

Чего не делать при отладке в браузере

  • ❌ Отлаживать на рабочей публикации. Точка останова в общем модуле остановит каждого пользователя, который выполнит этот код.
  • ❌ Оставлять автоподключение включённым. После отладки отключите его и удалите DebuggerURL из закладок пользователя, иначе сеансы будут пытаться найти сервер отладки.
  • ❌ Держать debug enable="true" в рабочей публикации. Включили для диагностики — после неё верните false и перезапустите веб-сервер в нерабочее время.
  • ❌ Проверять скорость только с локального компьютера. Веб-сервер в той же сети отвечает быстро. Пользователь через интернет увидит каждый лишний вызов сервера сильнее.
  • ❌ Оставлять технологический журнал включённым. Он нагружает сервер и заполняет диск. Удалите или переименуйте logcfg.xml, когда собрали данные.

Частые вопросы

Можно ли отлаживать веб-клиент старым механизмом отладки по TCP?
Для браузера используйте отладку по HTTP. Она появилась в 8.3.7 и рассчитана в том числе на веб-клиент и сеансы на удалённых компьютерах.
Нужен ли Конфигуратор на компьютере пользователя?
Нет. Конфигуратор и сервер отладки работают у разработчика. Пользователь открывает базу в браузере с параметром DebuggerURL, указывающим на компьютер разработчика.
Почему точка останова не срабатывает в серверной процедуре?
Серверный код выполняется не в браузере. Для клиент-серверной базы нужна отладка на сервере 1С, для файловой через веб-сервер — разрешение отладки в default.vrd. Проверьте, что серверный предмет отладки подключён.
Как понять, что ошибка только в веб-клиенте?
Воспроизведите сценарий в тонком клиенте под тем же пользователем. Если там всё работает, проверьте код с ветками #Если ВебКлиент, работу с файлами, внешние компоненты и модальные вызовы.
Можно ли смотреть JavaScript веб-клиента вместо отладчика 1С?
Технически можно, но код минимизирован и генерируется платформой. Для логики конфигурации он бесполезен; из инструментов браузера полезны консоль и вкладка «Сеть».