Отладка 1С выполняется встроенным отладчиком конфигуратора: вы ставите точку останова (F9), запускаете отладку (F5), а когда выполнение остановилось — смотрите значения переменных через «Вычислить выражение» (Shift+F9) и идёте по коду шагами F10 и F11. Если место ошибки неизвестно, включите «Остановку по ошибке»: отладчик сам остановится на строке, где возникло исключение.

Ниже — набор приёмов, которыми я пользуюсь каждый день на сопровождении: от базовых команд до отладки серверных вызовов и фоновых заданий. Это шпаргалка для программиста 1С, а не пересказ справки.

С чего начинать поиск ошибки

Порядок, который экономит больше всего времени:

  1. Посмотреть журнал регистрации. Большинство ошибок там уже есть: текст, пользователь, время, иногда объект. В типовых конфигурациях журнал открывается и в режиме предприятия: «Администрирование → Обслуживание → Журнал регистрации». Отбор по уровню «Ошибка» и периоду быстро сужает поиск.
  2. Воспроизвести ошибку под отладкой с включённой остановкой по ошибке.
  3. Разобрать состояние в точке остановки: переменные, стек вызовов, параметры.
  4. Только потом править код.

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

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

Меню «Отладка → Остановка по ошибке». Варианты:

  • останавливаться на любой ошибке;
  • останавливаться только на ошибках, текст которых содержит заданную подстроку.

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

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

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

Точка останова с условием задаётся там же, в меню «Отладка». Условие пишется на встроенном языке и вычисляется в контексте строки:

1С
// Остановиться только на нужной строке табличной части
СтрокаТовары.Номенклатура.Код = "00-00001234"
1С
// Остановиться на проблемной итерации большого цикла
НомерИтерации > 15000 И Сумма = 0

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

Отладка 1С: выполнение кода по шагам с остановкой на точке останова
Отладка 1С: выполнение кода по шагам с остановкой на точке останова

Трассировка: команды и горячие клавиши

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

Разница между F10 и F11 — главное, что нужно запомнить. Если строка вызывает тяжёлую функцию, в которой вы уверены, используйте F10. Если подозреваете проблему внутри — F11.

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

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

  • Просмотр значения. Выделите переменную или выражение и нажмите Shift+F9. Для коллекций доступно раскрытие по уровням, для таблиц значений — просмотр строк.
  • Произвольное выражение. В поле ввода можно написать код и сразу получить результат. Например, проверить запрос, не меняя модуль:
1С
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ, "Организация")
  • Подмена значения. Выделите переменную и задайте новое значение выражением. Удобно, чтобы пройти другую ветку кода, не создавая тестовые данные. Изменение живёт только до конца сеанса отладки.
  • Табло. Выражение можно отправить в табло — окно, где значения обновляются на каждом шаге трассировки. Туда я выношу 3–5 ключевых переменных цикла и смотрю, на каком шаге что-то идёт не так.

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

Стек вызовов

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

Отладка серверного кода и фоновых заданий

В клиент-серверном варианте серверный код выполняется в рабочих процессах кластера, и отладчик должен к ним подключиться.

  1. Отладка на сервере должна быть разрешена. Сервер 1С запускается с параметром, включающим отладку; на рабочих серверах её держат выключенной из соображений производительности и безопасности.
  2. Протокол отладки. В современных версиях платформы используется отладка по HTTP через сервер отладки; режим выбирается в параметрах конфигуратора. Режим конфигуратора должен совпадать с режимом сервера.
  3. Предметы отладки. Окно «Отладка → Подключение» показывает доступные сеансы. В настройке автоматического подключения отметьте нужные типы: клиент, сервер, фоновое задание, HTTP-сервис, веб-сервис. Без этого точки останова в фоновом задании или обработчике HTTP-сервиса просто не сработают.

Если отладка «отвалилась» — команды трассировки серые, точки не срабатывают — помогает переподключение через «Отладка → Подключение» или перезапуск отладки.

Для длинных фоновых операций я дополнительно пишу диагностику в журнал регистрации, чтобы не зависеть от отладчика:

1С
Попытка
	ВыполнитьРасчет(ПараметрыРасчета);
Исключение
	ИнформацияОшибки = ИнформацияОбОшибке();
	ЗаписьЖурналаРегистрации("Расчет.ФоновоеЗадание", УровеньЖурналаРегистрации.Ошибка, , ,
		ПодробноеПредставлениеОшибки(ИнформацияОшибки));
	ВызватьИсключение;
КонецПопытки;

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

Отладка под другим пользователем

Ошибка «у меня работает, а у бухгалтера нет» обычно связана с ролями или ограничениями доступа. В конфигураторе: «Сервис → Параметры → Запуск 1С:Предприятия», в разделе пользователя укажите нужное имя и запустите отладку. Сеанс откроется с правами этого пользователя, и вы увидите ту же ошибку. Пароль пользователя для этого не нужен, если вы входите в конфигуратор с административными правами.

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

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

Типичные ошибки при отладке

  • Отладка рабочей базы с остановкой по любой ошибке: пользователи висят, пока вы разбираетесь. Отлаживайте на копии.
  • Забытые точки останова в общих модулях, которые потом срабатывают у коллег при совместной отладке.
  • Вызов функций с записью данных из окна «Вычислить выражение».
  • Попытка поймать серверную ошибку без подключения к предмету отладки «Сервер» или «Фоновое задание».
  • Пустой Исключение … КонецПопытки в коде: ошибка проглатывается, и остановка по ошибке ничего не покажет.

Если ошибки в доработках повторяются регулярно, полезно взглянуть шире — на качество кода и процесс разработки. Это можно сделать в рамках аудита 1С или при сопровождении 1С.

Коротко

  • Начинайте с журнала регистрации, затем включайте остановку по ошибке.
  • Условные точки останова экономят время на больших циклах.
  • Shift+F9 и табло показывают и меняют значения прямо во время выполнения.
  • Для серверного кода и фоновых заданий нужна разрешённая отладка на сервере и подключение к нужным предметам отладки.
  • Ошибки, связанные с правами, воспроизводите запуском отладки под нужным пользователем.