К статье
Практический материал

Разработка и Конфигурация · 13 мин

Как отладить внешнюю обработку 1С

Как отладить внешнюю обработку 1С: настройка отладчика, точки останова, отладка фоновых заданий и серверного кода. Практические советы для разработчика.

Внешняя обработка — это файл с расширением .epf, который 1С открывает без встраивания в конфигурацию. Такой формат удобен для доработок, но отладка имеет особенности: обработка выполняется в контексте базы, а её код не входит в конфигурацию, поэтому стандартный запуск отладчика «из конфигуратора» не всегда срабатывает без дополнительной настройки.

Типичная проблема выглядит так: вы ставите точку останова в коде обработки, открываете её в режиме Предприятия — и точка не срабатывает. Причины бывают разные: отладка не разрешена на сервере, открыта не та копия файла, код выполняется в фоновом задании или в другом сеансе. Ниже разобраны все основные сценарии и способы их решения.

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

Подготовка: что проверить до начала отладки

Прежде чем ставить точки останова, убедитесь, что выполнены три условия. Во-первых, у пользователя, под которым вы работаете в режиме Предприятия, должны быть права на открытие внешних обработок — в ряде конфигураций (особенно на базе БСП) это регулируется профилем групп доступа. Во-вторых, конфигуратор и клиентское приложение должны быть запущены на одной и той же информационной базе — отладчик подключается к конкретной базе, а не к файлу обработки.

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

Отдельно проверьте, что вы отлаживаете именно ту копию файла, которая открывается в Предприятии. Частая ситуация: разработчик правит файл в каталоге разработки, а пользователь запускает копию из общего сетевого ресурса. Точки останова привязаны к конкретному открытому в конфигураторе модулю, и расхождение версий приводит к тому, что отладка «молчит».

Включение отладки в файловом и клиент-серверном режимах

В файловом режиме отладка обычно работает сразу: достаточно запустить клиентское приложение из конфигуратора (Сервис → 1С:Предприятие или клавиша Ctrl+F5) либо подключить конфигуратор к уже запущенному сеансу через меню Отладка → Подключение. В списке доступных предметов отладки выберите нужный сеанс тонкого клиента.

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

text
ragent.exe -debug

На практике ключ добавляется в параметры запуска службы агента сервера 1С. В Windows это делается через реестр: в ветке службы агента сервера (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services) найдите параметр ImagePath и добавьте -debug в строку запуска, после чего перезапустите службу. Учтите, что перезапуск службы разорвёт сеансы всех пользователей базы — планируйте это действие на нерабочее время или предупредите коллег.

Дополнительно в настройках конфигуратора (Сервис → Параметры → Отладка) убедитесь, что выбран правильный протокол отладки. Для современных версий платформы рекомендуется протокол HTTP — он стабильнее работает через сетевые экраны и не требует открытия дополнительных портов, в отличие от устаревшего TCP-протокола.

Базовый сценарий: отладка обработки, открытой через Файл → Открыть

Это самый частый случай: обработка запускается вручную пользователем из меню Файл → Открыть. Порядок действий следующий.

Порядок действий
  1. 1
    Откройте файл обработки (.epf) в конфигураторе через Файл → Открыть
  2. 2
    Поставьте точку останова (F9) в нужной строке модуля формы или модуля объекта
  3. 3
    Убедитесь, что отладка включена: Отладка → Начать отладку или подключитесь к запущенному сеансу
  4. 4
    В режиме Предприятия откройте обработку через Файл → Открыть и выполните действие, вызывающее код
  5. 5
    Когда выполнение остановится на точке, используйте шаги F10/F11 и окно «Вычислить выражение» (Shift+F9) для анализа
  6. 6
    После проверки снимите точки останова и продолжите выполнение (F5)

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

Если точка останова отображается с восклицательным знаком или не активируется, это означает, что строка не содержит исполняемого кода (например, это комментарий или объявление переменной без инициализации) либо модуль ещё не загружен в сеанс. Во втором случае точка активируется после первого открытия обработки в Предприятии.

Отладка серверного кода и управляемых форм

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

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

Полезный приём — временно вызвать серверную процедуру из клиентской с явной точкой останова на строке вызова. Так вы проследите передачу параметров между контекстами: частая ошибка внешних обработок — попытка передать на сервер несериализуемые данные, например элементы формы или объекты типа «ТабличныйДокумент», привязанные к клиентскому контексту.

Точка останова неактивнаМодуль не загружен

Откройте обработку в Предприятии хотя бы один раз, затем проверьте точку снова

Отладчик не видит серверНет ключа -debug

Проверьте параметры запуска службы агента сервера

Останавливается не на той строкеУстаревшая копия файла

Переоткройте файл в конфигураторе и в Предприятии

Код выполняется мимо отладчикаФоновое задание

Включите отладку фоновых заданий в настройках подключения

Отладка фоновых заданий и обработок, запускаемых из подсистемы БСП

Если обработка выполняет длительные операции через фоновые задания (метод ВыполнитьВФоне или ДлительныеОперации.ВыполнитьВФоне в БСП), код внутри фонового задания выполняется в отдельном сеансе. По умолчанию отладчик к таким сеансам не подключается. Решение — в окне подключения (Отладка → Подключение) включить флажок автоматического подключения к фоновым заданиям: «Автоматическое подключение» → «Фоновые задания».

Альтернативный приём для сложных случаев — временно заменить фоновый вызов на прямой синхронный вызов процедуры. Это позволяет отладить логику в текущем сеансе без настройки подключения к фоновым заданиям. Не забудьте вернуть исходный вызов после отладки: синхронное выполнение блокирует интерфейс пользователя.

Если обработка подключена к базе через подсистему «Дополнительные отчеты и обработки» БСП (а не открывается через Файл → Открыть), отладка тоже возможна, но с нюансом: в базе хранится копия файла в виде двоичных данных. Чтобы точки останова сработали, сначала откройте в Предприятии именно файл с диска через Файл → Открыть — при совпадении кода отладчик сопоставит модули. Если код разошёлся, обновите обработку в справочнике дополнительных обработок или отлаживайте файловую версию.

Маршрут решения

Как выбрать действие

Обработка открывается вручную через Файл → ОткрытьОткройте .epf в конфигураторе, поставьте точку останова и запустите обработку в том же сеансе
Логика выполняется в фоновом заданииВключите автоматическое подключение к фоновым заданиям в настройках отладчика
Обработка зарегистрирована в подсистеме дополнительных отчетов БСПОтладьте файловую версию через Файл → Открыть, затем синхронизируйте копию в базе
Ошибка возникает только у конкретного пользователяОтладьте под его сеансом через Отладка → Подключение, выбрав нужный сеанс в списке

Инструменты отладчика: что использовать кроме точек останова

Точка останова — только начало. Для эффективной отладки внешней обработки освойте несколько инструментов конфигуратора. Окно «Вычислить выражение» (Shift+F9) позволяет проверить значение любой переменной или вызвать функцию в момент остановки. Окно «Локальные переменные» показывает текущее состояние всех переменных процедуры без ручного ввода.

Окно «Стек вызовов» (Alt+F3) незаменимо, когда ошибка возникает глубоко в цепочке вызовов: вы увидите, откуда была вызвана текущая процедура, и сможете подняться по стеку, просматривая значения переменных на каждом уровне. Это особенно полезно при отладке обработок, использующих общие модули конфигурации.

Условные точки останова помогают, когда ошибка проявляется не на каждой итерации цикла. В свойствах точки останова задайте условие (например, НомерСтроки = 157), и остановка произойдёт только при его выполнении. Это экономит время при отладке обхода больших таблиц значений.

Если ошибка воспроизводится нестабильно, добавьте в проблемное место временный вывод в журнал регистрации через ЗаписьЖурналаРегистрации с ключевыми данными (параметры, состояние переменных). Часто одного просмотра журнала достаточно, чтобы локализовать причину без длительной пошаговой отладки.
ПЗ
Практическое замечание

Типичные ошибки и как их избежать

Типичные ошибки
01
Отладка на продуктивной базе без копии — любая правка и тестовый запуск могут изменить реальные данные; всегда работайте на копии
02
Правка одной копии файла и запуск другой — точки останова не срабатывают, а разработчик ищет несуществующую проблему
03
Забытый ключ -debug на сервере — серверный код выполняется мимо отладчика, и кажется, что процедура «не вызывается»
04
Попытка отладить фоновое задание без автоподключения — код выполняется в отдельном сеансе, недоступном отладчику
05
Оставленные после отладки точки останова и сообщения Сообщить() — попадают в рабочую версию и засоряют интерфейс пользователей

Отдельно предупредим о риске порчи данных. Внешние обработки часто массово изменяют документы и справочники. Отладка на рабочей базе с пошаговым выполнением не защищает от того, что часть кода уже выполнилась до точки останова и записала данные. Правило простое: отлаживайте обработки, изменяющие данные, только на копии базы. Сделать копию файловой базы можно простым копированием каталога, клиент-серверной — через выгрузку в .dt и загрузку в тестовую базу.

Контрольные точки

Как проверить результат

Срабатывание точки останова
Норма

Выполнение останавливается на нужной строке, строка подсвечена

Тревожный признак

Точка серая или с восклицательным знаком, выполнение проходит мимо

Контекст выполнения
Норма

В стеке вызовов виден ожидаемый контекст (клиент/сервер)

Тревожный признак

В списке предметов отладки нет серверных процессов

Актуальность кода
Норма

Текст модуля в конфигураторе совпадает с выполняемым

Тревожный признак

Остановка происходит на «съехавших» строках

Чистота после отладки
Норма

Точки останова сняты, отладочные сообщения удалены

Тревожный признак

В коде остались Сообщить() и прерванные участки

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

Почему точка останова в модуле формы не срабатывает, хотя обработка открыта?

Чаще всего модуль формы ещё не компилировался в сеансе — форма не была открыта ни разу после запуска клиента. Откройте форму обработки в Предприятии, затем проверьте точку снова. Также убедитесь, что точка стоит в процедуре с нужной директивой: серверная процедура не остановится, если сервер запущен без ключа -debug.

Можно ли отладить обработку без конфигуратора?

Полноценно — нет, отладчик встроен в конфигуратор. Обходные варианты: вывод диагностических сообщений через Сообщить() или СообщениеПользователю, запись в журнал регистрации, а также внешние инструменты вроде замеров производительности. Но пошаговое выполнение и просмотр переменных доступны только через конфигуратор.

Как отладить обработку, которая запускается регламентным заданием?

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

Отладчик подключается, но останавливается только в клиентском коде. Что делать?

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

Безопасно ли отлаживать обработку прямо на рабочей базе?

Только если обработка ничего не записывает в базу (например, формирует отчёт). Если код изменяет документы, справочники или регистры, работайте на копии: часть изменений может выполниться до точки останова, и откатить их будет сложно. Дополнительно помните, что включение отладки на сервере требует перезапуска службы и разрывает сеансы пользователей.

Чем отличается отладка обработки с обычными формами?

В обычных формах нет разделения на клиентский и серверный контексты — весь код формы выполняется на клиенте (в файловом режиме) или в толстом клиенте. Отладка проще: достаточно подключиться к сеансу толстого клиента. Однако современные конфигурации на управляемых формах могут вообще не открывать обработки с обычными формами.

Итог

Что важно запомнить

Отладка внешней обработки сводится к трём условиям: файл открыт в конфигураторе, сервер запущен с ключом -debug (для клиент-серверного режима), отладчик подключён ко всем нужным типам сеансов, включая фоновые задания. Работайте на копии базы, следите за актуальностью файла и убирайте точки останова после завершения.