Отладчик 1С: как найти, включить на сервере и не навредить рабочей базе

· 9 мин

Содержание

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

Для файловой базы этого достаточно. В клиент-серверном варианте серверный код отлаживается, только если сервер 1С запущен с ключом -debug. Без него точки останова в серверных процедурах просто не срабатывают — это самая частая причина вопроса «где отладка, если она не работает ».

Где искать отладку в конфигураторе

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

  • ▶️ Начать отладку — запуск клиента, подключённого к отладчику (подменю: тонкий клиент, толстый клиент, веб-клиент — набор зависит от свойств конфигурации);
  • 🔌 Подключение — окно со списком предметов отладки: клиентских сеансов, серверных процессов, фоновых заданий;
  • ⏸ Точка останова, Точка останова с условием, Список точек останова;
  • 🧮 Вычислить выражение, Табло, Локальные, Стек вызовов — окна анализа во время остановки;
  • 🛑 Остановка по ошибке — прерывание на месте исключения, даже без точки останова;
  • ⏱ Замер производительности — показывает, какие строки кода съедают время.

Если пункт Отладка в меню не виден, проверьте две вещи. Первое — открыта ли конфигурация: без открытого дерева часть команд неактивна. Второе — права: в конфигуратор пускают только пользователя с правом администрирования.

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

Настройка протокола отладки

В Сервис → Параметры конфигуратора есть настройки отладки, где выбирается протокол: TCP/IP или HTTP. Для новых проектов берите HTTP. Он нужен для отладки веб-клиента, мобильных приложений и работы через сеть, где открыт один порт. Сервер отладки по HTTP по умолчанию слушает порт 1550.

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

Конфигуратор сам запускает клиента в режиме отладки. Выберите Отладка → Начать отладку → Тонкий клиент или Толстый клиент. Клавиша F5 запускает тот клиент, который задан основным режимом запуска в свойствах конфигурации.

Различия между клиентами важны для понимания, где «живёт» код:

КлиентГде выполняется код с &НаКлиентеГде выполняется код с &НаСервере
ТонкийВ процессе клиентаНа сервере 1С (в файловой базе — внутри клиентского процесса)
Толстый, управляемое приложениеВ процессе клиентаНа сервере 1С
Толстый, обычное приложениеБольшая часть кода модулей форм и общих модулей без директив — на клиентеСерверные общие модули и вызовы сервера

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

Бывает, что ошибку воспроизвёл пользователь, и закрывать его сеанс нельзя. Тогда клиента запускают с параметром командной строки /DEBUG. Для HTTP-отладки добавляют адрес сервера отладки:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /DEBUG -http /DEBUGGERURL "http://localhost:1550"

Тот же параметр можно прописать в списке баз: Изменить → Дополнительные параметры запуска. Дальше в конфигураторе откройте Отладка → Подключение — сеанс появится в списке предметов отладки, его можно подключить.

Как отладить внешнюю обработку

Приём, без которого не обойтись при разработке внешних отчётов и обработок:

  1. Откройте файл .epf или .erf в конфигураторе через Файл → Открыть.
  2. Поставьте точку останова в модуле.
  3. Запустите клиент из этого же конфигуратора в режиме отладки.
  4. В режиме 1С:Предприятие откройте ту же обработку из того же файла.

Точка останова сработает, если путь к файлу совпадает. Открыли копию из другой папки — отладчик её «не узнает».

Пошаговое выполнение: кнопки и горячие клавиши

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

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

Как смотреть значения

  • 🔍 Вычислить выражение. Выделите переменную и нажмите Shift+F9. Для таблицы значений или запроса видны строки и колонки. Здесь же можно вычислить Запрос.Выполнить().Выгрузить() и увидеть результат запроса прямо на точке останова.
  • 📌 Табло. Переменные, за которыми нужно следить постоянно. Значения обновляются на каждом шаге.
  • 📋 Локальные. Все локальные переменные текущей процедуры без ручного ввода.
  • 🧭 Стек вызовов. Двойной щелчок по строке стека переносит в модуль вызывающей процедуры. Так находят, откуда пришло неверное значение параметра.

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

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

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

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

Точки останова: обычные, с условием, по ошибке

Обычная точка ставится клавишей F9 или двойным щелчком по серому полю слева от строки. Повторное нажатие снимает её. Ставить точку на пустую строку или комментарий бессмысленно — останова не будет.

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

Нужна, когда процедура вызывается сотни раз, а ошибка проявляется на одной строке документа. Поставьте курсор на строку и выберите Отладка → Точка останова с условием. Условие пишется на встроенном языке, например:

СтрокаТЧ.Номенклатура.Код = "00-00000123" И СтрокаТЧ.Количество = 0

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

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

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

Где хранятся точки останова

Точки останова не входят в конфигурацию. Они не попадают в файл .cf, не переносятся в хранилище и не видны другим разработчикам. Конфигуратор сохраняет их в локальных настройках пользователя на компьютере разработчика для конкретной базы. Поэтому после переезда на другой компьютер точки придётся расставить заново.

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

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

В клиент-серверной базе серверный код выполняется в рабочих процессах кластера. Чтобы отладчик мог к ним подключиться, агент сервера 1С должен быть запущен с ключом -debug. Для HTTP-отладки добавляется -http.

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

"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -http -d "C:\Program Files\1cv8\srvinfo"

Версию в пути подставьте свою. Изменения вступят в силу после перезапуска службы «Агент сервера 1С:Предприятия».

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

Автоматическое подключение

Фоновые задания, регламентные задания и вызовы HTTP-сервисов начинаются без участия клиента. Поймать их помогает Отладка → Подключение → Автоматическое подключение. Отметьте нужные типы предметов отладки: серверные сеансы, фоновые задания, HTTP-сервисы, веб-сервисы. Как только такой сеанс начнётся, отладчик подключится сам, и точка останова сработает.

Для опубликованных на веб-сервере HTTP- и веб-сервисов отладку включают ещё и в файле публикации default.vrd. В него добавляется элемент debug с атрибутом enable="true", протоколом и адресом сервера отладки.

Веб-клиент и мобильное приложение

Веб-клиент. Отлаживается только по протоколу HTTP. База должна быть опубликована на веб-сервере, а в конфигураторе выбран протокол HTTP. Запуск — Отладка → Начать отладку → Веб-клиент: конфигуратор откроет браузер с адресом публикации и параметром подключения к отладчику.

Ограничения веб-клиента:

  • 🌐 клиентский код выполняется в браузере, поэтому часть возможностей отладчика работает медленнее, чем в тонком клиенте;
  • 🔒 сервер отладки должен быть доступен с компьютера пользователя по сети — порт 1550 по умолчанию не должен закрываться брандмауэром;
  • 🧩 код, который зависит от расширения для работы с файлами или внешних компонент, ведёт себя иначе, чем в тонком клиенте; ошибки «только в браузере» отлаживают именно здесь, а не в тонком клиенте.

Мобильное приложение. Мобильная платформа подключается к отладчику по HTTP. На устройстве в настройках приложения указывается адрес сервера отладки — IP компьютера разработчика и порт. Телефон и компьютер должны быть в одной сети, а порт открыт для входящих подключений. Для автономного мобильного приложения используют сборку для разработчика, а не опубликованную в магазине.

Почему отладку нельзя оставлять включённой на рабочем сервере

Ключ -debug на боевом сервере — частая находка при аудите. Риски конкретные:

  • 🔓 Доступ к данным. Любой, кто откроет конфигуратор с правами к базе и подключится к серверу отладки, может остановить чужой сеанс и вычислить любое выражение. А это чтение и запись любых данных в обход интерфейса.
  • 🧊 Зависшие блокировки. Серверный код, остановленный на точке, держит транзакцию и блокировки. Пока разработчик смотрит переменные, у бухгалтеров «висит» проведение документов с ошибкой о конфликте блокировок.
  • 🐢 Нагрузка. Рабочие процессы с включённой отладкой тратят ресурсы на обмен с отладчиком, даже если никто не подключён.

Правило простое: отлаживайте на копии базы. Нужно разобрать ошибку с рабочими данными — выгрузите копию через Администрирование → Выгрузить информационную базу в конфигураторе и разверните её на тестовом сервере. Если отладка на рабочем сервере всё же понадобилась, уберите -debug сразу после разбора, в ближайшее окно перезапуска.

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

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

Ещё две ловушки, которые съедают время:

  1. Точка в расширении. Если процедура перехвачена расширением с &Вместо, исходная строка основной конфигурации не выполняется. Ставьте точку в модуле расширения.
  2. Кэш повторно используемых значений. Функции общих модулей с повторным использованием возвращают закэшированный результат. Точка внутри функции сработает только при первом вызове в сеансе.

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

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