Решение задач 1С:Предприятие 8 на примерах

Отладка в 1С: точки останова и отладка на сервере

АлгоритмыОпубликовано

Отладчик в Конфигураторе позволяет остановить выполнение на нужной строке, посмотреть значения переменных и пройти код по шагам. С клиентским кодом всё просто, а вот серверный код в клиент-серверной базе, фоновые задания и HTTP-сервисы требуют дополнительной настройки. В статье — рабочие приёмы отладки, включение отладки на сервере 1С и разбор случаев, когда точка останова «не срабатывает».

Базовые приёмы отладки в Конфигураторе

Отладку запускает команда «Отладка → Начать отладку» (клавиша F5). Конфигуратор открывает клиент в режиме отладки, а выполнение останавливается там, где вы поставили точку останова клавишей F9. После остановки доступны шаги:

  • Шаг с обходом (F10) — выполнить строку целиком, не заходя в вызываемые процедуры.
  • Шаг с заходом (F11) — войти внутрь вызываемой процедуры или функции.
  • Шаг с выходом (Shift+F11) — выполнить текущую процедуру до конца и вернуться в вызывающий код.
  • Продолжить (F5) — снять остановку и выполнять код дальше до следующей точки.

Значения видны прямо в отладчике: наведите курсор на переменную и увидите её значение, а для структур, таблиц значений и ссылок — раскрывающееся содержимое. Для постоянного наблюдения служит «Отладка → Табло»: добавьте в него выражения вроде Объект.Номер, Выборка.Количество() или ТаблицаТовары.Количество(), и они будут пересчитываться после каждого шага. Одноразовое вычисление выполняет «Отладка → Вычислить выражение»; в этом окне допустимы вызовы функций, а значит, можно проверить, что вернёт функция, не дописывая код. Есть и «стек вызовов»: он показывает цепочку процедур, приведшую к текущей строке, и позволяет переключиться на вызывающий контекст.

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

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

// Условие точки останова внутри цикла Для Каждого Строка Из Объект.Товары
Строка.Номенклатура.Артикул = "A-1042"
// или остановка только на сотой итерации
Строка.НомерСтроки = 100

Рядом с условием в свойствах обычно есть и счётчик проходов: отладчик пропустит заданное число срабатываний. Условие вычисляется при каждом проходе, поэтому на «тяжёлом» цикле оно немного замедляет выполнение; убирайте такие точки, когда они больше не нужны. Отдельно полезна остановка по ошибке — режим в меню «Отладка», при котором отладчик останавливается на строке, где возникло исключение, ещё до его обработки. Он незаменим, когда ошибка «теряется» внутри блока Попытка и пользователь видит только общее сообщение.

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

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

Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
ПровестиДокументыПакетом();
Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало;
ЗаписьЖурналаРегистрации("Замер.Проведение", УровеньЖурналаРегистрации.Информация, , ,
    "Время, мс: " + Длительность);

Замер на рабочей базе включайте ненадолго: он добавляет накладные расходы.

Отладка на сервере 1С

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

Служба Windows

Агент работает как служба «Агент сервера 1С:Предприятия 8.3». Её команда запуска хранится в реестре, в разделе службы под ключом ImagePath: к строке запуска ragent.exe добавьте -debug и перезапустите службу. Остальные ключи (порты, каталог кластера) оставьте как были.

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

Ключ -debug включает протокол TCP/IP, а в связке с ключом -http агент работает в режиме HTTP-отладки; в этом случае нужно запустить сервер отладки dbgs.exe и указать его адрес и порт в настройках отладки. Точный набор ключей для HTTP-варианта зависит от релиза, проверяйте его по документации платформы. Для обычного локального сервера и сети без особых ограничений хватает режима TCP/IP.

Настройка в Конфигураторе

Параметры запуска и отладки находятся в окне настроек («Сервис → Параметры → Запуск 1С:Предприятия» — вкладка с протоколом отладки). Убедитесь, что выбранный протокол соответствует режиму агента. Затем откройте «Отладка → Подключение»: в окне перечислены предметы отладки — клиентское приложение, сервер 1С:Предприятия, фоновые задания и другие. Отметьте нужные и убедитесь, что они присоединены. Если сервер недоступен, проверьте брандмауэр: отладчик общается с агентом по его порту, а клиенты — с рабочими процессами в диапазоне портов кластера.

На рабочем сервере отладку лучше не держать включённой постоянно: пока подключён отладчик, остановка на точке блокирует поток выполнения для всех, кто попал в этот код. Делайте отладку на тестовой копии базы или на отдельном кластере.

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

  • Фоновые задания и регламентные задания. Включите предмет отладки «Фоновое задание» в окне «Подключение». Отладчик присоединится в момент старта задания; точка останова должна стоять в процедуре, которую оно вызывает. Для регламентных заданий действует то же правило: на сервере должна быть включена отладка.
  • HTTP-сервисы и веб-сервисы. Отладчик останавливается в обработчике сервиса, когда внешняя система делает запрос. Для клиент-серверной базы подключите предмет отладки «Сервер». Для файловой базы код сервиса исполняется в процессе веб-сервера, к которому нужно присоединиться; удобнее отлаживать сервис на сервере приложений. Как выглядит сам вызов, показано в статье про HTTP-запросы к REST API.
  • Расширения. Точки останова ставятся в модулях расширения так же, как в основной конфигурации, но модуль расширения в отладчике открывается отдельно. Об установке расширений — в статье про расширения конфигурации.
  • Внешние обработки. Откройте обработку в Конфигураторе и запустите её из той же отлаживаемой сессии: отладчик сопоставляет код по тексту модуля.

Почему не срабатывает точка останова

  1. Конфигурация базы не обновлена. Вы правили модуль, но не нажали «Обновить конфигурацию базы данных» (F7), и в базе работает старый код.
  2. Не включена отладка на сервере или не подключён предмет отладки «Сервер»: клиентские точки работают, серверные — нет.
  3. Точка стоит на строке, которая не исполняется: комментарий, объявление или строка внутри недостижимой ветки.
  4. Код выполняется в другом месте. Процедура вызывается в расширении, переопределена перехватом, или реальный вызов идёт в другой модуль.
  5. Версии отличаются: Конфигуратор и клиент разных релизов платформы либо база подключена к другому серверу.
  6. Мешает сеть: порт отладки закрыт брандмауэром, а режим TCP/IP не доходит до сервера.
  7. Клиент запущен вручную, а не командой «Начать отладку», и отладчик к нему не присоединён.

Типичные ошибки

  • Оставлять включённой остановку по ошибке и забывать про неё: отладчик останавливается на ожидаемых исключениях.
  • Отлаживать на рабочем кластере в рабочее время: остановка по точке задерживает других пользователей.
  • Править код в расширении, а точку ставить в основном модуле, или наоборот.
  • Забывать убрать условные точки и замер после работы.
  • Подключать отладчик без проверки версии платформы клиента и сервера.
ЗадачаЧто использовать
Посмотреть значение переменнойНаведение курсора, табло, «Вычислить выражение»
Остановиться на нужной итерацииТочка останова с условием
Найти место выброса исключенияОстановка по ошибке
Найти медленные строкиЗамер производительности
Отладить серверный кодКлюч -debug у ragent и предмет отладки «Сервер»

Актуальность для новых версий

Принципы отладки одинаковы для всех релизов 8.3. Отладка по протоколу TCP/IP через агент сервера работает давно и остаётся режимом по умолчанию. Режим отладки по HTTP через отдельный сервер отладки (dbgs) появился в линейке 8.3 и пригодится там, где прямое TCP-соединение с сервером недоступно; точные параметры запуска сверяйте со справкой по вашему релизу. Расположение пунктов меню в Конфигураторе от релиза к релизу меняется незначительно.

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

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

Запустите агент сервера (ragent) с ключом -debug: для службы Windows добавьте его в параметры запуска службы и перезапустите её. Затем в Конфигураторе подключитесь к серверу через «Отладка → Подключение» и отметьте нужные предметы отладки.

Почему не срабатывает точка останова в серверном коде?

Типичные причины: сервер запущен без -debug, предмет отладки «Сервер» не подключён, конфигурация базы не обновлена после правки модуля, код выполняется в другом контексте или в расширении, а не в основном модуле.

Как поставить точку останова с условием?

Установите точку останова клавишей F9, откройте её свойства из меню «Отладка» и задайте выражение на встроенном языке в поле условия. Отладчик остановится только тогда, когда выражение равно Истина.

Можно ли отлаживать фоновое задание?

Да, если отладка на сервере включена, а в окне подключения отмечены фоновые задания как предмет отладки. Отладчик присоединится к заданию в момент его запуска и остановится на точке останова.

Обновление конфигурации 1С: типовой, платформы и сервера

Алгоритмы

Как обновить типовую конфигурацию 1С с доработками и без, что делать с поддержкой, как обновить базу данных, платформу и сервер 1С без потери данных.

Штрихкод в 1С: контрольная цифра EAN-13, генерация, поиск и печать

Алгоритмы

Практический разбор штрихкодов в 1С: расчёт контрольной цифры EAN-13 и EAN-8, внутренние уникальные коды, поиск товара по штрихкоду, вывод картинки в печатную форму и работа со сканером.

Процедуры и функции в 1С: синтаксис, параметры, экспорт и общие модули

Алгоритмы

Разбор процедур и функций встроенного языка 1С: отличия, параметры, возврат нескольких значений, экспортные методы, флаги общих модулей, рекурсия и динамическое выполнение кода.

Конфигуратор 1С для программиста: как зайти, полезные функции и горячие клавиши

Алгоритмы

Обзор конфигуратора 1С для разработчика: как его открыть, как устроено дерево конфигурации и модули, чем пользоваться при поиске и проверке кода, как сохранять и загружать cf и dt и какие сочетания клавиш ускоряют работу.