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

· 9 мин

Содержание

Чтобы отладить внешнюю обработку 1С 8.3, запустите 1С:Предприятие в режиме разрешения отладки, откройте файл .epf в Конфигураторе и поставьте точки останова в его модуле. Режим включается в Конфигураторе: Сервис → Параметры → Запуск 1С:Предприятия, флажок «Устанавливать режим разрешения отладки при запуске».

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

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

Включаем режим отладки и выдаём права

Отладчик не подключится к сеансу, который запущен без разрешения отладки. Поэтому начинаем с настроек запуска.

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

Для прав действует простое правило:

  • 🔑 отлаживать может пользователь с административными правами на информационную базу;
  • 🖥️ в клиент-серверном варианте отладка серверного кода должна быть отдельно разрешена на сервере (об этом ниже);
  • 🧩 версии платформы Конфигуратора и запускаемого клиента должны совпадать — иначе сеанс не появится в списке.

Если обработку вы пишете и правите часто, держите Конфигуратор и клиент открытыми одновременно. Пересохранили .epf — заново откройте его в сеансе, и новый код подхватится.

Перед первой отладкой
Выполнено: 0 / 5

Классическая отладка через Конфигуратор: точки останова

Самый частый сценарий — файл обработки лежит на диске, и вы отлаживаете его целиком.

  1. В Конфигураторе: Файл → Открыть (Ctrl+O), выберите свой файл .epf. Обработка откроется деревом объектов.
  2. Раскройте нужный модуль — модуль объекта или модуль формы — и поставьте точку останова на строке клавишей F9. Строка пометится красным кружком.
  3. Запустите клиент командой Отладка → Начать отладку (F5). Он стартует в режиме разрешения отладки.
  4. В открывшемся 1С:Предприятии выполните Файл → Открыть и укажите тот же .epf. Запустите нужную команду обработки.
  5. Выполнение остановится на точке останова. Дальше смотрите значения переменных и идите по коду.

Управление в точке останова — стандартное для платформы:

КлавишаДействие
F9поставить/снять точку останова
F5продолжить выполнение
F10шагнуть через (не заходя в процедуру)
F11шагнуть внутрь процедуры
Shift+F11выйти из текущей процедуры
Shift+F9вычислить выражение

Код обработки лежит в разных модулях, и точку останова ставят там, где он реально выполняется:

  • 🧱 модуль объекта — логика самой обработки, процедуры, которые вызывают извне;
  • 📋 модуль формы — обработчики событий формы и её элементов (нажатия кнопок, изменения полей);
  • ⚙️ модуль команды — если у обработки есть команды, запускаемые из интерфейса.

Если непонятно, по какому модулю пойдёт выполнение, поставьте точки сразу в нескольких местах и запустите команду — сработает та, через которую проходит код.

Значение переменной можно посмотреть, наведя на неё курсор, либо добавив её в окно «Табло». Порядок вызовов показывает окно «Стек вызовов» — удобно, когда ошибка всплывает глубоко внутри вложенных процедур. Через Shift+F9 («Вычислить выражение») значение не только смотрят, но и подменяют на лету: это помогает проверить, как поведёт себя код при другом входном параметре, не перезапуская сеанс.

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

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

Подключение к работающему сеансу без открытия файла

Иногда обработку не запускаешь заново, а она уже крутится в пользовательском сеансе — например, встроена в типовой процесс. Тогда отладчик подключают к живому сеансу.

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

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

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

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

Отладка обработки из «Дополнительных отчётов и обработок»

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

Отсюда два рабочих подхода:

  • 🧪 Отладьте файл до публикации. Пока обработка лежит на диске, гоняйте её через Файл → Открыть в сеансе, как описано выше. Это самый чистый путь: вы отлаживаете ровно тот код, который потом загрузите.
  • 🔌 Подключитесь к сеансу уже загруженной обработки. Откройте её исходный .epf в Конфигураторе, поставьте точки останова и подключитесь к сеансу, в котором обработка вызывается. Код и выполнение совпадут только если версия файла и версия в базе одинаковы.

Если отлаживаемый код требует привилегий, безопасный режим можно временно снять в карточке обработки (нужны права администратора). В «1С:Бухгалтерии 3.0» список лежит в разделе Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки; сам механизм там же включается флажком.

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

Отладка серверного кода и выбор протокола

В клиент-серверной базе часть кода выполняется не на клиенте, а в рабочем процессе сервера (rphost): процедуры с директивой &НаСервере, вызовы серверных общих модулей. Клиентский отладчик их не увидит, пока отладка не разрешена на самом сервере.

Включается она на стороне агента сервера (ragent) — при регистрации службы добавляют параметр отладки, а отладчик подключается к серверу по сети. Порт сервера отладки по умолчанию — 1550. Точные ключи запуска службы смотрите в документации по параметрам запуска агента сервера, чтобы не промахнуться с конкретной сборкой.

Понять, какой код уйдёт на сервер, помогают директивы компиляции в начале процедуры. &НаКлиенте выполняется у пользователя, &НаСервере и &НаСервереБезКонтекста — в рабочем процессе. Серверные процедуры поймаются отладчиком только при включённой серверной отладке; клиентские — всегда, если сеанс запущен в режиме отладки.

Протокол отладки бывает двух видов: TCP/IP и HTTP. Для отладки серверного кода и для веб-клиента используют HTTP — он устойчивее проходит через сеть и прокси. Протокол клиента и Конфигуратора должен быть одинаковым, иначе сеанс просто не появится в списке предметов отладки.

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

Особенности отладки в тонком и веб-клиенте

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

С веб-клиентом два условия:

  • протокол отладки должен быть HTTP;
  • в публикации базы на веб-сервере должна быть разрешена отладка. Флажок задаётся при публикации из Конфигуратора и записывается в файл публикации default.vrd.

Клиентский код веб-клиента исполняется в браузере, но отладчик встроенного языка всё равно ловит его через протокол отладки — отдельный отладчик браузера для этого не нужен. Если сеанс веб-клиента не появляется в предметах отладки, в девяти случаях из десяти дело в протоколе (не HTTP) или в запрете отладки в default.vrd.

Когда отладчик не помогает: журналы и трассировка

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

Журнал регистрации. Платформенные ошибки с текстом и контекстом пишутся в журнал регистрации базы. В «1С:Бухгалтерии 3.0» он открывается из раздела Администрирование → Обслуживание, а полностью — из Конфигуратора. По нему видно, в какой момент и с каким сообщением упала обработка.

Технологический журнал. Для низкоуровневого разбора настраивают технологический журнал через файл logcfg.xml в каталоге conf платформы. Он фиксирует исключения (EXCP), длительность вызовов и обращения к СУБД — это инструмент для сложных случаев, когда нужен точный след выполнения. Минимальная конфигурация, которая собирает только ошибки:

<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\logs\1c" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <property name="all"/>
  </log>
</config>

После правок logcfg.xml платформа подхватывает их без перезапуска службы, с небольшой задержкой. Разбирать такой журнал стоит, когда ошибка не ловится отладчиком и не пишется внятно в журнал регистрации.

Ручная трассировка. Самый простой способ понять, доходит ли выполнение до нужной строки, — вывести значение. В клиентском коде работает Сообщить(), в серверном удобнее писать метки в журнал методом ЗаписьЖурналаРегистрации(). Главное — убрать отладочный вывод перед публикацией обработки.

Ошибки подключения отладчика

Большинство проблем при отладке внешних обработок — не в коде, а в том, что отладчик не видит сеанс или точка останова не срабатывает. Разбор по симптомам:

Диагностика: выберите симптом

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

Нужны ли права администратора, чтобы отлаживать обработку?
Да, отладку запускает пользователь с административными правами на базу. В клиент-серверном варианте отладка серверного кода вдобавок должна быть разрешена на стороне сервера.
Можно ли отлаживать внешнюю обработку в 1С:EDT, а не в Конфигураторе?
1C:EDT умеет отлаживать встроенный язык, но внешние обработки .epf чаще держат и правят в Конфигураторе — там цикл «открыл файл — поставил точку — запустил» короче.
Почему точки останова перестали срабатывать после правки кода?
Выполняется старая версия обработки. Пересохраните .epf и заново откройте его в сеансе 1С:Предприятия — тогда отладчик свяжет точки с актуальным кодом.
Чем отличается отладка внешнего отчёта от внешней обработки?
Ничем по механике. Внешний отчёт (.erf) открывается и отлаживается тем же способом: точки останова в его модулях, запуск в сеансе, подключение к предмету отладки.
Безопасно ли отлаживать на рабочей базе?
Нет. Остановка на точке замораживает сеанс и держит блокировки, мешая другим. Для отладки разворачивайте копию базы.