Как отладить пошагово общий модуль на стороне сервера в 1С

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

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

Почему отладчик не видит серверный код?

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

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

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

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

Теперь, когда выполнение кода дойдет до метода ФоновыеЗадания.Выполнить(), конфигуратор автоматически обнаружит новый поток и активирует точку останова в общем модуле.

Переход на протокол HTTP-отладки

Проанализируем техническую сторону вопроса. Исторически 1С использовала протокол TCP для связи отладчика и приложения. Однако в современных версиях платформы (начиная с 8.3.7) появился протокол HTTP, который работает гораздо стабильнее, особенно если на компьютере включен брандмауэр или антивирус. Рассмотрим, как включить этот режим в файловой базе:

Для активации HTTP-отладки при запуске приложения из Конфигуратора нужно изменить параметры запуска:

  1. Зайдем в меню Сервис — Параметры.
  2. Перейдем на закладку Запуск 1С:Предприятия, далее — Дополнительные.
  3. В поле «Параметры запуска» добавим ключ: /debug -http.
  4. В настройках самого Конфигуратора (вкладка «Отладка») также выберем протокол HTTP.

Важный момент: использование HTTP-отладки позволяет избежать «глюков», когда точка останова срабатывает через раз или сеанс отладки внезапно прерывается.

Метод принудительного синхронного выполнения

Если фоновое задание все равно не удается поймать, мы можем применить «хитрость» разработчика. Разберем ситуацию: обмен с сайтом в УТ 11 инициируется командой, которая запускает фоновое задание. Мы можем временно изменить код, чтобы процедура выполнилась прямо в текущем сеансе.

Найдем место вызова задания, которое обычно выглядит так:


// Стандартный вызов через фоновое задание
ФоновыеЗадания.Выполнить("МойОбщийМодуль.ВыполнитьОбмен", Параметры);

Для отладки заменим его на прямой вызов процедуры:


// Временный код для отладки
МойОбщийМодуль.ВыполнитьОбмен(Параметры); 

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

Отладка внешних обработок на стороне сервера

Иногда код обмена находится не в конфигурации, а во внешней обработке (файл .epf). Проанализируем специфику: при запуске внешней обработки из справочника «Дополнительные отчеты и обработки», система копирует её во временное хранилище на сервере. Ваша точка останова в локальном файле не сработает, так как для системы это «разные» объекты.

Чтобы решить эту проблему, рассмотрим несколько подходов:

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

Пример использования ЗаписьЖурналаРегистрации для отладки значений переменных:


ЗначениеДляПроверки = ПараметрыОбмена.АдресСайта;
ЗаписьЖурналаРегистрации("ОТЛАДКА_ОБМЕНА", 
    УровеньЖурналаРегистрации.Примечание, 
    , 
    , 
    "Текущий адрес сайта: " + ЗначениеДляПроверки);

Автоматизация отладки внешних файлов

В процессе обсуждения на форуме был предложен интересный скрипт на языке AutoIt, который ускоряет процесс переоткрытия внешних обработок. Это полезно, когда вы вносите правки в epf-файл, сохраняете его и хотите быстро запустить его снова в 1С. Рассмотрим логику работы такого скрипта: он эмулирует нажатие клавиш Alt, Down, 1, что открывает последний файл из истории меню Файл.

Пример части скрипта для автоматизации:


Func RunLastERF()
   $hWnd = WinWait("[CLASS:V8TopLevelFrameSDI]")
   WinActivate($hWnd)
   Send("{ALT}")
   Sleep(100)
   Send("{DOWN}")
   Sleep(100)
   Send("1") // Открывает первый файл в списке последних
EndFunc

Заключение

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

← На главную