Макеты 1С 8.3: от пустой таблицы до готовой печатной формы
Содержание
Работа с макетом в 1С сводится к трём действиям: нарисовать табличный документ в Конфигураторе, разметить в нём именованные области с параметрами и вывести эти области кодом через ПолучитьМакет() → ПолучитьОбласть() → Вывести(). Всё остальное — оформление, разбивка на страницы и правка типовых форм без снятия с поддержки.
Чаще всего макет нужен для печатной формы документа или отчёта с жёсткой вёрсткой. Ниже — то, что приходится делать руками на платформе 8.3 в интерфейсе «Такси»: от выбора типа макета до разбора ошибок, на которых спотыкаются даже опытные разработчики.
Какие бывают макеты и где они лежат в конфигурации
Макет — это объект конфигурации, который хранит шаблон данных. Чаще всего это табличный документ, но не только.
📍 Два места хранения:
- Макет объекта — на вкладке «Макеты» в окне редактирования документа, справочника, отчёта или обработки. Получают его через менеджер объекта или сам объект.
- Общий макет — ветка
Общие → Макетыв дереве конфигурации. Подходит для шаблонов, которые используют несколько объектов: логотип, общий бланк, схема для обмена.
Тип макета выбирают при создании, сменить его потом нельзя — только пересоздать.
| Тип макета | Что хранит | Для чего обычно |
|---|---|---|
| Табличный документ | Ячейки, области, параметры, картинки | Печатные формы, бланки, отчёты с фиксированной вёрсткой |
| Схема компоновки данных | Запрос, поля, настройки СКД | Отчёты, сложные выборки |
| Макет оформления компоновки данных | Стили оформления для СКД | Единый вид отчётов |
| Текстовый документ | Обычный текст | Шаблоны писем, выгрузки в TXT |
| Двоичные данные | Любой файл | DOCX-шаблон, картинка, XSD-схема, DLL внешней компоненты |
| HTML-документ | HTML-страница | Справки, подсказки, письма |
| Графическая и географическая схемы | Схемы и карты | Встречаются редко |
💡 Если нужна печатная форма документа, почти всегда выбирайте табличный документ. Дальше в статье речь идёт именно о нём.
Создание и правка макета в Конфигураторе
Новый макет
- Откройте конфигурацию:
Конфигурация → Открыть конфигурацию. - Двойным щелчком откройте нужный объект, например документ «РеализацияТоваровУслуг».
- Перейдите на вкладку «Макеты» и нажмите кнопку добавления.
- В конструкторе макета задайте имя латиницей или кириллицей без пробелов, например
ПФ_MXL_Накладная, и выберите тип «Табличный документ». - Нажмите «Готово» — откроется пустая таблица.
Для общего макета щёлкните правой кнопкой по ветке Общие → Макеты и выберите добавление. Порядок тот же.
Редактор табличного документа
Редактор похож на Excel, но с особенностями:
- 📐 ширину колонок и высоту строк тянут мышью за границы заголовков;
- 🔗 объединяют ячейки кнопкой на панели или через контекстное меню;
- 🖼️ картинку вставляют как рисунок, логотип можно хранить прямо в макете;
- ⚙️ свойства ячейки открывает
Alt+Enterили пункт «Свойства» контекстного меню.
Готовую вёрстку удобно перенести из Excel: скопируйте диапазон и вставьте в макет. Форматирование переносится частично, рамки и ширину колонок обычно приходится поправить.
Открытый макет можно сохранить в файл .mxl командой сохранения копии из меню Файл и загрузить обратно. Так шаблон передают между базами или отдают бухгалтеру на согласование: файл открывается в любой 1С и в бесплатной программе «1С:Предприятие — Работа с файлами».
Типовой макет: правьте через расширение
Не правьте макет типовой конфигурации напрямую — это снимает объект с поддержки и осложняет обновления. Опытные разработчики используют два пути:
- Расширение конфигурации . Создайте расширение, заимствуйте в нём документ, затем заимствуйте его макет. Макет в расширении заменяет исходный целиком, поэтому после обновления типовой сравните обе версии.
- Правка в пользовательском режиме. В конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) пользовательский макет сохраняется в базе, а не в конфигурации. Путь —
Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. Подходит для правки текста и оформления, но не логики заполнения.
Третий путь — внешняя печатная форма. Её подключают через «Дополнительные отчеты и обработки», и с конфигурацией она не связана вообще.
Области и параметры: разметка макета
Код не работает с макетом по ячейкам. Он берёт именованные области и заполняет в них параметры. Без разметки макет — просто картинка.
Именованные области
Выделите строки (кликом по номерам слева) и выберите Таблица → Имена → Назначить имя. Введите имя, например Шапка.
Область бывает четырёх видов:
| Вид | Как выделить | Пример использования |
|---|---|---|
| Горизонтальная | Целые строки | Шапка, Строка, Подвал |
| Вертикальная | Целые колонки | Колонка размера в отчёте по размерной сетке |
| Прямоугольная | Диапазон ячеек | Блок подписей, штамп |
| Пересечение | Горизонтальная + вертикальная | Строка|Колонка — ячейка на пересечении |
Типичная разметка накладной: Заголовок, Шапка, ШапкаТаблицы, Строка, Итого, Подписи. Строку табличной части рисуют один раз — код повторит её столько раз, сколько строк в документе.
💡 Имена областей появляются слева и сверху от таблицы, если включено их отображение. Если имени не видно, щёлкните по строке и посмотрите имя в свойствах.
Три режима заполнения ячейки
В свойствах ячейки есть поле «Заполнение». От него зависит, что увидит пользователь:
- 📝 Текст — выводится как есть. Для подписей колонок, постоянных надписей.
- 🔣 Параметр — в поле «Параметр» пишут имя, например
Номенклатура. Ячейка целиком заменяется значением. - 🧩 Шаблон — текст с параметрами в квадратных скобках:
Накладная № [Номер] от [Дата]. Удобно, когда значение встроено во фразу.
Есть ещё поле «Параметр расшифровки». В него кладут ссылку на объект, и пользователь двойным щелчком по ячейке открывает этот объект. Для накладной это удобно в колонке номенклатуры.
Если написать [Номер] в ячейке с режимом «Текст», скобки так и напечатаются. Квадратные скобки работают только в режиме «Шаблон».
Вывод макета кодом: от ПолучитьМакет до Показать
Схема всегда одна: получить макет → взять область → заполнить параметры → вывести в новый табличный документ.
Печать документа из формы
Макет объекта получают на сервере. Клиентская процедура только вызывает серверную функцию и показывает результат.
&НаКлиенте
Процедура Печать(Команда)
ТабДок = СформироватьПечатнуюФорму(Объект.Ссылка);
ТабДок.Показать("Накладная");
КонецПроцедуры
&НаСервереБезКонтекста
Функция СформироватьПечатнуюФорму(Ссылка)
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("ПФ_MXL_Накладная");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьИтого = Макет.ПолучитьОбласть("Итого");
ОбластьШапка.Параметры.Номер = Ссылка.Номер;
ОбластьШапка.Параметры.Дата = Формат(Ссылка.Дата, "ДЛФ=D");
ОбластьШапка.Параметры.Контрагент = Ссылка.Контрагент;
ТабДок.Вывести(ОбластьШапка);
Сумма = 0;
Для Каждого СтрокаТЧ Из Ссылка.Товары Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТЧ);
ТабДок.Вывести(ОбластьСтрока);
Сумма = Сумма + СтрокаТЧ.Сумма;
КонецЦикла;
ОбластьИтого.Параметры.Сумма = Сумма;
ТабДок.Вывести(ОбластьИтого);
Возврат ТабДок;
КонецФункции
Параметры.Заполнить() переносит значения из строки табличной части в параметры с теми же именами. Если параметр в макете называется НомерСтроки, а колонка — тоже НомерСтроки, руками ничего присваивать не надо.
Откуда ещё берут макет
| Где макет | Как получить |
|---|---|
| Макет документа, справочника | Документы.Имя.ПолучитьМакет("ИмяМакета") |
| Общий макет | ПолучитьОбщийМакет("ИмяМакета") |
| Макет внешней обработки или отчёта | РеквизитФормыВЗначение("Объект").ПолучитьМакет("ИмяМакета") на сервере |
| Макет в модуле объекта | ПолучитьМакет("ИмяМакета") без менеджера |
Для макета типа «Двоичные данные» метод вернёт ДвоичныеДанные, для текстового — ТекстовыйДокумент. Табличный макет возвращает ТабличныйДокумент.
Вывод по горизонтали и группировки
Вывести() добавляет область вниз. Чтобы собрать строку из нескольких вертикальных кусков, используют Присоединить():
ТабДок.Вывести(Макет.ПолучитьОбласть("Строка|Наименование"));
Для Каждого Размер Из МассивРазмеров Цикл
Область = Макет.ПолучитьОбласть("Строка|Размер");
Область.Параметры.Размер = Размер;
ТабДок.Присоединить(Область);
КонецЦикла;
Для сворачиваемых строк в отчёте оберните вывод в ТабДок.НачатьГруппировкуСтрок() и ТабДок.ЗакончитьГруппировкуСтрок().
Разбивка на страницы
Многостраничная накладная должна повторять шапку таблицы на каждом листе и не рвать итоговый блок. Для этого:
- Назначьте шапку таблицы повторяемой. Метод
Вывести()возвращает область, в которую попали данные, — её и передайте в свойство:ТабДок.ПовторятьПриПечатиСтрок = ТабДок.Вывести(ОбластьШапкаТаблицы). - Перед выводом строки проверьте, поместится ли она вместе с итогом:
МассивПроверки = Новый Массив;
МассивПроверки.Добавить(ОбластьСтрока);
МассивПроверки.Добавить(ОбластьИтого);
Если Не ТабДок.ПроверитьВывод(МассивПроверки) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(ОбластьШапкаТаблицы);
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);
- Задайте параметры листа до показа:
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт,ТабДок.АвтоМасштаб = Истина.
💡 Свойство ИмяПараметровПечати сохраняет настройки печати пользователя (поля, ориентацию) отдельно для каждой формы. Задайте уникальное имя, например "ПАРАМЕТРЫ_ПЕЧАТИ_Накладная", иначе настройки будут сбрасываться.
Оформление ячеек: в макете и программно
В редакторе макета
Почти всё оформление делают один раз в макете, и оно переезжает в результат вместе с областью:
- 🔤 Шрифт, цвет текста, цвет фона — в свойствах ячейки или кнопками панели.
- 🔲 Рамки — линии, толщина, цвет. Для таблицы накладной рамки ставят на область
Строкацеликом. - ↔️ Положение — горизонтальное и вертикальное выравнивание.
- 📏 Размещение текста — режим «Переносить» нужен для длинных наименований, иначе текст обрежется или уйдёт в соседние ячейки.
- 🔢 Формат — строка формата для чисел и дат.
ЧДЦ=2— два знака после запятой,ЧН=-— прочерк вместо нуля,ДЛФ=D— дата без времени.
Формат в ячейке избавляет от вызовов Формат() в коде: передайте в параметр число, макет сам покажет его правильно.
Из кода
Иногда оформление зависит от данных: подсветить просроченную строку, выделить итог по группе. Меняйте оформление уже выведенной области в результирующем документе:
ТабДок.Вывести(ОбластьСтрока);
Если СтрокаТЧ.Просрочено Тогда
НомерСтроки = ТабДок.ВысотаТаблицы;
Диапазон = ТабДок.Область(НомерСтроки, 1, НомерСтроки, 6);
Диапазон.ЦветФона = Новый Цвет(255, 220, 220);
Диапазон.Шрифт = Новый Шрифт(Диапазон.Шрифт, , , Истина);
КонецЕсли;
ВысотаТаблицы после вывода равна номеру последней строки. Если область Строка занимает две строки, отнимите единицу для первой из них.
💡 Условное оформление держите в коде, а постоянное — в макете. Тогда бухгалтер сможет поменять шрифт или рамки в пользовательском режиме, не трогая программу.
Ошибки при работе с макетами и как их исправить
Строка|Колонка, без пробелов вокруг черты.Отдельная история — печать из веб-клиента. Табличный документ там показывается так же, но шрифты берутся из браузера. Если в макете стоит редкий шрифт, вёрстка поплывёт. Используйте Arial или шрифт, который точно установлен у пользователей.
Ещё одна частая ловушка — Заполнить() для параметров с одинаковыми именами в шапке и строке. Метод заполнит всё, что совпало по имени, включая то, что вы не планировали. Если в строке есть параметр Сумма, а вы хотите вывести туда сумму с НДС, присвойте его явно после вызова Заполнить().
Что ещё спрашивают про макеты
Можно ли хранить в макете файл Word или Excel?
ДвоичныеДанные, их можно записать во временный файл и открыть или заполнить.Чем макет отличается от схемы компоновки данных?
Как перенести готовый макет в другую базу?
.mxl из редактора и загрузите в макет другой базы. Для макета печатной формы в пользовательском режиме есть загрузка из файла в списке «Макеты печатных форм».Можно ли вывести в макет картинку из базы?
Логотип. В коде обратитесь к нему через коллекцию Рисунки полученной области и присвойте свойству Картинка объект Новый Картинка(ДвоичныеДанные).