Как отладить внешнюю печатную форму, которая формируется через внешний отчет?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработка и отладка внешних печатных форм (ВПФ) в среде 1С часто сопряжена с определенными трудностями, особенно когда логика формирования печатного листа вынесена в отдельный внешний отчет. Стандартные механизмы подключения дополнительных обработок через справочник Дополнительные отчеты и обработки запускают код в защищенном контексте, что мешает работе отладчика. Рассмотрим подробно, как преодолеть эти ограничения и эффективно проанализировать работу кода в различных режимах.

Метод 1. Прямой программный вызов внешнего файла

Этот метод является наиболее распространенным среди разработчиков. Вместо того чтобы полагаться на механизмы БСП (Библиотеки стандартных подсистем), мы можем временно модифицировать код ВПФ так, чтобы она создавала объект внешнего отчета напрямую из файла на диске. Это позволит конфигуратору «подцепить» контекст исполняемого файла и активировать точки останова.

Проанализируем ситуацию: когда мы используем метод ВнешниеОтчеты.Создать(), передавая в него путь к файлу, платформа связывает этот файл с сессией отладки. Разберем по шагам реализацию этого подхода:

  1. Сохраните ваш внешний отчет на диск (например, в папку на сервере или локально, в зависимости от режима работы).
  2. В модуле ВПФ, там, где происходит обращение к отчету, временно замените код получения двоичных данных из справочника на прямое указание пути.

Посмотрим на пример реализации такого кода:


// Путь к файлу внешнего отчета на диске
ПолноеИмяФайлаВнешнегоОтчета = "C:\Debug\MyExternalReport.erf";

// Создаем объект отчета напрямую из файла
ОтчетОбъект = ВнешниеОтчеты.Создать(ПолноеИмяФайлаВнешнегоОтчета, Ложь);

// Передаем необходимые параметры (например, фильтры или структуры данных)
ОтчетОбъект.УстановитьФильтр(ПараметрыПечати.ФильтрСоответствия);

// Выполняем компоновку результата
ОтчетОбъект.СкомпоноватьРезультат(ТабДокумент);

Важно помнить: если вы работаете в клиент-серверном варианте, путь C:\Debug\MyExternalReport.erf должен существовать именно на стороне сервера, так как код выполняется в серверном контексте. Если файл лежит на вашем рабочем столе, сервер его «не увидит».

Метод 2. Отключение безопасного режима и использование «Файл — Открыть»

Платформа 1С блокирует отладку объектов, запущенных в безопасном режиме. Выясним причину: это сделано для предотвращения выполнения потенциально опасного кода, но для разработчика это означает невозможность использования точек останова. Чтобы обойти это, выполним следующие действия:

  1. В параметрах регистрации ВПФ (функция СведенияОВнешнейОбработке) установите свойство БезопасныйРежим = Ложь.
  2. Загрузите обновленную ВПФ в справочник Дополнительные отчеты и обработки.
  3. Запустите 1С:Предприятие в режиме отладки.
  4. Откройте файл ВПФ (или внешнего отчета) напрямую через меню Файл — Открыть. Это «пропишет» путь к файлу в системе отладки.
  5. Запустите печать из документа. Теперь точка останова, поставленная в модуле файла, открытого через «Файл — Открыть», должна сработать.

Метод 3. Отладка в клиент-серверном режиме

Часто разработчики сталкиваются с тем, что в файловой базе всё работает, а в клиент-серверной отладка «не заходит» в код. Рассмотрим подробнее, что нужно проверить в этом случае:

Во-первых, служба агента сервера 1С:Предприятия должна быть запущена с параметром -debug. Если этот ключ отсутствует, отладка серверного кода (к которому относится формирование печатных форм) будет невозможна в принципе.

Во-вторых, проблема путей. Рассмотрим пример: вы используете ПолучитьИмяВременногоФайла(). В клиент-серверном режиме эта функция на сервере вернет путь во временной папке пользователя, под которым запущена служба 1С (например, USR1CV8). Вы не сможете просто так подложить туда файл вручную. В этом случае лучше использовать фиксированный UNC-путь, доступный и серверу, и вам, например: \\ServerName\Exchange\Report.erf.

В-третьих, передача параметров. Если вам нужно проверить, какие данные приходят из ВПФ во внешний отчет, воспользуйтесь методом сериализации. Это поможет, если отладчик по какой-то причине недоступен.

Пример сохранения параметров в JSON для последующего анализа:


Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, ПараметрыКоторыеНужноПроверить);
СтрокаПараметров = Запись.Закрыть();
// Далее можно вывести эту строку в Журнал Регистрации или Сообщить()
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаПараметров);

Метод 4. Использование «заглушки» или тестовой обработки

Если связь между ВПФ и внешним отчетом слишком сложная, разберем способ отладки через вспомогательную обработку. Создайте простую внешнюю обработку, которая будет имитировать действия системы БСП. В ней вы сможете жестко задать ссылку на объект (документ), вызвать процедуру печати и спокойно отладить весь цикл формирования данных.

Это исключает необходимость постоянной перезагрузки файлов в справочник Дополнительные отчеты и обработки и позволяет работать с кодом как с обычным внешним файлом.

Метод 5. Искусственная ошибка (Stop on Error)

Существует «ленивый», но эффективный способ попасть в нужное место кода, если точки останова игнорируются. В нужном месте модуля внешнего отчета или ВПФ напишите заведомо ошибочный код, например:


// Искусственная ошибка для вызова отладчика
ЧислоНоль = 0;
А = 1 / ЧислоНоль;

Перед запуском печати в Конфигураторе включите режим Отладка — Остановка по ошибке (поставить галочку «Останавливаться на исключении»). При возникновении ошибки платформа предложит нажать кнопку Конфигуратор, и вы попадете именно в ту строку, где произошел сбой, сохранив при этом все значения переменных в стеке вызовов.

Важные замечания по безопасности

При программном создании объектов через ВнешниеОтчеты.Создать() или ВнешниеОбработки.Создать(), всегда обращайте внимание на второй параметр функции. Если вы передаете Истина (Безопасный режим), многие операции будут запрещены, и отладка может вести себя непредсказуемо. Для целей разработки всегда устанавливайте Ложь.

Проанализировав все вышеперечисленные методы, можно сделать вывод: наиболее стабильным способом отладки связки ВПФ и внешнего отчета является использование прямого пути к файлу на диске с обязательной проверкой прав доступа серверной службы 1С к этому файлу и включенным режимом отладки на сервере.

← На главную