Отладчик 1С 8.3 на практике: от первой точки останова до сервера и веб-клиента
Содержание
Чтобы пользоваться отладкой в 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 и подключиться к сеансу
Есть два сценария: запустить новый сеанс сразу в режиме отладки или подключиться к уже открытому клиенту.
Запуск из Конфигуратора
- Откройте базу в Конфигураторе, затем
Конфигурация → Открыть конфигурацию. - Найдите модуль: общий модуль, модуль формы, объекта или менеджера.
- Поставьте курсор на строку с исполняемым кодом и нажмите
F9. Слева появится красная точка. - Выберите
Отладка → Начать отладку. В подменю можно выбрать тип клиента: тонкий, толстый, веб-клиент.F5запускает клиент, выбранный по умолчанию. - В открывшемся «Предприятии» выполните действие, которое вызывает этот код: проведите документ, откройте форму, нажмите кнопку.
Как только выполнение дойдёт до строки, окно Конфигуратора выйдет на передний план, строка подсветится, а клиент «замрёт».
Подключение к уже запущенному клиенту
Бывает, что ошибка воспроизводится только у конкретного пользователя или после долгой работы. Тогда запускают клиент с параметрами отладки и подключаются к нему.
Клиент запускают с ключом /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С покажет её значение. Быстро, но только для простых типов.
- Окно «Вычислить выражение» (
Shift+F9). Выделите переменную или выражение и откройте окно. Для коллекций и объектов здесь раскрывается дерево: реквизиты, табличные части, строки таблицы значений. Можно ввести своё выражение, напримерТаблицаТоваров.Итог("Сумма")илиЗапрос.Текст. - Табло. Сюда перетаскивают переменные, за которыми нужно следить на протяжении всей отладки. Значения обновляются на каждом шаге. Окно открывают через меню
Отладка. - Локальные переменные. Окно показывает все переменные текущей процедуры сразу, ничего добавлять не надо.
Стек вызовов
Окно стека вызовов (также в меню Отладка) показывает цепочку: какая процедура вызвала текущую, а её — какая. Двойной щелчок по строке стека переносит вас в вызывающий модуль. Это быстрый способ понять, откуда пришло неверное значение параметра.
Как посмотреть результат запроса
Частая задача — увидеть, что вернул запрос. В окне Вычислить выражение введите:
Запрос.Выполнить().Выгрузить()
Отладчик покажет таблицу значений с колонками и строками. Для запроса с временными таблицами удобнее смотреть каждую таблицу через менеджер временных таблиц: МенеджерВТ.Таблицы[0].ПолучитьДанные().Выгрузить().
Выражение в окне вычисления тоже выполняется по-настоящему. Не вызывайте там методы, которые пишут в базу или отправляют данные во внешние системы.
Отладка клиентского и серверного кода
В управляемом приложении код делится директивами &НаКлиенте, &НаСервере, &НаСервереБезКонтекста. Это разные предметы отладки, и каждый должен быть подключён.
- 💻 Клиентский код отлаживается всегда, когда клиент запущен из Конфигуратора или с ключом
/DEBUG. - 🗄️ Серверный код в файловой базе выполняется в том же процессе, что и клиент, поэтому отладка работает без дополнительных настроек.
- 🏢 Серверный код в клиент-серверной базе требует ключа
-debugу службы и подключённого предмета «Сервер» в автоподключении.
Типичный сценарий проверки серверного вызова из формы:
&НаКлиенте
Процедура Заполнить(Команда)
КоличествоСтрок = ЗаполнитьНаСервере(Объект.Склад); // F11 — переход на сервер
Сообщить("Заполнено строк: " + Формат(КоличествоСтрок, "ЧГ=0"));
КонецПроцедуры
&НаСервере
Функция ЗаполнитьНаСервере(Склад)
// точка останова здесь сработает, только если подключён предмет «Сервер»
...
КонецФункции
Если на F11 отладчик перешагивает серверный вызов, вместо того чтобы зайти внутрь, — это верный признак, что серверный предмет отладки не подключён.
Фоновые и регламентные задания, HTTP-сервисы
Фоновые задания выполняются в отдельных сеансах на сервере. Чтобы поймать их код, включите в автоподключении тип «Фоновое задание». Точно так же подключают HTTP-сервисы и веб-сервисы: каждый вызов создаёт свой сеанс, и отладчик подхватывает его автоматически.
Регламентное задание не нужно ждать по расписанию. Вызовите его процедуру из внешней обработки или запустите задание вручную в консоли регламентных заданий, а точку поставьте в модуле задания.
Внешние обработки и отчёты
Внешнюю обработку
отлаживают без встраивания в конфигурацию. Откройте её .epf в Конфигураторе через Файл → Открыть, поставьте точки останова и откройте тот же файл в «Предприятии» запущенного в отладке клиента. Важно, чтобы это был именно тот файл, а не его копия из другой папки.
Отладка в веб-клиенте и на мобильном устройстве
Веб-клиент
Веб-клиент работает в браузере, и отладка возможна только по протоколу HTTP. Нужны три вещи:
- База опубликована на веб-сервере (IIS или Apache).
- В Конфигураторе выбран HTTP-протокол отладки и запуск веб-клиента в подменю
Отладка → Начать отладку. - В параметрах запуска указан адрес публикации базы.
Клиентский код веб-клиента выполняется в браузере, серверный — на сервере 1С, поэтому для серверной части по-прежнему нужен ключ -debug у службы. Учтите и поведение кода: некоторые методы недоступны в веб-клиенте (например, работа с локальными файлами без расширения), и ошибка возникнет только здесь, а в тонком клиенте её не будет.
Мобильное приложение и мобильный клиент
Для мобильной платформы отладка тоже идёт через HTTP. Схема такая:
- 📱 телефон и компьютер разработчика в одной сети;
- 🌐 в адресе сервера отладки указан IP компьютера, а не
localhost— для телефонаlocalhostозначает сам телефон; - 🔓 порт сервера отладки (по умолчанию
1550) открыт в брандмауэре Windows; - 🛠️ на устройстве используется сборка мобильной платформы для разработчика, в которой в настройках приложения задают адрес отладчика.
Если телефон не подключается, первым делом откройте в браузере телефона адрес http://<IP компьютера>:1550. Нет ответа — проблема в сети или брандмауэре, а не в 1С.
Почему отладчик не останавливается: разбор проблем
Самая частая жалоба — «поставил точку, а 1С её проскакивает». Причины почти всегда из короткого списка.
Ещё один источник путаницы — несколько Конфигураторов, открытых на одну базу. Сеанс подключается к одному из них, и точки, расставленные в другом окне, не работают. Держите для отладки одно окно Конфигуратора.
Если отладчик подключается, но на шагах сильно тормозит, уберите из Табло тяжёлые выражения. Они пересчитываются на каждом шаге, и выражение с запросом внутри замедляет каждое нажатие F10.