Работа с макетами форм в 1С:Предприятие — один из ключевых навыков для разработчиков и администраторов системы. Без грамотно спроектированных макетов невозможно создать удобные печатные формы, отчёты или интерфейсные элементы, которые соответствуют бизнес-процессам компании. Однако многие специалисты сталкиваются с трудностями: то форма не выводит данные корректно, то макет «съезжает» при печати, то сложно связать его с программным кодом.
В этой статье мы разберём процесс создания макетов форм в 1С 8.3 и 1С 8.2 — от базовых принципов до продвинутых техник. Вы узнаете, как работать с конструктором макетов, настраивать табличные документы, связывать макеты с формами через Печать() и Вывести(), а также избегать типовых ошибок. Особое внимание уделим динамическим макетам, которые подстраиваются под данные, и внешним печатным формам, интегрируемым через расширения.
Материал будет полезен как начинающим разработчикам, так и опытным специалистам, которые хотят систематизировать знания. Все примеры приведены с учётом актуальных версий платформы 1С:Предприятие и типовых конфигураций (УТ 11, БП 3.0, ЗУП 3.1).
Что такое макет формы в 1С и зачем он нужен
Макет формы в 1С — это шаблон, который определяет, как будут отображаться данные на экране или при печати. Он может содержать:
- 📄 Статичные элементы (заголовки, логотипы, линии)
- 📊 Динамические области (таблицы с данными из базы)
- 🖼️ Графические элементы (штрихкоды, диаграммы)
- 🔄 Условное форматирование (цвета, шрифты в зависимости от значений)
Основные сценарии использования макетов:
- 📋 Печатные формы документов (счёта, накладные, акты)
- 📈 Отчёты (аналитика, сводные таблицы)
- 🖥️ Интерфейсные элементы (всплывающие окна, подсказки)
- 📤 Экспорт данных (в
Excel,PDF)
Без макетов пришлось бы вручную формировать каждый документ через код, что заняло бы в разы больше времени и увеличило бы риск ошибок. Например, печатная форма счёта на оплату в 1С:Управление торговлей может автоматически подставлять реквизиты компании, суммы по строкам и даже штрихкод — всё благодаря грамотно настроенному макету.
Типы макетов в 1С: табличный документ vs текстовый документ
В 1С:Предприятие существует два основных типа макетов, которые отличаются структурой и применением:
| Тип макета | Описание | Примеры использования | Особенности |
|---|---|---|---|
| Табличный документ | Содержит ячейки, строки и столбцы. Поддерживает объединение ячеек, формулы, условное форматирование. | Печатные формы счетов, накладные, прайс-листы. | Можно программно управлять шириной столбцов, добавлять диаграммы. |
| Текстовый документ | Представляет собой текст с разметкой (абзацы, шрифты, выравнивание). | Письма, договоры, акты с большим количеством текста. | Не поддерживает таблицы, но удобен для работы с длинными текстами. |
| Двоичные данные | Хранит файлы (изображения, PDF, Excel). |
Логотипы компании, шаблоны Excel-отчётов. |
Не редактируется в конструкторе макетов, только загрузка/выгрузка. |
| Активный документ | Динамический макет с поддержкой скриптов (например, HTML). |
Интерактивные отчёты, дашборды. | Требует знаний JavaScript или 1С-скриптов. |
На практике 90% макетов в типовых конфигурациях — это табличные документы, так как они универсальны и позволяют гибко настраивать вывод данных. Текстовые документы используются реже, преимущественно для шаблонов писем или договоров с большим количеством «шапки» и малоструктурированной информацией.
Пример: если вам нужно создать печатную форму счёта на оплату, лучше выбрать табличный документ, так как в нём удобно размещать таблицу с товарами, суммами и итогами. А для договора аренды с длинными пунктами подойдёт текстовый документ.
Если макет планируется использовать для экспорта в Excel, сразу настройте его как табличный документ — это упростит дальнейшую обработку данных.
Пошаговая инструкция: создание макета формы в конструкторе
Рассмотрим процесс создания макета на примере печатной формы счёта на оплату в конфигурации 1С:Управление торговлей 11. Для этого:
Откройте конфигуратор 1С в режиме
1С:Предприятие→ перейдите в разделОбъекты → Документы → Счета покупателям.Выберите документ
СчетНаОплату→ откройте вкладкуФормы→ нажмитеДобавить→ выберитеМакет.В окне создания макета укажите:
- 📌 Имя:
ПечатнаяФормаСчета - 📌 Тип:
Табличный документ - 📌 Синоним:
Печатная форма счёта(для удобства)
- 📌 Имя:
Нажмите ОК — откроется конструктор макетов.
В конструкторе вы увидите пустой табличный документ. Здесь можно:
- 🖱️ Перетаскивать границы ячеек для изменения размеров.
- 📝 Вводить статичный текст (например, «Счёт №», «Дата»).
- 🔗 Добавлять поля данных из документа (например,
&Номер,&Дата). - 🎨 Настраивать шрифты, выравнивание, цвета.
☑️ Чек-лист перед сохранением макета
После создания структуры макета его нужно связать с формой документа. Для этого:
Вернитесь в форму документа
СчетНаОплату.Добавьте команду
Печать(если её нет) и в обработчике события напишите:Процедура Печать(Команда)ПечатнаяФорма = ПолучитьМакет("ПечатнаяФормаСчета");
ПечатнаяФорма.Вывести(Объект);
КонецПроцедуры
Теперь при нажатии на кнопку Печать в документе будет формироваться счёт по вашему макету.
Всегда проверяйте макет в режиме 1С:Предприятие — в конструкторе он может отображаться иначе, чем при реальной печати.
Работа с динамическими данными: привязка полей и выражения
Статичный макет бесполезен без динамических данных. Чтобы подтянуть информацию из документа или справочника, используйте поля макета и выражения.
Пример привязки полей в макете счёта:
- 📌 Для номера счёта в ячейке укажите:
&Номер - 📌 Для даты:
&Дата - 📌 Для наименования покупателя:
&Контрагент.Наименование - 📌 Для таблицы товаров используйте область с именем
Товарыи в цикле выводите строки:
// Пример кода для заполнения таблицы товаров в макете
Для Каждого СтрокаТоваров Из Объект.Товары Цикл
НоваяСтрока = ПечатнаяФорма.Область("Товары").Добавить();
НоваяСтрока.Параметры.Заполнить(СтрокаТоваров);
КонецЦикла;
Для сложных вычислений (например, итоговой суммы с учётом скидки) можно использовать выражения прямо в макете:
- 🧮 В ячейке с итогом укажите:
=Сумма(Объект.Товары.Сумма) * (1 - Объект.Скидка/100) - 📉 Для вывода процента НДС:
=Объект.СтавкаНДС & "%"
Важно: если поле в макете не отображается, проверьте:
- 🔍 Корректность имени параметра (например,
&Контрагент.Наименование, а не&КонтрагентНаименование). - 🔍 Наличие данных в источнике (если
Объект.Товарыпуст, таблица не выведется). - 🔍 Видимость области (иногда области скрыты по условию).
Как отладить макет, если данные не выводятся?
1. Проверьте, передаётся ли объект в метод Вывести(): ПечатнаяФорма.Вывести(Объект).
2. Убедитесь, что имена параметров в макете совпадают с именами реквизитов объекта.
3. Используйте отладочную печать: Сообщить(Объект.Товары.Количество()) — если возвращает 0, проблема в данных, а не в макете.
Типовые ошибки при работе с макетами и как их избежать
Даже опытные разработчики сталкиваются с ошибками при создании макетов. Вот наиболее распространённые проблемы и способы их решения:
⚠️ Внимание: Если макет «съезжает» при печати, проверьте настройки страницы в конструкторе (поля, ориентация). Часто проблема решается установкой галочки «Подгонять ширину».
| Ошибка | Причина | Решение |
|---|---|---|
| Данные не выводятся в макете | Неверные имена параметров или отсутствие привязки к объекту. | Проверьте соответствие имён в макете и коде: &Номер vs Объект.Номер. |
| Макет печатается «в одну строку» | Не настроены разрывы страниц или области перекрываются. | Используйте ПараметрыСтраницы.Ориентация = ОриентацияСтраницы.Альбомная. |
| Таблица товаров обрезается | Фиксированная высота области или мало строк в источнике. | Установите динамическую высоту области или проверьте заполнение коллекции. |
| Шрифты в макете отличаются от печати | В конструкторе и при печати могут использоваться разные шрифты. | Явно укажите шрифт в макете (например, Arial 10pt). |
Ещё одна частая проблема — некорректное форматирование чисел. Например, сумма выводится как 1000.00, а нужно 1 000,00. Решение:
- 📌 В свойствах ячейки установите
Формат = ЧДЦФ(15, 2)(число с двумя знаками после запятой). - 📌 Или используйте выражение:
=Формат(Объект.Сумма, "ЧДЦ=2; ЧР= ").
Если макет используется для экспорта в Excel, избегайте:
- 🚫 Объединённых ячеек (они могут «разъехаться» в
Excel). - 🚫 Слишком широких столбцов (ограничьте ширину до 50 символов).
- 🚫 Формул в ячейках (они не перенесутся в
Excelкорректно).
⚠️ Внимание: При обновлении конфигурации 1С стандартные макеты могут перезаписаться. Всегда сохраняйте кастомные макеты в расширениях или внешних обработках.
Продвинутые техники: условное форматирование и динамические макеты
Для создания профессиональных макетов недостаточно просто вывести данные — нужно управлять их отображением в зависимости от условий. Рассмотрим две ключевые техники:
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. - 📌 Область выходит за границы → проверьте ширину столбцов.
Как добавить логотип компании в макет?
Шаги:
- Поместите изображение (например,
logo.png) в каталог базы или во внешнюю обработку. - В макете добавьте картинку через
Вставить → Рисунок. - В коде укажите путь:
Макет.Картинка1.Источник = Новый Картинка(ПутьКФайлуЛоготипа);
Для типовых конфигураций логотип часто хранится в справочнике Организации.