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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Выясняем причину: почему точки останова «молчат»

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

  1. На сервере приложений 1С отключен режим отладки. По умолчанию сервер 1С:Предприятие запускается без ключа отладки. Если код обработки выполняется в серверном контексте (например, в модуле объекта обработки, в серверных функциях формы или в фоновом задании), Конфигуратор физически не сможет получить сигнал от сервера без активированного отладочного режима.
  2. Специфика работы БСП с дополнительными обработками. Когда мы запускаем внешнюю обработку через справочник БСП «Дополнительные отчеты и обработки», система считывает двоичные данные файла из базы данных, сохраняет их во временный файл во временном каталоге сервера или помещает во временное хранилище и запускает «из памяти». В этот момент файл .epf, открытый у нас в Конфигураторе, никак не связан с тем кодом, который фактически исполняется на сервере. Конфигуратор просто «не знает», что исполняемый на сервере временный файл — это наш исходник.
  3. Проблемы сетевой доступности (TCP-транспорт). При использовании классической TCP-отладки сервер 1С должен сам инициировать сетевое подключение к порту компьютера разработчика. Если компьютер разработчика находится за NAT, роутером или защищен брандмауэром, сервер не сможет достучаться до Конфигуратора, и отладка работать не будет.

---

Решение 1. Штатный механизм БСП «Настройка отладки»

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

Разберем по шагам, как его использовать:

  1. Откроем информационную базу в режиме «1С:Предприятие» под правами администратора.
  2. Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.
  3. В форме списка справочника обратим внимание на верхнюю командную панель. Там присутствует кнопка Настройка отладки (в некоторых версиях БСП она может находиться в меню «Еще»).
  4. В открывшемся окне настройки укажем конкретную внешнюю обработку и пропишем путь к ее файлу .epf на локальном диске или в сетевом каталоге, который доступен серверу приложений 1С.

После выполнения этой настройки БСП при вызове обработки будет брать код не из хранилища значений в СУБД, а напрямую считывать файл по указанному пути. В результате этого точки останова в вашем Конфигураторе начнут стабильно срабатывать.

---

Решение 2. Использование параметра запуска «РежимОтладки»

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

Рассмотрим подробнее этот способ:

  1. Закроем клиентский сеанс «1С:Предприятие».
  2. В окне запуска 1С выделим нашу информационную базу, нажмем кнопку Изменить, перейдем на последнюю страницу настроек и в поле Дополнительные параметры запуска вставим следующую строку:

/C РежимОтладки

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

---

Решение 3. Локальная отладка в файловой копии базы данных

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

Выполним следующие действия:

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

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

---

Решение 4. Включение режима отладки на сервере 1С

Если у вас есть доступ к серверу приложений (например, это тестовый сервер или сервер разработки) и вы хотите настроить полноценную серверную отладку, разберем, как правильно включить параметр -debug для операционных систем Windows и Linux.

Для операционной системы Windows:

  1. Откроем редактор реестра (команда regedit в строке «Выполнить»).
  2. Перейдем по следующему пути (ветка реестра зависит от разрядности платформы, ниже указан путь для 64-битной версии):

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (x86-64)
  1. Найдем параметр ImagePath. Его значение выглядит примерно так:

"C:\Program Files\1cv8\8.3.22.1709\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
  1. Отредактируем этот параметр, добавив в самый конец ключ -debug через пробел:

"C:\Program Files\1cv8\8.3.22.1709\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
  1. Откроем оснастку «Службы» (services.msc), найдем службу Агент сервера 1С:Предприятия 8.3 и перезапустим ее.

Для операционной системы Linux (на примере systemd):

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

  1. Подключимся к серверу по SSH под учетной записью с правами суперпользователя (root).
  2. Откроем на редактирование unit-файл службы сервера 1С. Путь к файлу зависит от установленной версии платформы. Например:

nano /opt/1cv8/x86_64/8.3.22.1709/srv1cv8-8.3.22.1709@.service

  1. Найдем секцию [Service] и добавим (или раскомментируем, если она уже есть) строку с переменной окружения SRV1CV8_DEBUG:

[Service]
...
Environment=SRV1CV8_DEBUG=-debug
...
  1. Сохраним изменения в файле (в редакторе nano это делается комбинацией клавиш Ctrl+O, затем Enter, выход — Ctrl+X).
  2. Выполним обновление конфигурации системных служб systemd:

systemctl daemon-reload

  1. Перезапустим службу сервера 1С:

systemctl restart srv1cv8-8.3.22.1709@default.service ---

Решение 5. Переход на HTTP-отладку

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

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

Для активации HTTP-отладки на сервере приложений вместо ключа -debug прописывается ключ -http. На стороне Конфигуратора в меню Сервис — Параметры — Запуск 1С:Предприятия — Отладка необходимо переключить способ отладки на HTTP и указать адрес сервера отладки.

---

Решение 6. Запуск параллельной службы сервера 1С на альтернативных портах

Это продвинутый метод для тех случаев, когда перезапускать основную службу сервера на боевой базе нельзя, но у вас есть доступ к самому серверу и СУБД (например, PostgreSQL), и вам критически важно отладить код именно на реальных данных.

Мы можем поднять на том же физическом сервере вторую службу сервера 1С (того же релиза платформы), но настроить ее на другие порты работы (например, порты управления 2540 и 2541 вместо стандартных 1540 и 1541).

Алгоритм действий выглядит следующим образом:

  1. Регистрируем новую службу сервера 1С в операционной системе, указав новые сетевые порты и обязательно добавив ключ -debug.
  2. В консоли администрирования этого нового «тестового» кластера регистрируем нашу рабочую базу данных, обращаясь к той же СУБД PostgreSQL.
  3. Подключаемся к базе через Конфигуратор, указав в адресе новый порт (например, ServerName:2541).
  4. Спокойно используем точки останова и отлаживаем код. Основные пользователи при этом продолжают работать в штатном режиме через стандартные порты, их сеансы никак не затрагиваются, а производительность основной службы не падает.

---

Решение 7. Динамическое исполнение кода и логирование ("Метод гусара")

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

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


// Пример вывода информации пользователю
Сообщить("Значение переменной СуммаДокумента = " + ТекущийДокумент.СуммаДокумента);

// Пример безопасной записи в Журнал регистрации для анализа на сервере
ЗаписьЖурналаРегистрации(
    "ОтладкаВнешнейОбработки",
    УровеньЖурналаРегистрации.Информация,
    ,
    ,
    "Текущий статус обработки контрагента: " + КонтрагентСсылка.Наименование
);

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

← На главную