Пошаговая отладка кода 1С 8.3: точки останова, табло и отладка сервера
Содержание
Отладчик в 1С — это встроенный в Конфигуратор инструмент, который останавливает выполнение кода на нужной строке и показывает значения переменных в этот момент. Запускается он из меню Отладка → Начать отладку или клавишей F5, а точка останова ставится клавишей F9 на строке модуля. Им пользуются, чтобы найти, почему документ не проводится, отчёт считает не то или обработка падает с ошибкой.
Отладчик — часть платформы 1С:Предприятие 8.3, а не конкретной конфигурации. Он одинаково работает в Бухгалтерии, ЗУП, УТ и любой самописной базе. Нужны только права на Конфигуратор и доступ к коду: в базе на поддержке без снятия с замка код можно читать и отлаживать, но не менять.
Что делает отладчик 1С и когда без него не обойтись
Код 1С выполняется построчно. Когда что-то идёт не так, пользователь видит только итог: сообщение об ошибке или неверную сумму. Отладчик позволяет пройти путь до этого итога шаг за шагом.
Типичные задачи, где он нужен:
- 🐞 Ошибка времени выполнения. Например,
Поле объекта не обнаружено (Контрагент)илиЗначение не является значением объектного типа. Отладчик покажет, на какой строке и с какими данными она возникла. - 📊 Неверный результат. Документ проводится, но сумма в проводке другая. Можно остановиться перед записью движений и посмотреть, откуда пришло число.
- 🔁 Зависание. Обработка «думает» минуты. Остановив выполнение, видно, в каком цикле она крутится.
- 🧩 Чужой код. Нужно понять, какие процедуры вызываются при нажатии кнопки в типовой конфигурации. Стек вызовов отвечает на это быстрее, чем поиск по модулям.
Отладчик не меняет данные сам по себе. Но код, который вы выполняете под отладкой, работает с настоящей базой: проведение документа под отладчиком запишет движения так же, как без него. Для экспериментов берите копию базы.
Возможности отладчика: что можно делать
Точки останова
Точка останова — метка на строке, где выполнение замрёт. Ставится и снимается клавишей F9 или двойным щелчком на левом поле модуля. Красный кружок означает активную точку.
Варианты точек:
- Обычная — останавливает каждый раз, когда выполнение доходит до строки.
- С условием — останавливает, только если выражение истинно. Например,
Строка.Номенклатура.Наименование = "Гвозди". Ставится через контекстное меню строки или менюОтладка. - Отключённая — точка остаётся на месте, но не срабатывает. Удобно, когда их много и часть пока не нужна.
Все точки базы собраны в окне «Список точек останова» (Alt+F9). Там их можно отключить, удалить или перейти к строке.
Остановка по ошибке
Команда Отладка → Остановка по ошибке заставляет отладчик замереть в момент возникновения исключения, даже если оно перехвачено блоком Попытка … Исключение. Можно указать фрагмент текста ошибки, чтобы ловить только нужную.
Это главный приём при разборе ошибок, которые типовой код «проглатывает» и превращает в невнятное сообщение пользователю.
Пошаговое выполнение
После остановки код двигают по шагам:
- Шагнуть в — зайти внутрь вызываемой процедуры.
- Шагнуть через — выполнить вызов целиком и встать на следующую строку.
- Шагнуть из — дойти до конца текущей процедуры и вернуться к вызывающей.
- Идти до курсора — выполнить код до строки, где стоит курсор.
Просмотр значений
- Вычислить выражение (
Shift+F9) — окно, где можно посчитать любое выражение в текущем контексте: значение переменной,Запрос.Выполнить().Выгрузить(), реквизит объекта через точку. - Табло (
Ctrl+Alt+W) — список выражений, которые пересчитываются при каждой остановке. Сюда выносят то, за чем следите на протяжении всего прохода. - Локальные — все переменные текущей процедуры сразу, без ручного ввода.
- Стек вызовов (
Ctrl+Alt+C) — цепочка процедур, которая привела к текущей строке. Двойной щелчок по строке стека открывает место вызова.
Таблицы значений, результаты запросов и коллекции в окне выражения раскрываются: видны колонки и строки, как в маленькой таблице.
Замер производительности
Команда Отладка → Замер производительности включает учёт времени по строкам кода. После остановки замера Конфигуратор покажет, какие строки съели больше всего времени и сколько раз выполнялись. Это первый инструмент, когда жалуются на медленное проведение.
Как запустить отладку в 1С 8.3 по шагам
Файловая база
- Откройте базу в режиме Конфигуратор.
- Откройте модуль, где подозреваете ошибку: модуль объекта документа, модуль формы, общий модуль.
- Поставьте точку останова
F9на строке до проблемного места. - Выберите
Отладка → Начать отладку → Тонкий клиент(или нажмитеF5— запуск в клиенте, выбранном по умолчанию). - В открывшемся окне 1С:Предприятия повторите действие пользователя: проведите документ, сформируйте отчёт.
- Когда выполнение дойдёт до точки, Конфигуратор выйдет на передний план и подсветит строку.
В файловом варианте серверный код выполняется в процессе клиента, поэтому отладка «сервера» работает без дополнительной настройки.
Клиент-серверная база
Здесь серверный код выполняют рабочие процессы кластера. Чтобы отладчик в них заходил, сервер 1С нужно запустить с ключом отладки.
- Откройте свойства службы агента сервера 1С (обычно «1C:Enterprise 8.3 Server Agent»).
- В строке запуска
ragent.exeдобавьте ключ-debug. Для отладки по протоколу HTTP —-debug -http. - Перезапустите службу.
Перезапуск службы агента обрывает сеансы всех пользователей сервера. Делайте это вне рабочего времени или на тестовом сервере.
Пример строки запуска службы:
"C:\Program Files\1cv8\8.3.24.1342\bin\ragent.exe" -debug -http -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Путь к платформе, номер версии и каталог srvinfo у вас будут свои — копируйте строку из текущих свойств службы и дописывайте только ключи отладки.
Не держите -debug включённым на рабочем сервере постоянно. Любой, у кого есть Конфигуратор и права, сможет подключиться и остановить код в чужом сеансе. Включили на время разбора — выключили.
HTTP или TCP/IP
Начиная с 8.3.7 платформа умеет отлаживать по протоколу HTTP через сервер отладки dbgs.exe. Он нужен для отладки мобильных приложений и проще проходит через сетевые экраны. Старый протокол TCP/IP тоже поддерживается.
Протокол выбирают в Конфигураторе: Сервис → Параметры → Отладка. Протокол в Конфигураторе и ключ у службы сервера должны совпадать, иначе отладчик не увидит серверные процессы.
Подключение к уже открытому сеансу
Отладчик можно присоединить к сеансу, который запущен не из Конфигуратора. Для этого клиента запускают с параметром отладки, например:
1cv8.exe ENTERPRISE /F "D:\Bases\Buh" /DEBUG -http /DEBUGGERURL "http://localhost:1550"
Затем в Конфигураторе: Отладка → Подключение. В окне видны предметы отладки — клиентские и серверные сеансы. Выберите нужный и подключитесь. Порт 1550 — порт сервера отладки по умолчанию; если в настройках задан другой, укажите его.
Горячие клавиши отладчика 1С
| Действие | Клавиши |
|---|---|
| Начать отладку / продолжить после остановки | F5 |
| Завершить отладку | Shift+F5 |
| Поставить или снять точку останова | F9 |
| Список точек останова | Alt+F9 |
| Шагнуть в | F11 |
| Шагнуть через | F10 |
| Шагнуть из | Shift+F11 |
| Идти до курсора | Shift+F10 |
| Вычислить выражение | Shift+F9 |
| Табло | Ctrl+Alt+W |
| Стек вызовов | Ctrl+Alt+C |
| Прервать выполнение (остановить там, где сейчас код) | Ctrl+Break |
Самая полезная пара — F10 и F11. Типичный ритм: F10 по строкам процедуры, пока не дойдёте до подозрительного вызова, затем F11 внутрь него.
Ctrl+Break спасает при зависании: нажали — и видите строку, где код сейчас крутится.
Все команды из таблицы есть в меню Отладка, а рядом с названием показана текущая клавиша. Если сочетание не срабатывает, проверьте там: часть клавиш могла быть переназначена.
Почему отладчик не останавливается и другие частые ошибки
Ещё несколько ошибок, которые съедают время:
- ❌ Поставили точку в модуле формы, а код выполняется в модуле объекта. Проведение документа идёт в модуле объекта (
ОбработкаПроведения), а не в форме. Ищите обработчик там, где он реально живёт. - ❌ Исправили код и продолжили отладку. Изменения в модуле не подхватываются на лету. Сохранить, обновить конфигурацию базы данных, завершить сеанс и начать отладку заново.
- ❌ Вычисляли в «Вычислить выражение» процедуру, которая пишет данные. Вызов функции из окна выражения выполняется по-настоящему. Если функция записывает объект — объект будет записан.
- ❌ Отлаживали внешнюю обработку, открыв её из папки. Чтобы точки сработали, откройте файл
.epfв Конфигураторе черезФайл → Открыть, поставьте точки, а в 1С:Предприятии откройте тот же самый файл.
Приёмы для тех, кто отлаживает каждый день
Остановка на конкретной строке табличной части
В цикле по 500 строкам документа обычная точка остановит 500 раз. Условие Строка.НомерСтроки = 347 приведёт сразу к нужной строке. Номер берите из сообщения об ошибке или из табличной части документа.
Ловушка на исключение вместо поиска по коду
Типовые конфигурации часто перехватывают исключение и выдают своё сообщение. Включите Остановка по ошибке с фрагментом текста исходной ошибки. Отладчик встанет на ту строку, где ошибка возникла, а не там, где её показали.
Автоматическое подключение
Окно Отладка → Подключение → Автоматическое подключение задаёт, к каким типам предметов отладчик подключается сам: тонкий клиент, сервер, фоновые задания, веб-клиент, HTTP-сервисы и веб-сервисы. Включите нужные один раз, и не придётся вручную выбирать сеанс при каждом запуске.
Без автоподключения серверный вызов из HTTP-сервиса или регламентного задания отладчик просто пропустит.
Отладка регламентного задания
Регламентное задание запускается по расписанию на сервере, ждать его неудобно. Два рабочих способа:
- Поставить точку в процедуре задания, включить автоподключение фоновых заданий и запустить задание вручную из обработки регламентных заданий в режиме 1С:Предприятия.
- Вызвать ту же процедуру из окна «Вычислить выражение» в серверном контексте, если она экспортная и в общем модуле.
Разбор медленного кода
Замер производительности показывает строку, но не причину. Если тяжёлая строка — Запрос.Выполнить(), возьмите текст запроса через «Вычислить выражение», скопируйте его вместе с параметрами в консоль запросов и разбирайте там отдельно. Если тяжёлая строка внутри цикла — скорее всего, запрос или обращение к реквизиту через точку выполняются на каждой итерации.
Когда отладчик не поможет и что взять вместо него
Отладчик хорош, когда ошибку можно воспроизвести. Если она случается раз в неделю у одного пользователя, ловить её точкой останова бесполезно.
| Инструмент | Когда брать | Что даёт |
|---|---|---|
| Журнал регистрации | Нужно понять, кто и когда изменил данные, какая ошибка была у пользователя | События сеансов, ошибки, записи объектов |
ЗаписьЖурналаРегистрации() в коде | Ошибка редкая, нужно собрать значения в момент сбоя | Свои записи в журнал с нужными данными |
Технологический журнал (logcfg.xml) | Блокировки, взаимоблокировки, долгие запросы к СУБД, падения процессов | Низкоуровневые события платформы на сервере |
| Консоль запросов | Запрос возвращает не то или работает долго | Результат и время запроса отдельно от кода |
| Отладчик в 1С:EDT | Разработка в EDT, нужна отладка без Конфигуратора | Те же точки, шаги и выражения в среде EDT |
Технологический журнал включают файлом logcfg.xml в каталоге conf платформы на сервере. Он быстро растёт и нагружает диск, поэтому его включают на время, с фильтром по нужным событиям, а потом выключают.
Отладчик не покажет проблем, которые возникают ниже кода: блокировки СУБД, нехватку памяти рабочего процесса, сетевые обрывы. Если код в отладчике выполняется за секунду, а у пользователя за минуту, ищите причину в технологическом журнале и мониторинге сервера.
Частые вопросы об отладчике 1С
Можно ли отлаживать типовую конфигурацию, не снимая её с поддержки?
Нужен ли отдельный ключ лицензии для отладки?
Можно ли отладить код в веб-клиенте?
Отладка → Начать отладку. Для опубликованной на веб-сервере базы включите в автоподключении тип «Веб-клиент». Веб-сервер должен работать с той же базой, что и Конфигуратор.