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

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

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

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

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

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

Как устроена внешняя печатная форма и почему её нельзя отлаживать «как обычно»

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

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

Подготовка: включение отладки и подключение сеанса

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

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

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

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

Постановка точек останова и трассировка кода печати

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

После остановки используйте пошаговое выполнение: F11 — шаг с заходом в процедуры, F10 — шаг через вызов. Особое внимание уделяйте местам, где заполняются параметры макета: типичная конструкция — Область.Параметры.НаименованиеПараметра = Значение. Именно здесь чаще всего теряются данные.

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

Отладка запросов внутри печатной формы

Если подозрение падает на запрос, скопируйте его текст в консоль запросов и выполните с теми же параметрами, что передаются из кода. Параметры удобно подсмотреть в отладчике в момент перед выполнением Запрос.Выполнить(). Несовпадение данных в консоли и в форме почти всегда означает, что в параметры передается не то значение — например, массив ссылок вместо одной ссылки или наоборот.

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

Отладка макета: области, параметры и типовые ошибки

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

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

Отдельный частый случай — заполнение параметров в цикле по строкам табличной части. Если область строки выводится через ТабличныйДокумент.Вывести(ОбластьСтрока), а параметры заполняются до получения области, значения будут «залипать» от предыдущей итерации. Правильный порядок: получить область, заполнить её параметры, вывести в документ.

Типичные ошибки при отладке печатных форм
01
Правка локальной копии .epf при том, что в базе зарегистрирована другая версия — изменения не выполняются, и отладчик останавливается в старом коде
02
Точка останова в клиентском коде при серверном вызове печати без ключа -debug на сервере — остановка не происходит
03
Имя области в коде отличается от имени в макете пробелом или регистром — ошибка «Область не найдена»
04
Заполнение параметров области до её получения из макета — в документ попадают значения предыдущей итерации
05
Проверка формы на одном документе — на документах с другим набором данных форма падает или выводит пустоту

Что делать, если форма не появляется в списке печати

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

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

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

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

Формы нет в списке команд печатиПроверяйте СведенияОВнешнейОбработке, назначение обработки и права пользователя
Форма есть, но при печати возникает ошибкаПодключайте отладчик и ставьте точку останова в функции Печать
Печать проходит без ошибок, но данные пустые или неверныеОтлаживайте запрос и заполнение параметров областей макета
Ошибка только на серверной базе, на файловой копии всё работаетПроверяйте ключ -debug, различия данных и права на сервере

Проверка результата и безопасная доработка

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

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

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

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

Команда печати
Норма

Форма видна в списке печати у пользователей с нужными правами

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

Команды нет — проверять регистрацию и назначение

Формирование документа
Норма

Табличный документ формируется без ошибок на разных документах

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

Исключение или пустой документ

Данные в параметрах
Норма

Все поля заполнены значениями из объекта печати

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

Остались имена параметров или пустые ячейки

Многострочные документы
Норма

Все строки выведены, итоги сходятся

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

Дублирование значений строк, обрыв таблицы

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

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

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

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

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

Как отладить форму под другим пользователем?

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

Форма работает на файловой копии, но падает на сервере. В чем причина?

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

Как быстро найти, где теряются данные, без пошаговой трассировки?

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

Нужно ли перерегистрировать обработку после каждой правки?

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