Документы и Печать · 11 мин
Как добавить команду печати в документ 1С
Как добавить команду печати в документ 1С: создание макета, команды и процедуры печати в конфигураторе, подключение внешней печатной формы, типичные ошибки.
Команда печати в документе 1С — это кнопка или пункт меню, который формирует табличный документ по макету и выводит его на экран или принтер. В типовых конфигурациях большинство печатных форм уже встроены, но на практике часто требуется добавить свою форму: специфический акт, внутреннюю накладную или доверенность с корпоративным шаблоном.
Существует два основных пути: доработка конфигурации через конфигуратор (добавление макета, команды и обработчика в модуле менеджера документа) и подключение внешней печатной формы через механизм «Дополнительные отчеты и обработки» без изменения конфигурации. Выбор зависит от того, снята ли конфигурация с поддержки, есть ли доступ к конфигуратору и насколько часто будет меняться форма.
Ниже разобраны оба способа на уровне конкретных действий: где создать макет, какой код написать, как вывести кнопку на форму и как проверить результат. Примеры ориентированы на управляемые формы и библиотеку стандартных подсистем (БСП), которая используется в большинстве типовых решений.
Определите, какой способ добавления печати вам подходит
Прежде чем открывать конфигуратор, определите исходные условия. Если конфигурация типовая и находится на полной поддержке, любое изменение в конфигураторе усложнит последующие обновления — при обновлении доработанные объекты придется сопоставлять вручную. В этом случае безопаснее внешняя печатная форма.
Встроенная команда печати оправдана, когда конфигурация уже доработана или самописная, форма нужна всем пользователям постоянно, а шаблон редко меняется. Внешняя форма удобна, когда макет корректируется по запросу пользователей: файл обработки можно заменить в режиме «Предприятие» без остановки работы и без прав на конфигуратор.
Сравнение вариантов
Подходит для самописных и доработанных конфигураций; минус — усложняется обновление типовых решений.
Подходит для типовых конфигураций на поддержке; ограничение — требуется подсистема «Дополнительные отчеты и обработки» из БСП.
Компромисс: команда добавляется без снятия с поддержки; ограничение — не все объекты и методы доступны в расширениях.
Создайте макет печатной формы
Макет — это шаблон, по которому программа строит табличный документ. В конфигураторе откройте ветку «Документы», найдите нужный документ, раскройте его и в ветке «Макеты» добавьте новый макет типа «Табличный документ». Дайте ему понятное имя, например «МакетАктаВыполненныхРабот».
В редакторе макета оформите шапку, табличную часть и подвал. Ячейки, куда подставляются данные, заполните параметрами — для этого в свойствах ячейки установите «Заполнение: Параметр» и укажите имя параметра, например «НомерДокумента» или «Контрагент». Для повторяющихся блоков (строк табличной части) создайте именованные области: выделите строки и задайте имя области через меню «Таблица — Имена — Назначить имя».
Типичная структура макета: область «Шапка» с реквизитами документа, область «СтрокаТовары» для каждой строки табличной части, область «Подвал» с итогами и подписями. Имена областей и параметров понадобятся в коде — записывайте их точно, с учетом регистра.
Добавьте процедуру формирования печатной формы
Логика печати размещается в модуле менеджера документа. В конфигураторе откройте документ, перейдите на вкладку «Прочее» и откройте «Модуль менеджера». Здесь создается экспортная процедура, которая получает ссылку на документ, заполняет параметры макета и возвращает табличный документ.
Типовая структура процедуры: получить макет через ПолучитьМакет(), создать новый табличный документ, получить области макета, заполнить параметры данными документа и вывести области методом Вывести(). Для табличной части область строки выводится в цикле по строкам документа.
Функция СформироватьПечатнуюФорму(СсылкаНаДокумент) Экспорт
Макет = Документы.РеализацияТоваров.ПолучитьМакет("МакетАктаВыполненныхРабот");
ТабДокумент = Новый ТабличныйДокумент;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.НомерДокумента = СсылкаНаДокумент.Номер;
ОбластьШапка.Параметры.Контрагент = СсылкаНаДокумент.Контрагент;
ТабДокумент.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовары");
Для Каждого СтрокаТовара Из СсылкаНаДокумент.Товары Цикл
ОбластьСтрока.Параметры.Номенклатура = СтрокаТовара.Номенклатура;
ОбластьСтрока.Параметры.Количество = СтрокаТовара.Количество;
ОбластьСтрока.Параметры.Сумма = СтрокаТовара.Сумма;
ТабДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
Возврат ТабДокумент;
КонецФункции
Для документов с большим числом реквизитов вместо обращения к реквизитам через точку лучше использовать запрос — это быстрее и позволяет сразу получить представления, итоги и данные связанных объектов. Но для простой формы обращение через ссылку допустимо и нагляднее.
Зарегистрируйте команду печати в подсистеме БСП
В конфигурациях на базе БСП команды печати регистрируются централизованно. В модуле менеджера документа найдите (или создайте) процедуру ДобавитьКомандыПечати и добавьте в нее строку регистрации команды с идентификатором, представлением и обработчиком.
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "АктВыполненныхРабот";
КомандаПечати.Представление = НСтр("ru = 'Акт выполненных работ (внутренний)'");
КомандаПечати.Порядок = 50;
КонецПроцедуры
Затем в процедуре Печать модуля менеджера укажите, какой макет и процедура соответствуют идентификатору команды. После обновления конфигурации базы данных новая кнопка появится в меню «Печать» формы документа автоматически — отдельно выводить кнопку на форму не нужно, это делает подсистема печати БСП.
- 1Создайте макет табличного документа с параметрами и именованными областями.
- 2Добавьте в модуль менеджера функцию формирования табличного документа.
- 3Зарегистрируйте команду в процедуре ДобавитьКомандыПечати.
- 4Свяжите идентификатор команды с макетом в процедуре Печать.
- 5Обновите конфигурацию базы данных и проверьте кнопку в меню «Печать».
Как добавить печать без изменения конфигурации: внешняя форма
Если конфигурация типовая, создайте внешнюю обработку. В конфигураторе выберите «Файл — Новый — Внешняя обработка». В модуле объекта обработки добавьте функцию СведенияОВнешнейОбработке(), которая возвращает структуру с видом «ПечатнаяФорма», назначением (имя документа) и списком команд.
Также потребуется экспортная процедура Печать с параметрами МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати и ПараметрыВывода — по этой сигнатуре БСП вызывает внешнюю форму. Внутри процедуры формируется табличный документ по макету, добавленному в макеты обработки, и помещается в коллекцию печатных форм.
Готовый файл .epf подключается в режиме «Предприятие»: «Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки — Добавить из файла». После публикации кнопка появится в меню «Печать» документа у всех пользователей с доступом к подсистеме. Если пункта «Дополнительные отчеты и обработки» нет в меню, включите соответствующую функциональную опцию в настройках программы.
Проверка результата и типичные ошибки
После добавления команды откройте документ в режиме «Предприятие», нажмите «Печать» и выберите новую форму. Проверьте: кнопка видна в меню, форма открывается без ошибок, все параметры заполнены, строки табличной части выводятся полностью, итоги сходятся с данными документа.
Если кнопка не появилась, чаще всего причина в том, что процедура ДобавитьКомандыПечати не экспортная, конфигурация базы данных не обновлена или идентификатор команды дублирует существующий. Если форма открывается пустой — проверьте совпадение имен параметров в макете и в коде и убедитесь, что документ проведен и заполнен.
Как проверить результат
Новый пункт виден с заданным названием
Пункт отсутствует — проверьте регистрацию команды и обновление базы
Все параметры и строки табличной части заполнены
Пустые ячейки — несовпадение имен параметров или незаполненный документ
Итоги на форме совпадают с итогами документа
Расхождения — ошибка в цикле вывода строк или формулах
Часто задаваемые вопросы
Можно ли добавить кнопку печати прямо на форму документа, а не в меню «Печать»?
Да. В модуле формы создайте команду формы, перетащите ее на командную панель в редакторе формы, а в обработчике вызовите формирование табличного документа и его показ методом Показать(). Но в конфигурациях с БСП предпочтительнее регистрация через ДобавитьКомандыПечати — тогда форма попадет в общий механизм печати, включая печать из списка документов.
Почему внешняя печатная форма не появляется в меню после подключения?
Проверьте три момента: включена ли функциональная опция «Дополнительные отчеты и обработки», указано ли в сведениях обработки назначение с точным именем документа и опубликована ли обработка (в карточке обработки не должно быть состояния «Отключена»). Также у пользователя должны быть права на выполнение дополнительных обработок.
Как вывести на печать сразу несколько документов из списка?
Механизм печати БСП поддерживает это автоматически: процедура формирования получает массив ссылок. При выделении нескольких документов в списке и выборе команды печати каждый документ выводится в общий табличный документ. Важно в коде корректно обрабатывать массив объектов и разделять документы разрывом страницы.
Что делать, если при печати возникает ошибка «Макет не найден»?
Ошибка означает, что имя макета в методе ПолучитьМакет() не совпадает с именем макета в дереве конфигурации или макет создан не у того объекта. Проверьте точное имя (без лишних пробелов, с учетом регистра) и убедитесь, что макет принадлежит документу, а не общим макетам — для общих макетов используется другой синтаксис вызова.
Можно ли использовать макет в формате Word или Excel?
Да, внешние печатные формы поддерживают макеты типа DOCX и XLSX через механизм БСП: шаблон загружается в макет обработки, а данные подставляются в поля шаблона. Это удобно, когда форму часто правят пользователи, не знакомые с конфигуратором. Для встроенных форм стандартным остается табличный документ.
Нужно ли программирование, чтобы добавить печатную форму?
Минимальный уровень — да: потребуется написать процедуру заполнения параметров макета на встроенном языке 1С. Однако для простых форм достаточно скопировать типовую процедуру печати похожего документа и заменить имена макета, областей и параметров. Готовые шаблоны внешних печатных форм с разобранным кодом входят в состав демонстрационных конфигураций БСП.
Что важно запомнить
Команда печати добавляется в три этапа: макет с параметрами, процедура формирования в модуле менеджера и регистрация команды в ДобавитьКомандыПечати. Для типовых конфигураций на поддержке используйте внешнюю печатную форму через «Дополнительные отчеты и обработки». Перед доработкой сделайте резервную копию, а после — проверьте заполнение всех параметров и итогов на форме.