Разработка внешних печатных форм (ВПФ) и обработок — это стандартная задача для программиста 1С, однако процесс их отладки часто вызывает затруднения. Основная сложность заключается в том, что когда мы подключаем обработку в справочник «Дополнительные отчеты и обработки», система копирует файл во временное хранилище или временный каталог на диске. В результате точка останова, поставленная в исходном .epf файле, не срабатывает, так как исполняется совершенно другой экземпляр кода. В этой статье мы подробно разберем, как обойти эти ограничения и настроить полноценную отладку.
Рассмотрим наиболее надежный и популярный способ — добавление в саму внешнюю обработку временной формы для отладки. Это позволяет запускать код обработки напрямую из файла, открытого через меню «Файл — Открыть», что гарантирует работу всех точек останова.
Шаг 1. Подготовка модуля объекта. Проанализируем структуру модуля объекта нашей обработки. Для того чтобы форма могла вызвать процедуру печати, основная экспортная функция должна быть доступна извне. Убедимся, что наша основная функция (например, СформироватьПечатнуюФорму) имеет ключевое слово Экспорт.
// В модуле объекта
Функция СформироватьПечатнуюФорму(МассивОбъектов) Экспорт
// Здесь ваш код формирования ТабличногоДокумента
ТабДок = Новый ТабличныйДокумент;
// ... логика заполнения ...
Возврат ТабДок;
КонецФункции
Шаг 2. Создание формы. Добавим новую форму в обработку. На форме разместим реквизит СсылкаНаОбъект с типом документа, для которого предназначена печатная форма. Также добавим команду «Сформировать».
Шаг 3. Написание кода вызова. Разберем код, который свяжет форму и логику печати. Нам необходимо преобразовать данные формы обратно в объект обработки, чтобы получить доступ к его методам.
&НаСервере
Процедура СформироватьНаСервере()
// Преобразуем данные текущей формы в объект внешней обработки
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
// Подготавливаем параметры (обычно это массив ссылок)
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Объект.СсылкаНаОбъект);
// Вызываем экспортную функцию печати
ТабличныйДокумент = ОбработкаОбъект.СформироватьПечатнуюФорму(МассивСсылок);
// Если нужно вывести результат на экран сразу из отладочной формы
// можно передать ТабДок обратно на клиент
КонецПроцедуры
&НаКлиенте
Процедура Сформировать(Команда)
СформироватьНаСервере();
КонецПроцедуры
Если ваша печатная форма использует сложные механизмы Библиотеки стандартных подсистем (БСП), например, через УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм, то простая кнопка может не подойти. Выясним, как имитировать среду выполнения БСП. Для этого на форме отладки можно использовать более сложный вызов, максимально приближенный к реальному поведению системы.
&НаСервере
Функция ПечатьНаСервере(МассивОбъектов)
// Эмулируем коллекцию печатных форм, как это делает БСП
ИменаМакетов = Новый Массив;
ИменаМакетов.Добавить("ВашМакет");
Коллекция = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм(ИменаМакетов);
ПараметрыВывода = Новый Структура;
ОбъектыПечати = МассивОбъектов;
// Получаем объект обработки
Об = РеквизитФормыВЗначение("Объект");
// Вызываем стандартный метод Печать
Об.Печать(МассивОбъектов, Коллекция, ОбъектыПечати, ПараметрыВывода);
Если Коллекция.Количество() > 0 Тогда
Возврат Коллекция[0].ТабличныйДокумент;
Иначе
Возврат Новый ТабличныйДокумент;
КонецЕсли;
КонецФункции
Проанализируем ситуацию, когда вы все сделали правильно, но программа не останавливается на нужной строке. Начиная с платформы 8.3.5, механизмы безопасности и работы с временными файлами стали жестче. Когда вы запускаете внешнюю форму через механизм «Дополнительные отчеты и обработки», 1С создает копию файла в папке временных файлов профиля пользователя.
Решение проблемы:
Остановка = 1/0;. Система выдаст ошибку деления на ноль и предложит войти в конфигуратор именно в той точке, где произошел сбой.-debug.В современных конфигурациях, таких как ERP, КА или БП 3.0, печать часто выполняется в фоновом режиме. Это означает, что даже если вы открыли обработку через «Файл — Открыть», серверный вызов может уйти в отдельный поток, который отладчик «не видит».
Разберем по шагам, как настроить подключение к фоновым заданиям:
Посмотрим на ситуацию шире. Если внешняя печатная форма становится слишком сложной для отладки, рассмотрим возможность переноса ее логики в расширение конфигурации. В расширениях точки останова работают так же стабильно, как и в основной конфигурации. Вы можете создать общую команду или заимствовать менеджер печати соответствующего документа, добавив туда свою форму. Это исключит манипуляции с временными .epf файлами и значительно ускорит процесс разработки.
Для устаревших конфигураций на обычных формах (например, УПП) часто помогает простая очистка кэша. Если и это не помогает, воспользуйтесь методом подмены: временно измените код в конфигурации в месте вызова обработки, чтобы система создавала объект не из справочника, а напрямую с диска:
ВнешниеОбработки.Создать("C:\Debug\MyForm.epf");
Этот метод является радикальным, так как требует изменения основной конфигурации, но он гарантирует 100% срабатывание отладчика в самых сложных случаях.