К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как отлаживать внешнюю печатную форму в 1С 8

Как отладить внешнюю печатную форму в 1С 8: точки останова, конфигуратор, отладка через открытие epf, параметры сеанса, типичные ошибки и проверка результата.

Внешняя печатная форма (файл .epf) выполняется в отдельном окружении: её модуль не совпадает с модулем документа, а контекст вызова формируется механизмом дополнительных отчетов и обработок. Из-за этого привычная отладка «поставил точку останова в конфигураторе — поймал» часто не срабатывает, и разработчик не понимает, почему код формы вообще не останавливается.

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

Ниже разобраны оба сценария, настройка конфигуратора и отладчика, типичные причины, по которым точка останова не срабатывает, и способы проверить, что форма формируется корректно. Материал ориентирован на платформу 1С:Предприятие 8.3 и конфигурации с подсистемой «Дополнительные отчеты и обработки».

Как устроен вызов внешней печатной формы и почему это важно для отладки

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

Для отладки важны два следствия. Первое: точки входа формы — это экспортные процедуры и функции модуля объекта обработки, а не формы. Второе: если обработка загружена в справочник дополнительных обработок, платформа выполняет её код из хранилища базы, а не из вашего файла на диске. Изменения в файле .epf не попадут в исполнение, пока вы не обновите версию в справочнике — это самая частая причина «отладчик не видит мой код».

Способ 1. Отладка через прямое открытие файла .epf

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

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

Отладка через файл .epf
  1. 1
    Откройте конфигуратор и запустите отладку (F5)
  2. 2
    В клиенте откройте обработку через «Файл — Открыть»
  3. 3
    Вызовите функцию печати с тестовой ссылкой на документ
  4. 4
    Убедитесь, что отладчик остановился на точке останова в модуле объекта
  5. 5
    Проверьте сформированный табличный документ на корректность данных

Способ 2. Отладка формы, зарегистрированной в базе

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

Порядок действий такой. В конфигураторе откройте пункт «Отладка — Подключение» и убедитесь, что в списке предметов отладки виден ваш сеанс (тонкий или толстый клиент). Если сеанса нет, проверьте настройку «Сервис — Параметры — Отладка»: должен быть выбран корректный протокол отладки (по TCP или по HTTP, в зависимости от режима запуска сервера) и включён флаг разрешения отладки. Для серверной базы отладка должна быть разрешена и на сервере — сервер 1С запускается с ключом отладки (например, параметр -debug в строке запуска агента сервера).

После этого откройте модуль обработки из справочника: в конфигурациях на БСП можно открыть внешнюю обработку на редактирование через «Дополнительные отчеты и обработки» или временно загрузить файл заново. Расставьте точки останова в экспортной функции печати и выполните печать из пользовательского режима. Отладчик должен остановиться на первой точке.

Настройка конфигуратора и предметов отладки

Большинство проблем «точка останова не срабатывает» связано не с кодом, а с тем, что отладчик не подключён к нужному предмету отладки. Проверьте следующие настройки.

  • В диалоге «Сервис — Параметры — Отладка» выберите тип отладки, совпадающий с режимом запуска (для файловой базы обычно достаточно отладки по TCP).
  • Убедитесь, что установлен флаг автоматического подключения к нужным типам предметов отладки: тонкий клиент, толстый клиент, сервер.
  • Если код печатной формы выполняется в серверном контексте (вызовы с директивой &НаСервере или серверные функции БСП), отладка сервера обязательна — без неё серверные точки останова игнорируются.
  • После смены протокола отладки перезапустите сеанс клиентского приложения, иначе оно продолжит работать без отладки.

Ещё одна тонкость: внешняя обработка, открытая в конфигураторе на редактирование, и обработка, выполняющаяся в сеансе, — это разные объекты для отладчика. Точки останова нужно ставить в том модуле, который реально исполняется. Если вы редактируете файл на диске, а в базе зарегистрирована старая версия, остановки не будет.

Что делать, если точка останова не срабатывает

Если отладчик проходит мимо, проверяйте причины в следующем порядке — от самых частых к редким.

  1. Исполняется не тот код: в базе зарегистрирована старая версия обработки. Загрузите актуальный файл и повторите.
  2. Код выполняется на сервере, а отладка сервера не включена или сервер запущен без ключа отладки. Перезапустите сервер с отладкой и обновите сеанс.
  3. Предмет отладки не подключён: откройте «Отладка — Подключение» и подключите сеанс вручную.
  4. Функция печати вообще не вызывается: проверьте регистрацию формы — назначение (для каких объектов), идентификатор команды и то, что печать запускается именно для этого типа документа.
  5. Код вылетает раньше точки останова: включите «Остановку по ошибке» в меню «Отладка», чтобы увидеть исключение до вашей точки.
Типичные ошибки
01
Редактируют файл на диске, но не обновляют обработку в справочнике — в базе исполняется старый код
02
Ставят точки останова в клиентском модуле, а формирование печати идёт в серверной функции БСП — отладчик не останавливается без отладки сервера
03
Отлаживают в рабочей базе под боевым пользователем — точка останова блокирует чужой сеанс
04
Проверяют только отсутствие ошибок, но не сверяют содержимое табличного документа — макет формируется с пустыми или неверными данными

Проверка результата и вывод отладочной информации

Остановка на точке — только половина работы. Убедитесь, что входные параметры корректны: в функцию печати должен прийти массив ссылок на документы и правильный идентификатор команды. Проверьте их в табло (Shift+F9) — пустой массив или неожиданный тип значения сразу укажут на проблему в регистрации команды.

Для длинных алгоритмов формирования удобно временно добавить вывод через Сообщить() в ключевых точках: после получения данных запроса, перед заполнением областей макета, после вывода итогов. Это позволяет понять, на каком этапе данные теряются, не расставляя десятки точек останова. Не забудьте убрать отладочные сообщения перед передачей формы пользователям.

Итоговый табличный документ проверяйте визуально: откройте сформированную печать и сверьте суммы, номенклатуру и реквизиты с исходным документом. Проверьте печать нескольких документов с разным составом данных — с пустыми реквизитами, длинными наименованиями, несколькими строками табличной части.

Контрольные точки

Как проверить результат

Остановка отладчика
Норма

Отладчик останавливается на точке в функции печати при нажатии «Печать»

Тревожный признак

Печать формируется без остановки — исполняется другая версия обработки или нет отладки сервера

Входные параметры
Норма

Массив ссылок заполнен, идентификатор команды соответствует регистрации

Тревожный признак

Пустой массив или неизвестный идентификатор — ошибка в настройках команды печати

Табличный документ
Норма

Все области макета заполнены данными документа, суммы совпадают

Тревожный признак

Пустые поля, <Объект не найден>, несовпадающие итоги

Альтернативы и вспомогательные приёмы

Если полноценная отладка недоступна (например, нет доступа к конфигуратору на сервере заказчика), используйте журнал регистрации: добавьте в код формы записи через ЗаписьЖурналаРегистрации() с уровнем «Информация» и анализируйте их после выполнения печати. Это медленнее интерактивной отладки, но работает в любых условиях и безопасно для других пользователей.

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

Маршрут решения

Как выбрать действие

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

Частые вопросы об отладке внешних печатных форм

Почему отладчик не останавливается, хотя точка останова стоит?

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

Можно ли отлаживать форму без конфигуратора?

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

Как отладить форму, если у неё нет собственной формы для открытия?

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

Опасно ли отлаживать печатную форму в рабочей базе?

Да, если включена остановка по ошибке или стоят точки останова: выполнение кода приостановится в сеансе реального пользователя, который нажмёт «Печать». Безопасный вариант — копия базы, отдельный тестовый пользователь или отладка через запись в журнал регистрации без остановок.

Форма формируется без ошибок, но данные неверные. Где искать проблему?

Разделите проверку на два этапа: сначала выполните запрос формы отдельно в консоли запросов с теми же параметрами и сверьте выборку с документом. Если данные корректны — проблема в заполнении областей макета; если нет — исправляйте запрос или параметры его вызова.

Изменил файл .epf, а поведение формы не изменилось. Что делать?

Загрузите обновлённый файл в карточку обработки справочника дополнительных отчетов и обработок и сохраните. Платформа исполняет код из хранилища базы, а не из файла на диске, поэтому без повторной загрузки изменения не вступят в силу.

Итог

Что важно запомнить

Отладка внешней печатной формы сводится к трём правилам: исполняйте именно ту версию кода, которую редактируете; включайте отладку сервера, если формирование идёт в серверном контексте; проверяйте не только отсутствие ошибок, но и содержимое итогового табличного документа. Отладку в рабочей базе проводите только в копии или под тестовым пользователем.