Разработка качественных печатных форм является неотъемлемой частью внедрения и сопровождения систем 1С:Предприятие. Пользователи часто сталкиваются с необходимостью вывода специфических документов, которые не предусмотрены в типовой конфигурации, либо требуют существенной доработки визуального представления. Стандартный механизм вывода на печать иногда оказывается недостаточным для сложных версток или уникальных требований к оформлению бланков.

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

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

Подготовка структуры метаданных для печати

Первым шагом перед написанием кода является правильная настройка структуры конфигурации. Вам необходимо определить, где именно будет храниться шаблон вашего документа. В конфигураторе следует открыть дерево метаданных и найти нужный объект, например, документ РеализацияТоваровУслуг.

Внутри ветки документа найдите папку Макеты. Именно сюда добавляются новые элементы. Создайте новый макет и дайте ему осмысленное имя, например, ПечатнаяФормаСчета. Важно выбрать правильный тип макета: для большинства задач подходит тип Табличный документ, так как он позволяет работать с ячейками как в Excel.

После создания макета откройте его в редакторе. Здесь вы увидите сетку ячеек, которую необходимо заполнить статическими данными: шапкой организации, логотипом, подписями колонок таблицы. Не заполняйте динамические данные (номера, даты, суммы) вручную — для нихются пустые ячейки или используются специальные поля.

⚠️ Внимание: Тип макета «Текстовый документ» используется редко и только для простых текстовых выгрузок. Для сложных счетов, накладных и актов всегда выбирайте тип «Табличный документ», иначе вы потеряете возможность гибкого форматирования ячеек.

Обратите внимание на свойства макета. В палитре свойств можно задать имя макета, которое будет использоваться в коде, и описание. Хорошей практикой считается создание отдельной папки МакетыПечатныхФорм внутри документа, чтобы не захламлять корневую ветку.

💡

Используйте объединение ячеек для заголовков таблиц — это делает макет более читаемым и профессиональным. Выделите несколько ячеек и нажмите кнопку «Объединить» на панели инструментов редактора макета.

Настройка полей и областей в редакторе

Ключевым моментом при проектировании макета является разделение документа на логические области. Это позволяет программно подставлять данные только в нужные места, не затрагивая остальную структуру. В 1С для этого используются Области.

Чтобы создать область, выделите группу ячеек, которые относятся к одному логическому блоку (например, шапка документа или строка товарной таблицы). Затем в меню редактора выберите команду создания области и присвойте ей уникальное имя. Имена областей должны быть понятными, например, Шапка, Товары, Подвал.

  • 📄 Область Шапка содержит реквизиты контрагента, номер и дату документа.
  • 📦 Область СтрокаТовара описывает одну строку табличной части с номенклатурой и количеством.
  • ✍️ Область Подписи включает места для подписей руководителя и главного бухгалтера.

После создания областей в самом макете появятся специальные маркеры. При выводе на печать система будет искать эти имена в коде и заменять область на реальные данные. Если вы забудете создать область, вам придется вручную копировать ячейки в коде, что значительно усложнит поддержку.

Также в макете можно использовать параметры. Они обозначаются символом % перед именем (например, %Организация%). Это упрощает замену текста в ячейке без необходимости выделения целой области. Параметры удобны для одиночных значений, таких как дата или валюта.

☑️ Проверка готовности макета

Выполнено: 0 / 4

Программный вызов объекта Печать

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

В начале процедуры объявления переменной типа ТабличныйДокумент необходимо получить макет из конфигурации. Это делается через свойство Макеты текущего объекта. Далее макет загружается в переменную, и начинается процесс заполнения.

Процедура СформироватьПечатнуюФорму

Макет = Объект.Макеты.ПечатнаяФормаСчета.ПолучитьМакет;

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

ТабДок.ОтображатьСетку = Ложь;

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

ОбластьШапка.Параметры.Организация = Объект.Организация;

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

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

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

Обратите внимание на метод ПолучитьОбласть. Он извлекает конкретный кусок макета для работы. После извлечения вы заполняете параметры этой области значениями из полей документа. Метод Вывести помещает заполненную область в итоговый табличный документ.

Для вывода табличной части используется цикл. Внутри цикла вы берете область строки товара, заполняете её параметрами из текущей строки регистра товаров и выводите в документ. Это позволяет масштабировать документ под любое количество позиций.

⚠️ Внимание: При выводе табличной части в цикле не используйте метод Вывести с параметром смещения, если вы не уверены в логике наложения ячеек. Чаще всего достаточно просто последовательного вывода, так как области уже имеют фиксированный размер.

📊 Какой способ вывода табличной части вы используете чаще?
Цикл по строкам с выводом области
Использование метода ВывестиТабличнуюЧасть
Ручное заполнение ячеек по координатам
Генерация через COM-объект Excel

Работа с параметрами и заменой значений

Эффективное использование параметров — залог чистого кода. В 1С существует два основных способа передачи данных в макет: через параметры области и через прямую замену текста в ячейках. Первый способ является предпочтительным и более производительным.

Параметры области объявляются автоматически при создании области, если в ячейках есть текст в формате &Параметр. Однако в современных версиях платформы рекомендуется явно задавать параметры в коде через коллекцию Параметры у объекта области. Это делает код более явным и защищенным от ошибок опечаток.

Тип данных Пример в макете Метод заполнения Особенности
Строка Наименование товара Прямое присваивание Автоматическое перенос по словам
Число Количество, Сумма Форматирование Требует указания формата строки
Дата Дата документа Преобразование Нужно задать формат"ДД.ММ.ГГГГ"
Картинка Логотип, Подпись Поле графического типа Требует хранения в хранилище значения

Особое внимание стоит уделить числовым значениям. Если вы просто присвоите число параметру, оно может отобразиться с лишними знаками после запятой или без разделения тысяч. Используйте функцию Формат для приведения числа к строке нужного вида перед записью в параметр.

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

Форматирование и стилизация ячеек

Внешний вид документа часто регламентируется строгими стандартами или требованиями бренда. Объект ТабличныйДокумент предоставляет мощные средства для стилизации уже после вывода областей. Вы можете изменять шрифты, границы, цвета фона и выравнивание программно.

Для доступа к стилям используется свойство Область или прямой доступ к ячейкам через координаты, хотя последний метод считается устаревшим и менее надежным. Лучше задавать стили в самом макете в конфигураторе, а в коде только корректировать их при необходимости.

Частая задача — изменение ширины колонок в зависимости от содержимого. Для этого используется метод АвтоПодборШирины. Он анализирует текст в колонке и расширяет её так, чтобы текст помещался целиком. Это избавляет от обрезания длинных наименований номенклатуры.

Как вставить логотип компании в макет?

Для вставки логотипа создайте в макете поле типа «Поле графического типа». В коде загрузите картинку из файла или хранилища в переменную типа ХранениеЗначения и присвойте её параметру области. Убедитесь, что пропорции изображения не искажаются при печати.

Не забывайте про ориентацию страницы. Если ваш макет широкий (много колонок), установите ориентацию Альбомная в свойствах табличного документа перед выводом. Это предотвратит перенос данных на вторую страницу из-за нехватки места по ширине.

💡

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

Вывод документа на печать и сохранение

Финальным этапом является отправка сформированного документа на устройство вывода. Объект ТабличныйДокумент имеет метод Показать, который открывает предпросмотр в режиме предприятия. Оттуда пользователь может самостоятельно выбрать принтер и настройки печати.

Для автоматической отправки на принтер без вмешательства пользователя используется метод Печать. Он отправляет документ на принтер по умолчанию. Однако в современной практике чаще используют диалог выбора, чтобы пользователь мог убедиться в корректности данных.

Также часто требуется сохранить документ в файл, например, в формате PDF или Excel. Для этого применяются методы Записать с указанием соответствующего формата. Формат PDF является стандартом для отправки документов контрагентам по электронной почте.

Если ТабДок.Пустой Тогда

Сообщение("Документ не содержит данных для печати");

Возврат;

КонецЕсли;

ТабДок.Показать("Счет на оплату №" + Объект.Номер);

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

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

Частые ошибки и способы их решения

В процессе разработки печатных форм новички часто допускают ряд типичных ошибок. Одной из самых распространенных является несоответствие имен областей в коде и в макете. Регистр букв имеет значение: область Шапка и шапка — это разные объекты для системы.

Еще одна проблема — «поехавшая» верстка при печати. Это часто случается, когда в макете используются относительные размеры или когда текст в ячейке не переносится по словам. Решение — фиксировать высоту строк и включать перенос слов в свойствах ячеек макета.

  • ❌ Ошибка: Забыли вызвать метод Очистить перед новым заполнением, если используете один объект ТабличныйДокумент для нескольких отчетов.
  • ❌ Ошибка: Попытка вывести область, которая не была получена из макета (переменная равна Неопределено).
  • ❌ Ошибка: Игнорирование прав доступа. У пользователя может не быть права на чтение макета или на вывод на печать.

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

💡

Если макет отображается в конфигураторе правильно, но в режиме предприятия «плывет», проверьте масштаб экрана и настройки шрифтов Windows. Иногда проблема кроется не в коде 1С, а в системных настройках DPI.

Вопросы и ответы (FAQ)

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

Чтобы добавить новый лист, создайте в макете новую область, которая будет занимать всю страницу, или используйте метод НоваяСтраница объекта ТабличныйДокумент в коде перед выводом следующей группы данных. Это разорвет поток печати и начнет новую страницу.

Можно ли использовать один макет для разных видов документов?

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

Почему не отображаются кириллические символы в PDF?

Проблема обычно связана с отсутствием шрифтов с поддержкой кириллицы в системе или настройками экспорта. Убедитесь, что в макете используются стандартные шрифты (Arial, Times New Roman) и при экспорте в PDF включена опция встраивания шрифтов.

Как сделать колонтитулы на каждой странице?

Колонтитулы настраиваются в свойствах самого объекта ТабличныйДокумент, а не в макете. Используйте свойства ВерхнийКолонтитул и НижнийКолонтитул, задав там текст или область. Они будут повторяться на всех страницах автоматически.

Где хранятся созданные макеты после обновления конфигурации?

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