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

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

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

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

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

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

Ниже разобраны все три подхода с конкретными шагами, условиями их применения и способами проверки результата. Материал ориентирован на конфигурации с БСП (УТ 11, ERP, КА, БП 3.0), где печатные формы регистрируются через справочник «Дополнительные отчеты и обработки», но приёмы работают и для самописных механизмов печати.

Почему внешнюю печатную форму нельзя отладить «как обычно»

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

Кроме того, печатная форма часто выполняется в фоновом задании — например, при печати «на сервере» в клиент-серверном режиме или при групповой печати. В этом случае код исполняется в отдельном сеансе, к которому отладчик не подключён по умолчанию. Это нужно учитывать при выборе способа отладки.

Ещё одна особенность — макет и данные. Ошибка может быть не в коде, а в самом макете (удалили параметр, переименовали область) или в данных (запрос вернул пустую выборку). Поэтому отладку стоит начинать с локализации: падает ли код с исключением, выполняется ли он до конца, но с пустым результатом, или проблема в выводе макета.

Ошибка с текстом исключенияКод падает на конкретной строке

Текст ошибки в сообщении пользователю — по нему найдите строку в модуле

Печатная форма открывается, но пустаяЗапрос или данные не вернули результат

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

Выводятся не те поля или старый вариантВ базе зарегистрирована другая версия обработки

Сверить файл .epf с версией в справочнике дополнительных обработок

Ошибка только при печати у пользователяПроблема в правах или в серверном вызове

Проверить права на документ и режим выполнения (клиент/сервер)

Подготовка: что проверить перед отладкой

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

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

Третий момент — режим отладки. Современные платформы по умолчанию используют отладку по HTTP. Если отладчик не подключается к сеансу, проверьте настройку в конфигураторе: Сервис → Параметры → вкладка, отвечающая за протокол отладки. При несоответствии протокола на клиенте и сервере точки останова просто не сработают, без каких-либо сообщений об ошибке.

Способ 1: отладка через подключение к пользовательскому сеансу

Это основной и самый надёжный способ. Порядок действий такой: откройте конфигуратор той же базы, в которой работает пользователь. Запустите отладку (Отладка → Начать отладку) — откроется тонкий клиент в режиме отладки. Затем в конфигураторе откройте файл внешней обработки: Файл → Открыть → выберите ваш .epf. Конфигуратор загрузит модули обработки в редактор.

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

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

Порядок действий при отладке через сеанс
  1. 1
    Включите отладку на сервере (для клиент-серверного режима) или просто откройте конфигуратор файловой базы
  2. 2
    Запустите отладку: Отладка → Начать отладку
  3. 3
    Откройте файл .epf через Файл → Открыть
  4. 4
    Установите точку останова в модуле объекта или формы
  5. 5
    В пользовательском режиме откройте документ и нажмите кнопку печати
  6. 6
    При остановке пошагово пройдите код (F11 — шаг с заходом, F10 — шаг через), просматривая значения переменных
  7. 7
    Проверьте итоговый табличный документ в пользовательском режиме

Способ 2: запуск обработки напрямую из конфигуратора

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

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

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

Способ 3: отладка без отладчика — сообщения и журнал

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

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

bsl
ЗаписьЖурналаРегистрации("ОтладкаПечатнойФормы", УровеньЖурналаРегистрации.Информация, , , "Выборка: " + Выборка.Количество() + " строк, документ: " + Строка(СсылкаНаДокумент));

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

Отладка запроса и макета отдельно

Большинство проблем печатных форм — это пустая или неправильная выборка данных. Запрос из модуля обработки удобно проверить в консоли запросов (внешняя обработка, широко распространённая среди разработчиков) или встроенной консоли, если она есть в конфигурации. Скопируйте текст запроса, подставьте реальные параметры (ссылку на проблемный документ) и выполните. Если результат пустой — проверяйте соединения таблиц, отборы по датам и условия по проведённости документа.

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

Если форма построена на СКД (схема компоновки данных), отлаживайте её через настройки варианта: откройте схему в конфигураторе, на закладке «Настройки» сформируйте отчёт с тестовыми параметрами и смотрите результат. Ошибки СКД (например, недоступное поле) обычно выдают внятное сообщение, которое указывает на проблемный ресурс или вычисляемое поле.

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

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

Остановка на точке останова
Норма

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

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

Точка останова серая или выполнение проходит мимо — открыт не тот файл или не подключён сеанс

Результат запроса
Норма

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

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

Пустая выборка при существующем документе — проверять условия запроса

Заполнение параметров макета
Норма

Все поля печатной формы заполнены значениями

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

Пустые поля при непустых данных — несовпадение имён параметров

Печать у пользователя
Норма

Форма формируется без ошибок под учётной записью пользователя

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

Ошибка только у пользователя — проверять права и серверный контекст

Типичные ошибки и как их избежать

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

Вторая группа ошибок связана с директивами компиляции. Код печатной формы, вызываемый с клиента, но выполняемый на сервере, должен быть в области с директивой &НаСервере, а обращения к данным документа — через серверные функции. Если процедура формирования печати объявлена &НаКлиенте и обращается к запросу напрямую, в тонком клиенте код упадёт с ошибкой о недоступности контекста.

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

Типичные ошибки
01
Отладка файла, не совпадающего с версией в базе — точки останова не срабатывают, время потеряно
02
Забытый тестовый код в обработчике ПриОткрытии — форма печатает тестовый документ у всех пользователей
03
Отладка серверной печати без подключения фоновых заданий — код выполняется мимо отладчика
04
Оставленные вызовы Сообщить() в рабочей версии — пользователи видят служебные сообщения при каждой печати
05
Изменение данных в отладчике в рабочей базе — риск повредить документы и зависнуть на блокировках

Когда отладку лучше доверить специалисту

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

Также не стоит экспериментировать в рабочей базе, если ошибка затрагивает регламентированные формы — счета-фактуры, УПД, ТОРГ-12. Неправильно сформированный документ, ушедший контрагенту или в отчётность, создаёт юридические риски. В таких случаях безопаснее воспроизвести проблему на копии базы и передать её разработчику с описанием шагов.

Итог

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

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

Частые вопросы

Почему точка останова не срабатывает, хотя отладка запущена?

Чаще всего причина в том, что открытый в конфигураторе файл .epf не совпадает с версией, зарегистрированной в базе. Выгрузите обработку из справочника дополнительных отчетов и откройте именно её. Также проверьте, что нужный сеанс отмечен в окне «Отладка → Подключение», и что протокол отладки (HTTP или TCP) совпадает на клиенте и сервере.

Как отладить печать, которая выполняется на сервере?

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

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

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

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

Сначала проверьте запрос в консоли запросов с реальной ссылкой на документ — возможно, выборка пустая из-за условий отбора. Если данные есть, сверьте имена параметров в макете с именами, которые заполняет код: при несовпадении платформа молча выводит пустоту. Третья причина — обращение к реквизиту, который в данном виде документа отсутствует.

Обновил обработку в базе, но печатается старый вариант. Что делать?

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

Чем отличается отладка внешней печатной формы от отладки встроенной?

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