Как отлаживать код в 1С: точки останова, табло, клиент-сервер
Содержание
Отладчик останавливает выполнение кода на нужной строке, показывает значения всех переменных в этот момент и позволяет пройти программу по шагам. Это главный инструмент, когда документ проводится не так, отчёт считает неправильно или обработка падает с ошибкой, а понять почему по тексту кода не выходит.
Ниже — как включить отладку в Конфигураторе 1С 8.3, где ставить точки останова, какими клавишами двигаться по коду, как смотреть и менять значения переменных и как подключиться к серверному сеансу или фоновому заданию. Платформа — 8.3 с интерфейсом «Такси», всё то же работает и в более поздних релизах.
Как включить режим отладки
Точка останова не сработает, пока сеанс не запущен в режиме отладки. Включается это в двух местах, и часто проблема именно в том, что про них забыли.
В Конфигураторе откройте Сервис → Параметры → Запуск 1С:Предприятия → Дополнительные. Здесь задаётся протокол отладки и флажок разрешения отладки для запускаемого сеанса. Для платформы 8.3 оставляйте протокол HTTP — он работает и для клиента, и для сервера, тогда как устаревший TCP годится не везде.
Запускать приложение для отладки нужно не кнопкой «1С:Предприятие», а командой Начать отладку (клавиша F5). Тогда Конфигуратор сам поднимет сеанс в режиме, где точки останова активны.
Если нужно отладить уже запущенный сеанс (например, тонкий клиент пользователя), его не обязательно перезапускать из Конфигуратора. Достаточно, чтобы база была запущена с разрешением отладки, а затем подключиться к сеансу через список предметов отладки — об этом ниже.
Для файловой базы этого достаточно: клиент и сервер работают в одном процессе, и разрешения отладки сеанса хватает для всего кода. Для клиент-серверной дополнительно включается отладка на сервере — отдельный раздел ниже.
Горячие клавиши отладчика
Мышью в отладчике почти не работают — всё делается с клавиатуры. Вот команды, которыми пользуешься постоянно:
| Клавиша | Команда | Что делает |
|---|---|---|
F9 | Точка останова | Ставит или снимает точку останова на строке |
F5 | Начать отладку | Запускает приложение в режиме отладки |
Shift+F5 | Остановить отладку | Завершает отлаживаемый сеанс |
F11 | Шагнуть в | Заходит внутрь вызываемой процедуры или функции |
F10 | Шагнуть через | Выполняет строку целиком, не заходя в процедуру |
Shift+F11 | Шагнуть из | Доводит текущую процедуру до конца и возвращается выше |
Shift+F9 | Вычислить выражение | Открывает окно для просмотра и расчёта любого выражения |
Остальные команды — остановка по ошибке, табло, стек вызовов — в меню Отладка Конфигуратора. Если не помните клавишу, смотрите подпись рядом с пунктом меню: там указано текущее сочетание.
Точки останова: обычные, условные и по счётчику
Точка останова (breakpoint) — метка на строке, на которой выполнение замрёт. Поставьте курсор на строку модуля и нажмите F9 — слева появится красный кружок. Повторное F9 снимает метку.
Когда программа дойдёт до этой строки, отладчик её выделит жёлтым и передаст управление вам: дальше двигаетесь по шагам и смотрите значения.
Условная точка останова нужна, когда код в цикле выполняется сотни раз, а поймать нужно один конкретный случай. Щёлкните точку останова правой кнопкой → Условие точки останова и впишите выражение, например Номенклатура.Код = "00-0012". Остановка произойдёт только когда условие истинно.
Там же задаётся количество срабатываний — остановиться, скажем, на 50-й итерации цикла. Это удобнее, чем жать F5 полсотни раз.
Все точки останова видны списком: меню Отладка → Список точек останова. Оттуда их можно массово отключить, не удаляя, — метки станут серыми и перестанут срабатывать, но останутся на месте для следующего сеанса.
Отдельно стоит остановка по ошибке (Отладка → Остановка по ошибке). Отладчик замрёт на строке, где возникает исключение, ещё до того как вылетит окно с текстом ошибки. Можно указать, на каких именно сообщениях останавливаться.
Пошаговое выполнение: зайти, перешагнуть, выйти
Когда выполнение остановилось на точке останова, три клавиши решают почти всё.
F10— шагнуть через. Выполняет текущую строку и останавливается на следующей. Если в строке вызов процедуры — она отработает целиком, внутрь вы не попадёте. Так проходят участки, в которых уверены.F11— шагнуть в. Если в строке вызов вашей процедуры или функции — отладчик зайдёт внутрь неё и остановится на первой строке. Так спускаются к месту, где прячется ошибка.Shift+F11— шагнуть из. Досрочно доводит текущую процедуру до конца и возвращает вас в точку, откуда её вызвали. Нужно, когда зашли глубже, чем хотели.
Ещё один приём — выполнить до курсора: поставьте курсор на нужную строку ниже по коду, щёлкните правой кнопкой и выберите выполнение до текущей строки. Программа проскочит промежуток без расстановки лишних точек останова.
Чтобы понять, откуда вообще пришёл вызов, откройте стек вызовов (меню Отладка). Это цепочка процедур: кто кого вызвал вплоть до текущей строки. Двойной щелчок по уровню стека переносит в соответствующий модуль с актуальными значениями переменных на том уровне. Приём выручает, когда одна и та же процедура вызывается из разных мест, а ошибка проявляется только при одном из вызовов.
Если во время пошагового прохода стало ясно, что копать нужно в другом месте, не обязательно доводить сеанс до конца. Команда Остановить отладку (Shift+F5) завершает отлаживаемое приложение сразу, после чего можно переставить точки останова и запустить F5 заново.
Как смотреть и менять значения переменных
Пока выполнение остановлено, наведите курсор на любую переменную в коде — во всплывающей подсказке покажется её текущее значение. Для простых типов (число, строка, булево) этого хватает.
Для сложных объектов — таблиц значений, структур, ссылок — удобнее табло. Откройте его из меню Отладка → Табло. В поле выражения впишите имя переменной, и табло развернёт её содержимое: реквизиты ссылки, колонки и строки таблицы значений, элементы массива. Значения обновляются на каждом шаге.
Значение переменной в табло можно не только смотреть, но и менять прямо во время отладки. Дважды щёлкните значение, введите новое — и выполнение продолжится уже с ним. Так проверяют гипотезу «а если бы здесь было другое число», не переписывая код.
В табло можно держать сразу несколько выражений — каждое своей строкой. Они сохраняются между шагами и пересчитываются автоматически, поэтому за ключевыми переменными удобно наблюдать на протяжении всего прохода, не наводя на них курсор каждый раз. Строку, которая больше не нужна, достаточно удалить из списка.
Окно Вычислить выражение (Shift+F9) считает произвольное выражение в текущем контексте: вызов функции, арифметику, обращение к реквизиту. Это удобно, чтобы на месте проверить, что вернёт функция при текущих данных, не дожидаясь, пока до неё дойдёт выполнение. Результат можно тут же отправить в табло кнопкой Включить в табло.
Вычисление выражения реально выполняет код. Если вписать туда вызов, который пишет в базу или проводит документ, он отработает по-настоящему. Для расчётов это безопасно, но функции с побочными действиями лучше не дёргать вручную.
Отладка на сервере и в фоновых заданиях
В клиент-серверной базе часть кода (&НаСервере, общие модули с признаком «Сервер», регламентные задания) выполняется на сервере 1С, а не на клиенте. Точка останова в серверном модуле не сработает, пока отладка на сервере не разрешена.
Включается это на стороне сервера:
- Служба агента сервера (
ragent) должна быть запущена с разрешением отладки по протоколу HTTP. Задаётся при установке сервера или через параметры службы / консоль администрирования. - Протокол отладки на сервере и в Конфигураторе должен совпадать — HTTP с HTTP.
Изменение параметров запуска службы сервера требует её перезапуска, а это обрывает сеансы всех работающих пользователей. На продуктивной базе делайте это в согласованное окно, а лучше отлаживайте на тестовой копии.
Дальше — подключение к нужному сеансу. Откройте Отладка → Подключение (список предметов отладки). Предмет отладки — это конкретный исполняемый контекст: тонкий клиент, веб-клиент, фоновое задание, серверный вызов. Выберите нужный и нажмите Подключить.
Фоновые и регламентные задания запускаются сами и живут недолго, поймать их вручную трудно. Поэтому в том же окне включите автоматическое подключение новых предметов отладки нужного типа — отладчик сам перехватит задание в момент старта и остановится на вашей точке останова.
Журнал регистрации и другие инструменты
Отладчик нужен не всегда. Если ошибка уже произошла и воспроизвести её трудно, начните с журнала регистрации: в режиме «1С:Предприятие» это Администрирование → Журнал регистрации (точное название раздела зависит от конфигурации). В журнале видно, кто и когда выполнял операцию, с каким результатом и текстом ошибки. По времени события легко сузить поиск до конкретного документа.
Замер производительности (Отладка → Замер производительности) — отдельный инструмент: он не останавливает код, а записывает, сколько времени заняла каждая строка за сеанс. Нужен, когда обработка не падает, а просто долго работает: замер покажет самые тяжёлые участки.
Для серьёзной разработки есть 1C:Enterprise Development Tools (EDT) — среда на базе Eclipse со своим отладчиком, подсветкой проблем и рефакторингом. Отладка там устроена похоже (точки останова, шаги, просмотр переменных), но интерфейс и возможности анализа кода шире, чем в классическом Конфигураторе.
Проверить конфигурацию на типовые проблемы кода целиком, не запуская отладку, помогает статический анализ — встроенная проверка в EDT или отдельные инструменты проверки конфигураций.
Частые ошибки при отладке
Большинство «отладчик не работает» сводится к нескольким причинам:
- 🔴 Приложение запущено не через «Начать отладку». Кнопка «1С:Предприятие» поднимает обычный сеанс без отладки. Нужна команда
F5. - 🟠 Отлаживают клиент, а код выполняется на сервере.
&НаСервереи общие модули сервера требуют разрешённой серверной отладки и подключённого предмета. - 🟡 Конфигурация базы устарела. Поменяли код, но не обновили конфигурацию базы данных (
F7) — отладчик работает по старой версии и останавливается «не там». - 🟢 Точка стоит в недостижимом коде. Строка относится к толстому клиенту, а запущен тонкий, или ветка
Еслине выполняется при этих данных.
Если точка останова нужна лишь на время, не удаляйте её после сеанса, а отключите через список точек останова. В следующий раз включите обратно — не придётся заново искать строку.
Частые вопросы
Чем «шагнуть в» отличается от «шагнуть через»?
F11 (шагнуть в) заходит внутрь вызываемой процедуры и останавливается на её первой строке. F10 (шагнуть через) выполняет вызов целиком, не показывая, что происходит внутри. В чужой или проверенный код заходить не нужно — используйте F10.Почему точка останова серого цвета и не срабатывает?
Можно ли отладить фоновое или регламентное задание?
Отладка → Подключение включите автоматическое подключение предметов отладки типа «фоновое задание». Отладчик перехватит задание при старте и остановится на вашей точке останова.Как посмотреть значение переменной во время отладки?
Отладка → Табло) и впишите имя переменной: там развернётся всё содержимое объекта.