При разработке в среде 1С:Предприятие программисты часто сталкиваются с ситуацией, когда точка останова, установленная в серверном общем модуле, игнорируется системой. Особенно часто это происходит при работе с типовыми конфигурациями, такими как Управление торговлей 11, где многие процессы (например, обмен с сайтом) вынесены в фоновые задания. В данной статье мы подробно разберем, как заставить отладчик останавливаться в нужном месте, проанализируем настройки подключения и рассмотрим альтернативные методы отладки.
Для начала разберем причину проблемы. В файловом варианте базы данных 1С, несмотря на отсутствие физического сервера приложений, существует разделение контекстов выполнения на клиентский и серверный. Когда вы запускаете обмен или сложный расчет, система может порождать отдельный сеанс — фоновое задание. Отладчик, запущенный в вашем основном сеансе, по умолчанию «не знает» о существовании параллельного процесса, в котором исполняется серверный код. Рассмотрим, как это исправить.
Это самый важный этап. Чтобы отладчик автоматически «подцеплял» новые процессы, создаваемые системой, необходимо выполнить следующие действия в Конфигураторе:
Теперь, когда выполнение кода дойдет до метода ФоновыеЗадания.Выполнить(), конфигуратор автоматически обнаружит новый поток и активирует точку останова в общем модуле.
Проанализируем техническую сторону вопроса. Исторически 1С использовала протокол TCP для связи отладчика и приложения. Однако в современных версиях платформы (начиная с 8.3.7) появился протокол HTTP, который работает гораздо стабильнее, особенно если на компьютере включен брандмауэр или антивирус. Рассмотрим, как включить этот режим в файловой базе:
Для активации HTTP-отладки при запуске приложения из Конфигуратора нужно изменить параметры запуска:
/debug -http.Важный момент: использование HTTP-отладки позволяет избежать «глюков», когда точка останова срабатывает через раз или сеанс отладки внезапно прерывается.
Если фоновое задание все равно не удается поймать, мы можем применить «хитрость» разработчика. Разберем ситуацию: обмен с сайтом в УТ 11 инициируется командой, которая запускает фоновое задание. Мы можем временно изменить код, чтобы процедура выполнилась прямо в текущем сеансе.
Найдем место вызова задания, которое обычно выглядит так:
// Стандартный вызов через фоновое задание
ФоновыеЗадания.Выполнить("МойОбщийМодуль.ВыполнитьОбмен", Параметры);
Для отладки заменим его на прямой вызов процедуры:
// Временный код для отладки
МойОбщийМодуль.ВыполнитьОбмен(Параметры);
В этом случае код будет выполнен синхронно. Ваша точка останова гарантированно сработает, так как выполнение не уходит в другой сеанс. После завершения отладки не забудьте вернуть код в исходное состояние.
Иногда код обмена находится не в конфигурации, а во внешней обработке (файл .epf). Проанализируем специфику: при запуске внешней обработки из справочника «Дополнительные отчеты и обработки», система копирует её во временное хранилище на сервере. Ваша точка останова в локальном файле не сработает, так как для системы это «разные» объекты.
Чтобы решить эту проблему, рассмотрим несколько подходов:
Файл - Открыть в режиме «Предприятие». В этом случае связь между файлом и отладчиком сохраняется.Сообщить(). Если же код серверный и выполняется в фоне, используйте запись в журнал регистрации.Пример использования ЗаписьЖурналаРегистрации для отладки значений переменных:
ЗначениеДляПроверки = ПараметрыОбмена.АдресСайта;
ЗаписьЖурналаРегистрации("ОТЛАДКА_ОБМЕНА",
УровеньЖурналаРегистрации.Примечание,
,
,
"Текущий адрес сайта: " + ЗначениеДляПроверки);
В процессе обсуждения на форуме был предложен интересный скрипт на языке 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-протокола отладки повысит стабильность процесса, а временный переход на синхронный вызов процедур позволит отладить самые сложные участки кода без лишних манипуляций с настройками сеансов. Помните, что отладка — это мощный инструмент, и правильная его настройка экономит часы работы программиста.