Разработка и Конфигурация · 13 мин
Как отладить внешнюю обработку 1С
Как отладить внешнюю обработку 1С: настройка отладчика, точки останова, отладка фоновых заданий и серверного кода. Практические советы для разработчика.
Внешняя обработка — это файл с расширением .epf, который 1С открывает без встраивания в конфигурацию. Такой формат удобен для доработок, но отладка имеет особенности: обработка выполняется в контексте базы, а её код не входит в конфигурацию, поэтому стандартный запуск отладчика «из конфигуратора» не всегда срабатывает без дополнительной настройки.
Типичная проблема выглядит так: вы ставите точку останова в коде обработки, открываете её в режиме Предприятия — и точка не срабатывает. Причины бывают разные: отладка не разрешена на сервере, открыта не та копия файла, код выполняется в фоновом задании или в другом сеансе. Ниже разобраны все основные сценарии и способы их решения.
Материал ориентирован на платформу 1С:Предприятие 8.3 с управляемыми формами, поскольку именно в этом режиме работает большинство современных конфигураций. Для обычных форм отличия указаны отдельно.
Подготовка: что проверить до начала отладки
Прежде чем ставить точки останова, убедитесь, что выполнены три условия. Во-первых, у пользователя, под которым вы работаете в режиме Предприятия, должны быть права на открытие внешних обработок — в ряде конфигураций (особенно на базе БСП) это регулируется профилем групп доступа. Во-вторых, конфигуратор и клиентское приложение должны быть запущены на одной и той же информационной базе — отладчик подключается к конкретной базе, а не к файлу обработки.
В-третьих, версия платформы конфигуратора и клиента должна совпадать. Если база опубликована на сервере с одной версией платформы, а конфигуратор у вас более старый или новый, подключение отладчика может не состояться либо вести себя непредсказуемо.
Отдельно проверьте, что вы отлаживаете именно ту копию файла, которая открывается в Предприятии. Частая ситуация: разработчик правит файл в каталоге разработки, а пользователь запускает копию из общего сетевого ресурса. Точки останова привязаны к конкретному открытому в конфигураторе модулю, и расхождение версий приводит к тому, что отладка «молчит».
Включение отладки в файловом и клиент-серверном режимах
В файловом режиме отладка обычно работает сразу: достаточно запустить клиентское приложение из конфигуратора (Сервис → 1С:Предприятие или клавиша Ctrl+F5) либо подключить конфигуратор к уже запущенному сеансу через меню Отладка → Подключение. В списке доступных предметов отладки выберите нужный сеанс тонкого клиента.
В клиент-серверном режиме ситуация сложнее. По умолчанию сервер 1С запущен без поддержки отладки, и серверный код (а в управляемых формах большая часть логики выполняется на сервере) отлаживаться не будет. Сервер приложений нужно запустить с ключом отладки.
ragent.exe -debugНа практике ключ добавляется в параметры запуска службы агента сервера 1С. В Windows это делается через реестр: в ветке службы агента сервера (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services) найдите параметр ImagePath и добавьте -debug в строку запуска, после чего перезапустите службу. Учтите, что перезапуск службы разорвёт сеансы всех пользователей базы — планируйте это действие на нерабочее время или предупредите коллег.
Дополнительно в настройках конфигуратора (Сервис → Параметры → Отладка) убедитесь, что выбран правильный протокол отладки. Для современных версий платформы рекомендуется протокол HTTP — он стабильнее работает через сетевые экраны и не требует открытия дополнительных портов, в отличие от устаревшего TCP-протокола.
Базовый сценарий: отладка обработки, открытой через Файл → Открыть
Это самый частый случай: обработка запускается вручную пользователем из меню Файл → Открыть. Порядок действий следующий.
- 1Откройте файл обработки (.epf) в конфигураторе через Файл → Открыть
- 2Поставьте точку останова (F9) в нужной строке модуля формы или модуля объекта
- 3Убедитесь, что отладка включена: Отладка → Начать отладку или подключитесь к запущенному сеансу
- 4В режиме Предприятия откройте обработку через Файл → Открыть и выполните действие, вызывающее код
- 5Когда выполнение остановится на точке, используйте шаги F10/F11 и окно «Вычислить выражение» (Shift+F9) для анализа
- 6После проверки снимите точки останова и продолжите выполнение (F5)
Ключевой момент: модуль обработки должен быть открыт именно как внешняя обработка в конфигураторе, а не скопирован в конфигурацию. Платформа сопоставляет исполняемый код с открытым модулем по идентификатору, и если вы редактируете копию текста в другом окне, остановки не произойдёт.
Если точка останова отображается с восклицательным знаком или не активируется, это означает, что строка не содержит исполняемого кода (например, это комментарий или объявление переменной без инициализации) либо модуль ещё не загружен в сеанс. Во втором случае точка активируется после первого открытия обработки в Предприятии.
Отладка серверного кода и управляемых форм
В управляемых формах код делится на клиентский и серверный контексты. Директивы компиляции &НаКлиенте и &НаСервере определяют, где выполняется процедура, и отлаживаться эти части будут в разных предметах отладки: клиентский код — в сеансе тонкого клиента, серверный — в рабочем процессе сервера.
При подключении отладчика (Отладка → Подключение) обратите внимание на список предметов отладки: там должны присутствовать и клиентские, и серверные процессы. Если серверных процессов нет — значит, сервер запущен без ключа -debug, и серверный код вы не увидите. В настройках подключения отметьте флажками все типы предметов отладки, которые нужны: «Тонкий клиент», «Сервер», «Фоновое задание».
Полезный приём — временно вызвать серверную процедуру из клиентской с явной точкой останова на строке вызова. Так вы проследите передачу параметров между контекстами: частая ошибка внешних обработок — попытка передать на сервер несериализуемые данные, например элементы формы или объекты типа «ТабличныйДокумент», привязанные к клиентскому контексту.
Откройте обработку в Предприятии хотя бы один раз, затем проверьте точку снова
Проверьте параметры запуска службы агента сервера
Переоткройте файл в конфигураторе и в Предприятии
Включите отладку фоновых заданий в настройках подключения
Отладка фоновых заданий и обработок, запускаемых из подсистемы БСП
Если обработка выполняет длительные операции через фоновые задания (метод ВыполнитьВФоне или ДлительныеОперации.ВыполнитьВФоне в БСП), код внутри фонового задания выполняется в отдельном сеансе. По умолчанию отладчик к таким сеансам не подключается. Решение — в окне подключения (Отладка → Подключение) включить флажок автоматического подключения к фоновым заданиям: «Автоматическое подключение» → «Фоновые задания».
Альтернативный приём для сложных случаев — временно заменить фоновый вызов на прямой синхронный вызов процедуры. Это позволяет отладить логику в текущем сеансе без настройки подключения к фоновым заданиям. Не забудьте вернуть исходный вызов после отладки: синхронное выполнение блокирует интерфейс пользователя.
Если обработка подключена к базе через подсистему «Дополнительные отчеты и обработки» БСП (а не открывается через Файл → Открыть), отладка тоже возможна, но с нюансом: в базе хранится копия файла в виде двоичных данных. Чтобы точки останова сработали, сначала откройте в Предприятии именно файл с диска через Файл → Открыть — при совпадении кода отладчик сопоставит модули. Если код разошёлся, обновите обработку в справочнике дополнительных обработок или отлаживайте файловую версию.
Как выбрать действие
Инструменты отладчика: что использовать кроме точек останова
Точка останова — только начало. Для эффективной отладки внешней обработки освойте несколько инструментов конфигуратора. Окно «Вычислить выражение» (Shift+F9) позволяет проверить значение любой переменной или вызвать функцию в момент остановки. Окно «Локальные переменные» показывает текущее состояние всех переменных процедуры без ручного ввода.
Окно «Стек вызовов» (Alt+F3) незаменимо, когда ошибка возникает глубоко в цепочке вызовов: вы увидите, откуда была вызвана текущая процедура, и сможете подняться по стеку, просматривая значения переменных на каждом уровне. Это особенно полезно при отладке обработок, использующих общие модули конфигурации.
Условные точки останова помогают, когда ошибка проявляется не на каждой итерации цикла. В свойствах точки останова задайте условие (например, НомерСтроки = 157), и остановка произойдёт только при его выполнении. Это экономит время при отладке обхода больших таблиц значений.
Если ошибка воспроизводится нестабильно, добавьте в проблемное место временный вывод в журнал регистрации через ЗаписьЖурналаРегистрации с ключевыми данными (параметры, состояние переменных). Часто одного просмотра журнала достаточно, чтобы локализовать причину без длительной пошаговой отладки.
Типичные ошибки и как их избежать
Отдельно предупредим о риске порчи данных. Внешние обработки часто массово изменяют документы и справочники. Отладка на рабочей базе с пошаговым выполнением не защищает от того, что часть кода уже выполнилась до точки останова и записала данные. Правило простое: отлаживайте обработки, изменяющие данные, только на копии базы. Сделать копию файловой базы можно простым копированием каталога, клиент-серверной — через выгрузку в .dt и загрузку в тестовую базу.
Как проверить результат
Выполнение останавливается на нужной строке, строка подсвечена
Точка серая или с восклицательным знаком, выполнение проходит мимо
В стеке вызовов виден ожидаемый контекст (клиент/сервер)
В списке предметов отладки нет серверных процессов
Текст модуля в конфигураторе совпадает с выполняемым
Остановка происходит на «съехавших» строках
Точки останова сняты, отладочные сообщения удалены
В коде остались Сообщить() и прерванные участки
Частые вопросы
Почему точка останова в модуле формы не срабатывает, хотя обработка открыта?
Чаще всего модуль формы ещё не компилировался в сеансе — форма не была открыта ни разу после запуска клиента. Откройте форму обработки в Предприятии, затем проверьте точку снова. Также убедитесь, что точка стоит в процедуре с нужной директивой: серверная процедура не остановится, если сервер запущен без ключа -debug.
Можно ли отладить обработку без конфигуратора?
Полноценно — нет, отладчик встроен в конфигуратор. Обходные варианты: вывод диагностических сообщений через Сообщить() или СообщениеПользователю, запись в журнал регистрации, а также внешние инструменты вроде замеров производительности. Но пошаговое выполнение и просмотр переменных доступны только через конфигуратор.
Как отладить обработку, которая запускается регламентным заданием?
Код регламентного задания выполняется в фоновом сеансе. Включите в настройках отладчика автоматическое подключение к фоновым заданиям, затем дождитесь запуска задания или инициируйте его вручную. Учтите, что фоновый сеанс выполняется под служебным пользователем, и доступ к данным может отличаться от интерактивного сеанса.
Отладчик подключается, но останавливается только в клиентском коде. Что делать?
Это признак того, что сервер 1С запущен без поддержки отладки. Добавьте ключ -debug в параметры запуска службы агента сервера и перезапустите её. После этого в окне подключения отладчика появятся серверные предметы отладки, и серверные процедуры начнут останавливаться на точках.
Безопасно ли отлаживать обработку прямо на рабочей базе?
Только если обработка ничего не записывает в базу (например, формирует отчёт). Если код изменяет документы, справочники или регистры, работайте на копии: часть изменений может выполниться до точки останова, и откатить их будет сложно. Дополнительно помните, что включение отладки на сервере требует перезапуска службы и разрывает сеансы пользователей.
Чем отличается отладка обработки с обычными формами?
В обычных формах нет разделения на клиентский и серверный контексты — весь код формы выполняется на клиенте (в файловом режиме) или в толстом клиенте. Отладка проще: достаточно подключиться к сеансу толстого клиента. Однако современные конфигурации на управляемых формах могут вообще не открывать обработки с обычными формами.
Что важно запомнить
Отладка внешней обработки сводится к трём условиям: файл открыт в конфигураторе, сервер запущен с ключом -debug (для клиент-серверного режима), отладчик подключён ко всем нужным типам сеансов, включая фоновые задания. Работайте на копии базы, следите за актуальностью файла и убирайте точки останова после завершения.