Макет печатной формы 1С: области, параметры и вывод данных
Содержание
Заполнить макет в 1С — значит связать ячейки шаблона с данными: каждой ячейке, куда должно попасть значение, ставят свойство Заполнение = Параметр (или Шаблон), объединяют строки в именованные области, а затем код получает область через ПолучитьОбласть(), заполняет Параметры и выводит её в табличный документ. Пользователю без конфигуратора доступен другой путь: правка готового макета через Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм.
Частое заблуждение — что достаточно вписать в ячейку слово «Номер», и туда подставится номер документа. Не подставится: пока у ячейки тип заполнения «Текст», программа выведет само слово. Есть два сценария — пользовательский и разработческий; оба описаны для платформы 8.3 и типовых конфигураций на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11).
Что такое макет и какие типы макетов есть в 1С
Макет — объект конфигурации, в котором хранится заготовка: бланк печатной формы, шаблон отчёта, файл, HTML-страница. Макет бывает подчинённым (у документа, справочника, отчёта, обработки) или общим — в ветке Общие → Макеты.
При добавлении макета открывается конструктор, где выбирают тип:
| Тип макета | Для чего используют |
|---|---|
| Табличный документ | Печатные формы: счета, акты, накладные, справки |
| Схема компоновки данных | Отчёты на СКД |
| Макет оформления компоновки данных | Своё оформление отчётов СКД |
| Текстовый документ | Выгрузка в TXT, простые текстовые шаблоны |
| HTML-документ | Справочные страницы, оформление в формах |
| Двоичные данные | Любой файл: шаблон Word, картинка, внешняя компонента |
| Графическая и географическая схемы | Схемы процессов и карты |
| Активный документ | Документ OLE-приложения |
Чаще всего «заполнить макет» означает табличный документ (MXL) печатной формы. Про него основная часть материала, про СКД — отдельный раздел.
Из чего состоит табличный макет
- 🧩 Области — именованные диапазоны: горизонтальные (строки целиком), вертикальные (столбцы) и прямоугольные. Типовой набор:
Заголовок,Шапка,Строка,Подвал. - 🏷️ Параметры — имена в ячейках, куда при выводе подставляются значения.
- 🖨️ Свойства печати — ориентация, поля, масштаб, повтор шапки на каждой странице.
Что проверить перед тем, как заполнять макет
Многие проблемы с макетом закладываются до первой строки кода. Перед работой ответьте себе на четыре вопроса.
- Где живёт макет. Подчинённый макет документа берётся через менеджер (
Документы.ИмяДокумента.ПолучитьМакет("ИмяМакета")), общий — черезПолучитьОбщийМакет("ИмяМакета"). - Меняете ли вы типовую конфигурацию . Если база на поддержке, правка макета в основной конфигурации усложнит каждое обновление. Безопаснее расширение или пользовательский макет (о нём — в следующем разделе).
- Какие данные нужны. Составьте список полей шапки и табличной части. Имена полей в запросе удобно сразу делать такими же, как имена параметров в макете — тогда работает массовое заполнение.
- Формат значений. Даты, суммы, количество: формат задают в свойстве ячейки
Формат(например,ЧДЦ=2для суммы,ДЛФ=Dдля даты) или готовят строку в коде.
Список параметров шапки распечатайте рядом с запросом. Расхождение одной буквы — «Контрагент» и «Контрагенты» — даёт пустую ячейку без всякой ошибки.
Как заполнить макет в режиме предприятия без конфигуратора
В типовых конфигурациях на Библиотеке стандартных подсистем пользователь с правами администратора может изменить внешний вид бланка, не трогая конфигурацию. Изменённая копия хранится в базе и переживает обновления.
Порядок действий
- Откройте
Администрирование → Печатные формы, отчеты и обработки. - Перейдите по ссылке
Макеты печатных форм. - Найдите нужный макет поиском по названию — например, «Счет на оплату».
- Откройте его на изменение. Макет откроется в редакторе табличного документа прямо в режиме предприятия.
- Правьте оформление: текст постоянных надписей, шрифты, рамки, ширину колонок, логотип, подпись.
- Сохраните и закройте. В списке у макета появится отметка, что используется изменённый вариант.
- Сформируйте печатную форму из документа и проверьте результат.
Тот же редактор открывается и из формы предварительного просмотра печати: команда изменения макета есть в меню Ещё.
Ячейки с параметрами (имя в квадратных скобках или подсвеченная ячейка) не удаляйте и не переименовывайте. Программа подставляет данные по имени параметра, и переименованный параметр просто останется пустым на всех бланках.
Как откатить неудачную правку
В списке Макеты печатных форм выделите макет и выберите вариант использования стандартного макета. Изменённая копия перестанет применяться. Если правка была удачной частично, перед откатом сохраните копию в файл MXL — её можно загрузить обратно.
Что так сделать нельзя
- 🚫 Добавить новое поле из базы, которого нет среди параметров макета.
- 🚫 Изменить логику: например, выводить строки табличной части с группировкой.
- 🚫 Добавить новую печатную форму в меню
Печать.
Для этого нужна внешняя печатная форма или расширение — работа уже в конфигураторе.
Области и параметры: заполняем макет в конструкторе
Откройте конфигуратор, найдите объект (например, документ), раскройте ветку Макеты и откройте макет двойным щелчком. Если макета нет — добавьте его и в конструкторе выберите тип «Табличный документ».
Шаг 1. Нарисуйте бланк
Сверстайте форму как в табличном редакторе: объедините ячейки, задайте рамки и шрифты. Для табличной части нарисуйте только ОДНУ строку — она будет повторяться при выводе.
Шаг 2. Назовите области
Выделите строки шапки (по номерам строк слева) и выполните Таблица → Имена → Назначить имя. Введите имя, например Шапка. Повторите для Строка и Подвал.
| Вид области | Как выделять | Пример применения |
|---|---|---|
| Горизонтальная | Целые строки | Шапка, строка товара, итоги |
| Вертикальная | Целые столбцы | Колонки по месяцам, размерам |
| Прямоугольная | Диапазон ячеек | Отдельный блок: штамп, подпись |
Пересечение горизонтальной и вертикальной областей получают одной строкой: Макет.ПолучитьОбласть("Строка|Месяц").
Шаг 3. Настройте ячейки
Откройте свойства ячейки (Alt+Enter или контекстное меню) и задайте Заполнение:
- 📝 Текст — выводится как написано. Для постоянных надписей.
- 🔢 Параметр — в ячейку вписывают только имя параметра:
Номер. При выводе подставится значение. - 🧷 Шаблон — текст со вставками в квадратных скобках:
Счёт № [Номер] от [Дата]. Удобно, когда значение стоит внутри фразы.
Для ячейки-параметра заодно задайте Параметр расшифровки — тогда двойной щелчок по значению в готовой форме откроет, например, карточку контрагента.
Шаг 4. Свойства печати
В свойствах табличного документа задайте ориентацию и поля. Чтобы шапка таблицы повторялась на каждом листе, у документа есть свойство повтора строк при печати — задайте в нём область заголовка таблицы.
Код, который заполняет макет данными
Сам макет ничего не заполняет. Данные подставляет код в модуле менеджера, модуле печати или внешней обработке. Схема всегда одна: получить макет → получить область → заполнить параметры → вывести.
Функция ПечатьЗаказа(ДокументСсылка) Экспорт
ТабДок = Новый ТабличныйДокумент;
ТабДок.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Заказ";
Макет = Документы.Заказ.ПолучитьМакет("ПФ_MXL_Заказ");
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.Текст =
"ВЫБРАТЬ
| Заказ.Номер КАК Номер,
| Заказ.Дата КАК Дата,
| Заказ.Контрагент КАК Контрагент,
| Заказ.СуммаДокумента КАК СуммаДокумента
|ИЗ
| Документ.Заказ КАК Заказ
|ГДЕ
| Заказ.Ссылка = &Ссылка
|;
|ВЫБРАТЬ
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Количество КАК Количество,
| Товары.Цена КАК Цена,
| Товары.Сумма КАК Сумма
|ИЗ
| Документ.Заказ.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Результаты = Запрос.ВыполнитьПакет();
Шапка = Результаты[0].Выбрать();
Шапка.Следующий();
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Заполнить(Шапка);
ТабДок.Вывести(ОбластьШапка);
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Строки = Результаты[1].Выбрать();
Пока Строки.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(Строки);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьПодвал.Параметры.СуммаДокумента = Шапка.СуммаДокумента;
ТабДок.Вывести(ОбластьПодвал);
Возврат ТабДок;
КонецФункции
Что здесь важно:
Параметры.Заполнить()переносит значения всех полей выборки, имена которых совпали с именами параметров области. Остальные параметры остаются пустыми — без ошибки.- Одиночный параметр задают напрямую:
Область.Параметры.Имя = Значение. - Область строки получают один раз до цикла, а заполняют и выводят на каждой итерации.
- Колонки, которые повторяются вправо, выводят методом
Присоединить()вместоВывести().
Разрывы страниц
Чтобы подвал с подписями не уехал на отдельный лист, перед выводом проверьте, помещается ли он:
МассивОбластей = Новый Массив;
МассивОбластей.Добавить(ОбластьПодвал);
Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабДок.Вывести(ОбластьПодвал);
Как не менять типовую конфигурацию
Для типовой базы есть два приёма практика:
- Расширение конфигурации (платформа 8.3.6 и новее). Заимствуете объект, добавляете в расширение свой макет и процедуру печати. Основная конфигурация остаётся на полной поддержке, обновления ставятся штатно.
- Внешняя печатная форма — файл EPF, который подключают через
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Макет хранится внутри обработки, команда появляется в менюПечатьнужного документа.
Для разовой правки бланка расширение избыточно: хватит пользовательского макета из раздела выше. Расширение нужно, когда меняется состав данных или логика вывода.
Макеты в схеме компоновки данных
В отчётах на СКД макет табличного документа обычно не рисуют вручную. Платформа строит его сама по схеме и настройкам варианта отчёта: группировки, поля, оформление.
Когда нужен свой макет в СКД
На закладке Макеты редактора схемы можно задать макет для конкретной области:
- 📐 для группировки — например, нестандартная строка итога по контрагенту;
- 📊 для поля — особое оформление заголовка колонки;
- 🧾 для заголовка всего отчёта.
Внутри такого макета ячейки заполняются параметрами так же, как в обычном MXL, но значения параметров берутся из выражений, заданных в самом макете на основе полей схемы.
Вывод СКД в табличный документ из кода
Если отчёт формируется программно, цепочка такая:
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки);
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(МакетКомпоновки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(Процессор);
Здесь МакетКомпоновки — уже не схема, а готовый макет компоновки: схема плюс настройки, превращённые в план вывода.
| Задача | Обычный MXL-макет | СКД |
|---|---|---|
| Бланк фиксированной формы (счёт, акт) | ✅ Подходит | Избыточно |
| Отчёт с группировками и отборами | Много кода | ✅ Подходит |
| Пользователь сам меняет колонки | Нельзя | ✅ Через настройки варианта |
| Точная вёрстка «как на бланке» | ✅ Полный контроль | Сложно |
Почему макет заполняется не так: ошибки и решения
Ещё одна неочевидная причина — шаблон с квадратными скобками в обычном тексте. Если в ячейке с Заполнение = Шаблон нужно напечатать квадратную скобку как символ, этот текст лучше вынести в соседнюю ячейку с типом «Текст».