Разработка и Конфигурация · 11 мин
Как отлаживать печатные формы в 1С
Практическое руководство по отладке печатных форм в 1С: точки останова, внешние печатные формы, типичные ошибки и проверка результата на реальном документе.
Отладка печатных форм в 1С — одна из самых частых задач разработчика и внедренца: макет есть, процедура формирования есть, но на выходе пустые поля, «поехавшая» таблица или ошибка «Поле объекта не обнаружено». Проблема почти всегда находится в одном из трёх мест: в данных, которые передаются в макет, в самом макете (имена параметров и областей) или в коде формирования табличного документа. Отладка сводится к тому, чтобы пройти по цепочке «запрос данных → заполнение параметров → вывод областей» и найти, где цепочка рвётся.
Главная сложность в том, что печатная форма часто формируется в фоне, на сервере, внутри общей команды или через менеджер печати, и «просто поставить точку останова» не всегда работает. Ниже разобраны рабочие способы: отладка через конфигуратор, отладка внешних печатных форм, проверка макета без кода и типовые ошибки, которые дают 90% проблем.
Как устроена печатная форма и где искать точку входа
Прежде чем отлаживать, нужно понять, какой код реально выполняется при нажатии кнопки «Печать». В типовых конфигурациях на БСП (УТ, ERP, БП) печать идёт через подсистему «Управление печатью»: команда печати вызывает функцию УправлениеПечатью.СформироватьПечатныеФормы(), которая обращается к менеджеру печати объекта — обычно это модуль менеджера документа (например, Документы.РеализацияТоваровУслуг) с процедурой Печать() и функциями получения данных.
В простых самописных конфигурациях печать может вызываться напрямую из модуля формы документа или из команды, где создаётся табличный документ и заполняется из макета. Найти точку входа помогает поиск по конфигурации: ищите строку ПолучитьМакет или имя макета (например, «Макет», «ПФ_MXL_СчетНаОплату») через «Правка — Найти» по всей конфигурации.
Подготовка: включение отладки и настройка конфигуратора
Отладка печатных форм почти всегда требует отладки серверного кода, потому что формирование табличного документа выполняется на сервере. Откройте конфигуратор, перейдите в «Сервис — Параметры» и на закладке «Запуск 1С:Предприятия» проверьте, что приложение запускается в нужном режиме. Затем в меню «Отладка» включите пункт «Подключение» и убедитесь, что в списке доступных предметов отладки есть сеанс пользователя и серверные контексты.
Если база серверная, на сервере 1С должна быть разрешена отладка — агент сервера запускается с ключом -debug. Без этого точки останова в серверном коде просто не сработают: отладчик пройдёт мимо без каких-либо сообщений. Это самая частая причина жалоб «точка останова не срабатывает».
Отладка встроенной печатной формы по шагам
Базовый сценарий выглядит так. Откройте модуль менеджера документа, найдите процедуру Печать и функцию, формирующую табличный документ (в БСП это часто ПечатьСчетаНаОплату, СформироватьПечатнуюФорму и т.п.). Поставьте точку останова (F9) в начале процедуры и запустите отладку (F5).
В пользовательском режиме откройте документ и нажмите «Печать» с нужным вариантом формы. Отладчик остановится на точке. Дальше идите по шагам (F11 — с заходом в процедуры, F10 — через) и проверяйте три вещи: что вернул запрос данных (есть ли строки в выборке), какие значения попадают в параметры макета (Область.Параметры.ИмяПараметра) и корректно ли выводятся области (ТабличныйДокумент.Вывести / Присоединить).
- 1Найдите процедуру формирования печатной формы через поиск по имени макета или команде печати
- 2Убедитесь, что включена отладка сервера и отладчик видит сеанс
- 3Поставьте точку останова в начале процедуры печати и запустите отладку (F5)
- 4В пользовательском режиме выполните печать документа — отладчик остановится
- 5Проверьте выборку данных из запроса в табло (Shift+F9)
- 6Пошагово проследите заполнение параметров областей и вывод в табличный документ
- 7Сравните результат с фактически сформированным документом
Для просмотра значений используйте табло (Shift+F9): добавьте туда переменную с выборкой запроса, структуру параметров и сам табличный документ. Если выборка пустая — проблема в запросе или в отборе по ссылке; если данные есть, но в форме пусто — проблема в именах параметров макета или в том, что область не та, которую вы выводите.
Отладка внешних печатных форм
Внешняя печатная форма (.epf) регистрируется в справочнике «Дополнительные отчеты и обработки» и выполняется в безопасном режиме либо в отдельном контексте, поэтому точка останова в её модуле «из коробки» не срабатывает. Рабочий приём: откройте файл обработки в конфигураторе через «Файл — Открыть», поставьте точку останова в экспортной функции Печать() или СведенияОВнешнейОбработке(), затем запустите отладку и в предприятии вызовите печать через подсистему дополнительных отчетов.
Если БСП загружает обработку из справочника, а не из файла, отладчик не свяжет исполняемый код с открытым файлом. В этом случае временно замените двоичные данные обработки в справочнике на свежую версию файла или откройте обработку напрямую в предприятии через «Файл — Открыть» и вызовите её функции вручную, передав тестовый массив ссылок.
Отладка макета без кода
Значительная часть проблем — не в коде, а в макете. Откройте макет печатной формы (в конфигураторе или в редакторе внешней обработки) и проверьте имена областей: код обращается к ним по имени через Макет.ПолучитьОбласть("Шапка"), и опечатка в имени даст ошибку «Область не найдена». Имена параметров внутри ячеек задаются в свойстве «Заполнение» ячейки — там должно стоять «Параметр», а имя параметра должно совпадать с тем, что присваивается в коде.
Частая ситуация: ячейка имеет заполнение «Шаблон» с текстом вида «[Наименование]», а в коде параметр называется иначе. В результате в печатной форме остаётся пусто или выводится необработанный шаблон. Ещё одна типичная ошибка — параметр присваивается области до того, как область получена из макета, либо значение теряется при повторном использовании одной переменной области в цикле.
Отладка запросов для печатных форм
Данные для печатной формы почти всегда собираются запросом с параметром «Ссылка» или массивом ссылок. Если форма выводится пустой, первым делом проверьте запрос отдельно: скопируйте его текст в консоль запросов, подставьте реальную ссылку на проблемный документ и выполните. Так вы отделите проблемы данных от проблем макета.
Обращайте внимание на левые соединения: если реквизит (например, договор или ответственный) не заполнен, соединение с таблицей договоров вернёт NULL, и обращение к полю через точку в коде выдаст ошибку либо пустую строку. В отладчике проверяйте значения через табло именно на том документе, на котором форма ломается, а не на «удобном» тестовом.
Как проверить результат отладки
Содержит строки по проблемному документу, ключевые поля заполнены
Пустая выборка или NULL в полях, которые код читает через точку
Значения присваиваются до вывода области, имена совпадают с макетом
Параметры пустые или присваиваются другой области
Все области выведены в нужном порядке, данные на месте
Пропущены строки табличной части, съехали итоги или подписи
Особые случаи: фоновая печать, СКД и офисные форматы
В некоторых конфигурациях печать выполняется в фоновом задании (длительные операции БСП). Чтобы отладить такой код, включите в конфигураторе «Отладка — Подключение» и установите флажок автоматического подключения фоновых заданий — тогда отладчик остановится и внутри фонового сеанса. Альтернатива — временно отключить длительную операцию и выполнить формирование синхронно.
Если печатная форма построена на СКД (схеме компоновки данных), отлаживать нужно не вывод областей, а набор данных и настройки схемы: проверьте запрос в наборе данных, ресурсы и группировки. Для форм в формате офисных документов (docx через макет-шаблон) проверяйте соответствие закладок и полей слияния в шаблоне именам в коде — механика та же, что и с параметрами табличного макета.
Как выбрать способ отладки
Часто задаваемые вопросы
Почему точка останова не срабатывает при печати?
Чаще всего код выполняется на сервере, а отладка сервера не включена (нет ключа -debug у агента сервера) либо отладчик не подключён к нужному сеансу. Также проверьте, не выполняется ли печать в фоновом задании — его нужно подключать отдельно в настройках отладки.
Как отладить печатную форму, если нет доступа к конфигуратору рабочей базы?
Выгрузите копию базы или проблемный документ в тестовую среду и отлаживайте там. Как временная мера в код можно добавить запись значений в журнал регистрации через ЗаписьЖурналаРегистрации, но после отладки такой код нужно убрать.
Почему в печатной форме пустые поля, хотя в документе данные есть?
Наиболее вероятные причины: имя параметра в макете не совпадает с именем в коде, у ячейки неверное свойство заполнения, либо запрос не возвращает нужное поле. Проверьте выборку в табло отладчика и сопоставьте имена параметров с макетом.
Как проверить изменения печатной формы, не обновляя конфигурацию?
Оформите форму как внешнюю печатную форму и зарегистрируйте в справочнике «Дополнительные отчеты и обработки» — тогда изменения вносятся заменой файла обработки без обновления конфигурации. В типовых механизмах БСП также есть режим замены макетов через пользовательские макеты.
Почему после обновления конфигурации печатная форма сломалась?
При обновлении могли измениться имена процедур менеджера печати, состав запроса или структура макета. Сравните свою доработку с новым типовым кодом: чаще всего ломаются внешние печатные формы, которые вызывали внутренние функции типового модуля.
Что важно запомнить
Отладка печатной формы — это проверка трёх звеньев: данных из запроса, параметров макета и вывода областей. Включите отладку сервера, найдите точку входа через поиск по имени макета, для внешних форм открывайте .epf в конфигураторе, а результат проверяйте на том документе, где форма реально ломается.