Как запустить 1С:Предприятие под отладчиком и найти ошибку в коде
Содержание
Чтобы запустить 1С Предприятие в режиме отладки, откройте базу в Конфигураторе и нажмите F5 (меню Отладка → Начать отладку). Платформа запустит клиентское приложение, подключит к нему отладчик, и выполнение остановится на первой же точке останова в вашем коде.
Типичная ситуация: отчёт считает не ту сумму, а в модуле формы триста строк. Читать код глазами долго. Проще поставить точку останова, запустить режим отладки в 1С и посмотреть, что лежит в переменных в нужный момент.
Ниже порядок действий от подготовки рабочего места до отладки серверных вызовов. Статья про платформу 8.3 с интерфейсом «Такси». Для работы нужен доступ к Конфигуратору: отладчик встроен в него.
Что подготовить перед запуском отладки
Отладка идёт через Конфигуратор, поэтому нужны три вещи.
- 🔑 Права. У пользователя должна быть роль с правом
Режим конфигуратора(в типовых базах это полные права или администратор). Без права входа в Конфигуратор отладчика не будет. - 💻 Свободная лицензия. Конфигуратор и клиент под отладкой занимают лицензии, как два обычных сеанса.
- 🧪 Тестовая копия базы. Отлаживайте на копии: в процессе вы будете запускать проведения и записи, которые меняют данные.
Не отлаживайте рабочую базу в учётное время. Точка останова держит сеанс, а при серверной отладке может остановить вызов, который ждут другие пользователи.
Ещё одна деталь: отладчик показывает исходный код только если модуль не закрыт от просмотра. Типовая конфигурация, поставленная «на поддержку» без исходных текстов, или модуль с защитой от изменения читаются хуже или не читаются. Для своей разработки или расширения проблем нет.
Основные способы запустить режим отладки
Способов несколько, выбор зависит от того, где живёт проблема.
| Способ | Когда нужен | Особенность |
|---|---|---|
F5 из Конфигуратора | Основной случай, ваша база | Платформа сама открывает клиент и цепляется к нему |
| Подключение к уже запущенному клиенту | Ошибка воспроизводится только у пользователя или после долгой подготовки | Клиент запущен заранее, отладчик подключается позже |
| Запуск клиента из командной строки с ключами отладки | Нужен особый режим клиента или удалённый отладчик | Параметры нужно знать заранее |
| Отладка на сервере 1С | Ошибка в серверном коде, вызов на сервере предприятия | Нужен отладочный доступ к серверу |
Запуск из Конфигуратора
- Откройте нужную базу кнопкой
Конфигураторв списке баз. - Убедитесь, что в конфигурации нет несохранённых изменений: при старте платформа может предложить обновить конфигурацию базы данных.
- Нажмите
F5или выберитеОтладка → Начать отладку. - Дождитесь появления окна 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С, например
Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00-000123").
Остановка наступит только когда условие истинно. Если условие вычислить нельзя (переменной нет в этом контексте), платформа остановится на точке и сообщит об ошибке вычисления.
Остановка по ошибке
Отдельная находка для редких сбоев: отладчик умеет останавливать выполнение в момент возникновения исключения, ещё до того как оно уйдёт в обработчик Попытка...Исключение. Это удобно, когда код гасит ошибку пустым Исключение КонецПопытки, и вы не видите, откуда она взялась. Настройка находится в меню отладки, в параметрах остановки по ошибке.
Что делать с десятками точек
Когда точек накопилось много, откройте окно со списком точек останова. Отсюда их можно временно отключить (снять флажок), не удаляя, и вернуться к ним позже. Перед завершением работы снимите лишние: точки хранятся в настройках Конфигуратора и вернутся при следующем запуске.
Управление выполнением: шаги и продолжение
Когда выполнение остановилось, строка подсвечивается жёлтой стрелкой. Дальше вы сами решаете, как идти.
| Действие | Клавиша | Что делает |
|---|---|---|
| Шаг с заходом | F11 | Заходит внутрь вызываемой процедуры или функции |
| Шаг в обход | F10 | Выполняет строку целиком, не заходя в вызовы |
| Шаг с выходом | Shift+F11 | Дорабатывает текущую процедуру и останавливается после возврата |
| Продолжить | F5 | Идёт до следующей точки останова или до конца |
| Остановить отладку | Shift+F5 | Завершает сеанс отладки |
Рабочий порядок такой: дошли до подозрительного участка по F10, на вызове функции, которая вызывает сомнения, нажали F11. Если зашли не туда, Shift+F11 выводит обратно.
Платформа не отменяет то, что уже выполнено. Если вы прошли строку, которая записала документ, документ записан. На тестовой копии это терпимо, на рабочей нет.
Как смотреть переменные и вычислять выражения
Остановились на строке — дальше нужны данные. Есть три инструмента.
- 👁 Подсказка при наведении. Подведите курсор к имени переменной, и платформа покажет значение. Для простых типов этого хватает.
- 📋 Таблица локальных переменных. Показывает всё, что доступно в текущей процедуре: параметры, переменные, значения. Вложенные объекты раскрываются стрелкой.
- 🧮 Окно «Вычислить выражение» (
Shift+F9). Здесь пишете любое выражение и получаете результат прямо в точке останова.
Окно вычисления выручает, когда нужно не просто увидеть переменную, а проверить гипотезу: ТаблицаДанных.Количество(), СтрНайти(Строка, "ошибка"), Объект.Контрагент.ИНН. Выражение выполняется в контексте остановки, так что доступны все локальные значения.
Наблюдаемые выражения
Если нужно следить за значением на протяжении нескольких шагов, добавьте выражение в список наблюдения. Оно будет пересчитываться после каждого шага. Удобно для счётчика цикла или накапливаемой суммы.
Просмотр таблиц и запросов
Для таблицы значений и результата запроса отладчик показывает строки в виде таблицы. Если запрос работает не так, как вы ждёте, выполните его текст в консоли запросов на тестовых данных и сравните с тем, что видите в переменной.
Окно Стек вызовов показывает цепочку: какая процедура вызвала текущую. Двойной щелчок по строке стека переносит в соответствующее место модуля. Это единственный быстрый способ понять, как вы сюда попали.
Отладка клиент-серверного кода
Тут больше всего вопросов. Клиент и сервер — разные процессы, и точка останова в серверном модуле сработает только если отладчик к серверу подключён.
Файловая база
В файловой базе сервера отдельно нет: серверные вызовы выполняет тот же процесс, что и клиент. Точки в серверных процедурах и функциях срабатывают сразу, никаких дополнительных настроек не требуется.
Клиент-серверная база
Для базы на сервере 1С:Предприятия:
- Серверу нужна возможность отладки. Служба сервера запускается с режимом отладки, а в параметрах подключения клиента указывается тот же способ связи (
tcpилиhttp). - Отладчик должен видеть сервер: при подключении по сети нужен открытый порт отладчика между машинами.
- После включения запустите отладку как обычно. Остановка в серверном модуле покажется в том же окне Конфигуратора.
Перезапуск службы сервера 1С обрывает все сеансы пользователей. Делайте его на тестовом сервере или вне рабочего времени, когда в базе никого нет.
Если точка в серверном модуле «не берётся» (кружок есть, остановки нет), проверьте по порядку:
- сервер подключён к отладчику (в списке подключений видны серверные потоки);
- версия конфигурации в Конфигураторе совпадает с версией в базе (иначе строки кода разошлись);
- вызов действительно идёт на сервер, а не выполняется на клиенте.
Тонкий и веб-клиент
В тонком клиенте серверные процедуры из клиентского модуля отладчик вызывает через серверный контекст, отдельно подключать ничего не нужно. В веб-клиенте отладка тоже возможна, но требует указать отладчику, к какому браузерному сеансу цепляться. Для начала отлаживайте в тонком клиенте: он надёжнее.
Приёмы, которые экономят время
Опытный разработчик редко идёт по коду с первой строки. Несколько приёмов, которые сокращают путь.
Ставьте точку ближе к результату
Если неверна итоговая сумма, начните с места, где она записывается, и идите назад по стеку вызовов. Так вы найдёте источник ошибки за два-три шага, а не за сотню.
Отладка проведения документа
Проведение выполняется на сервере в обработчике ОбработкаПроведения. Поставьте точку на первой строке процедуры, проведите документ из тестового списка и смотрите наборы записей регистров до их записи. Часто ошибка видна уже в сформированных движениях, а не в запросе.
Отладка фонового задания и регламентного задания
Фоновое задание запускается отдельным сеансом, и при обычном старте отладчик к нему не подключится. Решение: включите автоматическое подключение к новым сеансам (меню Отладка → Подключение) либо запустите ту же процедуру из обработки в обычном сеансе. Второй вариант проще и не требует никаких настроек.
Когда отладчик не нужен
Для разовой проверки значения хватит Сообщить(Значение). Для разбора ошибок у пользователей в рабочей базе пригодится журнал регистрации: отладчик там применять нельзя. Вывод в сообщения быстрее отладчика на пару проверок, но на сложных цепочках проигрывает.
После отладки удалите временные Сообщить(...) и снимите точки останова. Забытая диагностика в рабочей конфигурации вылезает у пользователей в самый неудобный момент.
Типичные причины, почему отладка не стартует
Ситуации, в которых платформа пишет что-то вроде «не удалось подключить отладчик»:
- ⛔ Уже запущен другой отладчик к тому же сеансу. К одному клиенту подключается один отладчик.
- 🔥 Брандмауэр блокирует порт между вашим компьютером и сервером. Спросите у администратора, какой порт открыт.
- 🧩 Конфигуратор открыт под пользователем без нужных прав.
- 🔄 Разные версии платформы на клиенте и на сервере. Для отладки версии должны совпадать по основным номерам.
Закрыв каждый пункт по очереди, вы быстро выйдете на причину. Если всё равно не получается, запустите отладку в локальной копии базы: так проще понять, виновата конфигурация или сетевая настройка.