Отладчик 1С 8.3 на практике: от первой точки останова до сервера и веб-клиента

· 10 мин

Содержание

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

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

Что подготовить до первой отладки

Отладчик встроен в Конфигуратор, ставить отдельно ничего не нужно. Но есть три условия, без которых точки останова просто не сработают.

  • 🧩 Конфигурация базы данных обновлена. Отладчик работает с кодом, который записан в базу. Поправили модуль и не нажали F7 — 1С выполнит старую версию, и строки «съедут».
  • 🖥️ Сервер разрешает отладку (только для клиент-серверной базы). Агент сервера ragent должен быть запущен с ключом -debug. Без него серверный код в отладке не останавливается.
  • 🔌 Выбран протокол HTTP. С платформы 8.3.7 основной протокол — HTTP через сервер отладки dbgs. Порт по умолчанию — 1550. Старый протокол TCP/IP ещё поддерживается, но для веб-клиента и мобильных устройств нужен именно HTTP.

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

Служба сервера 1С запускается командной строкой, которую видно в свойствах службы («Исполняемый файл»). В конец строки после остальных ключей добавляют -debug -http. Пример того, как может выглядеть итоговая строка:

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

Через оснастку «Службы» строку не отредактировать. Её меняют в реестре, в параметре ImagePath раздела службы HKLM\SYSTEM\CurrentControlSet\Services\<имя службы 1С>, либо пересоздают службу утилитой sc.

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

На Linux ключ отладки включают в файле настроек службы сервера 1С или в юнит-файле systemd: в строку запуска ragent добавляют те же -debug -http, затем перезапускают службу.

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

Как запустить отладку в 1С 8.3 и подключиться к сеансу

Есть два сценария: запустить новый сеанс сразу в режиме отладки или подключиться к уже открытому клиенту.

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

  1. Откройте базу в Конфигураторе, затем Конфигурация → Открыть конфигурацию.
  2. Найдите модуль: общий модуль, модуль формы, объекта или менеджера.
  3. Поставьте курсор на строку с исполняемым кодом и нажмите F9. Слева появится красная точка.
  4. Выберите Отладка → Начать отладку. В подменю можно выбрать тип клиента: тонкий, толстый, веб-клиент. F5 запускает клиент, выбранный по умолчанию.
  5. В открывшемся «Предприятии» выполните действие, которое вызывает этот код: проведите документ, откройте форму, нажмите кнопку.

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

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

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

Клиент запускают с ключом /DEBUG и адресом сервера отладки:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /DEBUG -http /DEBUGGERURL "http://devpc:1550"

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

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

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

Точка останова — главный инструмент. Но обычная точка в цикле на 10 000 строк быстро надоедает: 1С останавливается на каждой итерации. Для таких случаев есть ещё два вида остановки.

ВидКак поставитьКогда нужна
ОбычнаяF9 на строкеНужно посмотреть, доходит ли выполнение до места
С условиемОтладка → Точка останова с условиемОшибка возникает на конкретной строке ТЧ или при конкретном значении
Остановка по ошибкеОтладка → Остановка по ошибкеНеизвестно, где именно возникает исключение

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

В условии пишут любое выражение на встроенном языке, которое вернёт Истина или Ложь. Переменные берутся из контекста строки. Примеры:

СтрокаТЧ.НомерСтроки = 57
СтрокаТЧ.Сумма > 100000 И НЕ ЗначениеЗаполнено(СтрокаТЧ.Номенклатура)
Контрагент.ИНН = "7701234567"

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

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

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

В окне режима можно задать фрагмент текста ошибки, например Деление на 0 или Поле объекта не обнаружено. Тогда отладчик остановится только на ней и не будет реагировать на прочие исключения, которые типовая конфигурация обрабатывает штатно.

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

Пошаговое выполнение кода в отладчике 1С

Когда программа остановилась, вы управляете ей с клавиатуры. Меню Отладка дублирует все команды, но клавиши быстрее.

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

Рабочий ритм обычно такой. Сначала F10 по процедуре, пока не найдёте строку, после которой значение «испортилось». Затем точку останова на эту строку, перезапуск действия и F11 внутрь подозрительного вызова.

Идти до курсора удобен, чтобы выскочить из цикла: поставьте курсор на первую строку после КонецЦикла и нажмите Shift+F10. Отладчик прогонит все итерации без остановки.

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

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

Остановка сама по себе мало что даёт: нужно видеть данные. В отладчике 1С 8.3 для этого четыре инструмента.

  1. Подсказка при наведении. Задержите курсор над переменной в модуле, и 1С покажет её значение. Быстро, но только для простых типов.
  2. Окно «Вычислить выражение» (Shift+F9). Выделите переменную или выражение и откройте окно. Для коллекций и объектов здесь раскрывается дерево: реквизиты, табличные части, строки таблицы значений. Можно ввести своё выражение, например ТаблицаТоваров.Итог("Сумма") или Запрос.Текст.
  3. Табло. Сюда перетаскивают переменные, за которыми нужно следить на протяжении всей отладки. Значения обновляются на каждом шаге. Окно открывают через меню Отладка.
  4. Локальные переменные. Окно показывает все переменные текущей процедуры сразу, ничего добавлять не надо.

Стек вызовов

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

Как посмотреть результат запроса

Частая задача — увидеть, что вернул запрос. В окне Вычислить выражение введите:

Запрос.Выполнить().Выгрузить()

Отладчик покажет таблицу значений с колонками и строками. Для запроса с временными таблицами удобнее смотреть каждую таблицу через менеджер временных таблиц: МенеджерВТ.Таблицы[0].ПолучитьДанные().Выгрузить().

Выражение в окне вычисления тоже выполняется по-настоящему. Не вызывайте там методы, которые пишут в базу или отправляют данные во внешние системы.

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

В управляемом приложении код делится директивами &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Это разные предметы отладки, и каждый должен быть подключён.

  • 💻 Клиентский код отлаживается всегда, когда клиент запущен из Конфигуратора или с ключом /DEBUG.
  • 🗄️ Серверный код в файловой базе выполняется в том же процессе, что и клиент, поэтому отладка работает без дополнительных настроек.
  • 🏢 Серверный код в клиент-серверной базе требует ключа -debug у службы и подключённого предмета «Сервер» в автоподключении.

Типичный сценарий проверки серверного вызова из формы:

&НаКлиенте
Процедура Заполнить(Команда)
    КоличествоСтрок = ЗаполнитьНаСервере(Объект.Склад); // F11 — переход на сервер
    Сообщить("Заполнено строк: " + Формат(КоличествоСтрок, "ЧГ=0"));
КонецПроцедуры

&НаСервере
Функция ЗаполнитьНаСервере(Склад)
    // точка останова здесь сработает, только если подключён предмет «Сервер»
    ...
КонецФункции

Если на F11 отладчик перешагивает серверный вызов, вместо того чтобы зайти внутрь, — это верный признак, что серверный предмет отладки не подключён.

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

Фоновые задания выполняются в отдельных сеансах на сервере. Чтобы поймать их код, включите в автоподключении тип «Фоновое задание». Точно так же подключают HTTP-сервисы и веб-сервисы: каждый вызов создаёт свой сеанс, и отладчик подхватывает его автоматически.

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

Внешние обработки и отчёты

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

Отладка в веб-клиенте и на мобильном устройстве

Веб-клиент

Веб-клиент работает в браузере, и отладка возможна только по протоколу HTTP. Нужны три вещи:

  1. База опубликована на веб-сервере (IIS или Apache).
  2. В Конфигураторе выбран HTTP-протокол отладки и запуск веб-клиента в подменю Отладка → Начать отладку.
  3. В параметрах запуска указан адрес публикации базы.

Клиентский код веб-клиента выполняется в браузере, серверный — на сервере 1С, поэтому для серверной части по-прежнему нужен ключ -debug у службы. Учтите и поведение кода: некоторые методы недоступны в веб-клиенте (например, работа с локальными файлами без расширения), и ошибка возникнет только здесь, а в тонком клиенте её не будет.

Мобильное приложение и мобильный клиент

Для мобильной платформы отладка тоже идёт через HTTP. Схема такая:

  • 📱 телефон и компьютер разработчика в одной сети;
  • 🌐 в адресе сервера отладки указан IP компьютера, а не localhost — для телефона localhost означает сам телефон;
  • 🔓 порт сервера отладки (по умолчанию 1550) открыт в брандмауэре Windows;
  • 🛠️ на устройстве используется сборка мобильной платформы для разработчика, в которой в настройках приложения задают адрес отладчика.

Если телефон не подключается, первым делом откройте в браузере телефона адрес http://<IP компьютера>:1550. Нет ответа — проблема в сети или брандмауэре, а не в 1С.

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

Самая частая жалоба — «поставил точку, а 1С её проскакивает». Причины почти всегда из короткого списка.

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

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

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

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

Можно ли отлаживать рабочую базу, в которой работают пользователи?
Технически можно, но остановка на сервере держит блокировки и транзакции, пока вы стоите на точке. Пользователи будут ждать. Отлаживайте копию базы.
Нужны ли права администратора, чтобы запускать отладку?
Нужен пользователь базы, которому разрешён вход в Конфигуратор. Для включения ключа -debug на сервере дополнительно нужен доступ администратора к серверу.
Чем отладка отличается от замера производительности?
Отладчик показывает значения и ход выполнения. Замер производительности (Отладка → Замер производительности) показывает, сколько времени заняла каждая строка, и нужен для поиска медленных мест.
Работает ли отладка в 1С:EDT?
Да, у EDT свой отладчик в среде разработки, он подключается к тем же предметам отладки по HTTP. Принципы те же: точки останова, шаги, просмотр переменных.
Почему после отладки документ остался проведённым?
Код в режиме отладки выполняется полностью. Если выполнение прошло через запись или проведение, изменения в базе сохранились. Отменять их нужно вручную.