Разработка и отладка внешних печатных форм (ВПФ) в среде 1С часто сопряжена с определенными трудностями, особенно когда логика формирования печатного листа вынесена в отдельный внешний отчет. Стандартные механизмы подключения дополнительных обработок через справочник Дополнительные отчеты и обработки запускают код в защищенном контексте, что мешает работе отладчика. Рассмотрим подробно, как преодолеть эти ограничения и эффективно проанализировать работу кода в различных режимах.
Этот метод является наиболее распространенным среди разработчиков. Вместо того чтобы полагаться на механизмы БСП (Библиотеки стандартных подсистем), мы можем временно модифицировать код ВПФ так, чтобы она создавала объект внешнего отчета напрямую из файла на диске. Это позволит конфигуратору «подцепить» контекст исполняемого файла и активировать точки останова.
Проанализируем ситуацию: когда мы используем метод ВнешниеОтчеты.Создать(), передавая в него путь к файлу, платформа связывает этот файл с сессией отладки. Разберем по шагам реализацию этого подхода:
Посмотрим на пример реализации такого кода:
// Путь к файлу внешнего отчета на диске
ПолноеИмяФайлаВнешнегоОтчета = "C:\Debug\MyExternalReport.erf";
// Создаем объект отчета напрямую из файла
ОтчетОбъект = ВнешниеОтчеты.Создать(ПолноеИмяФайлаВнешнегоОтчета, Ложь);
// Передаем необходимые параметры (например, фильтры или структуры данных)
ОтчетОбъект.УстановитьФильтр(ПараметрыПечати.ФильтрСоответствия);
// Выполняем компоновку результата
ОтчетОбъект.СкомпоноватьРезультат(ТабДокумент);
Важно помнить: если вы работаете в клиент-серверном варианте, путь C:\Debug\MyExternalReport.erf должен существовать именно на стороне сервера, так как код выполняется в серверном контексте. Если файл лежит на вашем рабочем столе, сервер его «не увидит».
Платформа 1С блокирует отладку объектов, запущенных в безопасном режиме. Выясним причину: это сделано для предотвращения выполнения потенциально опасного кода, но для разработчика это означает невозможность использования точек останова. Чтобы обойти это, выполним следующие действия:
СведенияОВнешнейОбработке) установите свойство БезопасныйРежим = Ложь.Часто разработчики сталкиваются с тем, что в файловой базе всё работает, а в клиент-серверной отладка «не заходит» в код. Рассмотрим подробнее, что нужно проверить в этом случае:
Во-первых, служба агента сервера 1С:Предприятия должна быть запущена с параметром -debug. Если этот ключ отсутствует, отладка серверного кода (к которому относится формирование печатных форм) будет невозможна в принципе.
Во-вторых, проблема путей. Рассмотрим пример: вы используете ПолучитьИмяВременногоФайла(). В клиент-серверном режиме эта функция на сервере вернет путь во временной папке пользователя, под которым запущена служба 1С (например, USR1CV8). Вы не сможете просто так подложить туда файл вручную. В этом случае лучше использовать фиксированный UNC-путь, доступный и серверу, и вам, например: \\ServerName\Exchange\Report.erf.
В-третьих, передача параметров. Если вам нужно проверить, какие данные приходят из ВПФ во внешний отчет, воспользуйтесь методом сериализации. Это поможет, если отладчик по какой-то причине недоступен.
Пример сохранения параметров в JSON для последующего анализа:
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, ПараметрыКоторыеНужноПроверить);
СтрокаПараметров = Запись.Закрыть();
// Далее можно вывести эту строку в Журнал Регистрации или Сообщить()
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаПараметров);
Если связь между ВПФ и внешним отчетом слишком сложная, разберем способ отладки через вспомогательную обработку. Создайте простую внешнюю обработку, которая будет имитировать действия системы БСП. В ней вы сможете жестко задать ссылку на объект (документ), вызвать процедуру печати и спокойно отладить весь цикл формирования данных.
Это исключает необходимость постоянной перезагрузки файлов в справочник Дополнительные отчеты и обработки и позволяет работать с кодом как с обычным внешним файлом.
Существует «ленивый», но эффективный способ попасть в нужное место кода, если точки останова игнорируются. В нужном месте модуля внешнего отчета или ВПФ напишите заведомо ошибочный код, например:
// Искусственная ошибка для вызова отладчика
ЧислоНоль = 0;
А = 1 / ЧислоНоль;
Перед запуском печати в Конфигураторе включите режим Отладка — Остановка по ошибке (поставить галочку «Останавливаться на исключении»). При возникновении ошибки платформа предложит нажать кнопку Конфигуратор, и вы попадете именно в ту строку, где произошел сбой, сохранив при этом все значения переменных в стеке вызовов.
При программном создании объектов через ВнешниеОтчеты.Создать() или ВнешниеОбработки.Создать(), всегда обращайте внимание на второй параметр функции. Если вы передаете Истина (Безопасный режим), многие операции будут запрещены, и отладка может вести себя непредсказуемо. Для целей разработки всегда устанавливайте Ложь.
Проанализировав все вышеперечисленные методы, можно сделать вывод: наиболее стабильным способом отладки связки ВПФ и внешнего отчета является использование прямого пути к файлу на диске с обязательной проверкой прав доступа серверной службы 1С к этому файлу и включенным режимом отладки на сервере.