К статье
Практический материал

Документы и Печать · 10 мин

Как создать макет документа в 1С

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

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

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

Где находятся макеты и какие типы бывают

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

При добавлении макета платформа предлагает выбрать тип. Для печатных форм документов почти всегда используется «Табличный документ» — это аналог электронной таблицы с ячейками, рамками и форматированием. Тип «Текстовый документ» подходит для выгрузок в простые форматы, «Схема компоновки данных» — для отчётов, а «HTML-документ» и «Географическая схема» для печати документов не применяются.

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

Откройте конфигуратор, найдите нужный документ в дереве конфигурации и раскройте его ветку. Кликните правой кнопкой по строке «Макеты» и выберите «Добавить». В конструкторе задайте имя макета, например «МакетСчета» или «ПФ_MXL_СчетНаОплату», выберите тип «Табличный документ» и нажмите «Готово». Откроется редактор, внешне похожий на электронную таблицу.

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

Порядок создания макета
  1. 1
    Откройте конфигуратор и ветку нужного документа
  2. 2
    Добавьте макет типа «Табличный документ» с понятным именем
  3. 3
    Нарисуйте статичную часть: заголовки, рамки, надписи
  4. 4
    Разметьте именованные области: Шапка, Строка, Подвал
  5. 5
    Назначьте параметры ячейкам, куда пойдут данные
  6. 6
    Напишите процедуру печати в модуле менеджера
  7. 7
    Проверьте вывод на тестовом документе

Разметка областей и параметров

Область — это именованный фрагмент макета, который программа выводит целиком. Минимальный набор для документа с табличной частью: область «Шапка» (номер, дата, контрагент, реквизиты сторон), область «Строка» (одна строка табличной части, которая выводится в цикле) и область «Подвал» (итоги, подписи, печать). Чтобы создать область, выделите нужные строки и задайте имя через меню «Таблица → Имена → Назначить имя» или сочетанием Ctrl+Shift+N.

Параметры — это места подстановки данных. В ячейке вместо фиксированного текста пишут имя в квадратных скобках, например [НомерДокумента] или [НаименованиеТовара], а в свойствах ячейки поле «Заполнение» переключают с «Текст» на «Параметр». Есть третий режим — «Шаблон»: он позволяет смешивать текст и параметры в одной ячейке, например «Счёт № [Номер] от [Дата]». Это удобно для составных строк и сокращает количество ячеек.

Обратите внимание на свойство «Автоотступ» и ширину колонок: если текст параметра длиннее ячейки, он обрежется или «расползётся» в зависимости от настроек. Для длинных наименований товаров задайте ячейке свойство «Размещение текста» с переносом и увеличьте высоту строки области «Строка», иначе строки табличной части будут выводиться некорректно.

Написание процедуры печати

Макет сам по себе ничего не печатает — нужна процедура, которая получает макет, заполняет параметры и выводит области в результирующий табличный документ. В типовых конфигурациях она размещается в модуле менеджера документа и называется, например, ПечатьСчета или ДобавитьКомандыПечати в связке с БСП. В самописной конфигурации достаточно процедуры, вызываемой из команды печати.

Типовая логика такова: получить макет методом ПолучитьМакет("ИмяМакета"), получить области методом ПолучитьОбласть("Шапка"), заполнить их параметры через обращение к коллекции Параметры и вывести в итоговый табличный документ методом Вывести. Строки табличной части выводятся в цикле по выборке из запроса или по строкам табличной части объекта.

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

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

ОбластьШапка.Параметры.НомерДокумента = Ссылка.Номер;

ОбластьШапка.Параметры.Контрагент = Ссылка.Контрагент;

ТабДок.Вывести(ОбластьШапка);

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

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

ОбластьСтрока.Параметры.НаименованиеТовара = СтрокаТовара.Номенклатура;

ОбластьСтрока.Параметры.Количество = СтрокаТовара.Количество;

ТабДок.Вывести(ОбластьСтрока);

КонецЦикла;

bsl
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.РеализацияТоваров.ПолучитьМакет("МакетНакладной");
Область = Макет.ПолучитьОбласть("Шапка");
Область.Параметры.НомерДокумента = Ссылка.Номер;
ТабДок.Вывести(Область);

Проверка результата и отладка

После написания кода обновите конфигурацию базы данных (F7) и откройте тестовый документ в режиме предприятия. Нажмите кнопку печати и оцените результат: все ли параметры заполнены, не съехало ли форматирование, помещается ли табличная часть на страницу. Пустые ячейки в местах параметров — признак опечатки в имени параметра или пропущенного присваивания в коде.

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

Контрольные точки

Как проверить макет

Заполнение параметров
Норма

Все данные документа на месте, пустых квадратных скобок нет

Тревожный признак

Виден текст вида [Параметр] или пустые поля — имя не совпало с кодом

Табличная часть
Норма

Все строки выведены, перенос на страницы корректный

Тревожный признак

Строки обрезаны или налезают друг на друга — проблема с высотой области

Оформление
Норма

Рамки, шрифты и выравнивание соответствуют образцу

Тревожный признак

Съехавшие колонки — проверьте ширину и объединённые ячейки

Типичные ошибки и ограничения

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

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

Типичные ошибки
01
Правка типового макета без расширения — изменения теряются при обновлении конфигурации
02
Опечатка в имени параметра — ячейка остаётся пустой без явной ошибки
03
Вывод области «Строка» вне цикла — печатается только одна строка табличной части
04
Отсутствие переноса текста в ячейке — длинные наименования обрезаются
05
Изменение макета без правки кода — присвоение несуществующему параметру вызывает ошибку выполнения
Маршрут решения

Как выбрать способ реализации

Нужно слегка изменить типовую печатную формуСоздайте внешнюю печатную форму или расширение, не трогая типовой макет
Печатная форма полностью своя, конфигурация самописнаяСоздайте макет в ветке документа и процедуру в модуле менеджера
Один шаблон нужен нескольким документамРазместите макет в ветке «Общие → Макеты» и получайте его через ПолучитьОбщийМакет
Форма заполняется пользователями без разработчикаРассмотрите макет в формате офисного документа (DOCX) через механизм печати из шаблонов

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

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

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

Чем внешняя печатная форма лучше правки типового макета?

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

Почему параметр в макете остаётся пустым, хотя код его заполняет?

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

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

Картинку можно вставить непосредственно в макет как элемент рисунка, если она постоянна (логотип компании). Если изображение хранится в базе (факсимиле, фото товара), в макете создаётся область с рисунком-параметром, а в коде ему присваивается объект типа «Картинка», полученный из хранилища значения.

Как сделать, чтобы шапка таблицы повторялась на каждой странице?

Выделите в макете область заголовка таблицы отдельно, а в коде перед выводом строк используйте проверку ТабДок.ПроверитьВывод с массивом областей: если строка не помещается, выводите заголовок заново. Альтернатива — задать результирующему табличному документу свойство повторения строк при печати.

Можно ли использовать DOCX-шаблон вместо табличного макета?

Да, платформа поддерживает макеты типа «Двоичные данные» с файлом DOCX и механизм печати через офисные шаблоны: в документе Word расставляются поля подстановки, а 1С заполняет их данными. Это удобно, когда форму часто правят пользователи, но требует наличия офисного пакета и аккуратной работы с полями шаблона.

Итог

Что важно запомнить

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