Отладчик 1С:Предприятия 8.3 на практике: от точки останова до замера производительности
Содержание
Отладка в 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
Отладчик остановится только на «плохой» строке.
Список всех точек открывается через Отладка → Список точек останова. Там же их временно отключают, не удаляя.
Вычисление выражений и табло
Окно «Вычислить выражение» показывает значение переменной, а для коллекций — содержимое: строки таблицы значений, поля выборки, реквизиты объекта.
Табло — постоянная панель, куда кладут переменные, за которыми нужно следить на каждом шаге.
В окне вычисления можно вызвать функцию. Если эта функция записывает объект или проводит документ, запись выполнится по-настоящему. На рабочей базе такие вызовы не делайте.
Остановка по ошибке
Команда Отладка → Остановка по ошибке заставляет отладчик останавливаться на строке, где возникло исключение. Это спасает, когда ошибка возникает глубоко во вложенных вызовах, а сообщение пользователю показывается уже «наверху».
Остановка срабатывает и внутри конструкции Попытка … Исключение. Если в коде много перехватов, задайте фильтр по тексту ошибки — иначе отладчик будет останавливаться на каждой ожидаемой исключительной ситуации.
Стек вызовов
Окно стека показывает цепочку процедур, которая привела к текущей строке. Двойной щелчок по строке стека переносит в нужный модуль, и там можно посмотреть значения локальных переменных вызывающей процедуры.
Замер производительности
Отладка → Замер производительности включают перед действием, которое тормозит, и выключают после. Результат — таблица по строкам кода: сколько раз выполнялась строка, сколько времени заняла и какой процент от общего.
Сортировка по времени сразу показывает виновника. Двойной щелчок по строке замера открывает её в модуле.
Как включить отладку в файловой и клиент-серверной базе
Файловая база
- Откройте базу в Конфигураторе.
- Если конфигурация менялась, обновите её:
F7(«Обновить конфигурацию базы данных»). - Поставьте точку останова и нажмите
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и условные точки останова. - ❌ Забыть про контекст формы. Значение реквизита формы на клиенте и на сервере может отличаться до серверного вызова. Смотрите, в каком контексте стоит отладчик.
Частые вопросы
Можно ли отлаживать без Конфигуратора?
Нужны ли права администратора, чтобы запустить отладку?
Можно ли отлаживать веб-клиент?
Замедляет ли включённая отладка работу сервера?
Как отладить код, который выполняется при запуске базы?
F5 из Конфигуратора. Отладчик остановится раньше, чем откроется рабочий стол.