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