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

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

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

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

Почему конфигуратор «не видит» точки останова? (Техническая суть проблемы)

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

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

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

Поскольку конфигуратор пытается сопоставить локальный файл обработки (например, лежащий у вас на рабочем столе) с исполняемым кодом, а платформа выполняет объект из временной памяти, отладчик не может связать эти два объекта. Для него это абсолютно разные программные модули, поэтому точки останова в вашем локальном файле не срабатывают.

Ниже мы подробно разберем по шагам, как обойти это ограничение и настроить полноценную отладку.

Способ 1. Использование механизма Расширений (Рекомендуемый и самый удобный метод)

Чтобы заставить БСП запускать именно ваш локальный файл с диска (в котором расставлены точки останова), мы можем временно перехватить процедуру подключения внешней обработки с помощью небольшого расширения. Этот способ хорош тем, что нам не нужно снимать основную конфигурацию с поддержки.

Выполним следующие шаги для настройки:

  1. Создадим новое расширение конфигурации (меню Конфигурация -> Расширения конфигураций -> Добавить).
  2. Найдем в основной конфигурации общий модуль ДополнительныеОтчетыИОбработки.
  3. Перенесем в наше расширение функцию ПодключитьВнешнююОбработку (или аналогичную функцию, отвечающую за подключение, в зависимости от версии БСП) и применим к ней аннотацию &Вместо.
  4. Модифицируем код в расширении так, чтобы вместо подключения из хранилища система создавала объект напрямую из файла на вашем жестком диске.

Посмотрим на пример переопределения функции в расширении:


&Вместо("ПодключитьВнешнююОбработку")
Функция Мой_ПодключитьВнешнююОбработку(СсылкаИлиДанные, ПутьКФайлу = "") Экспорт
    
    // Вместо стандартного получения данных из справочника БСП
    // мы жестко прописываем путь к нашей локальной обработке на диске
    ИмяФайлаНаДиске = "C:\Debug\MyExternalProcessing.epf"; 
    
    // Подключаем внешнюю обработку напрямую из файла без использования безопасного режима
    ИмяОбработки = ВнешниеОбработки.Подключить(ИмяФайлаНаДиске, , Ложь);
    
    Возврат ИмяОбработки;
    
КонецФункции

После этого вам достаточно открыть файл C:\Debug\MyExternalProcessing.epf в конфигураторе, расставить нужные точки останова в модуле формы или модуля объекта и запустить отладку. При выполнении команды в режиме Предприятия БСП обратится к файлу на диске, и отладчик мгновенно сработает на ваших точках останова. Более того, вы сможете редактировать код обработки в конфигураторе, сохранять его, и изменения будут сразу применяться без необходимости перезапускать сеанс 1С.

Способ 2. Остановка по ошибке («Деление на ноль»)

Это классический «партизанский» метод отладки, который упоминали участники форума. Он выручает, когда нет возможности быстро создать расширение или изменить код общего модуля. Суть метода заключается в принудительном вызове исключения в коде внешней обработки.

Разберем по шагам, как это реализовать:

  1. В самом начале интересующей вас процедуры (например, в обработчике команды ВыполнитьКоманду) добавьте заведомо ошибочный код внутри блока обработки исключений:
    
    Попытка
        ЧислоНоль = 0;
        ВызватьОшибку = 1 / ЧислоНоль;
    Исключение
        // Пустой блок, чтобы программа не упала с критической ошибкой для пользователя
    КонецПопытки;
    
  2. Сохраните обработку и обновите ее в справочнике «Дополнительные отчеты и обработки».
  3. В конфигураторе перейдите в меню Отладка -> Настройка отладки при возникновении ошибки....
  4. В открывшемся окне установите флаг «Останавливаться по ошибке». Убедитесь, что галочка «Игнорировать ошибки в попытке» выключена (поскольку наша ошибка обернута в блок Попытка...Исключение).
  5. Запустите выполнение обработки в режиме Предприятия.

При выполнении строки деления на ноль платформа сгенерирует внутреннее исключение. Так как в конфигураторе включена остановка по ошибке, система автоматически приостановит работу сеанса и откроет временную копию модуля обработки прямо на строке с ошибкой. Отсюда вы сможете продолжить пошаговую отладку (клавишей F10 или F11) и просматривать значения переменных на панели вычислений.

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

Способ 3. Проверка параметров выполнения на сервере (Режим отладки сервера)

Очень часто методы внешних обработок выполняются на стороне сервера приложений 1С:Предприятия. Если ваша база работает в клиент-серверном варианте (SQL), то по умолчанию отладка серверных вызовов может быть отключена на самом сервере 1С.

Выясним, как проверить и включить серверную отладку:

  1. Откройте консоль служб Windows на сервере приложений 1С (команда services.msc).
  2. Найдите службу «Агент сервера 1С:Предприятия 8.3».
  3. Посмотрите на путь к исполняемому файлу в свойствах службы. Там обязательно должен присутствовать ключ -debug.
  4. Если ключа нет, необходимо остановить службу, отредактировать реестр Windows (ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3...) и добавить параметр -debug в строку запуска службы. После этого запустите службу заново.
  5. В конфигураторе откройте меню Отладка -> Подключение... и убедитесь, что в списке «Доступные предметы отладки» отображается ваш серверный сеанс, и он находится в списке подключенных.

Способ 4. Отключение безопасного режима

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

Если в модуле объекта вашей обработки в функции СведенияОВнешнейОбработке указано:

ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);

Этого может быть недостаточно! Администратор системы при регистрации обработки в режиме Предприятия мог вручную взвести флаг безопасного режима в карточке элемента справочника «Дополнительные отчеты и обработки».

Проанализируем необходимые действия в интерфейсе программы:

  1. Перейдите в раздел администрирования дополнительных обработок.
  2. Откройте карточку вашей обработки.
  3. Убедитесь, что тумблер безопасного режима находится в положении Выключен (или предоставлены необходимые разрешения безопасности).
  4. Переведите режим публикации обработки в значение «Отладка». В этом режиме функционал будет доступен только пользователям с правами администратора, что позволит вам спокойно тестировать код, не мешая рядовым пользователям системы.

Способ 5. Отладка фоновых заданий через параметры запуска

Современная БСП часто запускает серверный код внешних обработок асинхронно в фоновых заданиях, чтобы пользовательский интерфейс не «зависал» во время длительных расчетов. По умолчанию отладчик не переходит в фоновые задания автоматически.

Чтобы решить эту проблему, мы можем настроить конфигуратор так, чтобы все фоновые вызовы выполнялись синхронно в рамках текущего сеанса отладки:

  1. В конфигураторе откройте меню Сервис -> Параметры.
  2. Перейдите на вкладку Запуск 1С:Предприятия -> Основные.
  3. В поле «Параметры запуска» пропишите команду: РежимОтладки (в зависимости от версии платформы может потребоваться формат /C РежимОтладки или /РежимОтладки для платформы 8.3.25 и выше).
  4. Нажмите кнопку «Применить».

Этот параметр заставляет БСП выполнять все алгоритмы обработки в основном потоке клиентского приложения. Это существенно упрощает отладку, позволяя легко проходить по шагам любые серверные процедуры и функции. Для таких сценариев также подойдёт инструмент для отладки внешних печатных форм и обработок.

← На главную