Отладчик 1С:Предприятия 8.3 на практике: от точки останова до замера производительности

· 9 мин

Содержание

Отладка в 1С нужна, чтобы остановить выполнение кода в нужной строке и увидеть, какие значения на самом деле лежат в переменных. Отладчик встроен в Конфигуратор 1С:Предприятия 8.3: ставите точку останова клавишей F9, запускаете базу через F5 — и программа замирает там, где вы ждёте ошибку.

Без отладчика разработчик гадает по сообщениям пользователя: «документ не проводится», «отчёт врёт», «всё тормозит». С отладчиком за 5–10 минут видно, на какой строке и с каким значением всё пошло не так.

Как устроена отладка в 1С:Предприятии 8.3

В отладке участвуют три стороны:

  • 🖥 Конфигуратор — окно отладчика: здесь ставят точки останова, смотрят переменные и стек вызовов.
  • 👤 Предмет отладки — то, что выполняет код: тонкий клиент, толстый клиент, веб-клиент, серверный процесс, фоновое задание, HTTP-сервис, COM-соединение.
  • 🔌 Канал связи между ними — протокол отладки. В современных версиях 8.3 используют протокол HTTP и сервер отладки dbgs.exe, старый вариант — TCP.

Когда выполнение доходит до строки с точкой останова, предмет отладки сообщает об этом Конфигуратору. Пользовательский сеанс «замирает», а разработчик может пройти код по шагам.

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

Зачем нужна отладка: пять рабочих ситуаций

1. Программист ищет причину ошибки

Пользователь прислал скриншот с текстом ошибки и номером строки модуля. Разработчик ставит точку останова на пару строк выше, повторяет действие пользователя и видит, что переменная пустая или имеет не тот тип.

2. Консультант разбирается, откуда взялась цифра

Отчёт показывает сумму, которой «не может быть». Отладка обработчика проведения показывает, какие записи формируются в регистрах и почему. Это быстрее, чем перебирать документы вручную.

3. Доработка типовой конфигурации

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

4. Расследование «тормозов»

Документ проводится 20 секунд вместо одной. Замер производительности показывает, какая строка съедает время: обычно это запрос в цикле или обращение к реквизиту через точку в большом цикле.

5. Проверка внешней обработки или расширения

Перед подключением чужой обработки в рабочую базу её прогоняют под отладчиком на копии. Видно, что именно она пишет в базу и не ломает ли данные.

Инструменты отладчика 1С: что и когда использовать

Все команды собраны в меню Отладка Конфигуратора. Основные горячие клавиши :

ДействиеКлавишиКогда пригодится
Начать отладкуF5Запуск базы в режиме отладки
Точка остановаF9Остановиться на конкретной строке
Шагнуть вF11Зайти внутрь вызываемой процедуры
Шагнуть черезF10Выполнить строку, не заходя в вызов
Шагнуть изShift+F11Выйти из текущей процедуры
Идти до курсораShift+F10Пропустить неинтересный участок
Вычислить выражениеShift+F9Посмотреть значение или посчитать формулу
ПродолжитьF5Работать дальше до следующей точки

Точки останова и условные остановки

Обычная точка останова срабатывает каждый раз. Если строка внутри цикла на 10 000 строк товаров, это неудобно. Тогда ставят точку останова с условием: щёлкните правой кнопкой по точке или выберите команду в меню Отладка и задайте выражение, например:

Строка.Количество = 0 ИЛИ Строка.Цена < 0

Отладчик остановится только на «плохой» строке.

Список всех точек открывается через Отладка → Список точек останова. Там же их временно отключают, не удаляя.

Вычисление выражений и табло

Окно «Вычислить выражение» показывает значение переменной, а для коллекций — содержимое: строки таблицы значений, поля выборки, реквизиты объекта.

Табло — постоянная панель, куда кладут переменные, за которыми нужно следить на каждом шаге.

В окне вычисления можно вызвать функцию. Если эта функция записывает объект или проводит документ, запись выполнится по-настоящему. На рабочей базе такие вызовы не делайте.

Остановка по ошибке

Команда Отладка → Остановка по ошибке заставляет отладчик останавливаться на строке, где возникло исключение. Это спасает, когда ошибка возникает глубоко во вложенных вызовах, а сообщение пользователю показывается уже «наверху».

Остановка срабатывает и внутри конструкции Попытка … Исключение. Если в коде много перехватов, задайте фильтр по тексту ошибки — иначе отладчик будет останавливаться на каждой ожидаемой исключительной ситуации.

Стек вызовов

Окно стека показывает цепочку процедур, которая привела к текущей строке. Двойной щелчок по строке стека переносит в нужный модуль, и там можно посмотреть значения локальных переменных вызывающей процедуры.

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

Отладка → Замер производительности включают перед действием, которое тормозит, и выключают после. Результат — таблица по строкам кода: сколько раз выполнялась строка, сколько времени заняла и какой процент от общего.

Сортировка по времени сразу показывает виновника. Двойной щелчок по строке замера открывает её в модуле.

Как включить отладку в файловой и клиент-серверной базе

Файловая база

  1. Откройте базу в Конфигураторе.
  2. Если конфигурация менялась, обновите её: F7 («Обновить конфигурацию базы данных»).
  3. Поставьте точку останова и нажмите F5.

Отладка клиентского и серверного кода работает сразу.

Клиент-серверная база

Для серверного кода сервер 1С должен быть запущен с разрешённой отладкой. Для этого в командную строку службы агента сервера ragent добавляют ключ -debug (для протокола HTTP — -debug -http), после чего службу перезапускают.

Перезапуск службы агента сервера обрывает сеансы всех пользователей кластера. Делайте это вне рабочего времени и предупредите людей заранее.

Включать серверную отладку на рабочем сервере постоянно не стоит: при остановке на точке зависает и сеанс, и блокировки, которые он держит. Для отладки держите отдельный тестовый сервер или копию базы .

Если отлаживаемый сеанс уже запущен, подключитесь к нему через Отладка → Подключение. В том же окне настраивается автоматическое подключение к фоновым заданиям, HTTP-сервисам и веб-сервисам: без него точки останова в регламентных заданиях не сработают.

Пользовательский сеанс можно сразу запустить с разрешённой отладкой из командной строки:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" ENTERPRISE /S"srv1c\buh_test" /DEBUG

Номер версии в пути подставьте свой.

Внешние обработки и расширения

Внешнюю обработку открывают в Конфигураторе через Файл → Открыть, ставят точки в её модулях, запускают отладку и открывают тот же файл уже в режиме 1С:Предприятия. Для расширений порядок тот же, что и для основной конфигурации: точки ставятся прямо в модулях расширения.

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

Какие ошибки находит отладка: два примера

NULL после левого соединения

Код считает итог по выборке из запроса:

Пока Выборка.Следующий() Цикл
    Итог = Итог + Выборка.Сумма;
КонецЦикла;

Программа падает не на каждом документе. Под отладчиком видно: у части строк Выборка.Сумма равна NULL, потому что в запросе левое соединение, и у товара нет записи во второй таблице. Исправление — в самом запросе:

ЕСТЬNULL(Остатки.СуммаОстаток, 0) КАК Сумма

Запрос в цикле

Замер производительности показывает, что 90% времени проведения уходит на одну строку внутри цикла по товарам. В ней выполняется запрос к остаткам — по одному на каждую строку документа. На 300 строках это 300 обращений к базе.

Решение — один запрос по всем товарам сразу, с отбором по списку номенклатуры из табличной части, и поиск по результату в памяти.

Другие типичные находки:

  • 🔹 переменная не той ветки типа: ожидали ссылку на документ, пришло Неопределено;
  • 🔹 серверный вызов из клиентского цикла: каждый вызов — отдельный обмен с сервером;
  • 🔹 обращение к реквизиту через точку (Строка.Номенклатура.Родитель) в большом цикле — каждый раз неявное чтение объекта;
  • 🔹 неверный порядок обработчиков: подписка на событие срабатывает раньше, чем ожидалось.

Отладка и тестирование: в чём разница

Тестирование отвечает на вопрос «работает ли». Отладка — «почему не работает ». Это разные этапы одного процесса.

ОтладкаТестирование
ЦельНайти причину конкретной ошибкиПроверить, что функции работают как надо
Кто делаетПрограммистПрограммист, тестировщик, ключевой пользователь
ИнструментыОтладчик Конфигуратора или EDTСценарии ручной проверки, автотесты (например, Vanessa Automation)
КогдаОшибка уже известнаДо выпуска доработки и после обновления
РезультатИсправленная строка кодаСписок ошибок или подтверждение, что их нет

Обычный порядок такой: тест находит ошибку → отладка показывает причину → после исправления тест прогоняют повторно. Автотесты особенно полезны после обновления типовой конфигурации: доработки могли перестать работать, а вручную всё не перепроверить.

Сколько стоят ошибки, которые не отладили

Медленный код обходится дорого незаметно. Простой расчёт для примера:

  • 40 операторов проводят по 200 документов в день;
  • проведение длится 6 секунд вместо 1 секунды;
  • лишние 5 секунд × 200 документов = 1 000 секунд, около 17 минут на человека в день;
  • на 40 человек — 40 000 секунд, больше 11 часов рабочего времени ежедневно.

Один замер производительности и переписанный запрос возвращают эти часы.

Ошибки в движениях дороже. Неверная запись в регистр накопления может месяцами искажать себестоимость или остатки. Её находят при закрытии периода, и тогда приходится перепроводить документы за весь период. Отладка обработчика проведения на копии базы до выпуска доработки обходится в разы дешевле такой переделки.

Третья статья расходов — зависшие регламентные задания: обмен с сайтом или загрузка банковской выписки молча не выполняются, а узнают об этом от клиентов. Отладка фонового задания показывает, где оно падает.

Ошибки новичков при отладке

  • ❌ Отладка на рабочей базе. Пока сеанс стоит на точке останова, он держит блокировки, и другие пользователи ждут. Работайте на копии.
  • ❌ «Отладка» через Сообщить(). Десятки сообщений в коде показывают только то, что вы заранее решили вывести. Отладчик показывает всё, включая состояние коллекций. И отладочные сообщения легко забыть в коде, отправленном в рабочую базу.
  • ❌ Точка на клиенте, а код на сервере. Если процедура помечена &НаСервере, а серверная отладка в клиент-серверной базе не включена, отладчик молчит. Новичок решает, что код вообще не выполняется.
  • ❌ Не обновили конфигурацию базы. Изменили модуль, не нажали F7 — выполняется старый код, а отладчик показывает новый.
  • ❌ Вызов функций с записью в окне вычисления. Об этом выше: запись выполнится по-настоящему.
  • ❌ Шагать F11 по всему коду. Заход во все типовые общие модули съедает время. Используйте F10, Shift+F10 и условные точки останова.
  • ❌ Забыть про контекст формы. Значение реквизита формы на клиенте и на сервере может отличаться до серверного вызова. Смотрите, в каком контексте стоит отладчик.
Перед началом отладки
Выполнено: 0 / 6

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

Можно ли отлаживать без Конфигуратора?
Да, в 1С:Enterprise Development Tools (EDT) есть свой отладчик с теми же возможностями: точки останова, шаги, вычисление выражений. Конфигуратор для этого открывать не нужно.
Нужны ли права администратора, чтобы запустить отладку?
Нужен доступ к Конфигуратору базы, то есть пользователь с правом администрирования конфигурации. Для серверной отладки — ещё доступ к настройкам службы сервера 1С.
Можно ли отлаживать веб-клиент?
Да, через протокол отладки HTTP. Точки останова в клиентском коде срабатывают так же, как в тонком клиенте.
Замедляет ли включённая отладка работу сервера?
Разрешённая отладка сама по себе нагрузку почти не добавляет, но остановленный на точке сеанс держит блокировки. Поэтому на рабочих серверах отладку держат выключенной.
Как отладить код, который выполняется при запуске базы?
Поставьте точку останова в модуле приложения или в процедуре, вызываемой при начале работы системы, и запустите базу через F5 из Конфигуратора. Отладчик остановится раньше, чем откроется рабочий стол.