Как настроить отладку серверного кода во внешних и дополнительных обработках 1С 8.3?

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

Разработка дополнительных отчетов и обработок в среде 1С:Предприятие 8.3 — стандартная задача для любого программиста. Однако на этапе тестирования многие начинающие специалисты сталкиваются с крайне неприятной проблемой: отладчик в Конфигураторе упорно отказывается заходить в процедуры и функции, выполняемые под директивой &НаСервере. Точки останова в серверном коде остаются "пустыми", а выполнение программы проходит мимо них, даже если мы открываем обработку напрямую через меню "Файл — Открыть".

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

Выясняем причину: почему отладчик игнорирует серверный код?

Для начала разберем типичную ошибку, которую совершают многие разработчики. Прописав параметр запуска -debug в ярлыке клиентского приложения 1С на своей рабочей станции, мы включаем отладку только для клиентского сеанса. Это позволяет нам отлаживать код, исполняемый непосредственно на компьютере пользователя (под директивой &НаКлиенте).

Однако в клиент-серверном варианте работы базы данных вся логика, помеченная как &НаСервере, отправляется на выполнение серверу приложений 1С. Если сам сервер 1С запущен в обычном (не отладочном) режиме, он ничего "не знает" о точках останова в вашем Конфигураторе. В результате серверный код выполняется, но отладчик не может перехватить этот процесс. Чтобы исправить это, нам необходимо принудительно запустить службу сервера 1С с разрешением на отладку.

Шаг 1. Включение режима отладки на сервере 1С под управлением Windows

Рассмотрим стандартный сценарий, когда сервер приложений 1С функционирует под управлением операционной системы Windows в качестве системной службы. Для включения отладки нам понадобятся права администратора на сервере.

  1. Откроем оснастку "Службы" (через services.msc) и найдем службу сервера 1С. Обычно она называется 1C:Enterprise 8.3 Server Agent (или аналогично, в зависимости от версии платформы). Остановим эту службу.
  2. Запустим редактор реестра Windows. Для этого нажмем комбинацию клавиш Win + R, введем команду regedit и нажмем Enter.
  3. Перейдем по следующему пути: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent... (в конце пути будет указана конкретная версия вашей платформы).
  4. Найдем параметр с именем ImagePath. Он содержит строку запуска службы. Дважды кликнем по нему для редактирования.
  5. В самом конце этой строки (после всех кавычек и путей) допишем через пробел параметр -debug. Будьте внимательны: не удаляйте существующие параметры, просто добавьте ключ в конец строки.
  6. Закроем редактор реестра и запустим службу сервера 1С обратно.

После проведения этих манипуляций сервер 1С начнет транслировать отладочную информацию, и Конфигуратор сможет перехватывать серверные процедуры.

Шаг 2. Настройка отладки на сервере 1С под управлением Linux

Если сервер приложений 1С развернут на операционной системе семейства Linux, процесс настройки выглядит иначе. Здесь параметры работы службы определяются в конфигурационном файле.

  1. Подключимся к серверу по SSH и откроем конфигурационный файл службы. В зависимости от дистрибутива Linux и версии платформы, этот файл обычно располагается по пути /etc/sysconfig/srv1cv83 или /etc/default/srv1cv83.
  2. Найдем в файле переменную SRV1CV8_DEBUG.
  3. Установим ее значение в единицу: SRV1CV8_DEBUG=1 (в некоторых версиях может потребоваться написать SRV1CV8_DEBUG=true).
  4. Если используется современная systemd-служба, настройки могут находиться в файле юнита. В таком случае добавим параметр в секцию окружения.
  5. Выполним перезапуск службы сервера 1С с помощью команды: systemctl restart srv1cv83 (или соответствующей команды для вашего дистрибутива).

Шаг 3. Специфика работы с Библиотекой Стандартных Подсистем (БСП)

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

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

Для решения этой проблемы мы можем использовать несколько эффективных приемов.

Метод А: Использование встроенного режима отладки БСП

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

  1. Откроем в режиме "1С:Предприятие" справочник ДополнительныеОтчетыИОбработки.
  2. Найдем нашу обработку и переведем ее публикацию в статус "Режим отладки" (или "Отключена", но с доступом для администраторов — точное название зависит от версии БСП).
  3. Откроем Конфигуратор и просто откроем наш рабочий файл обработки через "Файл — Открыть".
  4. Поскольку файл открыт напрямую с диска, точки останова на сервере начнут успешно срабатывать при вызове методов этой обработки из интерфейса программы.

Метод Б: Написание внешней обработки-стартера

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


&НаСервере
Процедура ЗапуститьОбработкуНаСервере()
    
    // Отключаем предупреждения безопасности для удобства разработки
    ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
    ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;
    
    // Путь к файлу обработки на диске, обязательно доступный серверу 1С!
    ПутьКФайлу = "C:\Development\MyExternalProcessing.epf"; 
    
    // Подключаем внешнюю обработку напрямую
    ИмяОбработки = ВнешниеОбработки.Подключить(ПутьКФайлу, , Ложь, ОписаниеЗащиты);
    ОбъектОбработки = ВнешниеОбработки.Создать(ИмяОбработки, Ложь);
    
    // Вызываем нужный экспортный метод модуля объекта для отладки
    ОбъектОбработки.ВыполнитьПолезнуюРаботуНаСервере();
    
КонецПроцедуры

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

Шаг 4. Настройка отладки фоновых заданий

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

Настроим автоматическое подключение к фоновым заданиям:

  1. В Конфигураторе перейдем в меню Отладка — Подключение...
  2. В открывшемся окне найдем и нажмем кнопку Автоподключение.
  3. В появившемся списке установим флажок напротив пункта Фоновые задания.
  4. Нажмем кнопку ОК для сохранения настроек.

Теперь при запуске фонового процесса сервер передаст управление отладчику, и мы сможем пошагово отследить выполнение алгоритма внутри фонового задания.

Альтернативный вариант: Использование файловой базы

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

← На главную