Отладка кода в 1С 8.3: обычные, условные и серверные точки останова

· 10 мин

Содержание

Чтобы установить точку останова в 1С, откройте модуль в Конфигураторе, поставьте курсор на строку с кодом и нажмите F9 (или дважды щёлкните по серому полю слева от строки). Появится красный кружок. Затем запустите отладку клавишей F5: когда выполнение дойдёт до этой строки, 1С:Предприятие замрёт, а Конфигуратор покажет текущую строку и значения переменных.

Типичная ситуация: документ проводится, а сумма в движениях не та. Вместо того чтобы гадать, ставите точку останова в обработке проведения, проводите документ и смотрите, что лежит в переменных на каждом шаге. Механизм общий для платформы 8.3 и не зависит от конфигурации: в БП, ЗУП и УТ точки ставятся одинаково.

Как устроен отладчик 1С и что подготовить

Отладчик встроен в Конфигуратор. Отдельно его ставить не нужно. Работает схема из двух окон: в Конфигураторе вы ставите точки и смотрите переменные, а в запущенном 1С:Предприятии выполняете действие, которое вызывает код.

Что понадобится:

  • 🔑 Права администратора в базе: без них Конфигуратор не откроется.
  • 💾 Сохранённая и обновлённая конфигурация. Отладчик сверяет строки модулей, которые выполняются в базе, с тем, что открыто в Конфигураторе. Если вы правили код и не обновили конфигурацию базы данных (F7), номера строк разъедутся.
  • 🧪 Копия базы для экспериментов. В рабочей базе остановка на точке «подвешивает» сеанс пользователя, который выполняет этот код.

Конфигурация должна быть открыта: Конфигурация → Открыть конфигурацию. Без этого модули не видны и ставить точки некуда.

Режимы запуска отладки

Команда Отладка → Начать отладку предлагает несколько клиентов. Выбирайте тот, в котором работают пользователи:

КлиентКогда выбирать
Тонкий клиентТиповые конфигурации на управляемых формах (БП 3.0, ЗУП 3.1, УТ 11)
Толстый клиентСтарые конфигурации на обычных формах, обычное приложение
Веб-клиентПроверка кода, который ведёт себя иначе в браузере

Клавиша F5 запускает клиент, выбранный по умолчанию в параметрах Конфигуратора (Сервис → Параметры, вкладка «Запуск 1С:Предприятия»).

Ставим точку останова в модуле: пошагово

Порядок одинаковый для модуля объекта, модуля менеджера, общего модуля и модуля формы.

  1. Откройте нужный модуль. Быстрее всего — через поиск по дереву метаданных: встаньте в дерево и начните печатать имя объекта.
  2. Найдите процедуру. В модуле удобно искать список процедур через Ctrl+F по имени или через выпадающий список процедур на панели модуля.
  3. Поставьте курсор на исполняемую строку: присваивание, вызов, условие Если. На пустой строке, комментарии или объявлении Перем точка не сработает.
  4. Нажмите F9. Слева появится красный кружок. Повторное F9 убирает точку.
  5. Запустите отладку (F5) и выполните в 1С:Предприятии действие, которое вызывает этот код: откройте форму, нажмите кнопку, проведите документ.
  6. Когда выполнение остановится, Конфигуратор выйдет на передний план, а текущая строка подсветится стрелкой.

Наведите курсор на переменную — во всплывающей подсказке будет её значение. Для коллекций и объектов удобнее окно «Вычислить выражение» (Shift+F9): там можно раскрыть структуру, таблицу значений или реквизиты ссылки.

Как двигаться по коду после остановки

КлавишаДействие
F10Шагнуть через: выполнить строку, не заходя в вызываемые процедуры
F11Шагнуть в: зайти внутрь вызываемой процедуры или функции
Shift+F11Шагнуть из: доработать текущую процедуру и вернуться к вызывающему коду
Shift+F10Идти до курсора: выполнить код до строки, где стоит курсор
F5Продолжить до следующей точки останова

Все установленные точки видны в окне Отладка → Список точек останова (Alt+F9). Оттуда же их удобно включать, отключать без удаления и переходить к нужной строке двойным щелчком. Отключённая точка остаётся в модуле, но выполнение на ней не останавливается — удобно, когда точка ещё понадобится.

Точки останова во внешних обработках и отчётах

Внешние файлы .epf и .erf не входят в конфигурацию, поэтому порядок другой.

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

Ключевое условие — путь к файлу должен совпадать. Если вы открыли в Конфигураторе D:\Обработки\Загрузка.epf, а в 1С:Предприятии — копию с рабочего стола, точка не сработает.

Обработка подключена через «Дополнительные отчёты и обработки»

Это самый частый случай: обработка зарегистрирована в справочнике дополнительных обработок БСП, и пользователи запускают её оттуда. Платформа при запуске выгружает её во временный файл, путь которого вы заранее не знаете. Точки из открытого в Конфигураторе файла поэтому не срабатывают.

Рабочий приём: на время отладки откройте исходный .epf напрямую через Файл → Открыть в 1С:Предприятии, а не из списка дополнительных обработок. При открытии внешнего файла платформа может показать предупреждение защиты от опасных действий — для своего файла его можно подтвердить. После отладки загрузите исправленную версию в справочник заново.

Код, который в справочнике выполняется в безопасном режиме, при прямом открытии может вести себя иначе: например, обращаться к файлам без ограничений. Финальную проверку делайте именно через справочник.

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

Обычная точка в цикле по 3 000 строк остановит вас 3 000 раз. Условие решает это: отладчик остановится, только когда выражение вернёт Истина.

Как поставить:

  1. Встаньте на строку внутри цикла.
  2. Выберите Отладка → Точка останова с условием (или правый щелчок по строке).
  3. Введите выражение на встроенном языке и подтвердите. Значок такой точки отличается от обычного, так их легко различить.

Примеры условий:

// Остановиться на конкретной номенклатуре
СтрокаТЧ.Номенклатура.Код = "00-00000123"

// Остановиться, когда сумма ушла в минус
СтрокаТЧ.Сумма < 0

// Остановиться на 500-й итерации счётчика
Сч = 500

// Остановиться, только если строка содержит слово
СтрНайти(НРег(СтрокаТЧ.Содержание), "аренда") > 0

Условие вычисляется в контексте этой строки: в нём доступны локальные переменные процедуры, параметры и переменные модуля.

Следите, чтобы условие не падало с ошибкой. Если СтрокаТЧ.Номенклатура пустая, обращение к .Код вернёт ошибку, и точка поведёт себя не так, как вы ждёте. Добавляйте проверку: ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) И СтрокаТЧ.Номенклатура.Код = "00-00000123".

Отладка управляемых форм: клиент и сервер

В управляемой форме код разделён директивами компиляции. Это определяет, где выполняется процедура и как её отлаживать.

  • 🖥️ &НаКлиенте — выполняется в клиентском приложении пользователя. Точки срабатывают всегда, если клиент подключён к отладке.
  • 🗄️ &НаСервере, &НаСервереБезКонтекста — выполняются на сервере. В файловой базе «сервер» работает внутри того же процесса, и точки срабатывают без настроек. В клиент-серверной базе нужна серверная отладка (о ней ниже).
  • 🔁 &НаКлиентеНаСервереБезКонтекста — функция может выполниться и там, и там; точка сработает в обоих случаях.

Куда ставить точку, чтобы поймать нужный момент:

Что нужно пойматьГде ставить точку
Открытие формы, начальное заполнениеПриСозданииНаСервере
Действие после открытия на клиентеПриОткрытии
Нажатие кнопкиПроцедура команды, указанная в свойстве «Действие» команды формы
Изменение поляОбработчик ПриИзменении элемента
Запись документа из формыПередЗаписью в форме или ПередЗаписью в модуле объекта
ПроведениеОбработкаПроведения в модуле объекта документа

Не знаете, какая процедура вызывается при нажатии кнопки? Откройте форму в редакторе, выделите кнопку, в свойствах посмотрите имя команды, затем у команды — свойство «Действие». Это имя процедуры в модуле формы.

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

Отладка на сервере, в фоновых заданиях и через подключение

Это то, чего не хватает большинству инструкций, — а именно здесь отладчик чаще всего «не работает ».

Серверная отладка в клиент-серверной базе

Чтобы отладчик останавливался в серверном коде, сервер 1С:Предприятия должен быть запущен с разрешённой отладкой. Для этого службе агента сервера (ragent) добавляют ключ -debug. В современных версиях 8.3 отладка идёт по протоколу HTTP, тогда к нему добавляют -http.

Ключи прописываются в параметрах запуска службы «Агент сервера 1С:Предприятия» (строка пути к ragent.exe в свойствах службы Windows).

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

Протокол отладки, который использует сам Конфигуратор, задаётся в Сервис → Параметры, на вкладке «Отладка». Он должен совпадать с тем, как запущен сервер.

Подключение к уже запущенному сеансу

Если 1С:Предприятие запущено не из Конфигуратора, его можно подключить к отладке позже:

  1. Запустите клиент с параметром командной строки /Debug (или пропишите его в дополнительных параметрах запуска базы в окне выбора баз).
  2. В Конфигураторе откройте Отладка → Подключение.
  3. В списке доступных предметов отладки выберите нужный сеанс и подключите его.

Фоновые и регламентные задания

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

💡 Быстрый обходной путь: вызвать ту же процедуру из обработки или из окна «Вычислить выражение» в своём сеансе. Тогда код выполнится в контексте, который уже подключён к отладке.

Продвинутые приёмы отладки

Когда точка уже сработала, полезны ещё несколько инструментов меню Отладка.

  • 📚 Стек вызовов. Показывает цепочку процедур, которая привела к текущей строке. Двойной щелчок по строке стека переносит в вызывающий код. Незаменимо, когда процедура вызывается из десяти мест.
  • 📋 Табло. Окно, куда добавляют выражения для постоянного наблюдения. При каждом шаге значения обновляются сами — удобно следить за остатком или счётчиком цикла.
  • 🧮 Вычислить выражение (Shift+F9). Можно не только посмотреть значение, но и выполнить выражение: проверить результат запроса, вызвать функцию, посмотреть Запрос.Выполнить().Выгрузить() в виде таблицы.
  • 🛑 Остановка по ошибке. Команда Отладка → Остановка по ошибке заставляет отладчик останавливаться в месте, где возникло исключение. В настройках команды можно включить остановку и внутри блоков Попытка … Исключение, а также задать фрагмент текста ошибки, чтобы ловить только нужную.
  • ⏱️ Замер производительности. Отладка → Замер производительности показывает, сколько раз выполнялась каждая строка и сколько времени заняла. Точки останова тут не нужны: включаете замер, выполняете действие, выключаете и смотрите самые тяжёлые строки.

Как поймать ошибку, если непонятно, где она возникает

  1. Включите остановку по ошибке и укажите часть текста сообщения, например Деление на 0.
  2. Повторите действие пользователя в отладочном сеансе.
  3. Отладчик остановится на строке, где возникло исключение.
  4. Откройте стек вызовов и поднимитесь по нему до кода, который передал неправильные данные.

Это быстрее, чем расставлять точки наугад по всем модулям.

Почему точка останова не срабатывает

Диагностика: выберите симптом

Отдельно о расширениях. Если доработка сделана в расширении конфигурации, точку ставят в модуле расширения: откройте его через Конфигурация → Расширения конфигурации. Если расширение перехватывает метод с аннотацией &Вместо, исходная процедура типовой конфигурации может вообще не выполниться — и точка в ней не сработает.

Частые вопросы

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