Как запустить 1С:Предприятие под отладчиком и найти ошибку в коде

· 9 мин

Содержание

Чтобы запустить 1С Предприятие в режиме отладки, откройте базу в Конфигураторе и нажмите F5 (меню Отладка → Начать отладку). Платформа запустит клиентское приложение, подключит к нему отладчик, и выполнение остановится на первой же точке останова в вашем коде.

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

Ниже порядок действий от подготовки рабочего места до отладки серверных вызовов. Статья про платформу 8.3 с интерфейсом «Такси». Для работы нужен доступ к Конфигуратору: отладчик встроен в него.

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

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

  • 🔑 Права. У пользователя должна быть роль с правом Режим конфигуратора (в типовых базах это полные права или администратор). Без права входа в Конфигуратор отладчика не будет.
  • 💻 Свободная лицензия. Конфигуратор и клиент под отладкой занимают лицензии, как два обычных сеанса.
  • 🧪 Тестовая копия базы. Отлаживайте на копии: в процессе вы будете запускать проведения и записи, которые меняют данные.

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

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

Основные способы запустить режим отладки

Способов несколько, выбор зависит от того, где живёт проблема.

СпособКогда нуженОсобенность
F5 из КонфигуратораОсновной случай, ваша базаПлатформа сама открывает клиент и цепляется к нему
Подключение к уже запущенному клиентуОшибка воспроизводится только у пользователя или после долгой подготовкиКлиент запущен заранее, отладчик подключается позже
Запуск клиента из командной строки с ключами отладкиНужен особый режим клиента или удалённый отладчикПараметры нужно знать заранее
Отладка на сервере 1СОшибка в серверном коде, вызов на сервере предприятияНужен отладочный доступ к серверу

Запуск из Конфигуратора

  1. Откройте нужную базу кнопкой Конфигуратор в списке баз.
  2. Убедитесь, что в конфигурации нет несохранённых изменений: при старте платформа может предложить обновить конфигурацию базы данных.
  3. Нажмите F5 или выберите Отладка → Начать отладку.
  4. Дождитесь появления окна 1С:Предприятия. Отладчик уже подключён.

Что запускается, зависит от настроек запуска в Конфигураторе: тонкий клиент, толстый клиент или веб-клиент. Основной режим для разработки на сегодня — тонкий клиент.

Подключение к уже работающему сеансу

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

Командная строка

Клиент можно запустить с отладкой из ярлыка или bat-файла. Параметры, в которых можно быть уверенным, такие:

"C:\Program Files\1cv8\8.3.25.1445\bin\1cv8c.exe" ENTERPRISE /S"srv-1c\accounting" /DEBUG -tcp -attach /DebuggerURL tcp://localhost:1550

Здесь /DEBUG включает режим отладки, -tcp задаёт протокол, -attach подключает клиент к отладчику, /DebuggerURL указывает адрес сервера отладки. Путь к каталогу платформы и номер версии замените на свои.

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

Точки останова: как поставить и настроить условия

Точка останова — отметка в строке кода, на которой выполнение остановится. Поставить её просто: щёлкните в левом поле модуля напротив строки или нажмите F9 на строке. Появится красный кружок. Повторное нажатие снимает точку.

Точка работает, если на этой строке есть исполняемый код. Объявления переменных и комментарии пропускаются.

Условная точка останова

Остановка на каждой итерации цикла из тысячи строк убивает время. Для этого у точки есть условие.

  1. Поставьте обычную точку останова.
  2. Откройте её свойства (через окно списка точек останова или контекстное меню строки).
  3. Впишите условие на языке 1С, например Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00-000123").

Остановка наступит только когда условие истинно. Если условие вычислить нельзя (переменной нет в этом контексте), платформа остановится на точке и сообщит об ошибке вычисления.

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

Отдельная находка для редких сбоев: отладчик умеет останавливать выполнение в момент возникновения исключения, ещё до того как оно уйдёт в обработчик Попытка...Исключение. Это удобно, когда код гасит ошибку пустым Исключение КонецПопытки, и вы не видите, откуда она взялась. Настройка находится в меню отладки, в параметрах остановки по ошибке.

Что делать с десятками точек

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

Управление выполнением: шаги и продолжение

Когда выполнение остановилось, строка подсвечивается жёлтой стрелкой. Дальше вы сами решаете, как идти.

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

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

Платформа не отменяет то, что уже выполнено. Если вы прошли строку, которая записала документ, документ записан. На тестовой копии это терпимо, на рабочей нет.

Как смотреть переменные и вычислять выражения

Остановились на строке — дальше нужны данные. Есть три инструмента.

  • 👁 Подсказка при наведении. Подведите курсор к имени переменной, и платформа покажет значение. Для простых типов этого хватает.
  • 📋 Таблица локальных переменных. Показывает всё, что доступно в текущей процедуре: параметры, переменные, значения. Вложенные объекты раскрываются стрелкой.
  • 🧮 Окно «Вычислить выражение» (Shift+F9). Здесь пишете любое выражение и получаете результат прямо в точке останова.

Окно вычисления выручает, когда нужно не просто увидеть переменную, а проверить гипотезу: ТаблицаДанных.Количество(), СтрНайти(Строка, "ошибка"), Объект.Контрагент.ИНН. Выражение выполняется в контексте остановки, так что доступны все локальные значения.

Наблюдаемые выражения

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

Просмотр таблиц и запросов

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

Окно Стек вызовов показывает цепочку: какая процедура вызвала текущую. Двойной щелчок по строке стека переносит в соответствующее место модуля. Это единственный быстрый способ понять, как вы сюда попали.

Отладка клиент-серверного кода

Тут больше всего вопросов. Клиент и сервер — разные процессы, и точка останова в серверном модуле сработает только если отладчик к серверу подключён.

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

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

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

Для базы на сервере 1С:Предприятия:

  1. Серверу нужна возможность отладки. Служба сервера запускается с режимом отладки, а в параметрах подключения клиента указывается тот же способ связи (tcp или http).
  2. Отладчик должен видеть сервер: при подключении по сети нужен открытый порт отладчика между машинами.
  3. После включения запустите отладку как обычно. Остановка в серверном модуле покажется в том же окне Конфигуратора.

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

Если точка в серверном модуле «не берётся» (кружок есть, остановки нет), проверьте по порядку:

  • сервер подключён к отладчику (в списке подключений видны серверные потоки);
  • версия конфигурации в Конфигураторе совпадает с версией в базе (иначе строки кода разошлись);
  • вызов действительно идёт на сервер, а не выполняется на клиенте.

Тонкий и веб-клиент

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

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

Приёмы, которые экономят время

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

Ставьте точку ближе к результату

Если неверна итоговая сумма, начните с места, где она записывается, и идите назад по стеку вызовов. Так вы найдёте источник ошибки за два-три шага, а не за сотню.

Отладка проведения документа

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

Отладка фонового задания и регламентного задания

Фоновое задание запускается отдельным сеансом, и при обычном старте отладчик к нему не подключится. Решение: включите автоматическое подключение к новым сеансам (меню Отладка → Подключение) либо запустите ту же процедуру из обработки в обычном сеансе. Второй вариант проще и не требует никаких настроек.

Когда отладчик не нужен

Для разовой проверки значения хватит Сообщить(Значение). Для разбора ошибок у пользователей в рабочей базе пригодится журнал регистрации: отладчик там применять нельзя. Вывод в сообщения быстрее отладчика на пару проверок, но на сложных цепочках проигрывает.

После отладки удалите временные Сообщить(...) и снимите точки останова. Забытая диагностика в рабочей конфигурации вылезает у пользователей в самый неудобный момент.

Типичные причины, почему отладка не стартует

Ситуации, в которых платформа пишет что-то вроде «не удалось подключить отладчик»:

  • ⛔ Уже запущен другой отладчик к тому же сеансу. К одному клиенту подключается один отладчик.
  • 🔥 Брандмауэр блокирует порт между вашим компьютером и сервером. Спросите у администратора, какой порт открыт.
  • 🧩 Конфигуратор открыт под пользователем без нужных прав.
  • 🔄 Разные версии платформы на клиенте и на сервере. Для отладки версии должны совпадать по основным номерам.

Закрыв каждый пункт по очереди, вы быстро выйдете на причину. Если всё равно не получается, запустите отладку в локальной копии базы: так проще понять, виновата конфигурация или сетевая настройка.

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

Как включить отладчик в 1С, если нет Конфигуратора?
Без Конфигуратора отладка не работает: отладчик — часть его. Запросите у администратора доступ к режиму Конфигуратора или попросите отладить на его компьютере.
Можно ли отлаживать код в веб-клиенте?
Да, но настройка сложнее, чем в тонком клиенте. Для первого знакомства с отладкой используйте тонкий клиент.
Влияет ли отладка на данные в базе?
Да. Отладчик не откатывает выполненные строки. Если вы прошли запись документа, документ записан, поэтому отлаживайте на копии.
Как отладить обработчик события формы, который срабатывает только у пользователя?
Подключите отладчик к уже запущенному клиенту этого пользователя, если сеанс на вашей машине. Если нет, воспроизведите те же данные на тестовой копии и поставьте точку в нужном обработчике.
Нужна ли отдельная лицензия для отладки?
Нет, но сеанс Конфигуратора и сеанс клиента занимают по одной лицензии, как обычные сеансы.