Разработка и Конфигурация · 12 мин
Как отлаживать внешнюю печатную форму в 1С 8
Как отладить внешнюю печатную форму в 1С 8: точки останова, конфигуратор, отладка через открытие epf, параметры сеанса, типичные ошибки и проверка результата.
Внешняя печатная форма (файл .epf) выполняется в отдельном окружении: её модуль не совпадает с модулем документа, а контекст вызова формируется механизмом дополнительных отчетов и обработок. Из-за этого привычная отладка «поставил точку останова в конфигураторе — поймал» часто не срабатывает, и разработчик не понимает, почему код формы вообще не останавливается.
Ключевая особенность внешней печатной формы — она загружается в базу через справочник дополнительных отчетов и обработок (в конфигурациях на БСП) или подключается напрямую из файла. В зависимости от способа подключения различается и способ отладки: отладка через файл проще, но не всегда воспроизводит реальные условия, а отладка зарегистрированной формы требует дополнительной настройки.
Ниже разобраны оба сценария, настройка конфигуратора и отладчика, типичные причины, по которым точка останова не срабатывает, и способы проверить, что форма формируется корректно. Материал ориентирован на платформу 1С:Предприятие 8.3 и конфигурации с подсистемой «Дополнительные отчеты и обработки».
Как устроен вызов внешней печатной формы и почему это важно для отладки
Когда пользователь нажимает кнопку «Печать» в документе, механизм дополнительных печатных форм находит зарегистрированную обработку, создаёт её объект и вызывает экспортную функцию печати (в типовых решениях на БСП это обычно функция Печать() или обработчик команды печати с параметрами идентификатора команды и массива ссылок). Результат — табличный документ, который выводится пользователю.
Для отладки важны два следствия. Первое: точки входа формы — это экспортные процедуры и функции модуля объекта обработки, а не формы. Второе: если обработка загружена в справочник дополнительных обработок, платформа выполняет её код из хранилища базы, а не из вашего файла на диске. Изменения в файле .epf не попадут в исполнение, пока вы не обновите версию в справочнике — это самая частая причина «отладчик не видит мой код».
Способ 1. Отладка через прямое открытие файла .epf
Самый быстрый вариант — запустить форму напрямую из файла, минуя регистрацию в справочнике. Откройте конфигуратор, запустите отладку (меню «Отладка — Начать отладку» или клавиша F5). В открывшемся клиентском приложении откройте обработку через «Файл — Открыть» и выберите ваш .epf. При этом код модуля объекта будет выполняться именно из файла, и все точки останова, расставленные в конфигураторе, сработают.
Проблема этого способа в том, что внешняя печатная форма часто не имеет собственной формы и вызывается программно. В таком случае нужна небольшая «заглушка»: временно добавьте в модуль объекта код, который при открытии вызывает функцию печати с тестовой ссылкой на документ, либо создайте у обработки форму с кнопкой, запускающей печать. Альтернатива — вызвать формирование через консоль кода (если она доступна в вашем режиме) с передачей нужных параметров.
- 1Откройте конфигуратор и запустите отладку (F5)
- 2В клиенте откройте обработку через «Файл — Открыть»
- 3Вызовите функцию печати с тестовой ссылкой на документ
- 4Убедитесь, что отладчик остановился на точке останова в модуле объекта
- 5Проверьте сформированный табличный документ на корректность данных
Способ 2. Отладка формы, зарегистрированной в базе
Если форма уже зарегистрирована в справочнике «Дополнительные отчеты и обработки» и вызывается штатной кнопкой «Печать», прямое открытие файла не воспроизведёт реальный вызов: параметры команды, права пользователя и состав макета могут отличаться. В этом случае отлаживайте код прямо в зарегистрированной версии.
Порядок действий такой. В конфигураторе откройте пункт «Отладка — Подключение» и убедитесь, что в списке предметов отладки виден ваш сеанс (тонкий или толстый клиент). Если сеанса нет, проверьте настройку «Сервис — Параметры — Отладка»: должен быть выбран корректный протокол отладки (по TCP или по HTTP, в зависимости от режима запуска сервера) и включён флаг разрешения отладки. Для серверной базы отладка должна быть разрешена и на сервере — сервер 1С запускается с ключом отладки (например, параметр -debug в строке запуска агента сервера).
После этого откройте модуль обработки из справочника: в конфигурациях на БСП можно открыть внешнюю обработку на редактирование через «Дополнительные отчеты и обработки» или временно загрузить файл заново. Расставьте точки останова в экспортной функции печати и выполните печать из пользовательского режима. Отладчик должен остановиться на первой точке.
Настройка конфигуратора и предметов отладки
Большинство проблем «точка останова не срабатывает» связано не с кодом, а с тем, что отладчик не подключён к нужному предмету отладки. Проверьте следующие настройки.
- В диалоге «Сервис — Параметры — Отладка» выберите тип отладки, совпадающий с режимом запуска (для файловой базы обычно достаточно отладки по TCP).
- Убедитесь, что установлен флаг автоматического подключения к нужным типам предметов отладки: тонкий клиент, толстый клиент, сервер.
- Если код печатной формы выполняется в серверном контексте (вызовы с директивой &НаСервере или серверные функции БСП), отладка сервера обязательна — без неё серверные точки останова игнорируются.
- После смены протокола отладки перезапустите сеанс клиентского приложения, иначе оно продолжит работать без отладки.
Ещё одна тонкость: внешняя обработка, открытая в конфигураторе на редактирование, и обработка, выполняющаяся в сеансе, — это разные объекты для отладчика. Точки останова нужно ставить в том модуле, который реально исполняется. Если вы редактируете файл на диске, а в базе зарегистрирована старая версия, остановки не будет.
Что делать, если точка останова не срабатывает
Если отладчик проходит мимо, проверяйте причины в следующем порядке — от самых частых к редким.
- Исполняется не тот код: в базе зарегистрирована старая версия обработки. Загрузите актуальный файл и повторите.
- Код выполняется на сервере, а отладка сервера не включена или сервер запущен без ключа отладки. Перезапустите сервер с отладкой и обновите сеанс.
- Предмет отладки не подключён: откройте «Отладка — Подключение» и подключите сеанс вручную.
- Функция печати вообще не вызывается: проверьте регистрацию формы — назначение (для каких объектов), идентификатор команды и то, что печать запускается именно для этого типа документа.
- Код вылетает раньше точки останова: включите «Остановку по ошибке» в меню «Отладка», чтобы увидеть исключение до вашей точки.
Проверка результата и вывод отладочной информации
Остановка на точке — только половина работы. Убедитесь, что входные параметры корректны: в функцию печати должен прийти массив ссылок на документы и правильный идентификатор команды. Проверьте их в табло (Shift+F9) — пустой массив или неожиданный тип значения сразу укажут на проблему в регистрации команды.
Для длинных алгоритмов формирования удобно временно добавить вывод через Сообщить() в ключевых точках: после получения данных запроса, перед заполнением областей макета, после вывода итогов. Это позволяет понять, на каком этапе данные теряются, не расставляя десятки точек останова. Не забудьте убрать отладочные сообщения перед передачей формы пользователям.
Итоговый табличный документ проверяйте визуально: откройте сформированную печать и сверьте суммы, номенклатуру и реквизиты с исходным документом. Проверьте печать нескольких документов с разным составом данных — с пустыми реквизитами, длинными наименованиями, несколькими строками табличной части.
Как проверить результат
Отладчик останавливается на точке в функции печати при нажатии «Печать»
Печать формируется без остановки — исполняется другая версия обработки или нет отладки сервера
Массив ссылок заполнен, идентификатор команды соответствует регистрации
Пустой массив или неизвестный идентификатор — ошибка в настройках команды печати
Все области макета заполнены данными документа, суммы совпадают
Пустые поля, <Объект не найден>, несовпадающие итоги
Альтернативы и вспомогательные приёмы
Если полноценная отладка недоступна (например, нет доступа к конфигуратору на сервере заказчика), используйте журнал регистрации: добавьте в код формы записи через ЗаписьЖурналаРегистрации() с уровнем «Информация» и анализируйте их после выполнения печати. Это медленнее интерактивной отладки, но работает в любых условиях и безопасно для других пользователей.
Для проверки запросов, которыми форма получает данные, удобно отдельно отладить сам запрос в консоли запросов: скопируйте текст запроса и параметры из кода, выполните его на том же документе и сравните выборку с ожидаемой. Так вы отделите ошибки выборки данных от ошибок заполнения макета — эти классы ошибок требуют разных исправлений.
Как выбрать действие
Частые вопросы об отладке внешних печатных форм
Почему отладчик не останавливается, хотя точка останова стоит?
Чаще всего исполняется не та версия кода: обработка в справочнике не обновлена после правок файла. Вторая по частоте причина — код выполняется на сервере, а отладка сервера не включена или сервер запущен без ключа отладки. Проверьте также подключение предмета отладки через «Отладка — Подключение».
Можно ли отлаживать форму без конфигуратора?
Полноценная пошаговая отладка без конфигуратора невозможна, но можно добавить в код записи журнала регистрации или сообщения пользователю в ключевых точках алгоритма. Это позволяет отследить ход выполнения и значения переменных, хотя и медленнее интерактивной отладки.
Как отладить форму, если у неё нет собственной формы для открытия?
Временно добавьте в модуль объекта код, вызывающий функцию печати с тестовой ссылкой на документ, или создайте простую форму с кнопкой запуска. После завершения отладки удалите вспомогательный код, чтобы он не попал в рабочую версию.
Опасно ли отлаживать печатную форму в рабочей базе?
Да, если включена остановка по ошибке или стоят точки останова: выполнение кода приостановится в сеансе реального пользователя, который нажмёт «Печать». Безопасный вариант — копия базы, отдельный тестовый пользователь или отладка через запись в журнал регистрации без остановок.
Форма формируется без ошибок, но данные неверные. Где искать проблему?
Разделите проверку на два этапа: сначала выполните запрос формы отдельно в консоли запросов с теми же параметрами и сверьте выборку с документом. Если данные корректны — проблема в заполнении областей макета; если нет — исправляйте запрос или параметры его вызова.
Изменил файл .epf, а поведение формы не изменилось. Что делать?
Загрузите обновлённый файл в карточку обработки справочника дополнительных отчетов и обработок и сохраните. Платформа исполняет код из хранилища базы, а не из файла на диске, поэтому без повторной загрузки изменения не вступят в силу.
Что важно запомнить
Отладка внешней печатной формы сводится к трём правилам: исполняйте именно ту версию кода, которую редактируете; включайте отладку сервера, если формирование идёт в серверном контексте; проверяйте не только отсутствие ошибок, но и содержимое итогового табличного документа. Отладку в рабочей базе проводите только в копии или под тестовым пользователем.