Новый макет в конфигурации 1С 8.3: создание, загрузка и вывод из кода

· 11 мин

Содержание

Макет в 1С 8.3 добавляют в Конфигураторе: откройте объект (документ, справочник, отчёт или обработку), перейдите на закладку Макеты и нажмите Добавить. Конструктор спросит имя и тип макета — для печатной формы выбирайте «Табличный документ». Если макет нужен нескольким объектам сразу, создайте его в ветке Общие → Макеты.

Типовую конфигурацию на поддержке напрямую лучше не трогать: макет добавляют в расширение, во внешнюю печатную форму или правят готовый макет прямо в режиме Предприятия. Ниже — все способы, как настроить области и параметры и как вывести макет кодом.

Какие бывают макеты и где они хранятся

Макет — это шаблон внутри конфигурации. Чаще всего это заготовка печатной формы, но не только. При добавлении конструктор предлагает выбрать тип.

Тип макетаДля чего нужен
Табличный документПечатные формы, бланки, отчёты, файлы загрузки (.mxl)
Схема компоновки данныхОтчёты на СКД, источники данных для вывода
Макет оформления компоновки данныхСобственное оформление отчётов на СКД
Текстовый документШаблоны текстов, SQL-заготовки, простые файлы выгрузки
Двоичные данныеЛюбые файлы: картинки, шаблоны Word/Excel, архивы, DLL внешних компонент
HTML-документСправочные страницы, HTML-шаблоны писем
Графическая и географическая схемыСхемы процессов и карты
Active documentДокументы Word/Excel внутри конфигурации (устаревший вариант, используется редко)

Место хранения определяет, кто видит макет:

  • 📄 Макет объекта лежит в ветке конкретного документа, справочника, отчёта или обработки. Получают его методом ПолучитьМакет() модуля объекта или менеджера.
  • 🌐 Общий макет лежит в Общие → Макеты. Доступен из любого модуля через ПолучитьОбщийМакет(). Подходит для логотипа, общего бланка, файла внешней компоненты.
  • 🧩 Макет в расширении добавляется к объекту, заимствованному в расширение. Основная конфигурация при этом не меняется.
  • 📦 Макет внешней обработки живёт внутри файла .epf или .erf и подключается без изменения базы.

Создание макета в Конфигураторе шаг за шагом

Ниже — порядок для собственного объекта или конфигурации, снятой с поддержки. Для типовой на поддержке смотрите раздел про расширение.

  1. Откройте Конфигуратор и дерево конфигурации (Конфигурация → Открыть конфигурацию).
  2. Найдите объект, например документ, и откройте окно его редактирования двойным щелчком.
  3. Перейдите на закладку Макеты и нажмите кнопку Добавить (зелёный плюс).
  4. В конструкторе макета укажите имя латиницей или кириллицей без пробелов, например ПФ_MXL_АктСверки, и синоним — его увидит пользователь.
  5. Выберите тип «Табличный документ» и вариант заполнения: пустой макет или на основе существующего.
  6. Нажмите Готово. Откроется редактор табличного документа.

Можно идти и через дерево: раскройте объект, щёлкните правой кнопкой по ветке Макеты и выберите Добавить. Результат одинаковый.

Префикс в имени (ПФ_MXL_) не обязателен для платформы, но в типовых на БСП так принято называть макеты печатных форм. По префиксу ПФ_ типовые макеты попадают в список Макеты печатных форм для правки в Предприятии, а вам проще искать нужный макет в длинном списке.

После создания макета сохраните конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7). Без этого шага пользователи в режиме Предприятия макет не увидят.

Редактор табличного документа: что настроить сразу

  • 🔲 Ширину колонок задайте под лист A4. Перетаскивайте границы заголовков колонок или задайте ширину в свойствах.
  • 🖨 Поля и ориентацию листа: Файл → Параметры страницы при открытом макете. Эти же свойства можно выставить из кода.
  • 🔤 Шрифт выделите на всём макете один раз, чтобы потом не править каждую ячейку.
  • 📐 Объединение ячеек — через контекстное меню выделенного диапазона.

Загрузка готового макета из файла MXL

Готовый бланк часто приходит файлом .mxl — его прислал коллега, выгрузили из другой базы или сохранили печатную форму из Предприятия. Перенести его в макет можно двумя способами.

Способ 1. Через буфер обмена — работает всегда:

  1. В Конфигураторе откройте файл: Файл → Открыть, выберите .mxl.
  2. Выделите весь документ (Ctrl+A) и скопируйте (Ctrl+C).
  3. Откройте ваш макет, встаньте в ячейку R1C1 и вставьте (Ctrl+V).
  4. Проверьте ширину колонок: при вставке в пустой макет она иногда не переносится. В этом случае скопируйте строки целиком, выделяя их по заголовкам.

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

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

Замена из файла стирает текущее содержимое макета. Если в нём были именованные области, на которые ссылается код, а в новом файле их нет, печать упадёт с ошибкой. Перед заменой сохраните старый макет в файл.

Для макетов типа «Двоичные данные» (шаблон Word, картинка, внешняя компонента) путь один — загрузка файла через контекстное меню или кнопку в окне макета. Буфер обмена тут не поможет.

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

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

Именованные области

Классическая печатная форма делится на области:

  • 🧾 Заголовок — название документа, номер, дата;
  • 🏢 Шапка — организация, контрагент, договор;
  • 📋 ШапкаТаблицы — заголовки колонок;
  • ➕ Строка — одна строка табличной части, выводится в цикле;
  • 🧮 Подвал — итоги и подписи.

Чтобы создать область, выделите строки по их заголовкам слева, откройте палитру свойств (Alt+Enter) и впишите имя в поле Имя. Можно и через контекстное меню выделения. Области-строки видны слева от таблицы в виде скобки с именем.

Бывают и прямоугольные области (выделение строк и колонок одновременно), и области-колонки. Их используют, когда таблица растёт вправо, например помесячный отчёт.

Тип заполнения ячейки

У каждой ячейки в палитре свойств есть поле Заполнение. От него зависит, что код увидит в этой ячейке.

ЗаполнениеЧто в ячейкеПример
ТекстСтатичный текст, выводится как есть«Итого:»
ПараметрИмя параметра, вместо него подставится значениеКонтрагент
ШаблонТекст с параметрами в квадратных скобкахСчёт № [Номер] от [Дата]

Для «Параметра» имя пишут в поле Параметр (если оно пустое, используется текст ячейки). Для «Шаблона» параметры берутся из квадратных скобок прямо в тексте ячейки.

У ячейки также есть свойство ПараметрРасшифровки. В него кладут ссылку на документ или элемент справочника — тогда двойной щелчок по ячейке в готовой форме откроет этот объект.

Вывод макета кодом

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

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

    ТабДок = Новый ТабличныйДокумент;
    Макет = Документы.АктВыполненныхРабот.ПолучитьМакет("ПФ_MXL_Акт");

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

    // Шапка: подставляем реквизиты документа
    ЗаполнитьЗначенияСвойств(ОбластьШапка.Параметры, СсылкаНаДокумент);
    ТабДок.Вывести(ОбластьШапка);

    // Строки табличной части
    Итого = 0;
    Для Каждого СтрокаТЧ Из СсылкаНаДокумент.Товары Цикл
        ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, СтрокаТЧ);
        ОбластьСтрока.Параметры.НомерСтроки = СтрокаТЧ.НомерСтроки;
        ТабДок.Вывести(ОбластьСтрока);
        Итого = Итого + СтрокаТЧ.Сумма;
    КонецЦикла;

    ОбластьПодвал.Параметры.Итого = Итого;
    ТабДок.Вывести(ОбластьПодвал);

    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабДок.АвтоМасштаб = Истина;

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

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

Что здесь происходит:

  1. ПолучитьМакет() возвращает макет объекта. Для общего макета вызывайте ПолучитьОбщийМакет("ИмяМакета").
  2. ПолучитьОбласть() возвращает копию области. Параметры одной копии можно заполнять и выводить много раз — так работает цикл по строкам.
  3. ЗаполнитьЗначенияСвойств() переносит значения по совпадающим именам. Параметры, которым не нашлось пары, она тихо пропускает. Прямое присваивание Параметры.Имя = ... при опечатке, наоборот, вызовет ошибку — это удобно для отладки.
  4. Вывести() добавляет область в конец документа. Для колонок, которые растут вправо, используют Присоединить().

На клиенте готовый документ показывают методом ТабДок.Показать() или выводят в реквизит формы типа «Табличный документ».

Сначала соберите макет и код на тестовой копии базы. Один пробный вывод быстро покажет, совпадают ли имена областей и параметров.

Условное оформление в печатной форме

В самом табличном макете нет механизма «если сумма больше нуля — красить красным». Оформление по условию делают кодом, до вывода области.

Удобный приём — дать имя не только строкам, но и отдельной ячейке. Например, ячейке суммы в области Строка присвойте имя ЯчейкаСумма. Тогда в цикле:

ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ЦветПоУмолчанию = ОбластьСтрока.Области.ЯчейкаСумма.ЦветТекста;

Для Каждого СтрокаТЧ Из СсылкаНаДокумент.Товары Цикл
    ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, СтрокаТЧ);
    Если СтрокаТЧ.Сумма < 0 Тогда
        ОбластьСтрока.Области.ЯчейкаСумма.ЦветТекста = WebЦвета.Красный;
    Иначе
        ОбластьСтрока.Области.ЯчейкаСумма.ЦветТекста = ЦветПоУмолчанию;
    КонецЕсли;
    ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;

Цвет возвращают на исходный в ветке Иначе: копия области одна на весь цикл, и без этого все строки после первой отрицательной тоже станут красными.

Так же меняют шрифт (Шрифт), фон (ЦветФона) и видимость отдельных областей. Целые блоки по условию проще не выводить вовсе: например, область с подписью главного бухгалтера выводится только если он указан в документе.

Если нужен отчёт с группировками, итогами и пользовательскими настройками оформления, табличный макет — не лучший инструмент. Там выбирают макет типа «Схема компоновки данных»: условное оформление в нём настраивается без кода, на закладке Настройки.

Макет в типовой конфигурации: расширение и внешняя печатная форма

Это то, без чего добавление макета в БП 3.0, ЗУП 3.1 или УТ 11 обычно заканчивается проблемами при обновлении. Изменённая конфигурация на поддержке обновляется дольше и сложнее. Поэтому выбирают один из трёх путей.

Что именно нужно сделать с макетом?

Пару деталей про каждый путь.

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

Внешняя печатная форма. Это самый безопасный вариант для нового бланка. Файл .epf подключают и отключают без участия программиста и без монопольного доступа. Макет добавляют в окне редактирования обработки на той же закладке Макеты, а получают в модуле обработки методом ПолучитьМакет().

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

Типичные ошибки при работе с макетами

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

Ещё две ошибки, которые не дают текста ошибки, но портят результат:

  • ⚠️ Макет правят в Конфигураторе, хотя в Предприятии уже лежит изменённая копия. Пользователи продолжают видеть старый вариант. Проверьте список Макеты печатных форм — изменённые там помечены.
  • ⚠️ Вызывают ПолучитьМакет() на клиенте. В управляемой форме метод доступен только на сервере. Перенесите получение и заполнение макета в серверную процедуру.

Частые вопросы

Можно ли добавить макет без Конфигуратора?
Можно поправить существующий макет в режиме Предприятия или подключить внешнюю печатную форму со своим макетом. Добавить новый макет к объекту конфигурации без Конфигуратора нельзя.
Чем отличается файл MXL от макета?
MXL — это табличный документ, сохранённый в файл. Макет — табличный документ внутри конфигурации. Содержимое одно и то же, поэтому MXL легко переносится в макет и обратно.
Как добавить картинку или логотип в макет?
В редакторе табличного документа вставьте рисунок через меню Таблица → Рисунки → Картинка. Если логотип должен меняться из кода, кладите его в общий макет типа «Двоичные данные» и подставляйте в рисунок программно.
Нужен ли монопольный доступ, чтобы добавить макет?
Для правки в Предприятии и подключения внешней печатной формы — нет. Для обновления конфигурации базы данных после изменений в Конфигураторе платформа может его запросить, если меняется структура хранения данных; добавление одного макета обычно применяется без этого.
Как сделать несколько вариантов одного бланка?
Добавьте к объекту несколько макетов с разными именами и выбирайте нужный в коде по условию: по организации, языку или типу документа. Альтернатива — внешние печатные формы под каждый вариант.