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

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

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

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

Почему не работают стандартные точки останова?

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

  1. Извлекает двоичные данные файла обработки из хранилища значений в базе данных.
  2. Записывает эти данные во временный файл на сервере под уникальным (часто случайным) именем.
  3. Подключает этот временный файл и запускает процедуру Печать.

В результате Конфигуратор видит, что исполняется код временного файла на сервере, но никак не связывает его с вашим локальным файлом проекта .epf, который открыт у вас на экране. Соответственно, точки останова игнорируются.

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

Обязательный подготовительный шаг: Включение отладки на сервере

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

  1. Откройте реестр операционной системы на сервере приложений 1С (команда regedit).
  2. Найдите ветку службы агента сервера 1С (обычно в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent...).
  3. В параметре ImagePath добавьте ключ -debug в строку запуска.
  4. Перезапустите службу сервера 1С.

Теперь среда готова. Перейдем к рассмотрению способов отладки.

Способ 1: Метод сопоставления файлов через «Файл — Открыть» (Лайфхак с форума)

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

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

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

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

Способ 2: Создание встроенной формы-отладчика

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

Разберем реализацию по шагам:

  1. В нашей внешней обработке создаем основную форму и называем ее, например, ФормаОтладки. Сделаем ее основной формой обработки.
  2. Добавим на форму реквизит СсылкаНаОбъект. Тип данных выберите в соответствии с документом, для которого предназначена печать (например, ДокументСсылка.ЗаказКлиента). Вынесем его на рабочую область формы.
  3. Добавим на форму кнопку «Выполнить печать» и создадим для нее команду.
  4. В модуле формы пропишем код вызова серверного метода, который сэмулирует поведение БСП и передаст управление в модуль объекта:
    
    &НаКлиенте
    Процедура ВыполнитьПечать(Команда)
        Если Не ЗначениеЗаполнено(Объект.СсылкаНаОбъект) Тогда
            Предупреждение("Выберите документ для отладки!");
            Возврат;
        КонецЕсли;
        
        ТабличныйДокумент = ПолучитьПечатнуюФормуНаСервере();
        ТабличныйДокумент.Показать("Печать: " + СокрЛП(Объект.СсылкаНаОбъект));
    КонецПроцедуры
    
    &НаСервере
    Функция ПолучитьПечатнуюФормуНаСервере()
        // Подготавливаем параметры для вызова процедуры Печать
        МассивОбъектов = Новый Массив;
        МассивОбъектов.Добавить(Объект.СсылкаНаОбъект);
        
        КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ВашИдентификаторКоманды");
        ОбъектыПечати = Новый СписокЗначений;
        ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
        
        // Получаем экземпляр модуля объекта обработки
        ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
        
        // Вызываем стандартный метод печати БСП
        ОбработкаОбъект.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
        
        Если КоллекцияПечатныхФорм.Количество() > 0 Тогда
            Возврат КоллекцияПечатныхФорм[0].ТабличныйДокумент;
        Иначе
            Возврат Новый ТабличныйДокумент;
        EndIf;
    КонецФункции
    
  5. Теперь мы можем просто открыть обработку через Файл -> Открыть в режиме «1С:Предприятие», выбрать документ-источник и нажать кнопку печати. Все точки останова в модуле объекта будут срабатывать мгновенно и без сбоев. Перед сдачей работы заказчику форму отладки можно просто удалить или оставить — она не мешает БСП.

Способ 3: Метод прокси-обращения (Перенаправление вызова)

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

Рассмотрим алгоритм настройки:

  1. Создаем копию нашей обработки и называем ее, например, Печать_Прокси.epf. Регистрируем именно этот файл в справочнике дополнительных отчетов и обработок.
  2. В модуле объекта прокси-обработки полностью заменяем код процедуры Печать на перенаправление к нашему рабочему файлу, лежащему на диске:
    
    Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
        ПутьКФайлуОтладки = "D:\1C_Develop\MyPrintForm.epf"; // Путь к вашей реальной обработке
        
        // Подключаем внешнюю обработку напрямую с диска без БСП
        ОбработкаОтладки = ВнешниеОбработки.Создать(ПутьКФайлуОтладки, Ложь);
        
        // Передаем управление в рабочий файл
        ОбработкаОтладки.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
    КонецПроцедуры
    
  3. В Конфигураторе открываем рабочий файл MyPrintForm.epf, ставим точку останова.
  4. В пользовательском интерфейсе запускаем печать обычным способом. БСП вызовет прокси-обработку, которая мгновенно перенаправит вызов в локальный файл на диске. Точка останова сработает, и вы сможете вносить изменения в код локального файла без его постоянной перезаписи в базу данных.

Способ 4: Временное изменение общего модуля БСП

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

Проанализируем этот подход по шагам:

  1. Найдем в конфигурации общий модуль, отвечающий за подключение внешних объектов. Обычно это ДополнительныеОтчетыИОбработки.
  2. Найдем функцию подключения обработки (например, ПодключитьВнешнююОбработку или аналогичную в зависимости от версии БСП).
  3. Добавим в самое начало функции временное условие подмены файла для конкретной отлаживаемой обработки:
    
    Если Ссылка.Наименование = "Мой Счет На Оплату (Отладка)" Тогда
        Возврат ВнешниеОбработки.Создать("D:\1C_Develop\MyPrintForm.epf", Ложь);
    КонецЕсли;
    
  4. Теперь при запуске печати из интерфейса система проигнорирует двоичные данные из хранилища и загрузит актуальный код прямо с вашего диска. Не забудьте удалить это условие перед обновлением рабочей базы!

Способ 5: Использование универсальной обработки-стартера

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

Принцип работы с ними крайне прост:

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

Способ 6: Быстрый вызов «Остановки по ошибке»

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

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

Резюме

Мы рассмотрели различные подходы к отладке внешних печатных форм. Для быстрой и разовой проверки отлично подойдет Способ 1 или Способ 6. Если же вам предстоит долгая и кропотливая разработка сложного макета печатной формы, настоятельно рекомендуем потратить 5 минут на реализацию Способа 2 (Форма отладки) или Способа 3 (Прокси-перенаправление). Это сбережет огромное количество рабочего времени и сделает процесс разработки комфортным.

← На главную