Создание печатной формы — одна из самых частых задач при разработке учетных механизмов. Нередко начинающие разработчики сталкиваются с ситуацией: макет табличного документа создан и оформлен, однако на форме самого документа кнопка вывода на печать отсутствует или остается неактивной. Выясним причину такого поведения платформы и разберем практические способы подключения печатной формы к интерфейсу документа.
Макет в метаданных 1С — это лишь шаблон оформления данных (области, ячейки, параметры и форматирование). Сам по себе он не содержит инструкций о том, откуда считывать реквизиты, как их компоновать и в какой момент открывать окно предварительного просмотра. Чтобы связать макет с пользовательским интерфейсом, необходимо решить две задачи: создать команду вызова и написать обработчик формирования табличного документа.
Рассмотрим самый простой и быстрый способ, встроенный непосредственно в конфигуратор платформы. Он позволяет за пару минут сгенерировать каркас кода и привязать макет к командному интерфейсу.
Необходимо учитывать важную деталь: конструктор печати формирует универсальный шаблонный код. В реальных проектах созданный алгоритм часто требует доработки под специфику бизнес-логики и стандарты разработки.
Разберем архитектурно правильный способ реализации печати в конфигурациях, создаваемых с нуля или без использования тяжелых библиотек. Современные стандарты разработки 1С предписывают размещать процедуры формирования печатных форм в модуле менеджера документа, разделяя клиентский вызов и серверную обработку данных.
Выполним реализацию по шагам:
Команда (например, с именем ПечатьДокумента).Командная панель формы.Важное или Панель действий.Печать.
Функция СформироватьПечатнуюФорму(СсылкаНаДокумент) Экспорт
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Документ_Печать";
Макет = Документы.НашНовыйДокумент.ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Номер = СсылкаНаДокумент.Номер;
ОбластьШапка.Параметры.Дата = СсылкаНаДокумент.Дата;
ТабДокумент.Вывести(ОбластьШапка);
Возврат ТабДокумент;
КонецФункции
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ТабличныйДокумент = ПолучитьТабличныйДокументНаСервере(ПараметрКоманды);
ТабличныйДокумент.Показать("Печать документа");
КонецПроцедуры
&НаСервере
Функция ПолучитьТабличныйДокументНаСервере(СсылкаНаДокумент)
Возврат Документы.НашНовыйДокумент.СформироватьПечатнуюФорму(СсылкаНаДокумент);
КонецФункции
Если разработка ведется в типовой или доработанной конфигурации (ERP, КА, УТ, БП, ЗУП), стандартные команды платформы напрямую не используются. Печать строится через централизованную подсистему «Печать» БСП.
Рассмотрим порядок интеграции объекта в механизм БСП:
Процедура ДобавитьКомандыПечати(КомандыПечати, ПараметрыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ПечатьАкта";
КомандаПечати.Представление = НСтр("ru = 'Акт приема-передачи'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПечатьАкта") Тогда
ТабличныйДокумент = СформироватьАкт(МассивОбъектов, ОбъектыПечати);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ПечатьАкта",
НСтр("ru = 'Акт приема-передачи'"),
ТабличныйДокумент
);
КонецЕсли;
КонецПроцедуры
ПриОпределенииОбъектовСКомандамиПечати общего модуля УправлениеПечатьюПереопределяемый. После этого кнопка автоматически появится в типовом подменю «Печать».Проанализируем типовые ошибки, из-за которых кнопка печати может не отображаться на форме или оставаться недоступной для нажатия:
Автозаполнение сброшен в значение Ложь, добавленные команды объекта не появятся на экране сами. Потребуется вручную перетащить команду из панели доступных команд в элементы формы.Доступность должно быть установлено в Истина. Также кнопка может программно блокироваться обработчиками формы при открытии.Объект.Ссылка.Пустая()), стандартные алгоритмы либо отключают кнопку печати, либо принудительно запрашивают сохранение объекта перед выполнением операции.Просмотр или Использование для соответствующей команды метаданных, а также права на чтение макета и самого документа.Ложь), платформа автоматически исключает связанные кнопки из видимости интерфейса.