Макеты 1С 8.3: от пустой таблицы до готовой печатной формы

· 9 мин

Содержание

Работа с макетом в 1С сводится к трём действиям: нарисовать табличный документ в Конфигураторе, разметить в нём именованные области с параметрами и вывести эти области кодом через ПолучитьМакет() → ПолучитьОбласть() → Вывести(). Всё остальное — оформление, разбивка на страницы и правка типовых форм без снятия с поддержки.

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

Какие бывают макеты и где они лежат в конфигурации

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

📍 Два места хранения:

  • Макет объекта — на вкладке «Макеты» в окне редактирования документа, справочника, отчёта или обработки. Получают его через менеджер объекта или сам объект.
  • Общий макет — ветка Общие → Макеты в дереве конфигурации. Подходит для шаблонов, которые используют несколько объектов: логотип, общий бланк, схема для обмена.

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

Тип макетаЧто хранитДля чего обычно
Табличный документЯчейки, области, параметры, картинкиПечатные формы, бланки, отчёты с фиксированной вёрсткой
Схема компоновки данныхЗапрос, поля, настройки СКДОтчёты, сложные выборки
Макет оформления компоновки данныхСтили оформления для СКДЕдиный вид отчётов
Текстовый документОбычный текстШаблоны писем, выгрузки в TXT
Двоичные данныеЛюбой файлDOCX-шаблон, картинка, XSD-схема, DLL внешней компоненты
HTML-документHTML-страницаСправки, подсказки, письма
Графическая и географическая схемыСхемы и картыВстречаются редко

💡 Если нужна печатная форма документа, почти всегда выбирайте табличный документ. Дальше в статье речь идёт именно о нём.

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

Новый макет

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

Для общего макета щёлкните правой кнопкой по ветке Общие → Макеты и выберите добавление. Порядок тот же.

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

Редактор похож на Excel, но с особенностями:

  • 📐 ширину колонок и высоту строк тянут мышью за границы заголовков;
  • 🔗 объединяют ячейки кнопкой на панели или через контекстное меню;
  • 🖼️ картинку вставляют как рисунок, логотип можно хранить прямо в макете;
  • ⚙️ свойства ячейки открывает Alt+Enter или пункт «Свойства» контекстного меню.

Готовую вёрстку удобно перенести из Excel: скопируйте диапазон и вставьте в макет. Форматирование переносится частично, рамки и ширину колонок обычно приходится поправить.

Открытый макет можно сохранить в файл .mxl командой сохранения копии из меню Файл и загрузить обратно. Так шаблон передают между базами или отдают бухгалтеру на согласование: файл открывается в любой 1С и в бесплатной программе «1С:Предприятие — Работа с файлами».

Типовой макет: правьте через расширение

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

  1. Расширение конфигурации . Создайте расширение, заимствуйте в нём документ, затем заимствуйте его макет. Макет в расширении заменяет исходный целиком, поэтому после обновления типовой сравните обе версии.
  2. Правка в пользовательском режиме. В конфигурациях на БСП (БП 3.0, ЗУП 3.1, УТ 11) пользовательский макет сохраняется в базе, а не в конфигурации. Путь — Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. Подходит для правки текста и оформления, но не логики заполнения.

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

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

Код не работает с макетом по ячейкам. Он берёт именованные области и заполняет в них параметры. Без разметки макет — просто картинка.

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

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

Область бывает четырёх видов:

ВидКак выделитьПример использования
ГоризонтальнаяЦелые строкиШапка, Строка, Подвал
ВертикальнаяЦелые колонкиКолонка размера в отчёте по размерной сетке
ПрямоугольнаяДиапазон ячеекБлок подписей, штамп
ПересечениеГоризонтальная + вертикальнаяСтрока|Колонка — ячейка на пересечении

Типичная разметка накладной: Заголовок, Шапка, ШапкаТаблицы, Строка, Итого, Подписи. Строку табличной части рисуют один раз — код повторит её столько раз, сколько строк в документе.

💡 Имена областей появляются слева и сверху от таблицы, если включено их отображение. Если имени не видно, щёлкните по строке и посмотрите имя в свойствах.

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

В свойствах ячейки есть поле «Заполнение». От него зависит, что увидит пользователь:

  • 📝 Текст — выводится как есть. Для подписей колонок, постоянных надписей.
  • 🔣 Параметр — в поле «Параметр» пишут имя, например Номенклатура. Ячейка целиком заменяется значением.
  • 🧩 Шаблон — текст с параметрами в квадратных скобках: Накладная № [Номер] от [Дата]. Удобно, когда значение встроено во фразу.

Есть ещё поле «Параметр расшифровки». В него кладут ссылку на объект, и пользователь двойным щелчком по ячейке открывает этот объект. Для накладной это удобно в колонке номенклатуры.

Если написать [Номер] в ячейке с режимом «Текст», скобки так и напечатаются. Квадратные скобки работают только в режиме «Шаблон».

Вывод макета кодом: от ПолучитьМакет до Показать

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

Печать документа из формы

Макет объекта получают на сервере. Клиентская процедура только вызывает серверную функцию и показывает результат.

&НаКлиенте
Процедура Печать(Команда)
    ТабДок = СформироватьПечатнуюФорму(Объект.Ссылка);
    ТабДок.Показать("Накладная");
КонецПроцедуры

&НаСервереБезКонтекста
Функция СформироватьПечатнуюФорму(Ссылка)

    ТабДок = Новый ТабличныйДокумент;
    Макет = Документы.РеализацияТоваровУслуг.ПолучитьМакет("ПФ_MXL_Накладная");

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

    ОбластьШапка.Параметры.Номер      = Ссылка.Номер;
    ОбластьШапка.Параметры.Дата       = Формат(Ссылка.Дата, "ДЛФ=D");
    ОбластьШапка.Параметры.Контрагент = Ссылка.Контрагент;
    ТабДок.Вывести(ОбластьШапка);

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

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

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

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

Параметры.Заполнить() переносит значения из строки табличной части в параметры с теми же именами. Если параметр в макете называется НомерСтроки, а колонка — тоже НомерСтроки, руками ничего присваивать не надо.

Откуда ещё берут макет

Где макетКак получить
Макет документа, справочникаДокументы.Имя.ПолучитьМакет("ИмяМакета")
Общий макетПолучитьОбщийМакет("ИмяМакета")
Макет внешней обработки или отчётаРеквизитФормыВЗначение("Объект").ПолучитьМакет("ИмяМакета") на сервере
Макет в модуле объектаПолучитьМакет("ИмяМакета") без менеджера

Для макета типа «Двоичные данные» метод вернёт ДвоичныеДанные, для текстового — ТекстовыйДокумент. Табличный макет возвращает ТабличныйДокумент.

Вывод по горизонтали и группировки

Вывести() добавляет область вниз. Чтобы собрать строку из нескольких вертикальных кусков, используют Присоединить():

ТабДок.Вывести(Макет.ПолучитьОбласть("Строка|Наименование"));
Для Каждого Размер Из МассивРазмеров Цикл
    Область = Макет.ПолучитьОбласть("Строка|Размер");
    Область.Параметры.Размер = Размер;
    ТабДок.Присоединить(Область);
КонецЦикла;

Для сворачиваемых строк в отчёте оберните вывод в ТабДок.НачатьГруппировкуСтрок() и ТабДок.ЗакончитьГруппировкуСтрок().

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

Многостраничная накладная должна повторять шапку таблицы на каждом листе и не рвать итоговый блок. Для этого:

  1. Назначьте шапку таблицы повторяемой. Метод Вывести() возвращает область, в которую попали данные, — её и передайте в свойство: ТабДок.ПовторятьПриПечатиСтрок = ТабДок.Вывести(ОбластьШапкаТаблицы).
  2. Перед выводом строки проверьте, поместится ли она вместе с итогом:
МассивПроверки = Новый Массив;
МассивПроверки.Добавить(ОбластьСтрока);
МассивПроверки.Добавить(ОбластьИтого);

Если Не ТабДок.ПроверитьВывод(МассивПроверки) Тогда
    ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    ТабДок.Вывести(ОбластьШапкаТаблицы);
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);
  1. Задайте параметры листа до показа: ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт, ТабДок.АвтоМасштаб = Истина.

💡 Свойство ИмяПараметровПечати сохраняет настройки печати пользователя (поля, ориентацию) отдельно для каждой формы. Задайте уникальное имя, например "ПАРАМЕТРЫ_ПЕЧАТИ_Накладная", иначе настройки будут сбрасываться.

Оформление ячеек: в макете и программно

В редакторе макета

Почти всё оформление делают один раз в макете, и оно переезжает в результат вместе с областью:

  • 🔤 Шрифт, цвет текста, цвет фона — в свойствах ячейки или кнопками панели.
  • 🔲 Рамки — линии, толщина, цвет. Для таблицы накладной рамки ставят на область Строка целиком.
  • ↔️ Положение — горизонтальное и вертикальное выравнивание.
  • 📏 Размещение текста — режим «Переносить» нужен для длинных наименований, иначе текст обрежется или уйдёт в соседние ячейки.
  • 🔢 Формат — строка формата для чисел и дат. ЧДЦ=2 — два знака после запятой, ЧН=- — прочерк вместо нуля, ДЛФ=D — дата без времени.

Формат в ячейке избавляет от вызовов Формат() в коде: передайте в параметр число, макет сам покажет его правильно.

Из кода

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

ТабДок.Вывести(ОбластьСтрока);
Если СтрокаТЧ.Просрочено Тогда
    НомерСтроки = ТабДок.ВысотаТаблицы;
    Диапазон = ТабДок.Область(НомерСтроки, 1, НомерСтроки, 6);
    Диапазон.ЦветФона = Новый Цвет(255, 220, 220);
    Диапазон.Шрифт = Новый Шрифт(Диапазон.Шрифт, , , Истина);
КонецЕсли;

ВысотаТаблицы после вывода равна номеру последней строки. Если область Строка занимает две строки, отнимите единицу для первой из них.

💡 Условное оформление держите в коде, а постоянное — в макете. Тогда бухгалтер сможет поменять шрифт или рамки в пользовательском режиме, не трогая программу.

Проверка макета перед сдачей
Выполнено: 0 / 7

Ошибки при работе с макетами и как их исправить

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

Отдельная история — печать из веб-клиента. Табличный документ там показывается так же, но шрифты берутся из браузера. Если в макете стоит редкий шрифт, вёрстка поплывёт. Используйте Arial или шрифт, который точно установлен у пользователей.

Ещё одна частая ловушка — Заполнить() для параметров с одинаковыми именами в шапке и строке. Метод заполнит всё, что совпало по имени, включая то, что вы не планировали. Если в строке есть параметр Сумма, а вы хотите вывести туда сумму с НДС, присвойте его явно после вызова Заполнить().

Что ещё спрашивают про макеты

Можно ли хранить в макете файл Word или Excel?
Да. Создайте макет типа «Двоичные данные» и загрузите в него файл. Код получит ДвоичныеДанные, их можно записать во временный файл и открыть или заполнить.
Чем макет отличается от схемы компоновки данных?
Табличный макет — это жёсткая вёрстка, которую вы заполняете кодом. СКД сама строит запрос и вывод по настройкам, пользователь может менять группировки. Для бланков берут макет, для аналитических отчётов — СКД.
Как перенести готовый макет в другую базу?
Сохраните его в файл .mxl из редактора и загрузите в макет другой базы. Для макета печатной формы в пользовательском режиме есть загрузка из файла в списке «Макеты печатных форм».
Можно ли вывести в макет картинку из базы?
Да. Вставьте в область макета рисунок и дайте ему имя, например Логотип. В коде обратитесь к нему через коллекцию Рисунки полученной области и присвойте свойству Картинка объект Новый Картинка(ДвоичныеДанные).
Почему макет в расширении не подхватывает изменения типовой?
Заимствованный макет в расширении заменяет исходный полностью. Новые колонки и правки поставщика в нём не появятся, пока вы не перенесёте их вручную.