Разработка и отладка расширений в системе 1С:Предприятие 8.3 — это процесс, который часто сопровождается трудностями технического характера. Одной из наиболее распространенных и раздражающих проблем является ситуация, когда программист устанавливает точку останова в модуле расширения, точно знает, что код выполняется (например, по возникающим ошибкам или изменениям в данных), но конфигуратор упорно игнорирует остановку. Рассмотрим детально, почему это происходит, особенно в контексте файловых баз данных и режима Толстый клиент, и разберем пошаговый алгоритм решения этой задачи.
Проанализируем ситуацию, описанную разработчиком. Исходные данные: файловая база, запуск в режиме Толстый клиент, используется расширение. Программист видит, что при выполнении кода возникает ошибка (например, при сложении строки и числа), но при попытке интерактивной отладки точка останова не срабатывает. Выясним причину такого поведения системы. В 1С код может исполняться в разных контекстах. Даже если вы запустили клиентское приложение, определенные процедуры могут инициироваться как Фоновые задания. В файловом варианте работы это означает, что для выполнения задания создается отдельный процесс, к которому конфигуратор по умолчанию не подключен.
Прежде чем переходить к сложным настройкам отладки, проверим, действительно ли расширение успешно подключено к информационной базе. Разберем, как это сделать правильно:
1С:Предприятие необходимо открыть журнал и отфильтровать события по событиям расширений. Если в списке есть ошибки подключения, точка останова не сработает, так как код расширения попросту не подменяет основной код.&Вместо, &Перед или &После не сработали, и расширение не перехватило управление.Как показывает практика, в большинстве случаев «невидимость» кода для отладчика связана с тем, что выполнение уходит в фоновый поток. В файловой базе фоновые задания работают специфично. Для того чтобы конфигуратор мог «поймать» выполнение кода в этом режиме, выполним следующие действия:
Рассмотрим настройку параметров отладки. В меню конфигуратора перейдем в Отладка — Подключение. В открывшемся окне нажмем кнопку Настройка. Здесь критически важно установить флажок Автоматически подключать фоновые задания. Без этой опции каждый новый процесс фонового задания будет игнорироваться отладчиком.
Также проверим программную установку режима отладки. В некоторых случаях полезно принудительно включить отладку фоновых заданий через код, если стандартные средства не помогают. Посмотрим на пример кода, который можно выполнить в консоли кода или в обработке:
// Включаем режим отладки фоновых заданий для текущей базы
УстановитьРежимОтладкиФоновыхЗаданий(Истина);
Этот метод гарантирует, что система будет ожидать подключения отладчика при запуске фоновых процессов.
Выясним причину нестабильной работы точек останова, связанную с сетевыми протоколами. Современные версии платформы 8.3 поддерживают отладку по протоколу HTTP. Он является более надежным по сравнению со старым TCP (dbgs), особенно при работе с расширениями и фоновыми процессами.
Проанализируем ситуацию: если отладчик часто «теряет» сеанс, попробуем переключить базу на HTTP-отладку. Для файловой базы это настраивается в параметрах запуска: в окне запуска 1С (список баз) нажмем Изменить — Далее — Далее и в поле Дополнительные параметры запуска добавим:
/clite /debug -http
Это заставит систему использовать отладочный сервер на базе протокола HTTP, который лучше справляется с динамическим подключением расширений.
Разберем еще один неочевидный фактор. Расширения по умолчанию часто подключаются в Безопасном режиме. В этом режиме отладка может быть ограничена или блокирована платформой.
Рассмотрим, как это исправить:
После этого необходимо перезапустить сеанс. Часто именно эти настройки безопасности препятствуют корректной работе отладчика с кодом расширения.
Если точка останова по-прежнему не срабатывает, но код расширения точно выполняется (как в случае автора темы, где возникала ошибка сложения), воспользуемся встроенным механизмом платформы.
Проделаем следующие шаги:
Теперь запустим приложение. Как только выполнение дойдет до строки с ошибкой Результат = Число + Строка, 1С сама прервет выполнение и откроет конфигуратор именно на этой строке в модуле расширения. Это позволит нам убедиться, что отладчик в принципе видит этот модуль, и даст возможность исследовать значения переменных в стеке вызовов.
Рассмотрим крайний случай: когда настройки верны, фоновые задания подключены, но точки останова все равно «пролетают». Это может быть признаком «залипшего» кэша. Проанализируем, как 1С хранит информацию об отладке. Конфигуратор кэширует соответствие строк исходного кода и исполняемого байт-кода. Если вы активно меняли расширение, кэш мог перестать соответствовать реальности.
Для решения этой проблемы рекомендуется:
%LocalAppData%\1C\1cv8 и %AppData%\1C\1cv8.Для успешной отладки расширения в файловой базе мы должны обеспечить выполнение трех условий: активное подключение сеанса, включенная отладка фоновых заданий и отсутствие ограничений безопасности. Если вы используете аннотацию &Вместо, всегда проверяйте, правильно ли указано имя расширяемой процедуры. В коде это выглядит примерно так:
&Вместо("РассчитатьНалог")
Процедура Мой_РассчитатьНалог(Параметры)
// Установите точку останова здесь
Результат = 100 + "рублей"; // Здесь произойдет ошибка
ПродолжитьВызов(Параметры);
КонецПроцедуры
Используя приведенные выше инструкции, вы сможете быстро локализовать проблему и вернуть контроль над процессом разработки в 1С. Для автоматизации повторных запусков и подготовки среды при циклической отладке можно использовать инструмент для автоматизации сценариев отладки.