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

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

Как добавить команду печати в документ 1С

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

Команда печати в документе 1С — это кнопка или пункт меню, который формирует табличный документ по макету и выводит его на экран или принтер. В типовых конфигурациях большинство печатных форм уже встроены, но на практике часто требуется добавить свою форму: специфический акт, внутреннюю накладную или доверенность с корпоративным шаблоном.

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

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

Определите, какой способ добавления печати вам подходит

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

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

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

Встроенная команда в конфигураторе

Подходит для самописных и доработанных конфигураций; минус — усложняется обновление типовых решений.

Внешняя печатная форма

Подходит для типовых конфигураций на поддержке; ограничение — требуется подсистема «Дополнительные отчеты и обработки» из БСП.

Расширение конфигурации

Компромисс: команда добавляется без снятия с поддержки; ограничение — не все объекты и методы доступны в расширениях.

Создайте макет печатной формы

Макет — это шаблон, по которому программа строит табличный документ. В конфигураторе откройте ветку «Документы», найдите нужный документ, раскройте его и в ветке «Макеты» добавьте новый макет типа «Табличный документ». Дайте ему понятное имя, например «МакетАктаВыполненныхРабот».

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

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

Добавьте процедуру формирования печатной формы

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

Типовая структура процедуры: получить макет через ПолучитьМакет(), создать новый табличный документ, получить области макета, заполнить параметры данными документа и вывести области методом Вывести(). Для табличной части область строки выводится в цикле по строкам документа.

Функция СформироватьПечатнуюФорму(СсылкаНаДокумент) Экспорт

Макет = Документы.РеализацияТоваров.ПолучитьМакет("МакетАктаВыполненныхРабот");

ТабДокумент = Новый ТабличныйДокумент;

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

ОбластьШапка.Параметры.НомерДокумента = СсылкаНаДокумент.Номер;

ОбластьШапка.Параметры.Контрагент = СсылкаНаДокумент.Контрагент;

ТабДокумент.Вывести(ОбластьШапка);

ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовары");

Для Каждого СтрокаТовара Из СсылкаНаДокумент.Товары Цикл

ОбластьСтрока.Параметры.Номенклатура = СтрокаТовара.Номенклатура;

ОбластьСтрока.Параметры.Количество = СтрокаТовара.Количество;

ОбластьСтрока.Параметры.Сумма = СтрокаТовара.Сумма;

ТабДокумент.Вывести(ОбластьСтрока);

КонецЦикла;

Возврат ТабДокумент;

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

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

Зарегистрируйте команду печати в подсистеме БСП

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

Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

КомандаПечати = КомандыПечати.Добавить();

КомандаПечати.Идентификатор = "АктВыполненныхРабот";

КомандаПечати.Представление = НСтр("ru = 'Акт выполненных работ (внутренний)'");

КомандаПечати.Порядок = 50;

КонецПроцедуры

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

Порядок добавления встроенной команды печати
  1. 1
    Создайте макет табличного документа с параметрами и именованными областями.
  2. 2
    Добавьте в модуль менеджера функцию формирования табличного документа.
  3. 3
    Зарегистрируйте команду в процедуре ДобавитьКомандыПечати.
  4. 4
    Свяжите идентификатор команды с макетом в процедуре Печать.
  5. 5
    Обновите конфигурацию базы данных и проверьте кнопку в меню «Печать».

Как добавить печать без изменения конфигурации: внешняя форма

Если конфигурация типовая, создайте внешнюю обработку. В конфигураторе выберите «Файл — Новый — Внешняя обработка». В модуле объекта обработки добавьте функцию СведенияОВнешнейОбработке(), которая возвращает структуру с видом «ПечатнаяФорма», назначением (имя документа) и списком команд.

Также потребуется экспортная процедура Печать с параметрами МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати и ПараметрыВывода — по этой сигнатуре БСП вызывает внешнюю форму. Внутри процедуры формируется табличный документ по макету, добавленному в макеты обработки, и помещается в коллекцию печатных форм.

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

Проверка результата и типичные ошибки

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

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

Типичные ошибки
01
Несовпадение имен параметров макета и кода — ячейки в форме остаются пустыми без сообщения об ошибке.
02
Забыто обновление конфигурации базы данных — команда зарегистрирована, но кнопка не появляется.
03
Обращение к реквизитам документа через точку в цикле — многократные обращения к базе замедляют печать больших документов.
04
Дублирование идентификатора команды с типовой формой — новая команда перекрывает или конфликтует со стандартной.
05
Отсутствие проверки заполненности реквизитов — на непроведенном документе форма выводится с пустыми значениями.
Контрольные точки

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

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

Новый пункт виден с заданным названием

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

Пункт отсутствует — проверьте регистрацию команды и обновление базы

Заполнение данных
Норма

Все параметры и строки табличной части заполнены

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

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

Итоговые суммы
Норма

Итоги на форме совпадают с итогами документа

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

Расхождения — ошибка в цикле вывода строк или формулах

Часто задаваемые вопросы

Можно ли добавить кнопку печати прямо на форму документа, а не в меню «Печать»?

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

Почему внешняя печатная форма не появляется в меню после подключения?

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

Как вывести на печать сразу несколько документов из списка?

Механизм печати БСП поддерживает это автоматически: процедура формирования получает массив ссылок. При выделении нескольких документов в списке и выборе команды печати каждый документ выводится в общий табличный документ. Важно в коде корректно обрабатывать массив объектов и разделять документы разрывом страницы.

Что делать, если при печати возникает ошибка «Макет не найден»?

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

Можно ли использовать макет в формате Word или Excel?

Да, внешние печатные формы поддерживают макеты типа DOCX и XLSX через механизм БСП: шаблон загружается в макет обработки, а данные подставляются в поля шаблона. Это удобно, когда форму часто правят пользователи, не знакомые с конфигуратором. Для встроенных форм стандартным остается табличный документ.

Нужно ли программирование, чтобы добавить печатную форму?

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

Итог

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

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