Разработка внешних обработок в среде 1С:Предприятие 8.3 — это стандартная задача для расширения функционала типовых конфигураций, таких как «Бухгалтерия предприятия 3.0». Однако программисты часто сталкиваются с проблемой: точка остановки, поставленная в модуле внешней обработки, не срабатывает при запуске через механизм «Дополнительные отчеты и обработки». Это происходит потому, что система динамически сохраняет файл обработки во временное хранилище, и конфигуратор «теряет» связь между открытым у вас файлом .epf и тем кодом, который фактически исполняется в сеансе.
В этой статье мы разберем несколько эффективных способов, которые позволят вам проанализировать содержимое переменных (например, массив выделенных документов ПараметрыКоманды) и успешно выполнить отладку кода.
Проанализируем ситуацию: если конфигуратор не хочет останавливаться на коде внутри внешнего файла, мы можем заставить его остановиться в коде, который гарантированно прописан в конфигурации. Рассмотрим этот метод подробнее. Суть заключается в том, чтобы вызвать любую доступную процедуру или функцию из общего модуля конфигурации, в которой мы предварительно установим точку остановки.
Выберем какой-нибудь общий модуль, который редко меняется или просто поставляется в типовой конфигурации. Например, для «Бухгалтерии 3.0» можно использовать модули подсистемы зарплаты или любые другие доступные. В коде вашей внешней обработки (например, в процедуре ВыполнитьКоманду) добавим временную строку:
// Временный вызов для входа в режим отладки
ЗарплатаИКадры.ИспользоватьСтатьиФинансированияЗарплата();
Пошаговый алгоритм действий:
ЗарплатаИКадры.ИспользоватьСтатьиФинансированияЗарплата и поставим внутри нее точку остановки.Разберем еще один надежный метод. Часто обработка пишется для работы с параметрами, которые передает БСП (Библиотека стандартных подсистем) — это структура ПараметрыВыполненияКоманды. При открытии через «Файл — Открыть» эти параметры не заполняются, что вызывает ошибки. Чтобы обойти это, создадим в обработке вспомогательную форму.
Рассмотрим процесс реализации:
ФормаОтладки).ДокументСсылка (или список значений, если нужно имитировать выбор нескольких документов).Пример кода в модуле формы отладки:
&НаКлиенте
Процедура ЗапуститьОтладку(Команда)
ПараметрыКоманды = Новый Массив;
ПараметрыКоманды.Добавить(Объект.ДокументСсылка);
// Эмулируем структуру, которую передает БСП
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ДополнительнаяОбработкаСсылка", ПредопределенноеЗначение("Справочник.ДополнительныеОтчетыИОбработки.ПустаяСсылка"));
// Вызываем серверный метод обработки
ВыполнитьДействиеНаСервере(ПараметрыКоманды);
КонецПроцедуры
Теперь мы можем просто открывать обработку через меню Файл — Открыть, выбирать нужный документ прямо на форме и спокойно отлаживать код — в этом режиме точки остановки в модуле формы и модуле объекта будут срабатывать стандартным образом.
Если проект сложный и отладка требуется длительная, наиболее стабильным решением будет временное добавление обработки в дерево метаданных. Выясним, почему это удобно: в этом случае объект становится полноправной частью конфигурации, и механизм отладки работает безупречно без дополнительных ухищрений.
Посмотрим на шаги:
.epf.Проанализируем ситуацию, когда у нас нет возможности менять настройки сервера (например, включить -debug на боевом сервере) или мы не хотим создавать формы. Мы можем использовать метод «грубой силы» — принудительный вызов ошибки.
Вставьте в нужном месте кода следующую строку:
ВызватьИсключение "Стоп: проверка параметров!";
При выполнении этого кода программа выдаст окно с ошибкой. Нажав кнопку «Подробно», вы увидите стек вызовов. Если у вас открыт конфигуратор с этим кодом, система позволит перейти к строке, вызвавшей исключение. Хотя это не полноценная точка остановки, это позволяет увидеть состояние базы на момент падения и проанализировать стек.
Часто проблема кроется не в коде, а в настройках окружения. Если ваша обработка выполняет действия на стороне сервера (а в управляемых формах &НаСервере — это стандарт), точки остановки не будут работать, если сервер 1С запущен без режима отладки.
Проверим настройки:
-debug.Для быстрой проверки небольших алгоритмов лучше всего подходит Способ 1 (вызов общего модуля). Если же вы разрабатываете сложную логику взаимодействия с выделенными документами в форме списка, рекомендуем потратить время на Способ 2 (создание формы отладки) — это сэкономит вам часы времени в будущем, так как позволит тестировать обработку мгновенно, не загружая её каждый раз в справочник «Дополнительные отчеты и обработки».