Макет печатной формы 1С: области, параметры и вывод данных

· 9 мин

Содержание

Заполнить макет в 1С — значит связать ячейки шаблона с данными: каждой ячейке, куда должно попасть значение, ставят свойство Заполнение = Параметр (или Шаблон), объединяют строки в именованные области, а затем код получает область через ПолучитьОбласть(), заполняет Параметры и выводит её в табличный документ. Пользователю без конфигуратора доступен другой путь: правка готового макета через Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм.

Частое заблуждение — что достаточно вписать в ячейку слово «Номер», и туда подставится номер документа. Не подставится: пока у ячейки тип заполнения «Текст», программа выведет само слово. Есть два сценария — пользовательский и разработческий; оба описаны для платформы 8.3 и типовых конфигураций на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11).

Что такое макет и какие типы макетов есть в 1С

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

При добавлении макета открывается конструктор, где выбирают тип:

Тип макетаДля чего используют
Табличный документПечатные формы: счета, акты, накладные, справки
Схема компоновки данныхОтчёты на СКД
Макет оформления компоновки данныхСвоё оформление отчётов СКД
Текстовый документВыгрузка в TXT, простые текстовые шаблоны
HTML-документСправочные страницы, оформление в формах
Двоичные данныеЛюбой файл: шаблон Word, картинка, внешняя компонента
Графическая и географическая схемыСхемы процессов и карты
Активный документДокумент OLE-приложения

Чаще всего «заполнить макет» означает табличный документ (MXL) печатной формы. Про него основная часть материала, про СКД — отдельный раздел.

Из чего состоит табличный макет

  • 🧩 Области — именованные диапазоны: горизонтальные (строки целиком), вертикальные (столбцы) и прямоугольные. Типовой набор: Заголовок, Шапка, Строка, Подвал.
  • 🏷️ Параметры — имена в ячейках, куда при выводе подставляются значения.
  • 🖨️ Свойства печати — ориентация, поля, масштаб, повтор шапки на каждой странице.

Что проверить перед тем, как заполнять макет

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

  1. Где живёт макет. Подчинённый макет документа берётся через менеджер (Документы.ИмяДокумента.ПолучитьМакет("ИмяМакета")), общий — через ПолучитьОбщийМакет("ИмяМакета").
  2. Меняете ли вы типовую конфигурацию . Если база на поддержке, правка макета в основной конфигурации усложнит каждое обновление. Безопаснее расширение или пользовательский макет (о нём — в следующем разделе).
  3. Какие данные нужны. Составьте список полей шапки и табличной части. Имена полей в запросе удобно сразу делать такими же, как имена параметров в макете — тогда работает массовое заполнение.
  4. Формат значений. Даты, суммы, количество: формат задают в свойстве ячейки Формат (например, ЧДЦ=2 для суммы, ДЛФ=D для даты) или готовят строку в коде.

Список параметров шапки распечатайте рядом с запросом. Расхождение одной буквы — «Контрагент» и «Контрагенты» — даёт пустую ячейку без всякой ошибки.

Как заполнить макет в режиме предприятия без конфигуратора

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

Порядок действий

  1. Откройте Администрирование → Печатные формы, отчеты и обработки.
  2. Перейдите по ссылке Макеты печатных форм.
  3. Найдите нужный макет поиском по названию — например, «Счет на оплату».
  4. Откройте его на изменение. Макет откроется в редакторе табличного документа прямо в режиме предприятия.
  5. Правьте оформление: текст постоянных надписей, шрифты, рамки, ширину колонок, логотип, подпись.
  6. Сохраните и закройте. В списке у макета появится отметка, что используется изменённый вариант.
  7. Сформируйте печатную форму из документа и проверьте результат.

Тот же редактор открывается и из формы предварительного просмотра печати: команда изменения макета есть в меню Ещё.

Ячейки с параметрами (имя в квадратных скобках или подсвеченная ячейка) не удаляйте и не переименовывайте. Программа подставляет данные по имени параметра, и переименованный параметр просто останется пустым на всех бланках.

Как откатить неудачную правку

В списке Макеты печатных форм выделите макет и выберите вариант использования стандартного макета. Изменённая копия перестанет применяться. Если правка была удачной частично, перед откатом сохраните копию в файл MXL — её можно загрузить обратно.

Что так сделать нельзя

  • 🚫 Добавить новое поле из базы, которого нет среди параметров макета.
  • 🚫 Изменить логику: например, выводить строки табличной части с группировкой.
  • 🚫 Добавить новую печатную форму в меню Печать.

Для этого нужна внешняя печатная форма или расширение — работа уже в конфигураторе.

Области и параметры: заполняем макет в конструкторе

Откройте конфигуратор, найдите объект (например, документ), раскройте ветку Макеты и откройте макет двойным щелчком. Если макета нет — добавьте его и в конструкторе выберите тип «Табличный документ».

Шаг 1. Нарисуйте бланк

Сверстайте форму как в табличном редакторе: объедините ячейки, задайте рамки и шрифты. Для табличной части нарисуйте только ОДНУ строку — она будет повторяться при выводе.

Шаг 2. Назовите области

Выделите строки шапки (по номерам строк слева) и выполните Таблица → Имена → Назначить имя. Введите имя, например Шапка. Повторите для Строка и Подвал.

Вид областиКак выделятьПример применения
ГоризонтальнаяЦелые строкиШапка, строка товара, итоги
ВертикальнаяЦелые столбцыКолонки по месяцам, размерам
ПрямоугольнаяДиапазон ячеекОтдельный блок: штамп, подпись

Пересечение горизонтальной и вертикальной областей получают одной строкой: Макет.ПолучитьОбласть("Строка|Месяц").

Шаг 3. Настройте ячейки

Откройте свойства ячейки (Alt+Enter или контекстное меню) и задайте Заполнение:

  • 📝 Текст — выводится как написано. Для постоянных надписей.
  • 🔢 Параметр — в ячейку вписывают только имя параметра: Номер. При выводе подставится значение.
  • 🧷 Шаблон — текст со вставками в квадратных скобках: Счёт № [Номер] от [Дата]. Удобно, когда значение стоит внутри фразы.

Для ячейки-параметра заодно задайте Параметр расшифровки — тогда двойной щелчок по значению в готовой форме откроет, например, карточку контрагента.

Шаг 4. Свойства печати

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

Код, который заполняет макет данными

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

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

	ТабДок = Новый ТабличныйДокумент;
	ТабДок.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Заказ";
	Макет = Документы.Заказ.ПолучитьМакет("ПФ_MXL_Заказ");

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Заказ.Номер КАК Номер,
	|	Заказ.Дата КАК Дата,
	|	Заказ.Контрагент КАК Контрагент,
	|	Заказ.СуммаДокумента КАК СуммаДокумента
	|ИЗ
	|	Документ.Заказ КАК Заказ
	|ГДЕ
	|	Заказ.Ссылка = &Ссылка
	|;
	|ВЫБРАТЬ
	|	Товары.НомерСтроки КАК НомерСтроки,
	|	Товары.Номенклатура КАК Номенклатура,
	|	Товары.Количество КАК Количество,
	|	Товары.Цена КАК Цена,
	|	Товары.Сумма КАК Сумма
	|ИЗ
	|	Документ.Заказ.Товары КАК Товары
	|ГДЕ
	|	Товары.Ссылка = &Ссылка
	|УПОРЯДОЧИТЬ ПО
	|	НомерСтроки";

	Результаты = Запрос.ВыполнитьПакет();
	Шапка = Результаты[0].Выбрать();
	Шапка.Следующий();

	ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
	ОбластьШапка.Параметры.Заполнить(Шапка);
	ТабДок.Вывести(ОбластьШапка);

	ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
	Строки = Результаты[1].Выбрать();
	Пока Строки.Следующий() Цикл
		ОбластьСтрока.Параметры.Заполнить(Строки);
		ТабДок.Вывести(ОбластьСтрока);
	КонецЦикла;

	ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
	ОбластьПодвал.Параметры.СуммаДокумента = Шапка.СуммаДокумента;
	ТабДок.Вывести(ОбластьПодвал);

	Возврат ТабДок;

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

Что здесь важно:

  • Параметры.Заполнить() переносит значения всех полей выборки, имена которых совпали с именами параметров области. Остальные параметры остаются пустыми — без ошибки.
  • Одиночный параметр задают напрямую: Область.Параметры.Имя = Значение.
  • Область строки получают один раз до цикла, а заполняют и выводят на каждой итерации.
  • Колонки, которые повторяются вправо, выводят методом Присоединить() вместо Вывести().

Разрывы страниц

Чтобы подвал с подписями не уехал на отдельный лист, перед выводом проверьте, помещается ли он:

МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьПодвал);
Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда
	ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьПодвал);

Как не менять типовую конфигурацию

Для типовой базы есть два приёма практика:

  1. Расширение конфигурации (платформа 8.3.6 и новее). Заимствуете объект, добавляете в расширение свой макет и процедуру печати. Основная конфигурация остаётся на полной поддержке, обновления ставятся штатно.
  2. Внешняя печатная форма — файл EPF, который подключают через Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Макет хранится внутри обработки, команда появляется в меню Печать нужного документа.

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

Макеты в схеме компоновки данных

В отчётах на СКД макет табличного документа обычно не рисуют вручную. Платформа строит его сама по схеме и настройкам варианта отчёта: группировки, поля, оформление.

Когда нужен свой макет в СКД

На закладке Макеты редактора схемы можно задать макет для конкретной области:

  • 📐 для группировки — например, нестандартная строка итога по контрагенту;
  • 📊 для поля — особое оформление заголовка колонки;
  • 🧾 для заголовка всего отчёта.

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

Вывод СКД в табличный документ из кода

Если отчёт формируется программно, цепочка такая:

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки);

Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(МакетКомпоновки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(Процессор);

Здесь МакетКомпоновки — уже не схема, а готовый макет компоновки: схема плюс настройки, превращённые в план вывода.

ЗадачаОбычный MXL-макетСКД
Бланк фиксированной формы (счёт, акт)✅ ПодходитИзбыточно
Отчёт с группировками и отборамиМного кода✅ Подходит
Пользователь сам меняет колонкиНельзя✅ Через настройки варианта
Точная вёрстка «как на бланке»✅ Полный контрольСложно

Почему макет заполняется не так: ошибки и решения

Диагностика: выберите симптом

Ещё одна неочевидная причина — шаблон с квадратными скобками в обычном тексте. Если в ячейке с Заполнение = Шаблон нужно напечатать квадратную скобку как символ, этот текст лучше вынести в соседнюю ячейку с типом «Текст».

Частые вопросы о заполнении макетов

Можно ли вставить в макет картинку, например печать и подпись?
Да. В табличный документ добавляют рисунок, а в код передают картинку из базы. В типовых конфигурациях печать и подпись задают в карточке организации, и они выводятся на бланк автоматически.
Где хранится макет, изменённый в режиме предприятия?
В информационной базе, отдельно от конфигурации. Поэтому он сохраняется после обновления типовой конфигурации.
Как перенести изменённый макет в другую базу?
Сохраните его в файл MXL из редактора и загрузите в другой базе через тот же список макетов печатных форм.
Чем макет отличается от формы?
Форма — это окно для ввода и просмотра данных. Макет — заготовка для вывода: печати, отчёта, файла.
Можно ли сделать печатную форму в Word вместо MXL?
Да, в БСП поддерживаются офисные макеты (DOCX). Их правят в Word, но набор возможностей вёрстки беднее, чем у табличного документа.