Отладчик 1С: как найти, включить на сервере и не навредить рабочей базе
Содержание
Отладка в 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"
Тот же параметр можно прописать в списке баз: Изменить → Дополнительные параметры запуска. Дальше в конфигураторе откройте Отладка → Подключение — сеанс появится в списке предметов отладки, его можно подключить.
Как отладить внешнюю обработку
Приём, без которого не обойтись при разработке внешних отчётов и обработок:
- Откройте файл
.epfили.erfв конфигураторе черезФайл → Открыть. - Поставьте точку останова в модуле.
- Запустите клиент из этого же конфигуратора в режиме отладки.
- В режиме 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 сразу после разбора, в ближайшее окно перезапуска.
Почему отладчик не останавливается и другие частые проблемы
Ещё две ловушки, которые съедают время:
- Точка в расширении. Если процедура перехвачена расширением с
&Вместо, исходная строка основной конфигурации не выполняется. Ставьте точку в модуле расширения. - Кэш повторно используемых значений. Функции общих модулей с повторным использованием возвращают закэшированный результат. Точка внутри функции сработает только при первом вызове в сеансе.