Как отладить внешнюю обработку заполнения объекта с типом команды «Открытие формы» в 1С

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

Разработчики при создании дополнительных обработок для Библиотеки Стандартных Подсистем (БСП) часто сталкиваются с проблемой: точки останова в модуле управляемой формы внешней обработки просто не срабатывают. Особенно это актуально для обработок с видом ЗаполнениеОбъекта и типом запуска ОткрытиеФормы.

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

Что передается в форму обработки при запуске через БСП

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

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Проверяем, переданы ли параметры заполнения из БСП
    Если Параметры.Свойство("ОбъектыНазначения") Тогда
        МассивОбъектов = Параметры.ОбъектыНазначения;
        Для Каждого СсылкаНаОбъект Из МассивОбъектов Цикл
            // Реализуем логику анализа или заполнения данных
        КонецЦикла;
    КонецЕсли;
    
КонецПроцедуры

Способ 1. Отладка через «Файл -> Открыть» (только для файловых баз)

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

  1. Откроем модуль внешней обработки и в функции СведенияОВнешнейОбработке() обязательно установим параметр безопасного режима в значение Ложь:
    
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    
  2. Загрузим измененный файл обработки в справочник Дополнительные отчеты и обработки в режиме «1С:Предприятие».
  3. Теперь откроем этот же файл .epf в режиме «1С:Предприятие» напрямую через главное меню Файл -> Открыть. Сразу после открытия форму обработки можно закрыть. Благодаря этому платформа поместит путь к физическому файлу в кэш сеанса.
  4. В Конфигураторе откроем наш локальный файл обработки, найдем нужную процедуру формы (например, ПриСозданииНаСервере) и установим обычную точку останова (клавиша F9).
  5. Запустим команду заполнения объекта из стандартного интерфейса программы (например, из формы документа). Платформа обратится к кэшированному локальному файлу, и отладчик мгновенно сработает в Конфигураторе!

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

Способ 2. Принудительное перенаправление вызова в коде конфигурации (для клиент-сервера)

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

  1. Откроем Конфигуратор и найдем общий модуль ДополнительныеОтчетыИОбработки.
  2. Найдем в нем функцию, отвечающую за подключение обработки. Обычно она называется ПодключитьВнешнююОбработку(Ссылка).
  3. Найдем строку, где происходит стандартное подключение обработки из двоичных данных:
    
    ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим);
    
  4. Закомментируем эту строку и временно заменим её принудительным подключением нашего локального файла с диска:
    
    // Временный код для отладки на сервере
    ИмяОбработки = Менеджер.Подключить("C:\Debug\MyExternalProcessing.epf", "DebugProcessing", Ложь);
    
    Примечание: Путь к файлу должен быть доступен серверу «1С:Предприятие», если отладка серверная. Для надежности можно использовать сетевой путь.
  5. Откроем файл C:\Debug\MyExternalProcessing.epf в Конфигураторе, расставим точки останова в модуле формы или объекта. Теперь при вызове команды система проигнорирует хранилище базы данных и выполнит код напрямую из вашего файла на диске. Отладка сработает без проблем.

Способ 3. Использование расширений для отладки

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

Принцип работы таких расширений основан на механизме аннотаций &Вместо. Расширение перехватывает управление в функции ПодключитьВнешнююОбработку общего модуля БСП. В интерфейсе расширения вы один раз указываете сопоставление: какой именно элемент справочника дополнительных обработок нужно заменить на локальный файл .epf с диска.

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

Настройки отладчика, о которых часто забывают

Даже при использовании правильных методик сопоставления файлов отладка может пройти мимо, если не настроены параметры самого Конфигуратора. Проанализируем ключевые моменты, которые нужно перепроверить перед началом работы:

← На главную