Пошаговая отладка кода 1С 8.3: точки останова, табло и отладка сервера

· 10 мин

Содержание

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

Отладчик — часть платформы 1С:Предприятие 8.3, а не конкретной конфигурации. Он одинаково работает в Бухгалтерии, ЗУП, УТ и любой самописной базе. Нужны только права на Конфигуратор и доступ к коду: в базе на поддержке без снятия с замка код можно читать и отлаживать, но не менять.

Что делает отладчик 1С и когда без него не обойтись

Код 1С выполняется построчно. Когда что-то идёт не так, пользователь видит только итог: сообщение об ошибке или неверную сумму. Отладчик позволяет пройти путь до этого итога шаг за шагом.

Типичные задачи, где он нужен:

  • 🐞 Ошибка времени выполнения. Например, Поле объекта не обнаружено (Контрагент) или Значение не является значением объектного типа. Отладчик покажет, на какой строке и с какими данными она возникла.
  • 📊 Неверный результат. Документ проводится, но сумма в проводке другая. Можно остановиться перед записью движений и посмотреть, откуда пришло число.
  • 🔁 Зависание. Обработка «думает» минуты. Остановив выполнение, видно, в каком цикле она крутится.
  • 🧩 Чужой код. Нужно понять, какие процедуры вызываются при нажатии кнопки в типовой конфигурации. Стек вызовов отвечает на это быстрее, чем поиск по модулям.

Отладчик не меняет данные сам по себе. Но код, который вы выполняете под отладкой, работает с настоящей базой: проведение документа под отладчиком запишет движения так же, как без него. Для экспериментов берите копию базы.

Возможности отладчика: что можно делать

Точки останова

Точка останова — метка на строке, где выполнение замрёт. Ставится и снимается клавишей F9 или двойным щелчком на левом поле модуля. Красный кружок означает активную точку.

Варианты точек:

  • Обычная — останавливает каждый раз, когда выполнение доходит до строки.
  • С условием — останавливает, только если выражение истинно. Например, Строка.Номенклатура.Наименование = "Гвозди". Ставится через контекстное меню строки или меню Отладка.
  • Отключённая — точка остаётся на месте, но не срабатывает. Удобно, когда их много и часть пока не нужна.

Все точки базы собраны в окне «Список точек останова» (Alt+F9). Там их можно отключить, удалить или перейти к строке.

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

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

Это главный приём при разборе ошибок, которые типовой код «проглатывает» и превращает в невнятное сообщение пользователю.

Пошаговое выполнение

После остановки код двигают по шагам:

  • Шагнуть в — зайти внутрь вызываемой процедуры.
  • Шагнуть через — выполнить вызов целиком и встать на следующую строку.
  • Шагнуть из — дойти до конца текущей процедуры и вернуться к вызывающей.
  • Идти до курсора — выполнить код до строки, где стоит курсор.

Просмотр значений

  • Вычислить выражение (Shift+F9) — окно, где можно посчитать любое выражение в текущем контексте: значение переменной, Запрос.Выполнить().Выгрузить(), реквизит объекта через точку.
  • Табло (Ctrl+Alt+W) — список выражений, которые пересчитываются при каждой остановке. Сюда выносят то, за чем следите на протяжении всего прохода.
  • Локальные — все переменные текущей процедуры сразу, без ручного ввода.
  • Стек вызовов (Ctrl+Alt+C) — цепочка процедур, которая привела к текущей строке. Двойной щелчок по строке стека открывает место вызова.

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

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

Команда Отладка → Замер производительности включает учёт времени по строкам кода. После остановки замера Конфигуратор покажет, какие строки съели больше всего времени и сколько раз выполнялись. Это первый инструмент, когда жалуются на медленное проведение.

Как запустить отладку в 1С 8.3 по шагам

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

  1. Откройте базу в режиме Конфигуратор.
  2. Откройте модуль, где подозреваете ошибку: модуль объекта документа, модуль формы, общий модуль.
  3. Поставьте точку останова F9 на строке до проблемного места.
  4. Выберите Отладка → Начать отладку → Тонкий клиент (или нажмите F5 — запуск в клиенте, выбранном по умолчанию).
  5. В открывшемся окне 1С:Предприятия повторите действие пользователя: проведите документ, сформируйте отчёт.
  6. Когда выполнение дойдёт до точки, Конфигуратор выйдет на передний план и подсветит строку.

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

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

Здесь серверный код выполняют рабочие процессы кластера. Чтобы отладчик в них заходил, сервер 1С нужно запустить с ключом отладки.

  1. Откройте свойства службы агента сервера 1С (обычно «1C:Enterprise 8.3 Server Agent»).
  2. В строке запуска ragent.exe добавьте ключ -debug. Для отладки по протоколу HTTP — -debug -http.
  3. Перезапустите службу.

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

Пример строки запуска службы:

"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. Поставить точку в процедуре задания, включить автоподключение фоновых заданий и запустить задание вручную из обработки регламентных заданий в режиме 1С:Предприятия.
  2. Вызвать ту же процедуру из окна «Вычислить выражение» в серверном контексте, если она экспортная и в общем модуле.

Разбор медленного кода

Замер производительности показывает строку, но не причину. Если тяжёлая строка — Запрос.Выполнить(), возьмите текст запроса через «Вычислить выражение», скопируйте его вместе с параметрами в консоль запросов и разбирайте там отдельно. Если тяжёлая строка внутри цикла — скорее всего, запрос или обращение к реквизиту через точку выполняются на каждой итерации.

Перед отладкой на рабочем сервере
Выполнено: 0 / 5

Когда отладчик не поможет и что взять вместо него

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

ИнструментКогда братьЧто даёт
Журнал регистрацииНужно понять, кто и когда изменил данные, какая ошибка была у пользователяСобытия сеансов, ошибки, записи объектов
ЗаписьЖурналаРегистрации() в кодеОшибка редкая, нужно собрать значения в момент сбояСвои записи в журнал с нужными данными
Технологический журнал (logcfg.xml)Блокировки, взаимоблокировки, долгие запросы к СУБД, падения процессовНизкоуровневые события платформы на сервере
Консоль запросовЗапрос возвращает не то или работает долгоРезультат и время запроса отдельно от кода
Отладчик в 1С:EDTРазработка в EDT, нужна отладка без КонфигуратораТе же точки, шаги и выражения в среде EDT

Технологический журнал включают файлом logcfg.xml в каталоге conf платформы на сервере. Он быстро растёт и нагружает диск, поэтому его включают на время, с фильтром по нужным событиям, а потом выключают.

Отладчик не покажет проблем, которые возникают ниже кода: блокировки СУБД, нехватку памяти рабочего процесса, сетевые обрывы. Если код в отладчике выполняется за секунду, а у пользователя за минуту, ищите причину в технологическом журнале и мониторинге сервера.

Частые вопросы об отладчике 1С

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