Работа с макетами форм в 1С:Предприятие — один из ключевых навыков для разработчиков и администраторов системы. Без грамотно спроектированных макетов невозможно создать удобные печатные формы, отчёты или интерфейсные элементы, которые соответствуют бизнес-процессам компании. Однако многие специалисты сталкиваются с трудностями: то форма не выводит данные корректно, то макет «съезжает» при печати, то сложно связать его с программным кодом.

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

Материал будет полезен как начинающим разработчикам, так и опытным специалистам, которые хотят систематизировать знания. Все примеры приведены с учётом актуальных версий платформы 1С:Предприятие и типовых конфигураций (УТ 11, БП 3.0, ЗУП 3.1).

Что такое макет формы в 1С и зачем он нужен

Макет формы в — это шаблон, который определяет, как будут отображаться данные на экране или при печати. Он может содержать:

  • 📄 Статичные элементы (заголовки, логотипы, линии)
  • 📊 Динамические области (таблицы с данными из базы)
  • 🖼️ Графические элементы (штрихкоды, диаграммы)
  • 🔄 Условное форматирование (цвета, шрифты в зависимости от значений)

Основные сценарии использования макетов:

  • 📋 Печатные формы документов (счёта, накладные, акты)
  • 📈 Отчёты (аналитика, сводные таблицы)
  • 🖥️ Интерфейсные элементы (всплывающие окна, подсказки)
  • 📤 Экспорт данныхExcel, PDF)

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

📊 Какой тип макетов вы используете чаще?
Печатные формы документов
Отчёты и аналитика
Интерфейсные элементы
Экспорт в Excel/PDF

Типы макетов в 1С: табличный документ vs текстовый документ

В 1С:Предприятие существует два основных типа макетов, которые отличаются структурой и применением:

Тип макета Описание Примеры использования Особенности
Табличный документ Содержит ячейки, строки и столбцы. Поддерживает объединение ячеек, формулы, условное форматирование. Печатные формы счетов, накладные, прайс-листы. Можно программно управлять шириной столбцов, добавлять диаграммы.
Текстовый документ Представляет собой текст с разметкой (абзацы, шрифты, выравнивание). Письма, договоры, акты с большим количеством текста. Не поддерживает таблицы, но удобен для работы с длинными текстами.
Двоичные данные Хранит файлы (изображения, PDF, Excel). Логотипы компании, шаблоны Excel-отчётов. Не редактируется в конструкторе макетов, только загрузка/выгрузка.
Активный документ Динамический макет с поддержкой скриптов (например, HTML). Интерактивные отчёты, дашборды. Требует знаний JavaScript или 1С-скриптов.

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

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

💡

Если макет планируется использовать для экспорта в Excel, сразу настройте его как табличный документ — это упростит дальнейшую обработку данных.

Пошаговая инструкция: создание макета формы в конструкторе

Рассмотрим процесс создания макета на примере печатной формы счёта на оплату в конфигурации 1С:Управление торговлей 11. Для этого:

  1. Откройте конфигуратор в режиме 1С:Предприятие → перейдите в раздел Объекты → Документы → Счета покупателям.

  2. Выберите документ СчетНаОплату → откройте вкладку Формы → нажмите Добавить → выберите Макет.

  3. В окне создания макета укажите:

    • 📌 Имя: ПечатнаяФормаСчета
    • 📌 Тип: Табличный документ
    • 📌 Синоним: Печатная форма счёта (для удобства)
  • Нажмите ОК — откроется конструктор макетов.

  • В конструкторе вы увидите пустой табличный документ. Здесь можно:

    • 🖱️ Перетаскивать границы ячеек для изменения размеров.
    • 📝 Вводить статичный текст (например, «Счёт №», «Дата»).
    • 🔗 Добавлять поля данных из документа (например, &Номер, &Дата).
    • 🎨 Настраивать шрифты, выравнивание, цвета.

    ☑️ Чек-лист перед сохранением макета

    Выполнено: 0 / 4

    После создания структуры макета его нужно связать с формой документа. Для этого:

    1. Вернитесь в форму документа СчетНаОплату.

    2. Добавьте команду Печать (если её нет) и в обработчике события напишите:

      Процедура Печать(Команда)
      

      ПечатнаяФорма = ПолучитьМакет("ПечатнаяФормаСчета");

      ПечатнаяФорма.Вывести(Объект);

      КонецПроцедуры

    Теперь при нажатии на кнопку Печать в документе будет формироваться счёт по вашему макету.

    💡

    Всегда проверяйте макет в режиме 1С:Предприятие — в конструкторе он может отображаться иначе, чем при реальной печати.

    Работа с динамическими данными: привязка полей и выражения

    Статичный макет бесполезен без динамических данных. Чтобы подтянуть информацию из документа или справочника, используйте поля макета и выражения.

    Пример привязки полей в макете счёта:

    • 📌 Для номера счёта в ячейке укажите: &Номер
    • 📌 Для даты: &Дата
    • 📌 Для наименования покупателя: &Контрагент.Наименование
    • 📌 Для таблицы товаров используйте область с именем Товары и в цикле выводите строки:
    // Пример кода для заполнения таблицы товаров в макете
    

    Для Каждого СтрокаТоваров Из Объект.Товары Цикл

    НоваяСтрока = ПечатнаяФорма.Область("Товары").Добавить();

    НоваяСтрока.Параметры.Заполнить(СтрокаТоваров);

    КонецЦикла;

    Для сложных вычислений (например, итоговой суммы с учётом скидки) можно использовать выражения прямо в макете:

    • 🧮 В ячейке с итогом укажите: =Сумма(Объект.Товары.Сумма) * (1 - Объект.Скидка/100)
    • 📉 Для вывода процента НДС: =Объект.СтавкаНДС & "%"

    Важно: если поле в макете не отображается, проверьте:

    • 🔍 Корректность имени параметра (например, &Контрагент.Наименование, а не &КонтрагентНаименование).
    • 🔍 Наличие данных в источнике (если Объект.Товары пуст, таблица не выведется).
    • 🔍 Видимость области (иногда области скрыты по условию).
    Как отладить макет, если данные не выводятся?

    1. Проверьте, передаётся ли объект в метод Вывести(): ПечатнаяФорма.Вывести(Объект).

    2. Убедитесь, что имена параметров в макете совпадают с именами реквизитов объекта.

    3. Используйте отладочную печать: Сообщить(Объект.Товары.Количество()) — если возвращает 0, проблема в данных, а не в макете.

    Типовые ошибки при работе с макетами и как их избежать

    Даже опытные разработчики сталкиваются с ошибками при создании макетов. Вот наиболее распространённые проблемы и способы их решения:

    ⚠️ Внимание: Если макет «съезжает» при печати, проверьте настройки страницы в конструкторе (поля, ориентация). Часто проблема решается установкой галочки «Подгонять ширину».
    Ошибка Причина Решение
    Данные не выводятся в макете Неверные имена параметров или отсутствие привязки к объекту. Проверьте соответствие имён в макете и коде: &Номер vs Объект.Номер.
    Макет печатается «в одну строку» Не настроены разрывы страниц или области перекрываются. Используйте ПараметрыСтраницы.Ориентация = ОриентацияСтраницы.Альбомная.
    Таблица товаров обрезается Фиксированная высота области или мало строк в источнике. Установите динамическую высоту области или проверьте заполнение коллекции.
    Шрифты в макете отличаются от печати В конструкторе и при печати могут использоваться разные шрифты. Явно укажите шрифт в макете (например, Arial 10pt).

    Ещё одна частая проблема — некорректное форматирование чисел. Например, сумма выводится как 1000.00, а нужно 1 000,00. Решение:

    • 📌 В свойствах ячейки установите Формат = ЧДЦФ(15, 2) (число с двумя знаками после запятой).
    • 📌 Или используйте выражение: =Формат(Объект.Сумма, "ЧДЦ=2; ЧР= ").

    Если макет используется для экспорта в Excel, избегайте:

    • 🚫 Объединённых ячеек (они могут «разъехаться» в Excel).
    • 🚫 Слишком широких столбцов (ограничьте ширину до 50 символов).
    • 🚫 Формул в ячейках (они не перенесутся в Excel корректно).
    ⚠️ Внимание: При обновлении конфигурации стандартные макеты могут перезаписаться. Всегда сохраняйте кастомные макеты в расширениях или внешних обработках.

    Продвинутые техники: условное форматирование и динамические макеты

    Для создания профессиональных макетов недостаточно просто вывести данные — нужно управлять их отображением в зависимости от условий. Рассмотрим две ключевые техники:

    1. Условное форматирование

    Позволяет изменять цвет, шрифт или видимость элементов в зависимости от значений. Примеры:

    • 🔴 Подсветить отрицательные остатки красным:
    • Если Объект.Количество < 0 Тогда
      

      Область.ЦветТекста = Цвет.Красный;

      КонецЕсли;

    • 🟢 Выделить оплаченные счета зелёным:
    • Если Объект.СуммаОплаты >= Объект.СуммаДокумента Тогда
      

      Область.ЦветФона = Цвет.СветлоЗелёный;

      КонецЕсли;

    2. Динамические макеты

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

    Реализуется через:

    • 🔄 Условные области (скрытие/показ блоков по условию).
    • 📄 Несколько макетов с выбором нужного в коде.
    • 🖥️ Программное формирование макета через ТабличныйДокумент.

    Пример динамического макета для счёта с опциональным столбцом «Скидка»:

    Если Объект.ЕстьСкидки Тогда
    

    Макет.Область("Скидка").Видимость = Истина;

    Макет.Область("СкидкаЗаголовок").Видимость = Истина;

    Иначе

    Макет.Область("Скидка").Видимость = Ложь;

    Макет.Область("СкидкаЗаголовок").Видимость = Ложь;

    КонецЕсли;

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

    💡

    Динамические макеты требуют больше ресурсов при формировании, но позволяют создать универсальные шаблоны, которые подходят под разные сценарии.

    Экспорт макетов в Excel и PDF: нюансы и рекомендации

    Часто макеты используются не только для печати, но и для экспорта данных в другие форматы. Рассмотрим ключевые моменты:

    Экспорт в Excel

    Для экспорта табличного документа в Excel используйте метод Записать():

    ТабДок = Новый ТабличныйДокумент;
    

    ТабДок.Прочитать(Макет);

    ТабДок.Записать("C:\Export\Счет.xlsx", ТипФайлаТабличногоДокумента.XLSX);

    Рекомендации:

    • 📌 Используйте формат XLSX (а не XLS) для совместимости с новыми версиями Excel.
    • 📌 Отключите объединение ячеек, если планируете дальнейшую обработку данных.
    • 📌 Для больших таблиц (>10 000 строк) используйте ПакетнаяЗапись = Истина.

    Экспорт в PDF

    Для генерации PDF подходит метод Вывести() с виртуальным принтером:

    ТабДок = Новый ТабличныйДокумент;
    

    ТабДок.Прочитать(Макет);

    ТабДок.Вывести(Объект, "", Новый ПараметрыВыводаВКоллекциюЗначений);

    ТабДок.Печать(ТипВнешнейПечати.PDF, "C:\Export\Счет.pdf");

    Нюансы:

    • 📌 В PDF не сохраняются формулы — только статичные данные.
    • 📌 Для корректного отображения шрифтов укажите их явным образом в макете.
    • 📌 Проверьте настройки страницы (поля, ориентация) перед экспортом.
    ⚠️ Внимание: При экспорте в PDF через виртуальный принтер могут теряться некоторые элементы форматирования (например, тени или градиенты). Всегда тестируйте результат на реальных данных.

    FAQ: Частые вопросы по макетам форм в 1С

    Как перенести макет из одной конфигурации в другую?

    Скопируйте файл макета (.mxl или .erf) из каталога конфигурации (например, C:\Users\Public\1C\1Cv8\Темп\...) и импортируйте его в целевую базу через Файл → Открыть.

    Альтернативно: экспортируйте объект (документ/отчёт) с макетом через Конфигуратор → Файл → Сохранить данные конфигурации в файлы.

    Можно ли редактировать макет без конфигуратора?

    Да, но с ограничениями:

    • 📌 В режиме 1С:Предприятие можно редактировать макеты, сохранённые во внешних обработках.
    • 📌 Для типовых конфигураций (УТ 11, БП 3.0) макеты часто блокированы — потребуется расширение.

    Для полного редактирования нужен доступ в Конфигуратор.

    Как сделать макет адаптивным для разных размеров бумаги?

    Используйте:

    • 📌 Проценты вместо фиксированной ширины столбцов.
    • 📌 Области с автоподбором высоты (АвтоВысотаСтроки = Истина).
    • 📌 Несколько макетов под разные форматы (А4, А5) с выбором в коде.

    Пример кода для адаптации:

    Если ПечатьНаА4 Тогда
    

    Макет = ПолучитьМакет("ПечатнаяФормаА4");

    Иначе

    Макет = ПолучитьМакет("ПечатнаяФормаА5");

    КонецЕсли;

    Почему при печати макет обрезается по краям?

    Причины и решения:

    • 📌 Маленькие поля страницы → увеличьте в настройках макета (Файл → Параметры страницы).
    • 📌 Большой масштаб → установите Макет.Масштаб = 100.
    • 📌 Область выходит за границы → проверьте ширину столбцов.
    Как добавить логотип компании в макет?

    Шаги:

    1. Поместите изображение (например, logo.png) в каталог базы или во внешнюю обработку.
    2. В макете добавьте картинку через Вставить → Рисунок.
    3. В коде укажите путь:
    Макет.Картинка1.Источник = Новый Картинка(ПутьКФайлуЛоготипа);

    Для типовых конфигураций логотип часто хранится в справочнике Организации.