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

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

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

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

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

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

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

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

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

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

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

Отладка при открытии файла напрямую

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

Порядок действий: откройте .epf в конфигураторе, найдите в модуле формы обработчик команды печати или процедуру формирования табличного документа, поставьте точку останова (F9) на первой строке процедуры. Затем нажмите F5, в открывшемся клиентском сеансе откройте файл обработки и запустите формирование печатной формы. Управление перейдёт в конфигуратор на точке останова.

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

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

Отладка формы, подключенной через «Дополнительные отчеты и обработки»

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

Чтобы отладить такую форму, откройте в конфигураторе тот же файл .epf, который загружен в справочник. Если файла нет, выгрузите его: в форме элемента справочника «Дополнительные отчеты и обработки» есть команда выгрузки во внешний файл. Затем поставьте точки останова в экспортной процедуре Печать или в функции СведенияОВнешнейОбработке модуля объекта.

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

Если точка останова не срабатывает, хотя форма явно выполняется, почти наверняка код выполняется на сервере, а отладка сервера не настроена. Это самая распространённая ситуация в клиент-серверных базах — она разобрана в следующем разделе.

Отладка серверного кода и безопасного режима

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

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

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

ini
# Параметр запуска службы агента сервера 1С для отладки
# В реестре (Windows), ветка ImagePath службы "Агент сервера 1С:Предприятия":
"C:\Program Files\1cv8\<версия>\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug
# После изменения — перезапустить службу

Что проверять в коде печатной формы

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

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

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

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

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

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

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

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

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

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

Версия обработки в базе
Норма

Поведение формы изменилось после перезагрузки файла

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

Форма работает по-старому — загружена не та версия

Данные на печати
Норма

Все поля заполнены, суммы совпадают с документом

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

Пустые поля или расхождение итогов

Работа в штатном режиме
Норма

Печать выполняется из кнопки Печать без ошибок

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

Работает только при открытии файла напрямую

Разные документы
Норма

Корректный вывод на 3+ документах разного вида

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

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

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

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

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

Как отладить функцию СведенияОВнешнейОбработке?

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

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

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

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

Чаще всего в коде используются операции, недоступные на сервере или в безопасном режиме: модальные вызовы, работа с файловой системой клиента, обращение к объектам через COM. Проверьте директивы компиляции процедур (&НаСервере, &НаКлиенте) и перенесите файловые операции на клиентскую сторону.

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

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

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

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