Новый макет в конфигурации 1С 8.3: создание, загрузка и вывод из кода
Содержание
Макет в 1С 8.3 добавляют в Конфигураторе: откройте объект (документ, справочник, отчёт или обработку), перейдите на закладку Макеты и нажмите Добавить. Конструктор спросит имя и тип макета — для печатной формы выбирайте «Табличный документ». Если макет нужен нескольким объектам сразу, создайте его в ветке Общие → Макеты.
Типовую конфигурацию на поддержке напрямую лучше не трогать: макет добавляют в расширение, во внешнюю печатную форму или правят готовый макет прямо в режиме Предприятия. Ниже — все способы, как настроить области и параметры и как вывести макет кодом.
Какие бывают макеты и где они хранятся
Макет — это шаблон внутри конфигурации. Чаще всего это заготовка печатной формы, но не только. При добавлении конструктор предлагает выбрать тип.
| Тип макета | Для чего нужен |
|---|---|
| Табличный документ | Печатные формы, бланки, отчёты, файлы загрузки (.mxl) |
| Схема компоновки данных | Отчёты на СКД, источники данных для вывода |
| Макет оформления компоновки данных | Собственное оформление отчётов на СКД |
| Текстовый документ | Шаблоны текстов, SQL-заготовки, простые файлы выгрузки |
| Двоичные данные | Любые файлы: картинки, шаблоны Word/Excel, архивы, DLL внешних компонент |
| HTML-документ | Справочные страницы, HTML-шаблоны писем |
| Графическая и географическая схемы | Схемы процессов и карты |
| Active document | Документы Word/Excel внутри конфигурации (устаревший вариант, используется редко) |
Место хранения определяет, кто видит макет:
- 📄 Макет объекта лежит в ветке конкретного документа, справочника, отчёта или обработки. Получают его методом
ПолучитьМакет()модуля объекта или менеджера. - 🌐 Общий макет лежит в
Общие → Макеты. Доступен из любого модуля черезПолучитьОбщийМакет(). Подходит для логотипа, общего бланка, файла внешней компоненты. - 🧩 Макет в расширении добавляется к объекту, заимствованному в расширение. Основная конфигурация при этом не меняется.
- 📦 Макет внешней обработки живёт внутри файла
.epfили.erfи подключается без изменения базы.
Создание макета в Конфигураторе шаг за шагом
Ниже — порядок для собственного объекта или конфигурации, снятой с поддержки. Для типовой на поддержке смотрите раздел про расширение.
- Откройте Конфигуратор и дерево конфигурации (
Конфигурация → Открыть конфигурацию). - Найдите объект, например документ, и откройте окно его редактирования двойным щелчком.
- Перейдите на закладку
Макетыи нажмите кнопкуДобавить(зелёный плюс). - В конструкторе макета укажите имя латиницей или кириллицей без пробелов, например
ПФ_MXL_АктСверки, и синоним — его увидит пользователь. - Выберите тип «Табличный документ» и вариант заполнения: пустой макет или на основе существующего.
- Нажмите
Готово. Откроется редактор табличного документа.
Можно идти и через дерево: раскройте объект, щёлкните правой кнопкой по ветке Макеты и выберите Добавить. Результат одинаковый.
Префикс в имени (ПФ_MXL_) не обязателен для платформы, но в типовых на БСП так принято называть макеты печатных форм. По префиксу ПФ_ типовые макеты попадают в список Макеты печатных форм для правки в Предприятии, а вам проще искать нужный макет в длинном списке.
После создания макета сохраните конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7). Без этого шага пользователи в режиме Предприятия макет не увидят.
Редактор табличного документа: что настроить сразу
- 🔲 Ширину колонок задайте под лист A4. Перетаскивайте границы заголовков колонок или задайте ширину в свойствах.
- 🖨 Поля и ориентацию листа:
Файл → Параметры страницыпри открытом макете. Эти же свойства можно выставить из кода. - 🔤 Шрифт выделите на всём макете один раз, чтобы потом не править каждую ячейку.
- 📐 Объединение ячеек — через контекстное меню выделенного диапазона.
Загрузка готового макета из файла MXL
Готовый бланк часто приходит файлом .mxl — его прислал коллега, выгрузили из другой базы или сохранили печатную форму из Предприятия. Перенести его в макет можно двумя способами.
Способ 1. Через буфер обмена — работает всегда:
- В Конфигураторе откройте файл:
Файл → Открыть, выберите.mxl. - Выделите весь документ (
Ctrl+A) и скопируйте (Ctrl+C). - Откройте ваш макет, встаньте в ячейку
R1C1и вставьте (Ctrl+V). - Проверьте ширину колонок: при вставке в пустой макет она иногда не переносится. В этом случае скопируйте строки целиком, выделяя их по заголовкам.
Учтите: имена областей и параметры ячеек копируются вместе с содержимым, если выделены целые строки. При копировании отдельных ячеек именованные области строк могут потеряться.
Способ 2. Замена макета файлом. В контекстном меню макета в дереве конфигурации есть команды сохранения макета во внешний файл и замены его содержимого из файла. Этот путь удобен, когда меняете весь макет целиком: имя и синоним остаются, содержимое заменяется полностью.
Замена из файла стирает текущее содержимое макета. Если в нём были именованные области, на которые ссылается код, а в новом файле их нет, печать упадёт с ошибкой. Перед заменой сохраните старый макет в файл.
Для макетов типа «Двоичные данные» (шаблон Word, картинка, внешняя компонента) путь один — загрузка файла через контекстное меню или кнопку в окне макета. Буфер обмена тут не поможет.
Области и параметры: разметка макета под вывод
Сам по себе табличный макет — просто нарисованный бланк. Чтобы код мог выводить его частями и подставлять данные, макет размечают.
Именованные области
Классическая печатная форма делится на области:
- 🧾 Заголовок — название документа, номер, дата;
- 🏢 Шапка — организация, контрагент, договор;
- 📋 ШапкаТаблицы — заголовки колонок;
- ➕ Строка — одна строка табличной части, выводится в цикле;
- 🧮 Подвал — итоги и подписи.
Чтобы создать область, выделите строки по их заголовкам слева, откройте палитру свойств (Alt+Enter) и впишите имя в поле Имя. Можно и через контекстное меню выделения. Области-строки видны слева от таблицы в виде скобки с именем.
Бывают и прямоугольные области (выделение строк и колонок одновременно), и области-колонки. Их используют, когда таблица растёт вправо, например помесячный отчёт.
Тип заполнения ячейки
У каждой ячейки в палитре свойств есть поле Заполнение. От него зависит, что код увидит в этой ячейке.
| Заполнение | Что в ячейке | Пример |
|---|---|---|
| Текст | Статичный текст, выводится как есть | «Итого:» |
| Параметр | Имя параметра, вместо него подставится значение | Контрагент |
| Шаблон | Текст с параметрами в квадратных скобках | Счёт № [Номер] от [Дата] |
Для «Параметра» имя пишут в поле Параметр (если оно пустое, используется текст ячейки). Для «Шаблона» параметры берутся из квадратных скобок прямо в тексте ячейки.
У ячейки также есть свойство ПараметрРасшифровки. В него кладут ссылку на документ или элемент справочника — тогда двойной щелчок по ячейке в готовой форме откроет этот объект.
Вывод макета кодом
Макет получают и заполняют на сервере. В управляемом приложении это означает: код вывода — в модуле менеджера, в модуле объекта или в серверной процедуре формы. Минимальный пример печати документа с табличной частью Товары:
Функция ПечатьАкта(СсылкаНаДокумент) Экспорт
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.АктВыполненныхРабот.ПолучитьМакет("ПФ_MXL_Акт");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
// Шапка: подставляем реквизиты документа
ЗаполнитьЗначенияСвойств(ОбластьШапка.Параметры, СсылкаНаДокумент);
ТабДок.Вывести(ОбластьШапка);
// Строки табличной части
Итого = 0;
Для Каждого СтрокаТЧ Из СсылкаНаДокумент.Товары Цикл
ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, СтрокаТЧ);
ОбластьСтрока.Параметры.НомерСтроки = СтрокаТЧ.НомерСтроки;
ТабДок.Вывести(ОбластьСтрока);
Итого = Итого + СтрокаТЧ.Сумма;
КонецЦикла;
ОбластьПодвал.Параметры.Итого = Итого;
ТабДок.Вывести(ОбластьПодвал);
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.АвтоМасштаб = Истина;
Возврат ТабДок;
КонецФункции
Что здесь происходит:
ПолучитьМакет()возвращает макет объекта. Для общего макета вызывайтеПолучитьОбщийМакет("ИмяМакета").ПолучитьОбласть()возвращает копию области. Параметры одной копии можно заполнять и выводить много раз — так работает цикл по строкам.ЗаполнитьЗначенияСвойств()переносит значения по совпадающим именам. Параметры, которым не нашлось пары, она тихо пропускает. Прямое присваиваниеПараметры.Имя = ...при опечатке, наоборот, вызовет ошибку — это удобно для отладки.Вывести()добавляет область в конец документа. Для колонок, которые растут вправо, используютПрисоединить().
На клиенте готовый документ показывают методом ТабДок.Показать() или выводят в реквизит формы типа «Табличный документ».
Сначала соберите макет и код на тестовой копии базы. Один пробный вывод быстро покажет, совпадают ли имена областей и параметров.
Условное оформление в печатной форме
В самом табличном макете нет механизма «если сумма больше нуля — красить красным». Оформление по условию делают кодом, до вывода области.
Удобный приём — дать имя не только строкам, но и отдельной ячейке. Например, ячейке суммы в области Строка присвойте имя ЯчейкаСумма. Тогда в цикле:
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ЦветПоУмолчанию = ОбластьСтрока.Области.ЯчейкаСумма.ЦветТекста;
Для Каждого СтрокаТЧ Из СсылкаНаДокумент.Товары Цикл
ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, СтрокаТЧ);
Если СтрокаТЧ.Сумма < 0 Тогда
ОбластьСтрока.Области.ЯчейкаСумма.ЦветТекста = WebЦвета.Красный;
Иначе
ОбластьСтрока.Области.ЯчейкаСумма.ЦветТекста = ЦветПоУмолчанию;
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Цвет возвращают на исходный в ветке Иначе: копия области одна на весь цикл, и без этого все строки после первой отрицательной тоже станут красными.
Так же меняют шрифт (Шрифт), фон (ЦветФона) и видимость отдельных областей. Целые блоки по условию проще не выводить вовсе: например, область с подписью главного бухгалтера выводится только если он указан в документе.
Если нужен отчёт с группировками, итогами и пользовательскими настройками оформления, табличный макет — не лучший инструмент. Там выбирают макет типа «Схема компоновки данных»: условное оформление в нём настраивается без кода, на закладке Настройки.
Макет в типовой конфигурации: расширение и внешняя печатная форма
Это то, без чего добавление макета в БП 3.0, ЗУП 3.1 или УТ 11 обычно заканчивается проблемами при обновлении. Изменённая конфигурация на поддержке обновляется дольше и сложнее. Поэтому выбирают один из трёх путей.
Пару деталей про каждый путь.
Правка в режиме Предприятия. Изменённый макет хранится в базе отдельно от конфигурации и переживает обновления. Но после обновления типовой стоит проверить форму: если разработчики поменяли свой макет, ваша сохранённая копия останется старой.
Внешняя печатная форма. Это самый безопасный вариант для нового бланка. Файл .epf подключают и отключают без участия программиста и без монопольного доступа. Макет добавляют в окне редактирования обработки на той же закладке Макеты, а получают в модуле обработки методом ПолучитьМакет().
Расширение. Подходит, когда новый макет должен вызываться типовым кодом или вашими доработками в том же расширении. Загрузка .cfe и обновление конфигурации базы данных — два отдельных шага, не пропустите второй.
Типичные ошибки при работе с макетами
Ещё две ошибки, которые не дают текста ошибки, но портят результат:
- ⚠️ Макет правят в Конфигураторе, хотя в Предприятии уже лежит изменённая копия. Пользователи продолжают видеть старый вариант. Проверьте список
Макеты печатных форм— изменённые там помечены. - ⚠️ Вызывают
ПолучитьМакет()на клиенте. В управляемой форме метод доступен только на сервере. Перенесите получение и заполнение макета в серверную процедуру.
Частые вопросы
Можно ли добавить макет без Конфигуратора?
Чем отличается файл MXL от макета?
Как добавить картинку или логотип в макет?
Таблица → Рисунки → Картинка. Если логотип должен меняться из кода, кладите его в общий макет типа «Двоичные данные» и подставляйте в рисунок программно.