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

Эта статья поможет разобраться, как с нуля создать макет печатной формы в 1С 8.3, даже если вы никогда раньше не занимались программированием в этой системе. Мы рассмотрим все этапы: от подготовки шаблона в Конфигураторе до вывода данных на печать с учетом особенностей различных документов (счета, накладные, акты). Особое внимание уделим типичным ошибкам, которые допускают новички, и способам их избежать. Для наглядности приведём реальные примеры кода и скриншоты интерфейса.

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

📊 С какой целью вы создаёте макет печатной формы?
Для внутренних документов компании
Для внешних документов (клиенты, поставщики)
Для отчётности в госорганы
Другое

1. Подготовка: что нужно знать перед созданием макета

Прежде чем приступать к разработке макета, важно понять структуру печатной формы в . Любой документ состоит из:

  • 📄 Шапки — общие данные (название компании, дата, номер документа)
  • 📋 Табличной части — перечень товаров/услуг с количеством, ценой, суммой
  • 💰 Итогов — суммы по документу (с НДС, без НДС, всего к оплате)
  • 🖼️ Дополнительных элементов — логотип, подписи, печать, реквизиты банка

В макет печатной формы хранится в виде .mxl-файла (для новых версий) или .ert (для устаревших конфигураций). Современный подход предполагает использование встроенного редактора макетов, который позволяет визуально размещать элементы и привязывать их к данным из базы. Однако для сложных форм может потребоваться ручное редактирование кода на языке или даже использование XDTO-пакетов.

Определитесь с источником данных для вашей формы:

  • 📊 Документ (например, Документ.РеализацияТоваровУслуг)
  • 📈 Отчёт (например, Отчёт.ОборотноСальдоваяВедомость)
  • 🗃️ Справочник (например, Справочник.Номенклатура)

От этого зависит, какие реквизиты будут доступны для вывода в макете.

⚠️ Внимание: Если вы планируете использовать макет для регламентированных документов (например, счёт-фактура или ТОРГ-12), убедитесь, что структура формы соответствует действующим требованиям законодательства. В противном случае документ может быть не принят контрагентами или налоговыми органами.

2. Способы создания макета печатной формы

В 1С:Предприятие 8.3 есть несколько способов создать макет печатной формы. Выбор зависит от ваших навыков и сложности задачи:

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

Для большинства задач достаточно встроенного редактора. Однако если вам нужно, например, динамически менять состав колонок табличной части в зависимости от типа документа или добавлять QR-коды с данными, без программного кода не обойтись.

Рассмотрим самый универсальный способ — создание макета через Конфигуратор.

Открыть Конфигуратор в режиме редактирования|Создать резервную копию базы|Определить источник данных (документ/справочник)|Подготовить эскиз формы на бумаге-->

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

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

Шаг 1. Откройте Конфигуратор

Запустите 1С:Предприятие в режиме Конфигуратор. Для этого:

  1. Выберите вашу базу в списке.
  2. Нажмите кнопку Конфигуратор (или выберите пункт меню Файл → Конфигуратор).
  3. Введите пароль администратора (если требуется).

Шаг 2. Найдите объект, для которого создаётся форма

В дереве конфигурации разверните ветку Объекты → Документы и выберите РеализацияТоваровУслуг. Кликните правой кнопкой и выберите Все подчинённые объекты → Печатные формы.

Шаг 3. Создайте новый макет

Нажмите Добавить и выберите тип Макет. В открывшемся окне:

  • 📌 Укажите имя макета (например, ПечатнаяФормаСЛоготипом).
  • 📌 Выберите тип Табличный документ (для большинства печатных форм).
  • 📌 Нажмите Готово.

Шаг 4. Настройте структуру макета

Откроется встроенный редактор макетов. Здесь вы можете:

  • 🖼️ Добавить картинку (логотип) через меню Вставка → Рисунок.
  • 📝 Вставить текстовые поля для шапки (название документа, дата, номер).
  • 📊 Создать таблицу для перечня товаров (Вставка → Таблица).
  • 💰 Добавить итоговые поля (сумма, НДС).

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

Документ.Номер
💡

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

Шаг 5. Сохраните и проверьте макет

После настройки сохраните макет (Файл → Сохранить) и закройте редактор. Теперь нужно связать макет с печатной формой:

  1. Вернитесь к списку печатных форм документа.
  2. Выберите созданный макет в поле Макет.
  3. Напишите процедуру вывода на печать (пример кода см. в следующем разделе).
⚠️ Внимание: Если вы используете управляемые формы, процедура вывода печатной формы должна быть описана в модуле объекта. Для обычных форм код пишется в модуле документа.

4. Программный вывод печатной формы: примеры кода

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

  • 🔄 Получит данные из документа.
  • 🖨️ Заполнит макет этими данными.
  • 📄 Выведет на печать или сохранит в файл.

Рассмотрим два варианта: для обычных и управляемых форм.

Вариант 1. Обычная форма (тонкий клиент, толстый клиент)

Код размещается в модуле документа (например, Документ.РеализацияТоваровУслуг):

Процедура ПечатьСЛоготипом(Копия = Ложь)

// Создаём новый табличный документ на основе макета

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

Макет = Документы.РеализацияТоваровУслуг.ПечатнаяФормаСЛоготипом.ПолучитьМакет;

// Заполняем шапку документа

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

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

ОбластьШапка.Параметры.Дата = Дата;

ОбластьШапка.Параметры.Организация = Организация.Наименование;

// Заполняем табличную часть

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

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

ОбластьСтрока = ОбластьТаблица.Скопировать;

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

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

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

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

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

КонецЦикла;

// Выводим итоги

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

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

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

// Показываем пользователю

Если Копия Тогда

ТабДок.Показать;

Иначе

ТабДок.Печать;

КонецЕсли;

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

Вариант 2. Управляемая форма (веб-клиент, тонкий клиент)

Для управляемых форм код размещается в модуле объекта. Основное отличие — использование Клиентского и Серверного контекстов:

&НаКлиенте

Процедура ПечатьСЛоготипом(Команда)

ПечатьСЛоготипомНаСервере;

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

&НаСервере

Процедура ПечатьСЛоготипомНаСервере

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

Макет = Документы.РеализацияТоваровУслуг.ПечатнаяФормаСЛоготипом.ПолучитьМакет;

// Заполнение шапки и таблицы аналогично обычной форме

//...

// Отправляем результат клиенту

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

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

Для вывода результата на клиенте используйте:

ТабДок.Показать; // Просмотр

ТабДок.Печать; // Печать

💡

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

5. Типичные ошибки и как их избежать

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

  • 🔴 Макет не отображается при печати
    Причина: Неверно указано имя макета в процедуре или макет не сохранён.
    Решение: Проверьте имя макета в коде и в дереве конфигурации. Убедитесь, что макет привязан к документу.
  • 🔴 Данные в таблице не выводятся
    Причина: Не заполнены параметры областей или ошибка в цикле вывода строк.
    Решение: Добавьте отладочный вывод (Сообщить) для проверки значений параметров.
  • 🔴 Логотип не отображается
    Причина: Путь к файлу изображения указан неверно или формат не поддерживается.
    Решение: Используйте встроенные ресурсы (Вставить → Рисунок → Из файла) и проверьте формат (лучше .png или .jpg).
  • 🔴 Форма печатается с разбивкой на страницы
    Причина: Не настроены параметры страницы в макете.
    Решение: В редакторе макета настройте Параметры страницы (поля, ориентация).
  • 🔴 Текст накладывается друг на друга
    Причина: Неверно расставлены области или слишком маленький шрифт.
    Решение: Проверьте координаты областей в макете и увеличьте отступы.
⚠️ Внимание: Если вы используете 1С:Бухгалтерию или 1С:УТ в облачном сервисе (1С:Fresh), некоторые функции работы с макетами могут быть ограничены. Уточняйте возможности кастомизации в документации вашего тарифа.
Как отладить макет печатной формы?

Для отладки макетов используйте следующие приёмы:

1. Просмотр структуры макета: Откройте файл .mxl в текстовом редакторе (например, Notepad++) и проверьте корректность XML-разметки.

2. Пошаговый вывод: Добавьте в код процедуры печати вывод промежуточных значений через Сообщить.

3. Проверка областей: В редакторе макетов включите отображение границ областей (Вид → Границы областей).

4. Тестовый вывод: Сначала выводите макет в предварительный просмотр (ТабДок.Показать), а не сразу на печать.

6. Расширенные возможности: динамические формы и XDTO

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

  • 🛠️ Условное форматирование — изменение видимости областей в зависимости от данных.
  • 📊 XDTO-пакеты — для работы со сложными структурами данных (например, в интеграциях).
  • 🖥️ Внешние обработки — если макет используется в нескольких конфигурациях.

Пример динамического макета:

Допустим, нам нужно скрывать колонку"Скидка" в печатной форме, если скидка равна нулю. Для этого в коде заполнения макета добавляем условие:

Если СтрокаТовар.Скидка <> 0 Тогда

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

Иначе

ОбластьСтрока.Параметры.Скидка ="";

КонецЕсли;

Для работы с XDTO потребуется:

  1. Создать XDTO-пакет в конфигурации.
  2. Описать структуру данных в формате XSD.
  3. Использовать ЗаписьXML и ЧтениеXML для обмена данными.

Пример создания XDTO-пакета:

// Создаём пакет

Пакет = XDTOПакеты.Добавить("http://example.com/PrintForm");

// Добавляем тип для строки товара

ТипСтрокаТовара = Пакет.СписокТипов.Добавить("СтрокаТовара");

ТипСтрокаТовара.Тип = Новый ОписаниеТипа("Structure");

ТипСтрокаТовара.Элементы.Добавить("Номенклатура", Новый ОписаниеТипа("String"));

ТипСтрокаТовара.Элементы.Добавить("Количество", Новый ОписаниеТипа("Double"));

Использование XDTO оправдано, если:

  • 🔄 Вам нужно обмениваться данными с внешними системами.
  • 📂 Форма должна поддерживать версионирование (например, для исторических данных).
  • 🌍 Печатная форма используется в распределённой базе.

7. Оптимизация и ускорение печати

Если печатная форма содержит большое количество данных (например, накладная на 1000 строк), её генерация может занимать много времени. Чтобы ускорить процесс:

  • Используйте серверные процедуры для подготовки данных (особенно в управляемых формах).
  • Кэшируйте часто используемые макеты в памяти.
  • Оптимизируйте циклы — избегайте лишних обращений к базе внутри цикла вывода строк.
  • Используйте пакетную печать для нескольких документов.

Пример оптимизированного кода:

// Подготавливаем данные на сервере

&НаСервере

Функция ПодготовитьДанныеДляПечати(Документ)

Данные = Новый Структура;

Данные.Вставить("Шапка", Документ.ПолучитьШапкуДляПечати);

Данные.Вставить("Таблица", Документ.ПолучитьТаблицуДляПечати);

Возврат Данные;

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

// На клиенте только выводим

&НаКлиенте

Процедура ПечатьОптимизированная(Команда)

Данные = ПодготовитьДанныеДляПечатиНаСервере;

ТабДок = СформироватьТабличныйДокумент(Данные);

ТабДок.Печать;

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

Для пакетной печати нескольких документов используйте:

Процедура ПечатьПачке(МассивДокументов)

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

Для Каждого Док Из МассивДокументов Цикл

Макет = Док.ПечатнаяФорма.ПолучитьМакет;

// Заполняем макет данными текущего документа

//...

ТабДок.ВывестиРазделительСтраниц;

КонецЦикла;

ТабДок.Печать;

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

💡

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

FAQ: Ответы на частые вопросы

Как добавить QR-код в печатную форму?

Для добавления QR-кода:

  1. Скачайте внешнюю компоненту для генерации QR (например, Barcode1C).
  2. Подключите её в конфигурации (Сервис → Внешние компоненты).
  3. В макете добавьте область для QR-кода и в коде заполнения сформируйте изображение:
QR = Новый Картинка(ВнешняяКомпонента.СгенерироватьQR(ДанныеДляQR));

ОбластьQR.Картинка = QR;

Можно ли создать печатную форму без Конфигуратора?

Да, есть два способа:

  1. Внешняя обработка — создаётся в отдельном файле и подключается к базе. Подходит для тиражирования.
  2. Редактирование через"Все функции" — в пользовательском режиме вызовите Все функции → Печатные формы и отредактируйте существующую форму (не все конфигурации поддерживают).

Однако для сложных форм без Конфигуратора не обойтись.

Как сделать печатную форму для отчёта?

Принцип аналогичен документам, но источник данных — отчёт. Пример:

  1. Откройте отчёт в Конфигураторе (Объекты → Отчёты).
  2. Добавьте новую печатную форму и макет.
  3. В коде используйте Отчёт.Результат для получения данных:
Результат = Отчёт.Выполнить;

ТаблицаДанных = Результат.Вывести;

Почему при печати сбиваются колонки в таблице?

Этоная проблема при несовпадении ширины колонок в макете и реальных данных. Решения:

  • Задайте фиксированную ширину колонок в макете (Свойства → Ширина).
  • Используйте АвтоПодборШириныКолонок:
ТабДок.АвтоПодборШириныКолонок = Истина;

Если проблема остаётся, проверьте шрифты — иногда причиной является несовместимость шрифтов в макете и на клиентском ПК.

Как экспортировать печатную форму в PDF?

В современных версиях 1С 8.3 есть встроенная поддержка PDF:

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

Для старых версий потребуется внешняя компонента (например, PDFCreator).