Печатная форма + кнопка в документе 1С без снятия с поддержки
Сделать печатную форму и добавить кнопку в документ без переписывания типовой проще всего так: печатную форму оформить как внешнюю (.epf) (она появится в меню Печать), а кнопку на форме документа добавить через расширение конфигурации (она будет на командной панели и может запускать печать).
Что выбрать: внешний .epf или расширение
Внешняя печатная форма (.epf) — лучший вариант, если достаточно пункта Печать → Ваша форма и вы хотите минимум изменений и максимум совместимости с обновлениями.
Расширение нужно, когда важна именно отдельная кнопка (например, «Печать по шаблону»), условия видимости, дополнительные проверки, заполнение реквизитов и т. п.
Надёжный паттерн для типовых: печать — во внешнем .epf, а кнопка — в расширении, которое просто вызывает нужную команду печати.
Вариант 1: внешняя печатная форма (.epf) с появлением в меню «Печать»
1) Создайте внешнюю обработку и макет
- Конфигуратор → Файл → Новый → Внешняя обработка.
- Добавьте Макет (часто табличный документ) и подготовьте области (например,
Шапка,Строка,Подвал).
2) Зарегистрируйте печатную форму
Во многих типовых конфигурациях (с механизмом подключаемых печатных форм) обработка должна вернуть описание в экспортной функции.
Функция СведенияОВнешнейОбработке() Экспорт
Парам = Новый Структура;
Парам.Вставить("Вид", "ПечатнаяФорма");
Парам.Вставить("Наименование", "Моя печатная форма");
Назначение = Новый Массив;
Назначение.Добавить("Документ.РеализацияТоваровУслуг"); // замените на свой документ
Парам.Вставить("Назначение", Назначение);
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление");
Команды.Колонки.Добавить("Идентификатор");
Команды.Колонки.Добавить("Использование");
Стр = Команды.Добавить();
Стр.Представление = "Моя форма";
Стр.Идентификатор = "MyPrint_001";
Стр.Использование = "ПечатнаяФорма";
Парам.Вставить("Команды", Команды);
Возврат Парам;
КонецФункции
3) Сформируйте табличный документ в Печать(...)
Сигнатура может отличаться в зависимости от конфигурации, но принцип один: собрать ТабличныйДокумент и отдать его в стандартный механизм печати (если он используется в вашей базе).
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ТабДок = Новый ТабличныйДокумент;
Макет = ЭтотОбъект.ПолучитьМакет("МакетПечати");
ОблШапка = Макет.Области.Найти("Шапка");
Если ОблШапка <> Неопределено Тогда
ОблШапка.Параметры.Вставить("Дата", ТекущаяДата());
ТабДок.Вывести(ОблШапка);
КонецЕсли;
// Дальше — добавление в коллекцию печатных форм (метод зависит от типовой)
// Например, через подсистему управления печатью, если она есть в конфигурации.
КонецПроцедуры
Не делайте жёстких обращений к областям макета «в лоб». Если макет могут править пользователи, ищите области через Найти() и проверяйте на Неопределено, иначе печать начнёт падать.
4) Подключите .epf в режиме «Предприятие»
Обычно путь такой: Администрирование → Печатные формы/отчёты/обработки → Подключаемые (названия зависят от конфигурации). Добавьте файл .epf, проверьте назначение на нужный документ — после этого пункт появится в Печать.
Вариант 2: кнопка в документе через расширение (без правки типовой)
1) Создайте расширение
Конфигуратор → Конфигурация → Расширения конфигурации → создать расширение.
2) Добавьте команду и кнопку на форму документа
Практичнее всего сделать это в редакторе формы (в расширении): добавить Команду формы и вывести её на командную панель или в «Ещё».
Если нужно программно (редко, но бывает), идея такая:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Ком = Команды.Добавить("ПечатьМояФорма");
Ком.Заголовок = "Моя печать";
Ком.Действие = "ПечатьМояФорма";
КонецПроцедуры
&НаКлиенте
Процедура ПечатьМояФорма(Команда)
// Здесь: либо вызвать подключаемую печать, либо сформировать табличный документ,
// либо открыть обработку с настройками перед печатью.
КонецПроцедуры
3) Свяжите кнопку с печатью
Самый устойчивый подход: кнопка не рисует печать сама, а запускает вашу подключаемую печатную форму (или стандартный механизм печати с выбором нужной команды). Тогда обновления типовой затрагивают вас минимально.
Частые ошибки
- Печатная форма подключена, но не видна: неверно заполнены
Вид,Назначение,Идентификаторкоманды или назначение не на тот метаданный объект. - Команда есть в расширении, но кнопки не видно: команду не разместили на панели/в группе, либо она скрыта настройками интерфейса/правами.
- Печать «падает» после изменения макета: код ожидает фиксированные области и не проверяет
Неопределено. - В расширении заимствовали форму, но «не хватает» реквизитов/команд: их нужно добавить в расширение явно (зависит от того, что и как заимствовано).
FAQ
Можно ли сделать кнопку без расширения?
Обычно нет: внешний .epf стандартно добавляется в меню Печать, а отдельная кнопка на форме — зона расширения (или прямой правки типовой, что вы как раз избегаете).
Что лучше для обновлений: .epf или расширение?
Для печатной формы — чаще безопаснее .epf. Для UI-кнопки — расширение. Комбинация даёт максимум устойчивости.
Нужно ли снимать конфигурацию с поддержки?
Нет. И внешний .epf, и расширение работают без снятия с поддержки, если вы не редактируете типовые объекты напрямую.