Как отлаживать внешние печатные формы, отчеты и обработки в 1С:Предприятии 8.3?

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

Разберем одну из самых частых и раздражающих проблем, с которой сталкиваются разработчики при переходе на управляемые формы и Библиотеку Стандартных Подсистем (БСП). Это «пролетание» точек останова при попытке отладить внешнюю печатную форму (ВПФ) или обработку. Вы ставите точку останова в модуле объекта, запускаете печать в режиме «1С:Предприятие», но код выполняется, документ выводится на экран, а конфигуратор даже не думает останавливаться. Выясним причину этой проблемы и подробно рассмотрим самые эффективные способы её решения.

Почему точки останова не работают во внешних обработках БСП?

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

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

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

---

Предварительная настройка платформы и сервера

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

Шаг 1. Включение отладки на сервере 1С. Если вы работаете в клиент-серверном варианте (SQL), служба сервера «1С:Предприятия» должна быть запущена с параметром отладки. Проверить это можно в реестре Windows (для службы 1C:Enterprise 8.3 Server Agent в пути запуска должен присутствовать ключ -debug). Без этого ключа никакой серверный код отладить не удастся.

Шаг 2. Настройка автоматического подключения в Конфигураторе. Откроем Конфигуратор, перейдем в меню Отладка -> Подключение. Нажмем кнопку Автоматическое подключение и установим флажки напротив пунктов Клиентские и внешние соединения, а также Фоновые задания. Это критически важно, так как фоновые задания часто используются БСП для генерации печатных форм.

Шаг 3. Отключение защиты от опасных действий. Платформа 1С блокирует выполнение внешнего кода без подтверждения пользователя. Чтобы избежать постоянных предупреждений, откроем свойства вашего пользователя в конфигураторе (меню Администрирование -> Пользователи) и снимем флажок Защита от опасных действий.

---

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

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

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

Выполним следующие шаги:

  1. Создадим копию вашей печатной формы на диске по фиксированному пути, например: C:\Debug\MyPrintForm.epf. Именно этот файл мы откроем в Конфигураторе для расстановки точек останова.
  2. В оригинальной обработке, которую мы будем загружать в справочник дополнительных обработок базы данных, полностью очистим или заменим код в процедуре Печать на следующий вызов:

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПутьКФайлу = "C:\Debug\MyPrintForm.epf"; // Путь к вашей копии на диске
    ФайлОтладки = ВнешниеОбработки.Create(ПутьКФайлу, Ложь); 
    ФайлОтладки.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
    
КонецПроцедуры

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

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

---

Способ 2. Эмуляция среды БСП через тестовую форму

Этот классический метод отлично подходит, если вы хотите иметь полностью автономную обработку, которую можно открыть через меню Файл -> Открыть в режиме «1С:Предприятие».

Посмотрим на пример реализации тестовой формы внутри самой ВПФ. Создадим основную форму обработки и добавим на нее один реквизит СсылкаНаДокумент с типом ссылки на документ, который мы хотим напечатать, а также кнопку «Сформировать».

Напишем обработчик команды для этой кнопки на клиенте:


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

Теперь проанализируем серверную часть. Нам нужно сымитировать поведение БСП, подготовив необходимые таблицы и коллекции параметров:


&НаСервере
Функция ПолучитьПечатнуюФормуНаСервере(ОбъектыПечати)
    
    // Преобразуем реквизит формы обратно в объект внешней обработки
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    
    МассивОбъектов = Новый Массив;
    МассивОбъектов.Добавить(ОбъектыПечати[0].Значение);
    
    // Эмулируем коллекции БСП
    ИдентификаторКоманды = "ИдентификаторВашейКоманды"; // Как в СведенияОВнешнейОбработке
    КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ИдентификаторКоманды);
    ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
    
    // Вызываем процедуру Печать внешней обработки
    ОбработкаОбъект.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
    
    Результат = Новый Структура;
    Результат.Вставить("МассивПечатныхФорм", ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм));
    
    Возврат Результат;
    
КонецФункции

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

---

Способ 3. Перехват через принудительную ошибку (Метод «Остановка по ошибке»)

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

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

  1. В процедуре Печать() вашей внешней печатной формы в самом начале или перед проблемным участком вставим следующий код:

Попытка
    ВызватьИсключение "Начало отладки";
Исключение
    // Сюда мы попадем при ошибке
КонецПопытки;
  1. В Конфигураторе перейдем в меню Отладка -> Остановка по ошибке.... Нажмем кнопку Добавить и выберем системное действие или просто установим флажок Останавливаться по ошибке.
  2. Запустим печать документа в режиме предприятия. Платформа дойдет до оператора ВызватьИсключение, сгенерирует штатную ошибку, и Конфигуратор тут же перехватит управление. Вы окажетесь в открывшемся временном файле прямо на строчке внутри блока Исключение.
  3. Теперь вы можете свободно расставлять новые точки останова ниже по коду этого временного файла и пошагово проходить алгоритм клавишей F10/F11.

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

---

Способ 4. Использование механизма расширений (Для платформы 1С 8.3)

Современные версии платформы предоставляют разработчикам еще один элегантный способ отладки внешних объектов без изменения их структуры — через расширения конфигурации.

Рассмотрим этот алгоритм по шагам:

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

---

Резюме и рекомендации

Мы подробно разобрали четыре основных подхода к отладке внешних печатных форм в среде 1С:Предприятие 8.3 БСП. Выбор конкретного метода зависит от ваших текущих задач:

← На главную