Как отладить внешнюю печатную форму в 1С 8.3 на БСП, если не работают точки останова

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

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

Выясняем причину: почему не работает стандартная отладка?

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

Теперь при вызове внешней печатной формы система считывает двоичные данные обработки из справочника ДополнительныеОтчетыИОбработки, помещает их во временное хранилище и подключает форму методом ВнешниеОбработки.Подключить(АдресВоВременномХранилище, ...). Исполняемый код компилируется непосредственно в оперативной памяти и больше никак не связан с физическим файлом .epf, который вы редактируете в конфигураторе. Соответственно, конфигуратор просто «не видит» связи между открытым у вас файлом и кодом, который выполняется на сервере 1С.

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

Способ 1. Метод «перенаправления» (подмены) кода на лету

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

Разберем этот метод по шагам:

  1. Создадим копию вашей разрабатываемой печатной формы и назовем ее, например, ИмяОбработки_Отладчик.epf.
  2. Зарегистрируем этот файл-отладчик в справочнике «Дополнительные отчеты и обработки» в вашей информационной базе.
  3. В модуле объекта файла-отладчика найдем экспортную процедуру Печать и полностью заменим ее содержимое кодом перенаправления на ваш рабочий локальный файл:

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

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

Способ 2. Создание тестовой формы внутри ВПФ для запуска через «Файл -> Открыть»

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

Рассмотрим по шагам процесс реализации:

  1. Добавим во внешнюю обработку новую управляемую форму и назначим ее основной формой обработки.
  2. На созданной форме разместим реквизит СсылкаНаОбъект с типом документа (например, ДокументСсылка.РеализацияТоваровУслуг), печать которого мы отлаживаем.
  3. Добавим на форму кнопку «Выполнить печать» и свяжем ее со следующим кодом на сервере:

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

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

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

Если вы регулярно занимаетесь разработкой дополнительных отчетов и обработок, наиболее системным решением будет использование специальных расширений конфигурации. В сообществе разработчиков 1С популярны готовые инструменты (например, расширения на базе Инструментов Разработчика или профильные решения с открытым исходным кодом).

Проанализируем принцип работы таких расширений:

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

Способ 4. Трюк с принудительной ошибкой (Остановка по ошибке)

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

Сделаем это следующим образом:

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

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

Способ 5. Временное изменение общего модуля БСП в тестовой базе

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

Выясним, где именно происходят эти вызовы, и внесем изменения:

  1. Найдем общий модуль ДополнительныеОтчетыИОбработки.
  2. В функции ПодключитьВнешнююОбработку(Ссылка) найдем строку подключения:

// Оригинальный код БСП:
ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , БезопасныйРежим);
  1. Заменим ее на прямое создание объекта из локального файла на диске:

// Временный код для отладки:
ИмяОбработки = Менеджер.Создать("C:\Debug\ИмяОбработки.epf", Ложь);

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

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

← На главную