Документы и Печать · 13 мин
Как исправить внешнюю печатную форму в 1С
Разбираем, как исправить внешнюю печатную форму в 1С: открытие в конфигураторе, правка макета и модуля, типовые ошибки, проверка результата и ответы на вопросы.
Внешняя печатная форма в 1С — это файл с расширением .epf, который подключается к конфигурации через подсистему дополнительных отчетов и обработок и позволяет печатать документы без изменения самой конфигурации. Когда форма перестает работать — выдает ошибку, печатает пустые поля или не отображается в списке печати — проблема почти всегда находится в одном из трех мест: в макете, в программном модуле обработки или в регистрационных данных, которые форма возвращает конфигурации.
Исправить внешнюю печатную форму можно собственными силами, если у вас есть доступ к конфигуратору и базовые навыки работы с ним. Для этого не нужно снимать конфигурацию с поддержки и не нужно обновлять релиз — вся работа ведется только с файлом обработки. Однако важно понимать, как устроена форма изнутри, иначе правки «наугад» приведут к новым ошибкам.
Ниже разобран полный цикл: от диагностики симптомов до правки макета и кода, проверки результата и типичных ошибок. Инструкция ориентирована на конфигурации с библиотекой стандартных подсистем (УТ, ERP, Бухгалтерия, ЗУП), но общие принципы применимы и к самописным решениям.
Как определить, что именно сломалось в печатной форме
Прежде чем открывать конфигуратор, зафиксируйте симптом. От него зависит, где искать ошибку. Если форма не появляется в списке печати документа — проблема в регистрационных данных или в настройках дополнительных обработок. Если форма запускается, но падает с ошибкой — смотрите текст сообщения: в нем обычно указаны модуль, строка и причина. Если форма открывается, но поля пустые или содержат неверные данные — дело в запросе, в именах параметров макета или в логике заполнения.
Полезно воспроизвести ошибку в копии базы и включить технологический журнал или хотя бы внимательно скопировать полный текст ошибки. Формулировки вида «Поле объекта не обнаружено» или «Метод объекта не обнаружен» почти всегда означают, что после обновления конфигурации реквизит или метод переименовали, а форма обращается к старому имени.
Назначение обработки, функция СведенияОВнешнейОбработке, права пользователя
Текст ошибки: имя реквизита или метода, номер строки модуля
Имена параметров в макете, запрос к данным, заполнение параметров
Переименованные объекты конфигурации, изменение API БСП
Как открыть внешнюю печатную форму для редактирования
Внешняя печатная форма хранится в виде файла .epf. Его можно найти двумя способами. Первый — через справочник дополнительных отчетов и обработок: откройте «Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки», найдите нужную форму и посмотрите, откуда она была загружена. В ряде конфигураций доступна команда выгрузки обработки в файл. Второй способ — взять исходный файл из архива, где хранятся доработки, если такой архив ведется.
Открывается файл в конфигураторе: запустите конфигуратор нужной информационной базы, выберите меню «Файл → Открыть» и укажите файл .epf. Откроется редактор внешней обработки с деревом объектов: формы, макеты, модули. Изменение конфигурации при этом не требуется — вы работаете только с внешним файлом.
Если форма защищена паролем или поставляется без исходного кода (модуль скрыт), отредактировать ее штатными средствами не получится. В этом случае обратитесь к разработчику формы или создайте новую форму с нуля на основе типовой.
Как исправить ошибки в модуле печатной формы
Большинство сбоев возникает в модуле объекта обработки. Откройте его через контекстное меню корня обработки — «Модуль объекта». Типовая внешняя печатная форма для конфигураций на БСП содержит две ключевые части: функцию СведенияОВнешнейОбработке(), которая описывает форму для системы, и экспортную процедуру Печать(), которая формирует табличный документ.
Типичная ошибка после обновления конфигурации — обращение к реквизиту, который переименовали или удалили. Например, код содержит Документ.Организация.ИНН, а структура справочника изменилась. Найдите строку из текста ошибки, откройте в конфигураторе дерево конфигурации и проверьте актуальное имя объекта. Исправьте обращение и, при необходимости, логику получения данных.
Вторая группа ошибок — изменения в API библиотеки стандартных подсистем. Например, устаревшие вызовы общих модулей или изменение состава параметров процедуры Печать. Проверьте, как объявлена процедура в типовой форме аналогичного документа, и приведите сигнатуру к актуальному виду:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// формирование табличного документа
КонецПроцедуры
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Счет на оплату (внешний)'");
НоваяКоманда.Идентификатор = "СчетНаОплату";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ИдентификаторПечатнойФормы = "СчетНаОплату";
Возврат ПараметрыРегистрации;
КонецФункцииОбратите внимание на идентификаторы команд: они должны совпадать с теми, что используются в процедуре Печать при проверке КоллекцияПечатныхФорм. Расхождение идентификаторов — частая причина ситуации, когда форма зарегистрирована, но при печати ничего не происходит.
Как исправить макет печатной формы
Макет — это табличный документ внутри обработки, из которого формируется печатная форма. Откройте его через ветку «Макеты» в дереве обработки. Типовые проблемы макета: параметры, на которые ссылается код, отсутствуют или названы иначе; области удалены или переименованы; нарушена структура шаблона (для макетов типа «Текстовый документ» или MXL с шаблонами).
Проверьте соответствие имен. Если в коде есть строка Область.Параметры.Покупатель = ..., в макете должна существовать ячейка с параметром Покупатель, а не ПокупательНаименование или Контрагент. После обновлений типовых форм, на основе которых делалась внешняя, такие расхождения возникают часто. Исправляется это либо переименованием параметра в макете, либо правкой кода — главное, чтобы имена совпадали.
Если нужно изменить содержимое формы — добавить колонку, логотип, поле с комментарием — делайте это прямо в макете: добавьте ячейку, задайте ей свойство «Заполнение» (текст или параметр), при необходимости расширьте область. Для параметра не забудьте добавить заполнение в модуле, иначе поле выйдет пустым.
Как проверить и обновить регистрацию формы в базе
После сохранения исправленного файла форму нужно перезагрузить в базу. Откройте список дополнительных отчетов и обработок, найдите элемент, откройте его карточку и используйте команду замены файла обработки (в разных конфигурациях она называется «Заменить файл» или доступна через «Ещё»). Укажите исправленный .epf. Альтернатива — удалить старую регистрацию и загрузить форму заново, но при этом слетят настроенные назначения и быстрый доступ.
Проверьте, что в карточке обработки корректно заполнено назначение — перечень документов, для которых форма доступна. Если после правок вы изменили массив Назначение в коде, карточку нужно обновить: в ряде конфигураций есть кнопка обновления списка назначений из файла.
- 1Сохраните резервную копию файла .epf
- 2Воспроизведите ошибку и зафиксируйте полный текст сообщения
- 3Откройте файл в конфигураторе через Файл → Открыть
- 4Исправьте модуль объекта или макет по тексту ошибки
- 5Сохраните файл и проверьте синтаксис модуля (Ctrl+F7 в модуле не используется для epf — проверяйте через отладку или загрузку)
- 6Перезагрузите обработку в базе через карточку дополнительной обработки
- 7Сформируйте печатную форму на тестовом документе и сверьте результат
Как проверить результат и что делать при повторных ошибках
Проверку выполняйте на документе, максимально близком к реальному: с заполненными табличными частями, скидками, длинными наименованиями. Сформируйте печатную форму и пройдитесь по контрольным точкам: все ли поля заполнены, верно ли переносятся суммы и итоги, не обрезаются ли длинные строки, корректно ли работает печать нескольких документов сразу (массовая печать часто выявляет ошибки, не видимые на одном документе).
Если ошибка повторяется, используйте отладку. В конфигураторе включите «Отладка → Начать отладку», откройте внешнюю обработку файлом, поставьте точку останова в процедуре Печать и в пользовательском режиме запустите формирование формы. Пошаговое выполнение покажет, на какой строке и с какими данными возникает сбой. Для серверных вызовов убедитесь, что отладка на сервере разрешена.
Как проверить результат
Команда видна для нужных видов документов
Команды нет или она появляется у лишних документов
Все параметры выводятся с реальными данными
Пустые ячейки, имена параметров вместо значений
Формируются все документы, итоги сходятся
Ошибка на втором и последующих документах
Форма работает под обычным пользователем
Работает только под администратором
Когда проще создать новую форму, а не чинить старую
Не всегда ремонт оправдан. Если форма написана давно, под устаревшую версию БСП, содержит защищенный модуль или требует переработки большей части кода, быстрее и надежнее создать новую внешнюю печатную форму на основе актуальной типовой. Для этого скопируйте типовую процедуру печати из модуля менеджера документа, перенесите ее во внешнюю обработку, добавьте функцию регистрации и доработайте макет под свои требования.
Как выбрать действие
Что важно запомнить
Внешняя печатная форма исправляется только в конфигураторе через открытие файла .epf: сначала диагностируйте симптом, затем правьте модуль или макет, после чего перезагружайте обработку в базе и проверяйте на тестовом документе. Всегда сохраняйте резервную копию файла и проверяйте форму под правами обычного пользователя.
Частые вопросы
Можно ли исправить внешнюю печатную форму без конфигуратора?
Нет. Файл .epf — это скомпилированная обработка, и редактировать ее макет и модуль можно только в конфигураторе 1С. В пользовательском режиме доступна лишь замена файла целиком и настройка назначений.
Почему после обновления конфигурации форма стала выдавать ошибку «Поле объекта не обнаружено»?
При обновлении разработчики конфигурации могли переименовать или удалить реквизит, к которому обращается форма. Откройте модуль обработки, найдите обращение к указанному в ошибке полю и замените его на актуальное имя из дерева конфигурации. Если реквизит удален совсем, данные придется получать из другого источника, например из связанного справочника.
Форма зарегистрирована, но не появляется в списке печати документа. Что проверить?
Проверьте три вещи: назначение в карточке дополнительной обработки (должен быть указан нужный вид документа), массив «Назначение» в функции СведенияОВнешнейОбработке внутри файла и права пользователя на использование дополнительных обработок. Также убедитесь, что глобальная настройка использования дополнительных отчетов и обработок включена.
Как исправить ситуацию, когда на печати вместо значений выводятся имена параметров, например [Покупатель]?
Это признак того, что ячейка макета имеет заполнение «Шаблон», но параметр с таким именем не заполняется в коде, либо имя в шаблоне не совпадает с именем в модуле. Сверьте имена в макете и в строках вида Область.Параметры.ИмяПараметра = Значение. Имена должны совпадать посимвольно.
Опасно ли редактировать внешнюю печатную форму для данных базы?
Сама по себе форма только читает данные и формирует табличный документ, поэтому испортить учетные данные она не может. Риск в другом: синтаксическая ошибка в модуле приведет к сбою при печати у всех пользователей, а некорректный запрос может сильно замедлить формирование. Поэтому правки тестируют на копии и только затем заменяют файл в рабочей базе.
Чем отличается исправление формы для конфигурации без БСП?
В конфигурациях без библиотеки стандартных подсистем нет функции СведенияОВнешнейОбработке — форма обычно открывается как обычная внешняя обработка через Файл → Открыть, а печать запускается собственной кнопкой. Принципы правки те же: модуль, макет, соответствие имен параметров, но регистрационные механизмы будут зависеть от конкретной самописной подсистемы печати.