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

Документы и Печать · 12 мин

Как создать внешнюю печатную форму в 1С:УНФ

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

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

Механизм основан на подсистеме «Дополнительные отчеты и обработки» библиотеки стандартных подсистем (БСП), которая входит в состав УНФ. Обработка подключается через стандартный интерфейс, регистрируется для конкретного вида документа и появляется в меню «Печать» наряду со штатными формами.

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

Когда нужна внешняя печатная форма и какие есть альтернативы

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

Прежде чем создавать обработку, проверьте более простые варианты. В УНФ часть настроек печати доступна без программирования: в карточке организации задаются логотип и подписи, в форме документа по команде «Еще → Изменить макет» (в релизах, где включен редактор макетов) можно скорректировать типовой макет без конфигуратора. Если требуется только другой текст подвала или дополнительный реквизит, часто достаточно редактирования макета.

Сравнение вариантов

Редактирование типового макета

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

Внешняя печатная форма (.epf)

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

Изменение конфигурации

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

Что подготовить перед началом работы

Для разработки потребуется конфигуратор 1С и доступ к информационной базе УНФ (лучше — к копии для тестирования). Также понадобится шаблон внешней печатной формы: он входит в поставку БСП, а готовые заготовки для УНФ можно найти в составе демонстрационных примеров конфигурации или в типовых инструментах разработчика. Шаблон уже содержит обязательную процедуру СведенияОВнешнейОбработке — каркас, который подсистема использует для регистрации.

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

Создание обработки и процедура сведений

Откройте конфигуратор, создайте новую внешнюю обработку (Файл → Новый → Внешняя обработка) и сохраните её с понятным именем, например СчетНаОплату_Логотип.epf. В модуле объекта разместите экспортную функцию СведенияОВнешнейОбработке(). Она возвращает структуру с параметрами регистрации: вид обработки, версия, безопасный режим и таблица команд.

Ключевые параметры структуры: Вид = "ПечатнаяФорма", Назначение — массив с именем объекта метаданных (например, "Документ.СчетНаОплату"), БезопасныйРежим = Истина. В таблице команд добавьте строку: идентификатор (например, СчетНаОплатуВнешний), представление — именно оно появится в меню «Печать», использование — ВызовСерверногоМетода, модификатор при необходимости.

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();

ПараметрыРегистрации.Версия = "1.0";

ПараметрыРегистрации.БезопасныйРежим = Истина;

ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплату");

НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();

НоваяКоманда.Идентификатор = "СчетНаОплатуВнешний";

НоваяКоманда.Представление = НСтр("ru = 'Счет на оплату (с логотипом)'");

НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();

Возврат ПараметрыРегистрации;

КонецФункции

Если в модуле обработки нет доступа к общим модулям БСП напрямую (например, при автономной разработке), допустимо заполнять структуру вручную — создать структуру с теми же полями и таблицей значений для команд. Шаблоны из поставки БСП уже содержат такой вариант с проверкой подключения.

Макет и процедура формирования табличного документа

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

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

Порядок действий в модуле печати
  1. 1
    Объявите табличный документ и получите макет обработки
  2. 2
    Запросом выберите данные документов из массива ссылок
  3. 3
    В цикле заполните параметры шапки и выведите область
  4. 4
    Во вложенном цикле выведите строки табличной части
  5. 5
    Заполните подвал: итоги, сумма прописью, подписи
  6. 6
    Проверьте разрыв страницы через ПроверитьВывод перед выводом подвала
  7. 7
    Добавьте табличный документ в КоллекцияПечатныхФорм с синонимом макета
  8. 8
    Заполните ОбъектыПечати ссылкой на документ для связи с картинкой подписи

Для суммы прописью в УНФ есть штатные функции работы с числами прописью (модуль РаботаСКурсамиВалют и функции формирования суммы прописью в общих модулях УНФ/БСП). Не пишите собственный алгоритм — используйте типовые механизмы, они учитывают валюту документа.

Перед выводом подвала всегда вызывайте ТабличныйДокумент.ПроверитьВывод с массивом областей подвала. Без этой проверки итоги и подписи могут оказаться разорваны: итоговая сумма на одной странице, подписи — на другой.
ПЗ
Практическое замечание

Регистрация обработки в базе УНФ

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

Проверьте в карточке раздел «Назначение»: там должен быть указан нужный вид документа. Если назначение пустое — обработка не появится ни в одном меню печати. Также проверьте таблицу команд: представление команды станет пунктом меню «Печать». После записи откройте любой документ нужного вида, нажмите «Печать» — новая команда должна быть в списке.

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

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

Команда в меню «Печать» документа
Норма

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

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

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

Открытие формы
Норма

Появляется табличный документ с заполненными данными

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

Ошибка выполнения — смотрите текст в журнале регистрации, чаще всего неверное имя параметра макета

Содержимое
Норма

Все реквизиты заполнены, итоги сходятся с документом

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

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

Многостраничная печать
Норма

Подвал не разорван, нумерация страниц корректна

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

Подписи оторваны от таблицы — нет проверки вывода областей

Типичные ошибки и ограничения

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

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

Типичные ошибки
01
Вид обработки указан как «Дополнительная обработка» вместо «Печатная форма» — команда не появится в меню «Печать»
02
Идентификатор команды совпадает со штатным — внешняя форма перекрывает типовую или конфликтует с ней
03
Имена параметров в макете и в коде различаются — поля в документе остаются пустыми
04
Нет проверки ПроверитьВывод перед подвалом — итоги и подписи разрываются между страницами
05
Тестирование сразу на рабочей базе — пользователи видят недоделанную форму и ошибки выполнения

Обновление и сопровождение формы

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

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

Итог

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

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

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

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

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

Почему форма видна одним пользователям, но не видна другим?

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

Как вывести в форму логотип и факсимильную подпись?

Храните изображения в базе: логотип — в карточке организации, подписи — как присоединенные файлы физических лиц. В коде получайте двоичные данные картинки и выводите в область макета через объект рисунка табличного документа. Чтение файлов с диска в безопасном режиме недоступно.

Одна обработка может содержать несколько печатных форм?

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

Что делать, если после обновления УНФ форма перестала работать?

Откройте журнал регистрации и найдите текст ошибки. Чаще всего переименован реквизит документа или общий модуль, к которому обращается код. Исправьте обращения в модуле обработки, загрузите новую версию файла в карточку дополнительной обработки и проверьте печать на тестовом документе.

Можно ли заменить штатную форму, а не добавлять новую команду?

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