Печатная форма + кнопка в документе 1С без снятия с поддержки

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

Что выбрать: внешний .epf или расширение

Внешняя печатная форма (.epf) — лучший вариант, если достаточно пункта Печать → Ваша форма и вы хотите минимум изменений и максимум совместимости с обновлениями.

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

Надёжный паттерн для типовых: печать — во внешнем .epf, а кнопка — в расширении, которое просто вызывает нужную команду печати.

Вариант 1: внешняя печатная форма (.epf) с появлением в меню «Печать»

1) Создайте внешнюю обработку и макет

  1. Конфигуратор → Файл → Новый → Внешняя обработка.
  2. Добавьте Макет (часто табличный документ) и подготовьте области (например, Шапка, Строка, Подвал).

2) Зарегистрируйте печатную форму

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

Функция СведенияОВнешнейОбработке() Экспорт
    Парам = Новый Структура;
    Парам.Вставить("Вид", "ПечатнаяФорма");
    Парам.Вставить("Наименование", "Моя печатная форма");

    Назначение = Новый Массив;
    Назначение.Добавить("Документ.РеализацияТоваровУслуг"); // замените на свой документ
    Парам.Вставить("Назначение", Назначение);

    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление");
    Команды.Колонки.Добавить("Идентификатор");
    Команды.Колонки.Добавить("Использование");

    Стр = Команды.Добавить();
    Стр.Представление = "Моя форма";
    Стр.Идентификатор = "MyPrint_001";
    Стр.Использование = "ПечатнаяФорма";

    Парам.Вставить("Команды", Команды);
    Возврат Парам;
КонецФункции

3) Сформируйте табличный документ в Печать(...)

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

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    ТабДок = Новый ТабличныйДокумент;
    Макет = ЭтотОбъект.ПолучитьМакет("МакетПечати");

    ОблШапка = Макет.Области.Найти("Шапка");
    Если ОблШапка <> Неопределено Тогда
        ОблШапка.Параметры.Вставить("Дата", ТекущаяДата());
        ТабДок.Вывести(ОблШапка);
    КонецЕсли;

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

Не делайте жёстких обращений к областям макета «в лоб». Если макет могут править пользователи, ищите области через Найти() и проверяйте на Неопределено, иначе печать начнёт падать.

4) Подключите .epf в режиме «Предприятие»

Обычно путь такой: Администрирование → Печатные формы/отчёты/обработки → Подключаемые (названия зависят от конфигурации). Добавьте файл .epf, проверьте назначение на нужный документ — после этого пункт появится в Печать.

Вариант 2: кнопка в документе через расширение (без правки типовой)

1) Создайте расширение

Конфигуратор → Конфигурация → Расширения конфигурации → создать расширение.

2) Добавьте команду и кнопку на форму документа

Практичнее всего сделать это в редакторе формы (в расширении): добавить Команду формы и вывести её на командную панель или в «Ещё».

Если нужно программно (редко, но бывает), идея такая:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Ком = Команды.Добавить("ПечатьМояФорма");
    Ком.Заголовок = "Моя печать";
    Ком.Действие = "ПечатьМояФорма";
КонецПроцедуры

&НаКлиенте
Процедура ПечатьМояФорма(Команда)
    // Здесь: либо вызвать подключаемую печать, либо сформировать табличный документ,
    // либо открыть обработку с настройками перед печатью.
КонецПроцедуры

3) Свяжите кнопку с печатью

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

Частые ошибки

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

FAQ

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

Что лучше для обновлений: .epf или расширение?
Для печатной формы — чаще безопаснее .epf. Для UI-кнопки — расширение. Комбинация даёт максимум устойчивости.

Нужно ли снимать конфигурацию с поддержки?
Нет. И внешний .epf, и расширение работают без снятия с поддержки, если вы не редактируете типовые объекты напрямую.