Создание печатной формы в 1С состоит из двух частей: макета — табличного документа, где нарисован бланк и отмечены места для данных, — и кода, который берёт данные из документа и выводит их в макет. В современных типовых конфигурациях форму обычно делают внешней, на механизмах БСП: тогда она сама появляется в меню «Печать» нужного документа, а при обновлении 1С никуда не пропадает.
В статье — как нарисовать макет, какой код нужен для внешней печатной формы на БСП, как её подключить и с какими ошибками сталкиваются чаще всего.
Когда нужно создавать новую форму, а когда хватит правки
Если нужно поменять шрифт, добавить строку текста, логотип или подпись в уже существующий бланк — новую форму делать не надо. Это делается в режиме предприятия через «Макеты печатных форм», я подробно разбирал это в статье про печатную форму 1С. Там же — как подключить готовый файл и что делать с ошибкой «Печатная форма недоступна».
Создавать свою форму нужно, когда:
- требуется бланк, которого нет в программе (спецификация, этикетка, лист сборки, акт в формате заказчика);
- в существующей форме нужны данные, которых в ней нет и не будет (например, остаток на складе или реквизит из другого документа);
- нужна особая логика: группировка строк, итоги по разделам, разные варианты для разных контрагентов.
Три способа создать печатную форму
- Внешняя печатная форма — файл .epf, который регистрируется в справочнике дополнительных обработок. Самый удобный способ для типовых конфигураций: не трогает конфигурацию, легко переносится между базами.
- Расширение конфигурации — форма добавляется в макеты расширения, команда — в модуль менеджера документа. Подходит, когда форм много или печать нужна там, где нет подключаемых команд.
- Изменение конфигурации — макет и код прямо в типовом объекте. Для типовых конфигураций на поддержке не рекомендую: каждое обновление превращается в ручное сравнение и объединение.
Дальше разбираю первый способ — он закрывает большинство задач.
Шаг 1. Создайте обработку и макет
- Откройте нужную базу в конфигураторе.
- «Файл» → «Новый» → «Внешняя обработка». Задайте имя, например
НакладнаяСклад. - На закладке «Макеты» нажмите «Добавить», выберите тип «Табличный документ» и задайте имя, например
Накладная. Запомните это имя — оно понадобится в коде.
Как создавать саму обработку и что делать, если не видно типов базы, подробно описано в статье как создать обработку в 1С.
Шаг 2. Нарисуйте макет печатной формы
Макет — это таблица, похожая на Excel. Его делят на именованные области, каждая из которых выводится отдельно:
- Шапка — название документа, номер, дата, поставщик и покупатель;
- ШапкаТаблицы — заголовки колонок;
- Строка — одна строка товаров, она выводится столько раз, сколько строк в документе;
- Подвал — итоги, подписи.
Как это сделать:
- Выделите строки, которые относятся к шапке, и в меню «Таблица» → «Имена» → «Назначить имя» задайте имя
Шапка. Так же назовите остальные области. - В ячейки, куда должны попасть данные, впишите имя параметра, например
НомерилиКонтрагент. В свойствах ячейки поставьте «Заполнение» — «Параметр». - Если в ячейке текст с вставками, используйте «Заполнение» — «Шаблон» и пишите параметры в квадратных скобках:
Накладная № [Номер] от [Дата]. - Ширину колонок подгоняйте под А4 сразу, а не после первой печати: переделывать готовый макет дольше.

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




