Разработка и поддержка внешних печатных форм (ВПФ) — одна из наиболее частых задач программиста 1С. Однако разработчики часто сталкиваются с проблемой: точки останова в модуле объекта внешней обработки упорно игнорируются конфигуратором, и стандартная отладка «не идет». Это происходит из-за того, что в управляемом приложении код печатных форм выполняется на стороне сервера или в фоновом режиме, а сама обработка загружается в информационную базу как двоичные данные и запускается во временном хранилище.
В этой статье мы подробно и по шагам разберем несколько проверенных способов решения этой проблемы. Мы научимся настраивать окружение отладчика, эмулировать вызовы БСП с помощью тестовой формы, использовать штатный режим отладки БСП и применять «хитрые» приемы быстрого перехвата временных файлов.
Прежде чем перейти к практике, давайте разберем техническую причину этой проблемы. Когда пользователь нажимает кнопку «Печать» в интерфейсе управляемого приложения, система выполняет следующие действия:
.epf из справочника Дополнительные отчеты и обработки.Печать в модуле объекта обработки.Поскольку файл выполняется на сервере, а его имя генерируется динамически, отладчик конфигуратора просто «не знает», какой именно файл на диске сопоставить с открытым проектом в конфигураторе. Кроме того, часто серверные вызовы и фоновые задания по умолчанию не подключены к сеансу отладки.
Давайте исправим это, настроив среду разработки.
Перед началом любой работы с серверным кодом выполним обязательную настройку конфигуратора и сервера 1С. Без этого ни один из описанных ниже методов не сработает.
Активация отладки на сервере:
Если ваша база данных развернута в клиент-серверном варианте, убедитесь, что служба сервера 1С:Предприятие запущена с ключом отладки -debug (для протокола TCP/IP) или -http (для HTTP-отладки). Если этот параметр не задан в реестре или конфигурационном файле службы, серверный код отлаживать будет невозможно.
Настройка автоматического подключения в Конфигураторе:
Давайте укажем отладчику, какие именно процессы ему нужно перехватывать автоматически:
Отключение защиты от опасных действий:
При интерактивном открытии внешних обработок платформа 8.3 запрашивает подтверждение безопасности, что может блокировать выполнение фонового кода отладки. Для учетной записи разработчика рекомендуется временно отключить эту защиту. Для этого перейдем в раздел Администрирование — Пользователи, откроем карточку разработчика и снимем флажок Защита от опасных действий.
Этот способ является самым надежным и популярным среди разработчиков. Мы добавим в саму внешнюю обработку вспомогательную форму, которая позволит запускать печать напрямую через меню Файл — Открыть, обходя механизмы регистрации БСП.
Рассмотрим пошагово, как это сделать:
СсылкаНаОбъект. В качестве типа данных выберем ссылку на документ или справочник, для которого предназначена эта печать (например, ДокументСсылка.РеализацияТоваровУслуг).СсылкаНаОбъект, чтобы пользователь мог выбрать конкретный документ для теста.ВыполнитьПечать и вынесем кнопку этой команды на рабочую область формы.Теперь нам нужно написать код обработчика команды. Нам необходимо сымитировать структуру параметров, которую БСП обычно передает в экспортный метод Печать. Стандартный метод в модуле объекта выглядит так:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Давайте напишем код эмуляции на форме нашей обработки. В модуле формы разместим следующий код:
&НаКлиенте
Процедура ВыполнитьПечать(Команда)
// Проверим, заполнена ли ссылка на документ
Если Не ЗначениеЗаполнено(Объект.СсылкаНаОбъект) Тогда
Предупреждение("Пожалуйста, выберите документ для отладки!");
Возврат;
КонецЕсли;
// Формируем список объектов для передачи на сервер
ОбъектыПечати = Новый СписокЗначений;
ОбъектыПечати.Добавить(Объект.СсылкаНаОбъект);
// Вызываем серверный метод генерации печатной формы
ВыполнитьПечатьНаСервере(ОбъектыПечати);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьПечатьНаСервере(ОбъектыПечати)
// Преобразуем список в массив, как требует стандарт БСП
МассивОбъектов = Новый Массив;
Для Каждого Элемент Из ОбъектыПечати Цикл
МассивОбъектов.Добавить(Элемент.Значение);
КонецЦикла;
// Эмулируем структуры БСП с помощью стандартных функций конфигурации
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ИдентификаторВашегоМакета");
ПараметрыВывода = УправлениеПечатью.ПодготовитьStructureПараметровВывода();
// Получаем объект обработки из данных формы для доступа к экспортным методам
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
// Вызываем экспортный метод печати.
// Именно на этой строке или внутри метода Печать в Модуле объекта ставим точку останова!
ОбработкаОбъект.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
// Опционально: Выводим результат на экран, если требуется визуальный контроль табдока
УправлениеПечатьюКлиент.ПечатьДокументов(КоллекцияПечатныхФорм, ОбъектыПечати);
КонецПроцедуры
Преимущества метода: Мы можем запускать обработку как обычный файл. Отладчик конфигуратора легко сопоставляет файл на диске с выполняемым процессом, и отладка работает безупречно на любых строках кода. Чтобы не создавать вспомогательную форму вручную, можно использовать обработку для отладки внешних печатных форм и команд.
В современных конфигурациях 1С, построенных на базе Библиотеки Стандартных Подсистем (БСП), разработчики предусмотрели штатный механизм отладки внешних объектов без необходимости добавления тестовых форм и изменения структуры обработки.
Рассмотрим, как задействовать этот функционал:
.epf, который хранится на вашем локальном диске или в сетевой папке (важно: сервер 1С должен иметь физический доступ к этому пути)..epf с жесткого диска и расставим точки останова в модуле объекта.Система БСП обнаружит, что для данной обработки включен режим отладки, и вместо двоичных данных из базы данных выполнит код из файла, путь к которому мы указали. Отладчик мгновенно перехватит управление на точках останова. Для быстрой подготовки таких модулей под стандарты БСП можно использовать шаблон дополнительной обработки с подсистемой хранения настроек.
Если вам нужно срочно посмотреть структуру возвращаемых данных из запроса, а времени на создание тестовых форм или регистрацию обработки в справочнике БСП нет, можно воспользоваться универсальным «лайфхаком» платформы 1С — перехватом временного файла через обработку ошибок.
Выясним алгоритм этого метода по шагам:
Печать или непосредственно перед интересующим нас запросом добавим строку с принудительным вызовом ошибки. Например:
ВызватьИсключение "ОСТАНОВКА_ДЛЯ_ОТЛАДКИ";
Или напишем простую математическую ошибку в блоке попытки:
Попытка
а = 1 / 0;
Исключение
// Ошибка будет поймана конфигуратором
КонецПопытки;
Важное примечание: Открывшийся файл является временным (его имя будет выглядеть как случайный набор символов в системном каталоге). Вы можете полноценно использовать инструменты отладки: открывать Табло, вызывать контекстное меню Вычислить выражение, просматривать структуру результатов запросов и пошагово обходить код кнопками F10 и F11. Однако ни в коем случае не редактируйте код внутри этого открывшегося временного файла! Все изменения и исправления нужно вносить только в ваш исходный рабочий файл .epf.
Мы подробно разобрали основные методы отладки внешних печатных форм в управляемом приложении 1С 8.3. Подведем краткий итог по выбору оптимального инструмента:
Используя эти приемы, вы сможете быстро находить ошибки в запросах, анализировать структуру возвращаемых данных и значительно сократите время разработки печатных форм в 1С.