Пошаговая отладка внешней обработки в Конфигураторе 1С
Содержание
Чтобы отладить внешнюю обработку
, откройте её файл .epf в Конфигураторе через Файл → Открыть, поставьте точки останова клавишей F9 в нужных процедурах и запустите отладку по F5. В открывшемся сеансе 1С:Предприятия откройте тот же самый файл обработки — выполнение встанет на вашей точке останова. Это базовый сценарий для файловой базы; для серверной и фоновых заданий нужны дополнительные настройки, о них ниже.
Главная ошибка новичков — открыть в Конфигураторе один файл, а в 1С:Предприятии запустить другой (например, уже зарегистрированный в справочнике «Дополнительные обработки»). Платформа сопоставляет обработку с точками останова по конкретному файлу, поэтому точки в «другой» копии не сработают.
Разберём весь путь: как включить отладку , как работать с точками останова, как добраться до серверного кода и фоновых заданий, что делать с внешними компонентами и COM-объектами и куда смотреть, когда отладчик молчит.
С чего начать: режим базы и предметы отладки
Отладка работает, только если в запущенном сеансе она разрешена. Поведение зависит от того, кто запускает сеанс.
- Файловая база. Когда вы жмёте
Отладка → Начать отладку (F5)в Конфигураторе, платформа сама запускает 1С:Предприятие с разрешённой отладкой. Отдельно ничего включать не нужно. - Клиент-серверная база . Отладку серверного кода надо разрешить на стороне сервера (см. раздел про клиент-сервер). Клиентскую часть при этом отлаживают так же, как в файловом варианте.
Прежде чем запускать, решите, что именно вы отлаживаете. В 1С 8.3 отлаживаемые процессы называются предметами отладки: тонкий клиент, толстый клиент, сервер (серверные вызовы), фоновые задания, внешнее соединение, веб-клиент. Нужные предметы включаются в Конфигураторе: Сервис → Параметры → Запуск 1С:Предприятия, группа настроек отладки.
По умолчанию ловится тонкий клиент. Если код обработки выполняется на сервере или в фоновом задании, а соответствующий предмет не включён, отладчик до него просто не дойдёт.
Открытие модуля обработки и проверка кода
Внешняя обработка — это отдельный файл, а не часть конфигурации. Чтобы увидеть её код в Конфигураторе, откройте файл напрямую: Файл → Открыть и выберите .epf. Откроется объект со своими формами, макетами и модулями.
Код обработки распределён по нескольким модулям, и важно понимать, где он исполняется:
- Модуль объекта — процедуры и функции самой обработки, как правило серверные.
- Модуль формы — обработчики команд и событий формы; часть директив выполняется на клиенте (
&НаКлиенте), часть на сервере (&НаСервере). - Модуль команды — если у обработки есть команды.
Директивы компиляции (&НаКлиенте, &НаСервере, &НаСервереБезКонтекста) определяют, в каком предмете отладки встанет точка останова. Код под &НаКлиенте ловится в клиенте, под &НаСервере — в предмете «сервер». Это ключ к тому, почему точка иногда «не срабатывает»: вы включили клиент, а строка выполняется на сервере.
Перед отладкой полезно убедиться, что модуль вообще транслируется без ошибок. Встаньте в модуль и выполните Текст → Проверить модуль — синтаксические ошибки платформа покажет сразу, без запуска. Обработка с ошибкой компиляции до точки останова не дойдёт, потому что модуль не загрузится.
Отдельный случай — обработка, уже подключённая через Дополнительные отчёты и обработки в базе. В 1С:Предприятии она запускается не из файла на диске, а из копии, хранящейся в справочнике. Чтобы отладить именно её, выгрузите текущую версию из справочника в файл, откройте этот файл в Конфигураторе и расставьте точки — иначе вы будете править одну копию, а выполняться будет другая. После отладки обновлённый файл загружают обратно в справочник.
Если вместо Конфигуратора вы работаете в 1С:EDT, механика та же — точки останова, предметы отладки, пошаговое выполнение. Отличаются только расположение команд в интерфейсе и запуск конфигурации отладки; принципы, описанные ниже, не меняются.
Точки останова и пошаговое выполнение
Точка останова (F9) ставится на строке кода: при подходе к ней выполнение приостанавливается, и вы видите состояние программы. Снимается той же клавишей.
Когда выполнение остановилось, работают стандартные шаги:
F11— шаг в: зайти внутрь вызываемой процедуры.F10— шаг через: выполнить строку целиком, не заходя в процедуру.Shift+F11— шаг из: доработать текущую процедуру и вернуться к вызвавшей.F5— продолжить до следующей точки останова.
Чтобы посмотреть значения, используйте служебные окна отладки:
- Табло — закрепляете выражения и переменные, следите за их значениями.
- Локальные переменные — все переменные текущей процедуры.
- Стек вызовов — цепочка процедур, приведшая в текущую точку; двойной клик переносит в нужный кадр.
- Вычислить выражение (
Shift+F9) — разовый расчёт любого выражения в текущем контексте, включая вызовы функций.
Для сложных случаев пригодятся два приёма, которые экономят массу перезапусков:
- Условная точка останова. Правый клик по точке → условие. Остановка сработает, только когда условие истинно — удобно, когда в цикле нужна конкретная итерация.
- Остановка по ошибке. Включается в настройках отладки и ловит момент возникновения исключения, даже если оно обёрнуто в
Попытка … Исключение. Так вы увидите место сбоя до того, как сработает обработчик исключения.
Точка останова живёт вместе с файлом .epf, открытым в Конфигураторе. Пересохранили обработку из другого места или подменили файл — проверьте, что отлаживаете именно его.
Отладка серверного кода и фоновых заданий
В клиент-серверной базе код под &НаСервере, регламентные и фоновые задания выполняются процессом сервера (rphost), а не клиентом. Чтобы туда попасть, нужно два условия.
Первое — разрешить отладку на сервере. Агент сервера (ragent) должен быть запущен с параметром отладки. Протокол выбирается один из двух:
- HTTP — применяется в современных платформах по умолчанию, работает через один порт.
- TCP/IP — классический вариант.
Важно, чтобы протокол на сервере и в Конфигураторе совпадал: это задаётся в Сервис → Параметры → Запуск 1С:Предприятия в настройках протокола отладки. По умолчанию HTTP-отладчик слушает порт 1550, но значение настраивается; если между Конфигуратором и сервером есть брандмауэр, порт отладки надо открыть.
Изменение параметров запуска агента сервера требует перезапуска службы 1С, а это обрывает все активные сеансы пользователей. Делайте это на тестовом сервере или в согласованное окно, а не на рабочей базе в разгар дня.
Второе — включить нужный предмет отладки. Для серверных процедур включите «сервер», для регламентных и фоновых заданий — «фоновые задания». Без этого выполнение на сервере пройдёт мимо точек останова.
Есть удобный способ не держать все предметы включёнными постоянно — подключение к уже работающему процессу: Отладка → Подключение. Платформа покажет список доступных предметов отладки (клиенты, серверные сеансы, фоновые задания), и вы вручную выберете, к чему подцепиться. Это особенно полезно, когда обработка запускается по расписанию и вы заранее не знаете, в каком сеансе она стартует.
Внешние компоненты и COM-объекты
Здесь важно понимать границу: отладчик 1С работает с кодом на встроенном языке, но не заходит внутрь внешней компоненты или COM-объекта — это чужой скомпилированный код (обычно C++).
Что это значит на практике:
- Вызов
ПодключитьВнешнююКомпоненту(...)и методы компоненты отладчик проходит как внешний вызов. Вы видите переданные параметры и возвращённое значение, но не внутреннюю логику компоненты. - То же с COM:
Новый COMОбъект(...)и обращения к его методам отлаживаются «снаружи» — по входу и выходу.
Самые частые проблемы с компонентами и COM лежат не в логике, а в окружении:
- Разрядность. 64-разрядная платформа (а именно так работает
rphostна большинстве серверов) требует 64-разрядную компоненту или COM-сервер. 32-разрядный COM-объект в 64-разрядном процессе просто не подключится. - Регистрация. COM-сервер должен быть зарегистрирован в системе (для DLL — через
regsvr32). Native-компоненту подключают из файла или макета, и путь должен быть доступен процессу, который её грузит, — на сервере это пользователь службы, а не ваша учётка. - Где выполняется подключение. Если компонента подключается на сервере, то и файл, и регистрация нужны на сервере, а не на вашем клиенте.
Если нужно отладить саму C++-компоненту, 1С тут не помощник: к процессу rphost или клиента подключаются внешним отладчиком (например, из среды разработки компоненты). Со стороны 1С остаётся логировать параметры вызова и возвращаемые значения.
Отдельный предмет отладки «внешнее соединение» нужен, когда ваша обработка исполняется через COM-соединение (COMConnector) из внешней программы. Без него код, пришедший по внешнему соединению, под отладчик не попадёт.
Когда отладчик молчит: журнал регистрации и логи
Если подцепиться отладчиком не получается (код на боевом сервере, ошибка плавающая, воспроизводится у пользователя), включайте протоколирование.
Журнал регистрации — встроенный лог событий базы. Смотреть его можно и из 1С:Предприятия (Администрирование → Журнал регистрации), и из Конфигуратора (Администрирование → Журнал регистрации). Отбор по времени, пользователю и типу события быстро сужает поиск. Записать в журнал из кода обработки можно методом ЗаписьЖурналаРегистрации(...) — удобно расставить такие записи в ключевых точках и посмотреть реальную последовательность на рабочей базе.
Для быстрой диагностики по ходу выполнения подойдёт Сообщить(...) — вывод в окно сообщений. Для серверного кода, где окна сообщений нет, остаётся журнал регистрации.
Когда проблема глубже встроенного языка (аварийное завершение процесса, падение при вызове компоненты), в ход идёт технологический журнал. Он включается файлом logcfg.xml и пишет низкоуровневые события платформы, включая исключения (EXCP). Это тяжёлый инструмент: он заметно нагружает систему и даёт много данных, поэтому включают его точечно и на короткое время.
Типичные ошибки и как их устранить
Большинство обращений «отладка не работает » сводится к нескольким причинам. Сопоставьте симптом с решением.
&НаСервере или в фоновом задании. Включите предмет отладки «сервер» (и «фоновые задания»), а для серверной базы разрешите отладку на агенте сервера.Отладка → Подключение.Попытка.Ещё две ситуации, которые легко принять за «баг отладчика»:
- Модуль не транслируется. Синтаксическая ошибка в модуле не даст обработке загрузиться, и точки останова окажутся недостижимы. Проверяйте модуль заранее (
Текст → Проверить модуль). - Кэш клиента. Иногда клиент держит старую версию форм. Помогает запуск с очисткой кэша (
/ClearCache) или перезапуск сеанса — но помните, что это касается только текущего клиента.
Частые вопросы
Нужно ли добавлять обработку в конфигурацию, чтобы её отладить?
.epf: открываете его в Конфигураторе, ставите точки останова и открываете тот же файл в 1С:Предприятии. Встраивать объект в конфигурацию не требуется.Почему точки останова серые и не срабатывают?
Можно ли отлаживать обработку прямо на рабочем сервере?
Как отладить код, который выполняется по расписанию в фоновом задании?
Отладка → Подключение. Точки останова при этом должны стоять в серверных процедурах, которые вызывает задание.