Разработка и модификация внешних печатных форм (ВПФ) — одна из самых частых задач при адаптации конфигураций 1С под требования бизнеса. Однако каждый разработчик, столкнувшийся с механизмами Библиотеки Стандартных Подсистем (БСП), рано или позмяу обнаруживает неприятную особенность: стандартные точки останова в модуле внешней печатной формы в Конфигураторе просто не срабатывают.
В этой статье мы подробно разберем, почему возникает эта проблема, как подготовить систему к работе и рассмотрим целых 6 практических способов настройки отладки вашей ВПФ — от простых хитростей до создания профессионального окружения.
Для начала выясним причину такого поведения системы. БСП управляет внешними печатными формами через специальный справочник (обычно он называется ДополнительныеОтчетыИОбработки). Когда пользователь нажимает кнопку печати в документе, система выполняет следующие действия:
Печать.В результате Конфигуратор видит, что исполняется код временного файла на сервере, но никак не связывает его с вашим локальным файлом проекта .epf, который открыт у вас на экране. Соответственно, точки останова игнорируются.
Кроме того, выполнение кода печати обычно происходит в серверном контексте. Если ваш сервер 1С запущен без специального ключа отладки, то отладить серверный код не удастся в принципе.
Перед тем как применять любой из способов, убедитесь, что на сервере 1С разрешена отладка. Если вы работаете в файловом варианте базы данных, этот шаг можно пропустить. Если база клиент-серверная, выполните следующее:
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent...).ImagePath добавьте ключ -debug в строку запуска.Теперь среда готова. Перейдем к рассмотрению способов отладки.
Это самый быстрый способ, не требующий написания дополнительного кода, однако он имеет свои нюансы и работает «через раз», если нарушить последовательность действий. Идея заключается в том, чтобы заставить платформу сопоставить временный файл БСП с вашим открытым файлом обработки.
Выполним следующие шаги:
СведенияОВнешнейОбработке обязательно устанавливаем параметр БезопасныйРежим в значение Ложь. Это критически важно, так как в безопасном режиме отладка полностью блокируется.
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
Файл -> Открыть. После открытия форму можно сразу закрыть. Этот шаг регистрирует путь к файлу в локальном кэше сеанса.Печать и ставим внутри нее точку останова.Минус метода: При любом изменении кода обработки в Конфигураторе вам придется заново загружать файл в справочник дополнительных обработок и повторять процедуру переоткрытия файла.
Это наиболее надежный и профессиональный метод, который используют опытные разработчики. Мы временно превращаем печатную форму в обычную обработку с управляемой формой.
Разберем реализацию по шагам:
ФормаОтладки. Сделаем ее основной формой обработки.СсылкаНаОбъект. Тип данных выберите в соответствии с документом, для которого предназначена печать (например, ДокументСсылка.ЗаказКлиента). Вынесем его на рабочую область формы.
&НаКлиенте
Процедура ВыполнитьПечать(Команда)
Если Не ЗначениеЗаполнено(Объект.СсылкаНаОбъект) Тогда
Предупреждение("Выберите документ для отладки!");
Возврат;
КонецЕсли;
ТабличныйДокумент = ПолучитьПечатнуюФормуНаСервере();
ТабличныйДокумент.Показать("Печать: " + СокрЛП(Объект.СсылкаНаОбъект));
КонецПроцедуры
&НаСервере
Функция ПолучитьПечатнуюФормуНаСервере()
// Подготавливаем параметры для вызова процедуры Печать
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(Объект.СсылкаНаОбъект);
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ВашИдентификаторКоманды");
ОбъектыПечати = Новый СписокЗначений;
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
// Получаем экземпляр модуля объекта обработки
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
// Вызываем стандартный метод печати БСП
ОбработкаОбъект.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
Если КоллекцияПечатныхФорм.Количество() > 0 Тогда
Возврат КоллекцияПечатныхФорм[0].ТабличныйДокумент;
Иначе
Возврат Новый ТабличныйДокумент;
EndIf;
КонецФункции
Файл -> Открыть в режиме «1С:Предприятие», выбрать документ-источник и нажать кнопку печати. Все точки останова в модуле объекта будут срабатывать мгновенно и без сбоев. Перед сдачей работы заказчику форму отладки можно просто удалить или оставить — она не мешает БСП.Этот способ идеален, если вы дорабатываете сложную печатную форму в «живой» базе и хотите видеть изменения без постоянной перезагрузки файла обработки в справочник БСП.
Рассмотрим алгоритм настройки:
Печать_Прокси.epf. Регистрируем именно этот файл в справочнике дополнительных отчетов и обработок.Печать на перенаправление к нашему рабочему файлу, лежащему на диске:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПутьКФайлуОтладки = "D:\1C_Develop\MyPrintForm.epf"; // Путь к вашей реальной обработке
// Подключаем внешнюю обработку напрямую с диска без БСП
ОбработкаОтладки = ВнешниеОбработки.Создать(ПутьКФайлуОтладки, Ложь);
// Передаем управление в рабочий файл
ОбработкаОтладки.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
КонецПроцедуры
MyPrintForm.epf, ставим точку останова.Если разработка ведется в копии базы данных или тестовой среде, где разрешено изменение конфигурации, можно временно переопределить логику подключения внешних обработок в самой БСП.
Проанализируем этот подход по шагам:
ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку или аналогичную в зависимости от версии БСП).
Если Ссылка.Наименование = "Мой Счет На Оплату (Отладка)" Тогда
Возврат ВнешниеОбработки.Создать("D:\1C_Develop\MyPrintForm.epf", Ложь);
КонецЕсли;
Существуют готовые инструменты разработчика (многие из них доступны на профильных ресурсах, таких как Инфостарт), которые эмулируют среду выполнения БСП.
Принцип работы с ними крайне прост:
Файл -> Открыть.КоллекцияПечатныхФорм, ПараметрыВывода) и вызывает процедуру Печать вашей обработки. Точки останова срабатывают штатно.Если вам нужно срочно посмотреть значения локальных переменных «прямо сейчас», а тратить время на создание форм отладки или прокси-обработок нет возможности, можно применить простой трюк с искусственным вызовом исключения.
Печать вашей обработки в месте предполагаемой остановки напишите заведомо ошибочную операцию. Например:
// Искусственная ошибка для остановки выполнения
ДелениеНаНоль = 1 / 0;
Отладка -> Настройка отладки... и установите флаг «Останавливаться по ошибке».Мы рассмотрели различные подходы к отладке внешних печатных форм. Для быстрой и разовой проверки отлично подойдет Способ 1 или Способ 6. Если же вам предстоит долгая и кропотливая разработка сложного макета печатной формы, настоятельно рекомендуем потратить 5 минут на реализацию Способа 2 (Форма отладки) или Способа 3 (Прокси-перенаправление). Это сбережет огромное количество рабочего времени и сделает процесс разработки комфортным.