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

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

Как отлаживать печатные формы в 1С

Практическое руководство по отладке печатных форм в 1С: точки останова, внешние печатные формы, типичные ошибки и проверка результата на реальном документе.

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

Главная сложность в том, что печатная форма часто формируется в фоне, на сервере, внутри общей команды или через менеджер печати, и «просто поставить точку останова» не всегда работает. Ниже разобраны рабочие способы: отладка через конфигуратор, отладка внешних печатных форм, проверка макета без кода и типовые ошибки, которые дают 90% проблем.

Как устроена печатная форма и где искать точку входа

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

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

Подготовка: включение отладки и настройка конфигуратора

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

Если база серверная, на сервере 1С должна быть разрешена отладка — агент сервера запускается с ключом -debug. Без этого точки останова в серверном коде просто не сработают: отладчик пройдёт мимо без каких-либо сообщений. Это самая частая причина жалоб «точка останова не срабатывает».

Отладка встроенной печатной формы по шагам

Базовый сценарий выглядит так. Откройте модуль менеджера документа, найдите процедуру Печать и функцию, формирующую табличный документ (в БСП это часто ПечатьСчетаНаОплату, СформироватьПечатнуюФорму и т.п.). Поставьте точку останова (F9) в начале процедуры и запустите отладку (F5).

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

Порядок отладки печатной формы
  1. 1
    Найдите процедуру формирования печатной формы через поиск по имени макета или команде печати
  2. 2
    Убедитесь, что включена отладка сервера и отладчик видит сеанс
  3. 3
    Поставьте точку останова в начале процедуры печати и запустите отладку (F5)
  4. 4
    В пользовательском режиме выполните печать документа — отладчик остановится
  5. 5
    Проверьте выборку данных из запроса в табло (Shift+F9)
  6. 6
    Пошагово проследите заполнение параметров областей и вывод в табличный документ
  7. 7
    Сравните результат с фактически сформированным документом

Для просмотра значений используйте табло (Shift+F9): добавьте туда переменную с выборкой запроса, структуру параметров и сам табличный документ. Если выборка пустая — проблема в запросе или в отборе по ссылке; если данные есть, но в форме пусто — проблема в именах параметров макета или в том, что область не та, которую вы выводите.

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

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

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

Отладка макета без кода

Значительная часть проблем — не в коде, а в макете. Откройте макет печатной формы (в конфигураторе или в редакторе внешней обработки) и проверьте имена областей: код обращается к ним по имени через Макет.ПолучитьОбласть("Шапка"), и опечатка в имени даст ошибку «Область не найдена». Имена параметров внутри ячеек задаются в свойстве «Заполнение» ячейки — там должно стоять «Параметр», а имя параметра должно совпадать с тем, что присваивается в коде.

Частая ситуация: ячейка имеет заполнение «Шаблон» с текстом вида «[Наименование]», а в коде параметр называется иначе. В результате в печатной форме остаётся пусто или выводится необработанный шаблон. Ещё одна типичная ошибка — параметр присваивается области до того, как область получена из макета, либо значение теряется при повторном использовании одной переменной области в цикле.

Типичные ошибки при отладке печатных форм
01
Точка останова не срабатывает: не включена отладка сервера (-debug) или код выполняется в фоновом задании, которое не подключено к отладчику
02
Пустые поля в форме: имя параметра в макете не совпадает с именем в коде, или у ячейки неверное свойство заполнения
03
Ошибка «Поле объекта не обнаружено»: в запросе нет поля, к которому обращается код, либо изменился состав выборки
04
Выводится старая версия формы: изменён макет в конфигурации, а печать идёт из внешней обработки в справочнике дополнительных отчетов
05
Отладка на копии прошла успешно, в рабочей базе ошибка: различаются данные (пустые реквизиты, незаполненные характеристики)

Отладка запросов для печатных форм

Данные для печатной формы почти всегда собираются запросом с параметром «Ссылка» или массивом ссылок. Если форма выводится пустой, первым делом проверьте запрос отдельно: скопируйте его текст в консоль запросов, подставьте реальную ссылку на проблемный документ и выполните. Так вы отделите проблемы данных от проблем макета.

Обращайте внимание на левые соединения: если реквизит (например, договор или ответственный) не заполнен, соединение с таблицей договоров вернёт NULL, и обращение к полю через точку в коде выдаст ошибку либо пустую строку. В отладчике проверяйте значения через табло именно на том документе, на котором форма ломается, а не на «удобном» тестовом.

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

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

Выборка из запроса
Норма

Содержит строки по проблемному документу, ключевые поля заполнены

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

Пустая выборка или NULL в полях, которые код читает через точку

Параметры областей макета
Норма

Значения присваиваются до вывода области, имена совпадают с макетом

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

Параметры пустые или присваиваются другой области

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

Все области выведены в нужном порядке, данные на месте

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

Пропущены строки табличной части, съехали итоги или подписи

Особые случаи: фоновая печать, СКД и офисные форматы

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

Если печатная форма построена на СКД (схеме компоновки данных), отлаживать нужно не вывод областей, а набор данных и настройки схемы: проверьте запрос в наборе данных, ресурсы и группировки. Для форм в формате офисных документов (docx через макет-шаблон) проверяйте соответствие закладок и полей слияния в шаблоне именам в коде — механика та же, что и с параметрами табличного макета.

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

Как выбрать способ отладки

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

Часто задаваемые вопросы

Почему точка останова не срабатывает при печати?

Чаще всего код выполняется на сервере, а отладка сервера не включена (нет ключа -debug у агента сервера) либо отладчик не подключён к нужному сеансу. Также проверьте, не выполняется ли печать в фоновом задании — его нужно подключать отдельно в настройках отладки.

Как отладить печатную форму, если нет доступа к конфигуратору рабочей базы?

Выгрузите копию базы или проблемный документ в тестовую среду и отлаживайте там. Как временная мера в код можно добавить запись значений в журнал регистрации через ЗаписьЖурналаРегистрации, но после отладки такой код нужно убрать.

Почему в печатной форме пустые поля, хотя в документе данные есть?

Наиболее вероятные причины: имя параметра в макете не совпадает с именем в коде, у ячейки неверное свойство заполнения, либо запрос не возвращает нужное поле. Проверьте выборку в табло отладчика и сопоставьте имена параметров с макетом.

Как проверить изменения печатной формы, не обновляя конфигурацию?

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

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

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

Итог

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

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