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